arduino вместо FlySky ?

kapelan

Кто-нить пытался полностью переити на управление от ардуины?
Какие проблеммы возникают, недостатки?
Собственно, есть желание переделать управление и уйти от стандартного пульта.

alexandre

Видел подобные проекты в связке arduino+nrf24l01, но зачем? Какая цель преследуется?
…alexgyver.ru/…/mashinka-na-nrf24l01.76/
P.S. По моему опыту работы с данными модулями года 3 назад - библиотека была сырая, постоянно косячила и терялись пакеты (хотя может быть это мой кривой код 😁).

kapelan

пакеты теряются, но ето не проблемма - они передаются несколько раз в секунду.
поэтому на пару потерянных пакетов можно наплевать.
С ардуиной появляется куча плюшек:
-неограниченное число каналов
-обратная связь с кораблем
-приличный интерфейс (хочу тач скрин на пульте)
-и наконец нормальный автопилот

Sevas

У меня небольшой успешный опыт есть.
Правда гибрид получается.
Аппаратура радиолинк, на корабле ардуина считывает приемник и парсит его каналы - благо там SBUS - это обычный UART.
Таймер ардуины генерирует сигналы для серв.
Ну, а далее всё просто, тумблером пульта можно переключить управление либо напрямую от пульта (direct mode) либо передать управление полностью автопилоту (как бы flybywire).
Разную телеметрию я передаю через модуль 3dr, про nrf на тот момент не всё знал. 3dr на земле удобно подключить через USB, с nrf на берегу понадобится ещё один контроллер.

Я в активной стадии испытаний всего это, сейчас дописываю алгоритм следования по точкам и всего что связано с навигацией.
По факту всё это изобретение велосипеда - ардупайлот или пиксхок давно всё это умеют, но мне по определенным причинам хотелось своего.

kapelan

Это у Вас на пульте тачскрин?
В принципе что-то подобное и ищу.
Только без кнопок - два джойстика и тач. Все управление на таче.
Ардупайлот смотрел видео - по моему весьма громоздко сделано.
Хотелось бы простой интерфейс - ткнул пальцем на точку - кораблик и поехал туда. Дал команду домой и занимайся своим делом дальше.
Ардупайлот предлагает носить ноут с собой и заниматся програмированием устройства на рыбалке.
Нет, это не правильно. Должно быть все просто как функционал у топора.
похоже Вам ардупайлот тоже не понравился - поэтому и делаете свое устройство.

Sevas

Нет, пульт у меня обычный без тачскринов - радиолинк АТ9s.

Ардупайлот мне не то, чтобы не понравился, он как и пиксхок со своей задачей справляется. Мне нужно просто на корабль установить кое какое оборудование и передавать с него данные через телеметрию автопилота. Но разбираться в коде ардупайлота у меня опыта нет, я программер самоучка, много чего не знаю. Потому мне проще было изобрести простой велосипед с нуля.
чтобы не таскать ноут для пиксхока есть QGround control для телефонов планшетов. им вроде тоже можно задавать точки, но деталей не скажу, не уверен.

А задачу прийти в точку решить в принципе не так сложно, я один из таких алгоритмов тоже планирую к реализации.
вот отличный сайт с готовыми формулами для работы с GPS и расчетом некоторых параметров навигации www.movable-type.co.uk/scripts/latlong.html

Думаю нужно посмотреть софт для разработки ПО для планшетов/телефонов, так чтобы он мог работать с ком-портом, тогда много чего упроститься если использовать телеметрию типа 3dr или Lora со встроенным ком мостом в юсб.
бесплатные офлайн карты тоже есть - openstreet.

Но это всё что я знаю из теории, в приоритете у меня ноутбук с ПО.

vlad007
kapelan:

… Все управление на таче…

Мокрые руки/дождь-тач не адекватно работает.

kapelan
vlad007:

Мокрые руки/дождь-тач не адекватно работает.

тач на ардуину не совсем такой как телефон. В него можно палкой тыкать - он будет работать.
Для адекватного автопилота нужна обратная связь с кораблем.
Собственно поэтому другого выхода нету. Все существуюшие способы управления такого не могут.
Почему тач а не кнопки? потомушта один тач дешевле десяти кнопок , удобнее и открывает возможность неограниченного числа каналов.
Опыт по програмированию тача есть - тут проблем никаких.
Пока вижу проблему :

  • с корректной связью - заказал модули, покрутим, посмотрим.
  • адекватный и удобный пульт нужен, а 3Д принтера нету.
    Ну и софтину автопилота написать - тоже проблем не вижу.
vlad007
kapelan:

тач на ардуину не совсем такой как телефон. В него можно палкой тыкать - он будет работать …

Да,если тач резистивный,а не капасити.

15 days later
kapelan

тестирую HC-12 модули.
проблема не в потерянных пакетах а в потеряной части пакета.
Если потерянный пакет можно смело игнорировать то с мусором в эфире боротса сложно.
нужно мастырить что-то типа контроля целостности пакета, что приводит к удлинению пакета, а чем больше пакет тем больше шансов потерять его часть.
вобщем замкнутый круг
Видимо это и остановило массовою замену существуюшей аппаратуры.

Sevas:

… на корабле ардуина считывает приемник и парсит его каналы - благо там SBUS - это обычный UART…

на UART приходят правильные данные всегда?
или ардуина как-то дополнительно их проверяет?
формат сообщения можете опубликовать?

Sevas

Данные приходят всегда. Ошибок пока не замечено. Хотя из спецификации 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.rar

kapelan
Sevas:

…Прикрепил файлик со спецификацией сбуса

спасибо, судя по коду работает так:

  • проверяет первый стартовый символ :SBUS_STARTBYTE
  • затем посылка из 25 байт
  • проверяет заключающий символ: SBUS_ENDBYTE
    если длинна сообщения 27 байт + первый + последний символ совпадают - значит посылка валидная.
    Иначе: пакет идет вмусор.
    Валидный пакет парсится по каналам, непонятно зачем пакет такой длинный - видимо в один байт значение канала не вмещается.
Sevas

Да, все так.
Один канал насколько я понял имеет разрядность 9 или 11, сейчас уже не помню, поэтому они их раскидали таким хитрым способом. 2 байта на канал много, осталось пару бит, они в этот хвост закинули начало следующего канала и т.д.

kapelan

угу:
по спецификации из rar (шикарная дока)
у них байт = 12 бит.
12 бит не хватает на канал и они раскидали каналы по разным байтам.
начало+конец+длинна является контрольной суммой.
Громоздко получается.
ардуина 8 битовая - тяжело это дело вместе прикрутить.

Sevas

По опыту скажу что ардуина со всем справляется за глаза.
У меня она отрабатывает 3 уартовских прерывания.
Работает с акселерометром, гиро, компасом по i2c. Считает честный кватернион, там под десяток операций с float, столько же синусов и прочей тригонометрии.
Один аппаратный таймер генерирует правильные импульсы для 3х каналов.
Со всем этим справляется на ура, зависаний не замечал, но я и вотчдог настроил.
Правда я все пишу, управляю голыми регистрами, ардуиновский IDE и его готовые функции лучше для таких задач не использовать, там много косяков есть.

2 months later
1 month later
Olger_spb

Делаю РУ на Ардуино+nRF
Детские болезни данной связки уже прошел
Плюсов данного варианта много, минусов не знаю.
Посмотреть можно на соседней ветке (копии- ЭБР “Пётр Великий”) и это не реклама )))

5 months later
Ozyris

РУ на ардуино - детская болезнь моделистов.

kapelan
Ozyris:

РУ на ардуино - детская болезнь моделистов.

когда-то расказывали про радиацию от монитора … и все покупали защитные экраны.
Сейчас пурга пошла насколько вредно 5Ж для мозга.
Так и тут с аппаратурой - не боги горшки лепят
Все просто как 3 копейки: зашифровать/рашифровать сигнал
Каким методом это достичь - вопрос третий, компьютером или шифратором/дешифратором - значения не имеет ровно никакого.

TGOdessa
kapelan:

когда-то расказывали про радиацию от монитора … и все покупали защитные экраны.
Сейчас пурга пошла насколько вредно 5Ж для мозга.
Так и тут с аппаратурой - не боги горшки лепят
Все просто как 3 копейки: зашифровать/рашифровать сигнал
Каким методом это достичь - вопрос третий, компьютером или шифратором/дешифратором - значения не имеет ровно никакого.

в слове “достичь” содержится слово “Дичь” совпадение?

Olger_spb
kapelan:

зашифровать/рашифровать сигнал

это делает сам радиомодуль. Подаешь ему массив байт он их шифрует и передает.
Всех делов.
Не понимаю, в чем страх использовать Ардуино. Не по фен-шую?

TGOdessa

Та можно вообще, просто зачем? Хотя каждому, конечно свое…

27 days later
kapelan

наверное потомушта хочется сделать лучше,
а на существующую аппаратуру исходников нет

TGOdessa

Сделать лучше? На ардуино? Вы серьезно? А параметры процессоров смотрели, сравнивали?