Автопилот Arduplane - открытое ПО

alexeykozin

code.google.com/p/ardupilot/wiki/MediaTek - тут
скачать утилиту, скачать последнюю прошивку(AXN1.30_2389_3329_384.1151100.1_v16.bin), скопировать последнюю прошивку в Flash Tool v1.0.0 for Customer\Firmware
а дальше по инструкции MediaTek_Programming.pdf которая вложена в архив с утилитой,
кстати прога минижпс - там же

единственное что я так и не смог сделать - залить дефолт настройки - мой модуль осталось записей 0, мелькало в форумах что если счетчик достиг 0 то нужно стирать флешку, но при перепрошивке не сбросилось…

Serj=

Алексей, у Вас заработал полет по точкам в ГПС эмуляторе с 2.7?
Никак не могу заставить работать, уже даже не знаю где копать. Может оно вообще не работает!?

alexeykozin

Если вопрос ко мне, то я еще в симуляторе не летал, ЖПС эмулятор от комплекта ремзиби пробовал чтоб разобраться в NMEA протоколе маленько…

вчера шерстил прошивки вдоль и поперек пилот2.6 показался примитивным, пилот2.7 дрожит как шальной, это не только напрягает внешне и приводит к более быстрому расходу батареи но и наводит на мысль что есть бага,
насколько я понял народ пишет что это изза того что код неоптимален, дрожание вызвано тем что пилот не успевает отрабатывать и сериал и прерывания в необходимом ритме.

I tried v2.7 I got servo ‘twitching’ in stabilze mode. Jason thought that this was due to the amount of processing that was now being carried out and that the Ardupilot board was being pushed to the limit. He also mentioned that a new serial driver may help and that this would be incorporated in v2.8. I notice from the SVN that although v2.8 was started there appears to have been no progress since September. I assume that the development teams limited time has been spent on Ardupilot Mega and Adrucopter.

походу ребята решили все переписать на классы, и к маю 2010 сделали иму 1.8.2 “на библиотеках” а при реализации пилота2.8 уперлись в 32к памяти. Скачал их наработки по 2.8 слил в проект, добавил библиотеки от иму1.8.2, недостающие тупо взял от меги, с заданой настройкой GPS на модуль MTK (заняла почти все 32к, но скомпилировалась!), а ардуиму в качестве GPS, увы, не прокатила - не компилируется, пока отложил в сторонку, еще неприятно что если заливать все библиотеки меги втупую то компилироваться небудет а значит не меняя комплект библиотек нельзя будет и меговской прошивкой заниматься и мини

вобщем надежда на 2.8 еще есть, по большому счету нафиг универсальность, убрать оттуда кучу жпс (и кому нужен ардупилот без иму???) - оставить один жпс-иму , убрать раритетные термофилы, попробовать переписать на локальные библиотеки “”- вместо <> чтобы развязать библиотеки меги и мини

Rom111

Всем привет! Подскажите, пожалуйста, у меня ArduIMU v2 залил прошивку 1.7 При тестировании в ArduIMU Test жёлтый самолетик вращается только вокруг осей X и Y. В строке Z Yaw цифры меняются, но самолет не вращается. В чём может быть причина, неисправен гироскоп?

Serj=
Rom111:

В чём может быть причина

а кнопочка Enable Yaw нажата?

RedSun
alexeykozin:

вчера шерстил прошивки вдоль и поперек пилот2.6 показался примитивным, пилот2.7 дрожит как шальной, это не только напрягает внешне и приводит к более быстрому расходу батареи но и наводит на мысль что есть бага,
насколько я понял народ пишет что это изза того что код неоптимален, дрожание вызвано тем что пилот не успевает отрабатывать и сериал и прерывания в необходимом ритме.

Мне удалось практически задавить дрожание и сохранить приемлемую динамику для моего сочетания серв и рулей, усредняя сигнал на сервы по последним 3 не то 4 циклам. Меньше - дрожит, больше - тупит. Но, еще раз повторюсь - это для моего ероплана, у других может быть по другому. Это. конечно, лечение симптомов, а не болезни…
Поскольку дайдронцы, похоже, первый пилот забросили окончательно, и новых прошивок скорее всего не будет, код можно ковырять смело. Есть идея подключить IMU по I2C, освободив приемную сторону последовательного порта для общения с наземкой. Этот вариант в wiicopterе работает очень даже быстро.
Ну и с оптимизацией. Надо или вынести напрочь все рудименты вроде поддержки пирометров и непосредственной работы с GPS из кода пилота, или оставить их только внутри #ifdefов. Ну и затащить проект в нормальную оболочку, чтобы проверить и вычистить все неиспользуемые переменные, функции и ссылки…

alexeykozin
RedSun:

Есть идея подключить IMU по I2C, освободив приемную сторону последовательного порта для общения с наземкой. Этот вариант в wiicopterе работает очень даже быстро.
Ну и с оптимизацией. Надо или вынести напрочь все рудименты вроде поддержки пирометров и непосредственной работы с GPS из кода пилота, или оставить их только внутри #ifdefов. Ну и затащить проект в нормальную оболочку, чтобы проверить и вычистить все неиспользуемые переменные, функции и ссылки…

прям мои мысли. сделать иму ведомым устройством а чтобы пилот запрашивал нужные ему данные, убрать и пиродатчики и все жпс кроме иму! ведь флай-бай-вире нафиг не уперся - вся суть автопилота в стабилизации.И наоборот подключить осд ремзиби в качестве дополнительной опции GGS

Причину дрожания прошивки 2.7 нашел (этой ночью, и она явная и видна как бревно в глазу!!!), и даже залатал но попутно обнаружено еще несколько явных баг,
попробую все их исправить, откалибрую и выложу на обсуждение

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

моя версия уже почти созрела, но одному мне сложновато комплексно оценить и протестировать как отразятся изменения на остальных процессах
(я хоть и программист по специальности, но C++ не мое, дай мне бэйсик или tsql а от этих кракозябров тошно уже) Поэтому если кто “могет”, я могу поделиться бэта-версией и прокоментировать что к чему
кстати в своей прошиве пилота я сделал прием с иму числа спутников и качества GPS сигнала, качество сигнала сначала хотел писать сам, но оказалось что в последней иму есть скрытая “пропертя” у объекта жпс

RedSun

Про причину дрожания и другие баги - интересно до дрожи 😃). Я пока не нашел, хотя есть некоторые подозрения. 😦( Увы, на работе нет пилота, а дома времени 😦(
Про фаст сериал пока не думал.
Rembizi вроде как и так без особых проблем снюхивается с ардупилотом, только нужна правильная прошивка.
В каких-то сообщениях GPSа уровень сигнала и количество спутников есть, надо покурить мануал. Насколько я помню, некоторым приемникам при инициализации можно сказать список интересующих сообщений, и приемник не будет гнать остальные. Не исключено, что сообщения со спутниками просто не разрешены…
Если нужен свежий глаз - у меня их есть. На С - пишу крайние лет 20 😃)

alexeykozin

вобщем окончательно убедился что дрожание происходит изза модуля radio.pde
на тесте радио явно видна ступенчатая вибрация снятых измерений.
чтобы временно залатать проблему сделал округление “снятых значений ПВМ” с приемника так как это было реализовано в 2.6, но там еще одна бага осталась - это как раз про то что писали тут- если приемник аналоговый и ширина PWM вообще неадекватная то вместо игнорирования и файлсейф - неверные данные снимаются как значения приемника, я сначала попробовал как 2.6 сделать обернув в if с 1700 - 4000 но сервы отрубаются в крайней трети - гдето еще бага.

вот еще что на заметку - если при переходе в режим стабилизации у вас выворачивает сервы - посмотрите параметр тип приемника насколько я понял пвм бывает когда импульсы идут последовательно по времени с разных каналов а бывает синхронно.

с исправленным “тремором”
radio.pde для Ardupilot2.7 можете взять тут

blade
alexeykozin:

я понял пвм бывает когда импульсы идут последовательно

И это-абсолютно правильно: если аппаратура мегагерцовая и без РСМ- то в ней импульсы идут последовательно, как и в кодовой пачке …
А если 2,4- то там все по времени одновременно.
А что, в Ардуине это- не учтено?

alexeykozin
blade:

И это-абсолютно правильно: если аппаратура мегагерцовая и без РСМ- то в ней импульсы идут последовательно, как и в кодовой пачке …
А если 2,4- то там все по времени одновременно.
А что, в Ардуине это- не учтено?

в 2.7 учтено но вычисляется не автоматом, а задается конфигурационной константой

#define RADIO_TYPE 0 // 0 = sequential PWM pulses, 1 = simultaneous PWM pulses

RedSun
Rom111:

Всем привет! Подскажите, пожалуйста, у меня ArduIMU v2 залил прошивку 1.7 При тестировании в ArduIMU Test жёлтый самолетик вращается только вокруг осей X и Y. В строке Z Yaw цифры меняются, но самолет не вращается. В чём может быть причина, неисправен гироскоп?

В конфиге прошивки 1.8 есть параметр, что-то типа SPEED_FILT. Смысл его в том, что угол рыскания не будет измеряться на неподвижном самолете, а только по достижении скорости не ниже указанной. Посмотрите, мож у Вас тоже есть что-то подобное и оно ненулевое ?

RedSun
alexeykozin:

с исправленным “тремором”
radio.pde для Ardupilot2.7 можете взять тут

Посмотрел - по ссылке лежит исходный дистрибутив ArduIMU 1.8.2 и ArduPilot 2.7.1. Никаких доработок не видать…

alexeykozin
RedSun:

Посмотрел - по ссылке лежит исходный дистрибутив ArduIMU 1.8.2 и ArduPilot 2.7.1. Никаких доработок не видать…

Прошу прощения, действительно не тот пакет попал при архивировании, перезалил

вот фрагмент радио

void read_radio()
{
//Filter Radio input
//timer1diff -= 46; //if no filtered - tremor
//ch1_temp = timer1diff * .5; //if no filtered - tremor
ch1_temp = (float) ch1_temp *.8 + ((float)timer1diff - 46)*.1;

//timer2diff -= 38; //if no filtered - tremor
//ch2_temp = timer2diff * .5; //if no filtered - tremor
ch2_temp = (float) ch2_temp *.8 + ((float)timer2diff - 38)*.1;

timer3diff += 10;
ch3_raw = timer3diff * .5;
radio_in[CH_THROTTLE] = (float)radio_in[CH_THROTTLE] *.9 + (float)timer3diff *.05;
throttle_failsafe(timer3diff/2);
radio_in[CH_THROTTLE] = constrain(radio_in[CH_THROTTLE],radio_min[CH_THROTTLE],radio_max[CH_THROTTLE]);

// Rudder with filter
radio_in[CH_RUDDER] = (float)radio_in[CH_RUDDER] *.9 + ((float)timer4diff + 40)*.05;

// Rudder with no filter
//radio_in[CH_RUDDER] = timer4diff * .5;

alexeykozin

а у кого нить не завалялось ссылки как самостоятельно сделать трубки для датчика воздушной скорости?

blade
alexeykozin:

а у кого нить не завалялось ссылки как самостоятельно сделать трубки для датчика воздушной скорости?

Дык, берёшь сломанную телескопическую антенну (а на Митино- их сейчас и целые рублей по 30 продают)- и паяешь мощным паяльнико с кислотным флюсом: www.reaa.ru/yabbfiles/…/Pito_800x539_001.jpg
D :принимаем равным 6 мм…
Со сгибанием под 90*-можно не мудрить, он и с прямыми трубками дивно работает 😃
Тем более, его всё равно надо в лобик консоли и подальше от винта вклеивать .

alexeykozin

спасибо.
ставиь буду на самоль с передним винтом, видимо надо на крыло куда - нибудь выносить…
а силиконовую трубку чем из подручных материалов можно заменить?

RedSun

Силиконовой трубкой для топлива из модельного магазина. Силиконовой трубкой от капельницы. Трубкой из непонятного материала из ремкомплекта омывателя стекол в автомагазине. Термоусадкой, если прямая.
На самом деле, колхозить настоящую трубку Пито особенного смысла нет. Часто просто делают трубочку на напорный (верхний) патрубок датчика, а второй патрубок оставляют неподключенным. Ошибка невелика.
И еще. Датчик давления выдает сигнал порядка единиц милливольт. Если пытаться выносить его куда-то, нужно очень внимательно защищаться от наводок и прочих помех…

alexeykozin
RedSun:

Датчик давления выдает сигнал порядка единиц милливольт. Если пытаться выносить его куда-то, нужно очень внимательно защищаться от наводок и прочих помех…

я так и подумал, думаю поставить его рядом с ИМУ и соединить экранированной жилкой