Автопилот Arduplane - открытое ПО
а результат азимута и дистанции сохранять в переменную.
тут палка о двух концах - экономете мегагерцы, неэкономите память, у меги ее всего 8 килобайт
что касается коррекции на приплюснутость
это я пошутил так)))) фактически приплюснутость дает на широте 60градусов около 15 км смещения, но в локальной навигации это неважно там не абсолютные а относительные базы координаты
в этой тригонометрии исключений быть не может
подозреваю может быть а может не быть, посмотрите в исходники avr-libc функцию atan2 в теории там может быть деление на ноль на практике - посмотрите
что касается коррекции на приплюснутость, а сколько дельта между минимумом и максимумом?
На это можно покласть при полетах в радиусе до 100-200км.
Испытал связку Ardupilot 2.7.1 + OSD Remzibi. К ардупилоту подключено 3 канала управления: тангаж, крен, газ. Установлено это добро было на самодельную модель-верхнеплан размахом 1,4м. Конечно, погода, мягко говоря, не совсем подходящая для испытаний, ветер дул 6 м/с, но выбора нет, на неделе нужно на работу ходить.
Сразу о грустном. Видео полетов записывалось на старенький ноутбук, а я так увлекся полетами, что прозевал момент, когда холодный ноябрьский ветер выдул из батареи всю энергию. Ноут отключился в момент записи, и видео-файл получил фатальные повреждения. Поэтому видео пока не будет. Попробую повторить запись в следующие выходные.
Теперь о главном. Первым был опробован режим стабилизации. Да, чуть не забыл, все настройки ардупилота оставлены по умолчанию, т.е. пиды и т.д. стоковые. Тем не менее, стабилизация работала на отлично, бросаю ручки, и модель тут же выходит в горизонтальный полёт. Собственно, используя данный режим, можно передавать управление моделью маленьким детям, старикам и беременным женщинам. Зарулился, отпускаешь ручки и модель в горизонте. Не получается лететь в нужную сторону или модель далеко и не можешь определить её положение? Щелчок тумблера в положение RTL и через десяток секунд модель над головой. О режиме RTL и добавить, в общем-то, больше нечего. Стабильно возвращает модель в точку HOME и удерживает её там. В безветренную погоду летает по кругу (это я раньше проверял), в ветер как получиться, замысловатыми овалами и восьмёрками, но над головой. Разумеется, должен заметить, что, в общем-то, модель далеко не пилотажка, а создавалась изначально для FPV полётов, т.е. обладает врожденной тягой к ровному полету, и, наверное, выводить её в горизонт не великий подвиг. Тем не менее, с непривычки впечатляет.
Самый интересный, на мой взгляд, режим, полет по точкам. Тут тоже без сюрпризов, всё работает. Модель летает от точки к точке, попутно борясь с ветром, затем возвращается «домой» и всё сначала. К сожалению, оценить точность руления во время сильного ветра было довольно сложно, но вроде бы всё ок.
Пора уже и об OSD вспомнить, а вот тут не всё так гладко как хотелось бы, возникло несколько вопросов. Итак, ну во-первых, вся информация передаваемая ардупилотом отображается на экране. Искусственный горизонт и режимы работы без проблем. Проблемы возникли в следующем. Индикатор внизу экрана в виде спутниковой антенны показывает количество видимых спутников? Почему-то он показывал исключительно цифру 4-ре. Хотя когда я раньше использовал OSD без автопилота, то цифра была 8 или 9. Далее, скорость и удаление от точки старта показывает отлично, а вот высоту и вариометр… У земли как и положено всё по нулям, но после запуска цифры скачут как бешенные в сотнях метров. Хотя при всём при этом автопилот водит модель по высоте ровно, примерно на 150-ти метрах, как и планировалось в миссии. Ещё есть замечание по отображению режима полета по точкам. При включении на экране появляется номер точки к которой летим и расстояние до неё в метрах, к примеру WP1 147. (эх, жалко видео нет) Так вот, цифры после 2-го знака, в примере это 7, попадают в поле отображения горизонта и постоянно мерцают, т.е. надпись о режимах нужно сдвигать влево на два знакоместа. Где, кстати это делается, в прошивке ardupilota?
Очень длинный текст получается, пока умолкаю. Буду очень признателен, если кто поможет разобраться с возникшими вопросами.
P.S. в программировании Arduino я, надеюсь временно, практически полный 0. Убедительная просьба, как нибудь по доступнее…😃
нашел в коде нестыковку изза которой домашние координаты сохраняются не точно, а это может стать причиной того что модель скрылась в неизвестном направлении.
Суть в следующем некоторые ЖПС модули с батарейкой горячего старта некоторое время после старта сначала выдают позицию своего прошлого положения но разумется с указанием низкого качества сигнала в HDOP, потом идут нулевые широта и долгота, затем ловятся спутники и растет качество выражаемое в типе fix нет/2d/3d/Dgps
суть проблемы в том что иму должна передавать значение качества сигнала ардупилоту и только тогда когда качество 3D fix должна сохраняться домашняя локация. Передачу Gps.quality я уже реализовал в иму 1.8 когда делал прошивку ардупилота под ремзиби осд, теперь надо поправить код ардупилот 2.8
суть дилемы:
если я оставлю в цикле ожидание сохранения home пока не появится Gps.quality соответствующее 3d fix то те товарищи которые случайно его подключат к иму со старой прошивкой (котрая не передает Gps.quality ) и не смотрят в окно терминала, что им пишет пилот получат непонятный эффект зависания, опять же если использовать ArdupilotSim для симуляции в XPLANE не заточенный под выдачу этого сигнала то тоже будет зависон.
с другой стороны запускать на авторежимах с ложной точкой home тоже не айс, а сделать повторный ресет ардупилоту перед запуском можно и забыть… будет человеческий фактор там где виновата логика реализованная в коде
2 Роман Петров
в этой прошивке количество спутников заменено на качество жпс сигнала (пожелания были в этом обсуждении)
баллы 0-2 лучше не летать
3-4 - нормуль
алгоритм примерно такой:
if (fix < 1)
quality = 0; // No FIX
else if(num_sats < 5)
quality = 1; // Bad (Num sats < 5)
else if(HDOP > 30)
quality = 2; // Poor (HDOP > 30)
else if(HDOP > 25)
quality = 3; // Medium (HDOP > 25)
else
quality = 4; // Good (HDOP < 25)
хотя я бф не назвал HDOP = 25 (тут *10 т.е 2.5) хорошим, реально хорошо когда меньше 2.0 а под открытым небом хороший навигатор дает < 1.0
по поводу расстояния до маршрутной точки, была найдена ошибка в расчете курса и расстояния которая наследовалась во всех версиях ардупилота включая 2.7, патченные функции я выкладывал,
что касается с отсутствием округления в расстоянии до точки - спасибо за баг-репорт, обязательно исправлю
Ага, про спутники всё понятно. Не много не привычна 4-х бальная шкала, но это мелочи. А вот интересно почему так высота в OSD скакала?
Ага, про спутники всё понятно. Не много не привычна 4-х бальная шкала, но это мелочи. А вот интересно почему так высота в OSD скакала?
хорошоб видео, тут разные причины могут быть, навскидку если не сделал повторный сброс ардупилоту после того как жпс модуль хорошо захватил спутники то вполне возможно была сохранена ошибочно точка home и она же записалась в осд
четырехбальная шкала повзаимстована из билиотек ардупилот мега,
думаю надо сделать пятый бал на идеальный HDOP, где нить <1
на счет предполетной подготовки и сброса Хом позишин
а почему бы не сделать махание к примеру рудером на земле до появления валидных данных
пилот видит что самаль виляет хвостом - значит не все так … ждем
успокоился - жмем ресет иначе просто не даем работать газом !
типа некая защита от дурака 😃
а для сима - таже версия прошивок только заточенной под сим 😃
как сделано в мегапилоте 😃
Где, кстати это делается, в прошивке ardupilota?
в 2.7 это модуль CGS Remzibi
void print_control_mode(void)
…
Serial.print(“$M,”);
Serial.print(“130,”); // Колонка для начала текста
Serial.print(“11,”); // Ряд для начала текста
Serial.print(“169,”); // dec address of First Character - это я не понял к чему, взаимстовано из ориг. версии
Serial.print(“00,”); // dec address of Last Character
2 lio
мой мотив против этого - что будет как со мной и другими форумянами которые начали пробовать пилот до того как полностью перевели и заучили английский мануал…
“почему когда я включаю “авто” самолет загибает элероны и руль высоты” ведь если я это сделаю в полете он упадет. (если я не ошибаюсь такое гдето было если при включении/ресете ардупилота переключатель режима не мануал и газ не убран - типа к взлету неготов)
пока думаю надо как то определять версию иму (или сима) и в случае если старая выдавать ругательное сообщение в консоль, инициировать дом как есть а вместо постоянного синего светодиода на пилоте мигать им, что не все совсем в порядке.
В этом случае если прошивка иму старая то ну неточно будет дом, но полетать на стабилизации можно и в симе тоже.
осталось дело за малым как понять в коде что старая версия иму…
Про тонкости сброса точки Home не знал, но проблем с этим не возникало, т.е при включении с пульта RTL самолёт четко летел домой. На сброс OSD перед вылетом нажимал, после чего возникала надпись HOME SAVED и возникали нули в расстоянии, скорости и высоте, только потом, во время полета, высота скакала как бешеная. Запишу видео, поговорим на эту тему поконкретнее, ок?
На счет виляния хвостом. Думаю, элегантнее было бы повесить на свободный выход ardupilota какую-нибудь простенькую пищалку.
Что-то как-то у вас всё сложно.
Вот как у меня:
…
Вычисления всё float. Double - пустая трата времени и ресурсов. Впрочем, в gcc, по-моему, double = float.
Почему то был уверен что у вас целочисленная математика.
ведь используя только 8-битные константы уже можно курс с точностью ~0.5град вычислять.
осталось дело за малым как понять в коде что старая версия иму…
при старте и ресете - иму выдает в порт свою версию в обычном тексте
а уже потом начинает гнать бинарник
можна ее парсить
Думаю, элегантнее было бы повесить на свободный выход ardupilota какую-нибудь простенькую пищалку.
вполне можна думаю повесить пищалку на колодку системного разьема меги328 и пиликать заранее условленную мелодию 😃
иму выдает версию только в случае если настроена для тестирования
#if PRINT_BINARY != 1 //Print either Ascii or binary messages
Serial.print(“!!!VER:”);
Serial.print(SOFTWARE_VER); //output the software version
но в принципе это не беда, можно в новую иму добавить параметр и в вывод данных жпс а они в немеге не чаще 5гц, а можно вообще добавить собственное сообщение с новым ID и слать в нем допустим отдельно версию, барометр, воздушную скорость
в принципе узнать что версия с удлиненным выводом массива при передаче
данных жпс несложно, у нее число байт на 2 больше, но это как то “неспортивно”
по поводу вранья высоты в remzibi
попробовал в симе - тоже врет, возможная причина внутренняя ошибка осд при работе с метрами вместо родных для него футов
дело в том что курс, высоту, расстояние осд считает сама, внутри по передаваемым ей координатам и по ей одной известному алгоритму
можно попробовать сконфигурить футы из утилиты конфигурации осд
можно попробовать сконфигурить футы из утилиты конфигурации осд
т.е. высоту будет в футах отображать? Я всё лето летал с одной OSD без ardupilota проблем с высотой никогда не было. С данными полученными непосредственно с GPS OSD работает отлично. Может дело в прошивке самой OSD для ardupilota у меня сейчас залита ARDUMV1_73.HEX
Может дело в прошивке самой OSD для ardupilota у меня сейчас залита ARDUMV1_73.HEX
скорее всего да, в симе высота соответствует ардупилоту а в паралелльно подключенном ремзиби вранье, причем иногда немного, а иногда существенно. из расстояний ардупилот ему дает только до вэйпоинтов, остальное он считает из жпс координат, скорее всего с ошибкой и с курсом градусов на 10 подвирает…
кстати думал что симулятор и осд через один компорт не смогут работать, фигня работают у них разные метки строк и ненужные строки оба ardupilotsim и osd просто игнорируют, единственное в окне терминала ardupilotsim поток $ - команд
остальное он считает из жпс координат
Вот это система мне совершенно не понятна. Зачем OSD самой заниматься расчетами если все данные по высоте и курсу есть в ardupilote? Или нет?
Зачем OSD самой заниматься расчетами
Тут как раз-всё понятно: во первых, ОСД- самостоятельное устройство и главная его задача- посчитать и вывести в виде стрелочки- направление “домой”. Ну, и в виде бесплатного приложения- всяки разны напряжения, скорости, высоты, координаты и т.д.
Во вторых- Ремзиби и Ару пилот: от разных родителей, просто они их совместимыми сделали, чтобы расширить применение 😃
Но ОСД- не открытый проект: исходники там недоступны 😦
Подскажите, проект еще реботает? А то нигде не могу найти в продаже. Даже на сайте diydrones нет в наличии.
Если уже все закрылось, есть подобные открытые проекты например для ардуины и датчиков allinone?
Спасибо
Очень даже работает! Плата ardupilota есть здесь www.sparkfun.com/products/8785. По поводу ardu-imu поговорите с Алексеем.
вот ардупилот в терре есть, только сначала заказ сделайте через инет магазин а то накрутка будет www.terraelectronica.ru/catalog_item.php?ID=1115&C…
простите не посмотрел что вы из питера, возможно и в СПБ где нить есть вналичии
а имушку можно сделать даже самому если душа к паяльнику лежит
Rom111, спасибо. Кто такой Алексей?
alexeykozin, у них тоже нет в наличии.
Я правильно понимаю, что заливание прошивки в плату производится через ардуино ide при подключении либо шилда с датчиками к юсб, либо основной платы через ftdi кабель?
И что значит Arduino Mega compatible на основной плате? Она както втыкается в обычную мегу? И зачем?)