Управляем чем угодно откуда угодно

Квадрокоптер

Кто что сделал и кто что собирается делать

Re: Квадрокоптер

Сообщение lyxstv » 15 мар 2014, 22:49

Думаю исключают наводки от аппаратуры.
Управление - двусторонняя связь как правило и видео картинка, 2 излучателя обычно внизу ставят, а GPS подальше наверх.
Бародатчик под губку еще прячут, чтобы турбулентность от винтов не ловить.
lyxstv
 
Сообщения: 42
Зарегистрирован: 13 сен 2013, 16:02

Re: Квадрокоптер

Сообщение lyxstv » 15 мар 2014, 22:56

GPS не панацея, имхо лучше навык пилотирования развивать, а то все летают как замороженные )
http://vimeo.com/88693441
lyxstv
 
Сообщения: 42
Зарегистрирован: 13 сен 2013, 16:02

Re: Квадрокоптер

Сообщение Gol » 17 мар 2014, 03:05

eagafonov писал(а):Вообще, для чтения "в час по чайной ложке" из файла /dev/v2r_adc достаточно, в случае частого опроса - это ад и израиль. Я вроде реализовывал ioctl для /dev/v2r_adc, надо будет найти код....

v2r_adc все шесть каналов опрашивает, если нужен только один то конечно, избыточная нагрузка получается. Но ioctl, имхо, тоже не идеал - надо каждый раз функцию вызывать для установки канала. Мне больше нравится вариант когда для каждого канала свой файл, типа как сейчас в procfs /proc/v2r_adc/0 1 2 3 4 5. Только эти файлики текстовое значение выдают, а надо бинарное, можно добавить, в принципе.

У меня ещё не было необходимости большую частоту опроса ADC делать, так что этот вопрос особо не изучал.

UPD> для проверки добавил бинарные файлики, каждый по два байта отдаёт. Набросал читалку канала на сишечке. Запустил через time, вот такие результаты:

real 1m58.124s
user 0m0.365s
sys 1m53.892s


Т.е. основной загруз, похоже, драйвер устраивает. Там меня смущают циклы ожидания измерений, где while с cpu_relax. Похоже, надо даташит штудировать, как правильнее ADC читать. files/documentation/dm365/sprufi7.pdf

UPD> попробовал закомментить эти блоки - нагрузка сразу пропала. Но ещё неясно, корректные ли измерения получаются, ща вот проверяю.

real 0m24.577s
user 0m1.015s
sys 0m5.921s


Показания вроде как верные. Скорость аццкая получилась (судя по выводу в консоль).

UPD> Помог перевод в free-run режим, всё вроде шустро читается, но надо потестить на практике.

UPD> Ещё нашёлся регистр SETDIV, делитель частоты для ADC. По дефолту - 65535, т.е. наитормознейший. Уменьшил - ещё лучше стало. Опрос сразу всех каналов через обычный драйвер /dev/v2r_adc с частотой примерно 100Гц (задержка в проге стоит usleep(10000); ) занимает около 2-3% проца (это ещё с постоянным выводом результатов в консоль).

# time /adc_read2
real 0m13.420s
user 0m0.020s
sys 0m0.305s


UPD> Добавил в описание ADC http://wiki.virt2real.ru/wiki/V2r_adc
Последний раз редактировалось Gol 18 мар 2014, 03:53, всего редактировалось 1 раз.
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: Квадрокоптер

Сообщение lyxstv » 17 мар 2014, 20:39

Думаю циклы что вы убрали, это ожидание готовности помещения результата во внутренние регистры.
Нужно проверить на динамически меняющиеся значения, например тупо синусоиду пустить и посмотреть её в логах.

Ещеб i2c так оптимизировать )
lyxstv
 
Сообщения: 42
Зарегистрирован: 13 сен 2013, 16:02

Re: Квадрокоптер

Сообщение Gol » 18 мар 2014, 02:15

lyxstv писал(а):Думаю циклы что вы убрали, это ожидание готовности помещения результата во внутренние регистры.
Нужно проверить на динамически меняющиеся значения, например тупо синусоиду пустить и посмотреть её в логах.

Ещеб i2c так оптимизировать )

Нет, я добавил управляющий файл в procfs для переключения режима one-shot / free-run. Цикл ожидания старта остался для one-shot, для free-run он не нужен. А вот цикл ожидания готовности остался для обоих режимов, без него не пашет, само собой. Но при проверке оказалось что оба режима отлично работают, вся засада была в делителе частоты, он по дефолту был 655535, т.е. минимальная скорость стояла. Сейчас делитель по дефолту 1, но можно менять, опять же, через командный файлик в procfs. Патч вот тут, описание новых файликов ещё не добавлял в вики, скоро добавлю. Новый драйвер будет в новой прошивке, на днях.

По i2c - есть патчи для решения проблемы с глюком шины, но для ядра 2.6.32, на нашем 3.9 ещё не проверял.
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: Квадрокоптер

Сообщение eagafonov » 02 май 2014, 00:35

Апну темку и немного наброшу для затравки.

В данный момент занимаюсь прикручиванием имеющегося пульта от вертолёта NineEagles к передаче команд на борт. Идея в том, что бы использовать протокол MAVLink поверх UDP по WiFi. В качестве передатчика используется вторая виртурилка, которая подключена GPIO-EVENT-пином к тренеровочному разъёму пульта.

Уже получилось декодировать PPM сигнал с пульта. Код на основе usrange.c (https://github.com/virt2real/othersoft/ ... /usrange.c)
Пример декодирования выложу позже.
Аватара пользователя
eagafonov
 
Сообщения: 175
Зарегистрирован: 18 сен 2013, 23:39
Откуда: Нижненовгородск

Re: Квадрокоптер

Сообщение eagafonov » 03 май 2014, 22:31

Как декодировать PPM пульта управления

https://github.com/eagafonov/rc-ppm-decoder

Сам PPM %-)
Код: Выделить всё
/******************************************************************************************************
 *
  RC Transiver PPM signal

  K channels is encoded as K+1 pulses of fixed width (approx 0.4 msec)
  Channel  value is a time between two raising edges
  Ususaly ~1.0 msec is a minimal value, ~2.0 msec - max value

  PPM frames are separared by a gap (more than 4-10 msec)


            Nth PPM frame                                                         (N+1)th PPM frame

HIGH   |---|     |---|          |---|    |---|      |---|                         |----|
       |   |     |   |          |   |    |   |      |   |                         |    |
       |   |     |   |          |   |    |   |      |   |                         |    |
       |   |     |   |          |   |    |   |      |   |                         |    |
       |   |     |   |          |   |    |   |      |   |                         |    |
LOW ___|   |_____|   |__________|   |____|   |______|   |_________________________|    |

 -------------------------------------------------------------------------------------------------->
                                                                                            time
       |<---t1-->|<------t2---->|<--t3-->|<---t4--->|<------------ gap ---------->|
 
 ************************************************************************************************************/
Аватара пользователя
eagafonov
 
Сообщения: 175
Зарегистрирован: 18 сен 2013, 23:39
Откуда: Нижненовгородск

Re: Квадрокоптер

Сообщение Gol » 06 май 2014, 14:58

eagafonov писал(а):Как декодировать PPM пульта управления

https://github.com/eagafonov/rc-ppm-decoder

О, ништяг, маладца! Только лучше подписать что это PPM-SUM, т.е. несколько каналов PPM "по одному проводу". У меня вот RC приёмник не могёт PPM-SUM отдавать вроде как, только раздельные каналы. Так что шесть каналов подключать приходится шестью проводами :-(
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: Квадрокоптер

Сообщение eagafonov » 06 май 2014, 16:40

Gol писал(а):
eagafonov писал(а):Как декодировать PPM пульта управления

https://github.com/eagafonov/rc-ppm-decoder

О, ништяг, маладца! Только лучше подписать что это PPM-SUM, т.е. несколько каналов PPM "по одному проводу". У меня вот RC приёмник не могёт PPM-SUM отдавать вроде как, только раздельные каналы. Так что шесть каналов подключать приходится шестью проводами :-(


Да, это именно PPM с передатчика, с тренеровочного разъёма. Есть в природе приёмники, которые наружу PPM-SUM выдают?

Кстати, приёмники наружу выдают PWM, а не PPM (уже было обсуждение тут, помню ;-) )
Значение определяется длительностью, а не положением импульса. Поправьте, если не прав.
Аватара пользователя
eagafonov
 
Сообщения: 175
Зарегистрирован: 18 сен 2013, 23:39
Откуда: Нижненовгородск

Re: Квадрокоптер

Сообщение Gol » 06 май 2014, 20:16

eagafonov писал(а):Есть в природе приёмники, которые наружу PPM-SUM выдают?
Кстати, приёмники наружу выдают PWM, а не PPM (уже было обсуждение тут, помню ;-) )
Значение определяется длительностью, а не положением импульса. Поправьте, если не прав.

Приёмники отдают тоже PPM обычно, не PWM. Для цифровых серв (которые и PPM умеют) ещё PCM есть. С PCM я не сталкивался так что подробности особо не изучал. Помню, было небольшое расхождение в толкованиях терминов, но общепринятое обозначение сигналов которые обычные сервы понимают - именно PPM. А PPM-SUM, соответственно, все доступные приёмнику (или передатчику) каналы сведены в один.

Из приёмников PPM-SUM отдавать FrSky умеют вроде как. Хоббикинговский родной приёмник шестиканальный тоже имеет PPM-SUM на выходе BAT (на рцдезигне писали).
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Пред.След.

Вернуться в Проекты на базе Виртурилки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron