Харакири об Harakiri

Пытаюсь тут приручить прошивку Harakiri для naze32/flip32. Другая прошивка (CleanFlight) заработала сразу, имеет отличный конфигуратор, чистый и понятный код, но… Только Harakiri может в случае FailSafe включать режим GPS Home + GPS Land, т.е. прилетать и садиться. Это ее конкурентное преимущество делает ее вне конкуренции.

Квадрик (250-го размера) должен включать:

  • плату flip32 с баро и магнетометром,
  • GPS UBlox neo-6m на 57600 baud rate (тоже с магнетометром, потом перережу SDA встроенного компаса на плате flip32 и подключу внешний компас),
  • MinimOSD от KV_Team (с аналоговыми входами),
  • сонар HC-SR04,
  • приемник с PWM и конвертор PWM в CPPM (ArduPPM на Arduino 328pm Mini),
  • датчик тока ACS712 (у меня есть только биполярный на 20A),
  • остальное оборудование (моторы, реги, BEC, FPV).

Сначала научился компилировать Harakiri, ибо та прошивка, что была найдена, че-то не работала. Для этого поставил в виртуалку Keil (evaluation, но после ряда действий ограничения на размер кода будут обойдены), GCC, и провел сложные действия по настройке проекта Keil для работы с GCC (это и обошло ограничения и позволило скомпилировать прошивку). Инструкция baseflight_howto_0r2.pdf в архивах в теме www.fpv-treff.de/viewtopic.php?f=18&t=3611.

Исходники Harakiri взял из репозитория GIT HarakiriWebstore1 или HarakiriWebstore2. В ней не работал сонар, GPS, и MultiWiiGUI глючила. Спустя неделю изматывающего массажа я понял, что это бета, а правильная версия должна браться из GIT TestCode3 (github.com/Crashpilot1000/TestCode3). Дальше дело пошло - GUI ожил, GPS заработал, и даже в passthru режиме ловил спутники, но сонар (подключенный к входам RC7 и RC8) так и не заработал. Далее я понял, что сонар отключается при наклоне больше определенного угла (18 г.), а если не откалиброван аксель, то угол не определен. А еще потребовалось увеличение константы в drv_sonar.c, а то сонар через некоторое время отваливался:

if ((curT - calltime) > 300000) disable = true; // Data stalled for ca. 300ms, disconnect error.

на

if ((curT - calltime) > 350000) disable = true; // Data stalled for ca. 300ms, disconnect error.

До этого я поставил ферритовое кольцо на провод к сонару, но это не решило проблему.

Отлаживая этот код, расширил CLI расширенной информацией про GPS и сонар в команде “status” и добавил команду “ret” для возврата к работе из CLI без перезагрузки. Вот только сонар отрубается от бездействия, пока прошивка находите в режиме CLI.

Мои настройки Harakiri (mag_dec для Москвы):

feature PPM
feature VBAT
feature GPS
feature SONAR

set minthrottle=1150
set mag_dec=105
set gps_baudrate = 57600
set gps_type = 1
set snr_type = 1
set snr_min = 20
set snr_dbg = 1

**Харакири с OSD

​** Для прошивки OSD выбрал MW_OSD, т.к. она поддерживает режим Harakiri. Сначала как обычно взял не из того репозитория, и удивился, что OSD получает из Harakiri только часть инфы - например, настройки и углы, но не статусы датчиков, режим и arm/disarm. После пары дней расширенного массажа взял из правильного репозитория версию scarab-osd-1.4.2.10 (github.com/ShikOfTheRa/scarab-osd), но там тоже это не работало. Еще денек глубокой отладки, и я нашел что в файле MW_OSD.ino вместо USE_BOXNAMES надо писать BOXNAMES. После этой замены все ожило и воспело. Тема об MW_OSD: www.multiwii.com/forum/viewtopic.php?f=8&t=4865

Программа настройки MW_OSD не запускалась из-за каких-то разногласий с Oracle Java, и если и запускалась, то очень долго опрашивала порты в Serial.list(). Эта задержка связана с реализаций Bluetooth портов под Windows, когда вызываешь их функцию драйвера GetName, драйвер медитирует полминуты. Т.к. портов много, все замирает. Пришлось передавать нужный порт из командной строки и я поменял MW_OSD_GUI.java и сделал батники для ее компиляции в обход Processing, и запуска, заодно примирив ее с Oracle Java.
Батники кладуться в .\scarab-osd-1.4.2.10\MW_OSD_GUI\application.windows32\

Сборка (build.MW_OSD_GUI.bat):

set javahome=C:\Program Files (x86)\Java\jdk1.7.0_45\bin\

set p=.\;lib\controlP5.jar;lib\core.jar;lib\gluegen-rt.jar;lib\gluegen-rt-natives-windows-i586.jar;lib\jogl-all.jar;lib\jogl-all-natives-windows-i586.jar;lib\MW_OSD_GUI.jar;lib\RXTXcomm.jar;lib\serial.jar;lib
"%javahome%\javac.exe" -classpath %p% -verbose source\*.java

if exist lib\MW_OSD_GUI1.jar del lib\MW_OSD_GUI1.jar
"%javahome%\jar.exe" -cvfm lib\MW_OSD_GUI1.jar META-INF\MANIFEST.MF -C source/ source/*.class source/*$*$*.class
del source\*.class

Запуск (OSD_GUI.bat):

set p=lib\controlP5.jar;lib\core.jar;lib\gluegen-rt.jar;lib\gluegen-rt-natives-windows-i586.jar;lib\jogl-all.jar;lib\jogl-all-natives-windows-i586.jar;lib\MW_OSD_GUI1.jar;lib\RXTXcomm.jar;lib\serial.jar;lib

set path=C:\Andrey\Arduino.1.5.6.2\java\bin;%path%
java -Djava.library.path=lib -cp %p% MW_OSD_GUI %*

Запуск редактора font’ов (CharEdit.bat):

C:\Andrey\Arduino.1.5.6.2\java\bin\java.exe -verbose -jar data\MAX7456Charwizard.jar

Можно ставить на квадрик и крутить PIDы! 😉

  • 3280
Comments
Shuricus

Занимаюсь сейчас тем же! 😃

Только смотрю он ее забросил уже вроде как год назад.
Инерциалки тоже нет?

Будет унитазиццо помаленьку.

Prikupets

В смысле - нет инерциалки? Имеется ввиду предсказания положения на основе IMU между отсчетами с GPS?
Так достаточно GPS взять на 10Hz, разве нет?
Вообще-то меня унитазинье не напрягает, мне висеть не надо, а только летать.

Aleksandr_L

Чтобы летать, это все лишнее.
Достаточно гироскопов и пищалки, остальное лишний вес.

Shuricus

Без инерциалки, будет плавать с разбросом пару метров, частота ЖПС этому не поможет.

Есть результаты?

Prikupets

В ublox neo-6m разве нет встроенной инерциалки?

Shuricus

Мы наверное о разном. )
Я про алгоритм прошивки полетного контроллера.

jShadow

Уважаемые, извиняюсь что встреваю. Я тут для CleanFlight переделываю навигацию как раз для GPS HOME + GPS LAND. Буду рад любой помощи в поиске глюков и тестировании.

Prikupets

Почему бы не призвать к тестированию сообщество пользователей CleanFlight во всем мире? Можно сделать коммит в их репозиторий?

jShadow
Prikupets;bt140381

Почему бы не призвать к тестированию сообщество пользователей CleanFlight во всем мире? Можно сделать коммит в их репозиторий?

Сообщество уже участвует. Доминик (Hydra) не против включить мой код в клинфлайт после того как код станет более-менее стабильным.
На гитхабе русскоязычных пилотов раз-два и обчелся, поэтому я тут и пишу. Код с моими модификациями лежит тут: github.com/digitalentity/…/navigation-rewrite

Prikupets

Спасибо, я наверное в ближайшие дни попробую.

jShadow
Prikupets;bt140383

Спасибо, я наверное в ближайшие дни попробую.

Пока многое не работает или работает не так как задумано, в частности пока нет возврата домой по фейлсейфу - это пока в платах.

jShadow

Если все еще интересно, вот ветка на RCG, посвященная моему коду: www.rcgroups.com/forums/showthread.php?t=2495732

Prikupets

Интересно, но все еще откладывается.

Shuricus
jShadow;bt140556

Если все еще интересно, вот ветка на RCG, посвященная моему коду: www.rcgroups.com/forums/showthread.php?t=2495732

Почему нельзя просто из Ардукоптера все скопировать и не изобретать велик.

Prikupets

На github’е DigitalEntity написал, что там все сложно и для маленького CleanFlight’а не пойдет.

Shuricus

Ну там как раз инерциалка, но она держит гораздо лучше, и при том что работает на Меге - на СТМ точно должна работать. Что-то там мутит этот DigitalEntity.

Prikupets

Говорит и не один, что почему-то на маленьких квадриках APM работает плохо (дерганно что-ли?)

APM does not work well with minicopters, 450-class is fine, 330 is flyable, but I have had hard times trying to get an overpowered 250-class at least flyable with APM.

jShadow
Shuricus;bt140840

Почему нельзя просто из Ардукоптера все скопировать и не изобретать велик.

Интересно, почему же никто до сих пор не портировал Ардукоптер на ту кучу платформ, которые поддерживает КлинФайт? Видимо все-таки арду не вполне пригоден для “мелочи”.

Prikupets

Вот именно - почему? Там все для этого создано - система драйверов, выделенный HAL (Hardware Abstraction Layer) - все прямо пищит - “ПЕРЕНЕСИ МЕНЯ !”. Но нет, не переносят…

Shuricus

Одна из причин - Ардукоптер не терпит вибраций, поэтому он для мелких неудобен. Но к GPS-алгоритмам это не относится. Я думаю просто никто не хочет разбираться.

А вообще полно примеров, где на нем летали и на мелких. Просто он под другие задачи оптимизирован.

Prikupets

На мелких квадриках вообще нет вибраций. Массы пропеллеров малы, а частоты велики, что благоприятно для мозгов.