arduino вместо FlySky ?
Это у Вас на пульте тачскрин?
В принципе что-то подобное и ищу.
Только без кнопок - два джойстика и тач. Все управление на таче.
Ардупайлот смотрел видео - по моему весьма громоздко сделано.
Хотелось бы простой интерфейс - ткнул пальцем на точку - кораблик и поехал туда. Дал команду домой и занимайся своим делом дальше.
Ардупайлот предлагает носить ноут с собой и заниматся програмированием устройства на рыбалке.
Нет, это не правильно. Должно быть все просто как функционал у топора.
похоже Вам ардупайлот тоже не понравился - поэтому и делаете свое устройство.
Нет, пульт у меня обычный без тачскринов - радиолинк АТ9s.
Ардупайлот мне не то, чтобы не понравился, он как и пиксхок со своей задачей справляется. Мне нужно просто на корабль установить кое какое оборудование и передавать с него данные через телеметрию автопилота. Но разбираться в коде ардупайлота у меня опыта нет, я программер самоучка, много чего не знаю. Потому мне проще было изобрести простой велосипед с нуля.
чтобы не таскать ноут для пиксхока есть QGround control для телефонов планшетов. им вроде тоже можно задавать точки, но деталей не скажу, не уверен.
А задачу прийти в точку решить в принципе не так сложно, я один из таких алгоритмов тоже планирую к реализации.
вот отличный сайт с готовыми формулами для работы с GPS и расчетом некоторых параметров навигации www.movable-type.co.uk/scripts/latlong.html
Думаю нужно посмотреть софт для разработки ПО для планшетов/телефонов, так чтобы он мог работать с ком-портом, тогда много чего упроститься если использовать телеметрию типа 3dr или Lora со встроенным ком мостом в юсб.
бесплатные офлайн карты тоже есть - openstreet.
Но это всё что я знаю из теории, в приоритете у меня ноутбук с ПО.
… Все управление на таче…
Мокрые руки/дождь-тач не адекватно работает.
Мокрые руки/дождь-тач не адекватно работает.
тач на ардуину не совсем такой как телефон. В него можно палкой тыкать - он будет работать.
Для адекватного автопилота нужна обратная связь с кораблем.
Собственно поэтому другого выхода нету. Все существуюшие способы управления такого не могут.
Почему тач а не кнопки? потомушта один тач дешевле десяти кнопок , удобнее и открывает возможность неограниченного числа каналов.
Опыт по програмированию тача есть - тут проблем никаких.
Пока вижу проблему :
- с корректной связью - заказал модули, покрутим, посмотрим.
- адекватный и удобный пульт нужен, а 3Д принтера нету.
Ну и софтину автопилота написать - тоже проблем не вижу.
тач на ардуину не совсем такой как телефон. В него можно палкой тыкать - он будет работать …
Да,если тач резистивный,а не капасити.
тестирую HC-12 модули.
проблема не в потерянных пакетах а в потеряной части пакета.
Если потерянный пакет можно смело игнорировать то с мусором в эфире боротса сложно.
нужно мастырить что-то типа контроля целостности пакета, что приводит к удлинению пакета, а чем больше пакет тем больше шансов потерять его часть.
вобщем замкнутый круг
Видимо это и остановило массовою замену существуюшей аппаратуры.
… на корабле ардуина считывает приемник и парсит его каналы - благо там SBUS - это обычный UART…
на UART приходят правильные данные всегда?
или ардуина как-то дополнительно их проверяет?
формат сообщения можете опубликовать?
Данные приходят всегда. Ошибок пока не замечено. Хотя из спецификации sbus там нет чексуммы.
Прикрепил файлик со спецификацией сбуса.
А это код как распарсить посылку по каналам.
SBUS_channels[0] = ((SB_buffer[1] |SB_buffer[2]<<8) & 0x07FF);//ROLL
SBUS_channels[1] = ((SB_buffer[2]>>3 |SB_buffer[3]<<5) & 0x07FF);//PITCH
SBUS_channels[2] = ((SB_buffer[3]>>6 |SB_buffer[4]<<2 | SB_buffer[5]<<10) & 0x07FF);//THROTTLE
SBUS_channels[3] = ((SB_buffer[5]>>1 |SB_buffer[6]<<7) & 0x07FF);//RUDDER
SBUS_channels[4] = ((SB_buffer[6]>>4 |SB_buffer[7]<<4) & 0x07FF);//2х позиционный тумблер C
SBUS_channels[5] = ((SB_buffer[7]>>7 |SB_buffer[8]<<1 |SB_buffer[9]<<9) & 0x07FF);
SBUS_channels[6] = ((SB_buffer[9]>>2 |SB_buffer[10]<<6) & 0x07FF);
SBUS_channels[7] = ((SB_buffer[10]>>5|SB_buffer[11]<<3) & 0x07FF);
SBUS_channels[8] = ((SB_buffer[12] |SB_buffer[13]<<8) & 0x07FF);//тумблер B
SBUS_channels[9] = ((SB_buffer[13]>>3|SB_buffer[14]<<5) & 0x07FF);
SBUS_channels[10] = ((SB_buffer[14]>>6|SB_buffer[15]<<2|SB_buffer[16]<<10) & 0x07FF);
//SBUS_channels[11] = ((SB_buffer[16]>>1|SB_buffer[17]<<7) & 0x07FF);
//SBUS_channels[12] = ((SB_buffer[17]>>4|SB_buffer[18]<<4) & 0x07FF);
//SBUS_channels[13] = ((SB_buffer[18]>>7|SB_buffer[19]<<1|SB_buffer[20]<<9) & 0x07FF);
//SBUS_channels[14] = ((SB_buffer[20]>>2|SB_buffer[21]<<6) & 0x07FF);
//SBUS_channels[15] = ((SB_buffer[21]>>5|SB_buffer[22]<<3) & 0x07FF);
//if ((SB_buffer[23]) & 0x0001)
//{
//SBUS_channels[16] = 2047;
//}
//else SBUS_channels[16] = 0;
//
//if ((SB_buffer[23] >> 1) & 0x0001)
//{
//SBUS_channels[17] = 2047;
//} else SBUS_channels[17] = 0;
Посылку собираем в прерывании UART
ISR ( USART2_RX_vect )//прерывание SBUS от пульта
{
uint8_t rx = UDR2;
if (SB_buffer_index == 0 && rx != SBUS_STARTBYTE)
{
//incorrect start byte, out of sync
return;
}
SB_buffer[SB_buffer_index++] = rx;
if (SB_buffer_index == 25)
{
SB_buffer_index = 0;
if (SB_buffer[24] != SBUS_ENDBYTE)
{
//incorrect end byte, out of sync
return;
}
else
{
UCSR2B &= ~(1 << RXCIE2);//отключение прерывания UART2
UART2_RX_flag = true;//данные готовы
}
}
}
Если будете это всё пробовать то нужно сделать инвертер сигнала на транзисторе. сбус изначально ивертирует 0 на 1, то есть не так как UART согласно ASCII.
…Прикрепил файлик со спецификацией сбуса
спасибо, судя по коду работает так:
- проверяет первый стартовый символ :SBUS_STARTBYTE
- затем посылка из 25 байт
- проверяет заключающий символ: SBUS_ENDBYTE
если длинна сообщения 27 байт + первый + последний символ совпадают - значит посылка валидная.
Иначе: пакет идет вмусор.
Валидный пакет парсится по каналам, непонятно зачем пакет такой длинный - видимо в один байт значение канала не вмещается.
Да, все так.
Один канал насколько я понял имеет разрядность 9 или 11, сейчас уже не помню, поэтому они их раскидали таким хитрым способом. 2 байта на канал много, осталось пару бит, они в этот хвост закинули начало следующего канала и т.д.
угу:
по спецификации из rar (шикарная дока)
у них байт = 12 бит.
12 бит не хватает на канал и они раскидали каналы по разным байтам.
начало+конец+длинна является контрольной суммой.
Громоздко получается.
ардуина 8 битовая - тяжело это дело вместе прикрутить.
По опыту скажу что ардуина со всем справляется за глаза.
У меня она отрабатывает 3 уартовских прерывания.
Работает с акселерометром, гиро, компасом по i2c. Считает честный кватернион, там под десяток операций с float, столько же синусов и прочей тригонометрии.
Один аппаратный таймер генерирует правильные импульсы для 3х каналов.
Со всем этим справляется на ура, зависаний не замечал, но я и вотчдог настроил.
Правда я все пишу, управляю голыми регистрами, ардуиновский IDE и его готовые функции лучше для таких задач не использовать, там много косяков есть.
Демонстрация моего автопилота
Делаю РУ на Ардуино+nRF
Детские болезни данной связки уже прошел
Плюсов данного варианта много, минусов не знаю.
Посмотреть можно на соседней ветке (копии- ЭБР “Пётр Великий”) и это не реклама )))
РУ на ардуино - детская болезнь моделистов.
Обычное лучше?
РУ на ардуино - детская болезнь моделистов.
когда-то расказывали про радиацию от монитора … и все покупали защитные экраны.
Сейчас пурга пошла насколько вредно 5Ж для мозга.
Так и тут с аппаратурой - не боги горшки лепят
Все просто как 3 копейки: зашифровать/рашифровать сигнал
Каким методом это достичь - вопрос третий, компьютером или шифратором/дешифратором - значения не имеет ровно никакого.
когда-то расказывали про радиацию от монитора … и все покупали защитные экраны.
Сейчас пурга пошла насколько вредно 5Ж для мозга.
Так и тут с аппаратурой - не боги горшки лепят
Все просто как 3 копейки: зашифровать/рашифровать сигнал
Каким методом это достичь - вопрос третий, компьютером или шифратором/дешифратором - значения не имеет ровно никакого.
в слове “достичь” содержится слово “Дичь” совпадение?
зашифровать/рашифровать сигнал
это делает сам радиомодуль. Подаешь ему массив байт он их шифрует и передает.
Всех делов.
Не понимаю, в чем страх использовать Ардуино. Не по фен-шую?
Та можно вообще, просто зачем? Хотя каждому, конечно свое…
наверное потомушта хочется сделать лучше,
а на существующую аппаратуру исходников нет
Сделать лучше? На ардуино? Вы серьезно? А параметры процессоров смотрели, сравнивали?