Пытаюсь тут приручить прошивку Harakiri для naze32/flip32. Другая прошивка (CleanFlight) заработала сразу, имеет отличный конфигуратор, чистый и понятный код, но… Только Harakiri может в случае FailSafe включать режим GPS Home + GPS Land, т.е. прилетать и садиться. Это ее конкурентное преимущество делает ее вне конкуренции.
Сначала научился компилировать 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 %*
Только смотрю он ее забросил уже вроде как год назад.
Инерциалки тоже нет?
Будет унитазиццо помаленьку.
В смысле - нет инерциалки? Имеется ввиду предсказания положения на основе IMU между отсчетами с GPS?
Так достаточно GPS взять на 10Hz, разве нет?
Вообще-то меня унитазинье не напрягает, мне висеть не надо, а только летать.
Чтобы летать, это все лишнее.
Достаточно гироскопов и пищалки, остальное лишний вес.
Без инерциалки, будет плавать с разбросом пару метров, частота ЖПС этому не поможет.
Есть результаты?
В ublox neo-6m разве нет встроенной инерциалки?
Мы наверное о разном. )
Я про алгоритм прошивки полетного контроллера.
Уважаемые, извиняюсь что встреваю. Я тут для CleanFlight переделываю навигацию как раз для GPS HOME + GPS LAND. Буду рад любой помощи в поиске глюков и тестировании.
Почему бы не призвать к тестированию сообщество пользователей CleanFlight во всем мире? Можно сделать коммит в их репозиторий?
Почему бы не призвать к тестированию сообщество пользователей CleanFlight во всем мире? Можно сделать коммит в их репозиторий?
Сообщество уже участвует. Доминик (Hydra) не против включить мой код в клинфлайт после того как код станет более-менее стабильным.
На гитхабе русскоязычных пилотов раз-два и обчелся, поэтому я тут и пишу. Код с моими модификациями лежит тут: github.com/digitalentity/…/navigation-rewrite
Спасибо, я наверное в ближайшие дни попробую.
Спасибо, я наверное в ближайшие дни попробую.
Пока многое не работает или работает не так как задумано, в частности пока нет возврата домой по фейлсейфу - это пока в платах.
Почему нельзя просто из Ардукоптера все скопировать и не изобретать велик.
На github’е DigitalEntity написал, что там все сложно и для маленького CleanFlight’а не пойдет.
Ну там как раз инерциалка, но она держит гораздо лучше, и при том что работает на Меге - на СТМ точно должна работать. Что-то там мутит этот DigitalEntity.
Говорит и не один, что почему-то на маленьких квадриках 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.
Почему нельзя просто из Ардукоптера все скопировать и не изобретать велик.
Интересно, почему же никто до сих пор не портировал Ардукоптер на ту кучу платформ, которые поддерживает КлинФайт? Видимо все-таки арду не вполне пригоден для “мелочи”.
Вот именно - почему? Там все для этого создано - система драйверов, выделенный HAL (Hardware Abstraction Layer) - все прямо пищит - “ПЕРЕНЕСИ МЕНЯ !”. Но нет, не переносят…
Одна из причин - Ардукоптер не терпит вибраций, поэтому он для мелких неудобен. Но к GPS-алгоритмам это не относится. Я думаю просто никто не хочет разбираться.
А вообще полно примеров, где на нем летали и на мелких. Просто он под другие задачи оптимизирован.
На мелких квадриках вообще нет вибраций. Массы пропеллеров малы, а частоты велики, что благоприятно для мозгов.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"41b8a4ac3df9550077792e83":{"_id":"41b8a4ac3df9550077792e83","hid":5271,"name":"Prikupets","nick":"Prikupets","avatar_id":null,"css":""},"4c0957443df9550077760211":{"_id":"4c0957443df9550077760211","hid":67065,"name":"Shuricus","nick":"Shuricus","avatar_id":null,"css":""},"51ece8503df9550077734464":{"_id":"51ece8503df9550077734464","hid":165138,"name":"Aleksandr_L","nick":"Aleksandr_L","avatar_id":null,"css":""},"54dc4a2a3df9550077720961":{"_id":"54dc4a2a3df9550077720961","hid":218382,"name":"jShadow","nick":"jShadow","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"55c65c189970730077112f32","hid":20672,"title":"Харакири об Harakiri","html":"<p>Пытаюсь тут приручить прошивку Harakiri для naze32/flip32. Другая прошивка (CleanFlight) заработала сразу, имеет отличный конфигуратор, чистый и понятный код, но… Только Harakiri может в случае FailSafe включать режим GPS Home + GPS Land, т.е. прилетать и садиться. Это ее конкурентное преимущество делает ее вне конкуренции.</p>\n<!--cut-->\n<p>Квадрик (250-го размера) должен включать:</p>\n<ul>\n<li>плату <a href=\"http://rcsearch.ru/?s=Flip32+-plate+-case\" class=\"link link-ext\" data-nd-link-orig=\"http://rcsearch.ru/?s=Flip32+-plate+-case\" target=\"_blank\" rel=\"nofollow noopener\">flip32</a> с баро и магнетометром,</li>\n<li>GPS <a href=\"http://rcsearch.ru/?s=UBlox+neo+6m+-cover\" class=\"link link-ext\" data-nd-link-orig=\"http://rcsearch.ru/?s=UBlox+neo+6m+-cover\" target=\"_blank\" rel=\"nofollow noopener\">UBlox neo-6m</a> на 57600 baud rate (тоже с магнетометром, потом перережу SDA встроенного компаса на плате flip32 и подключу внешний компас),</li>\n<li><a href=\"http://rcsearch.ru/?s=MinimOSD+kv+team\" class=\"link link-ext\" data-nd-link-orig=\"http://rcsearch.ru/?s=MinimOSD+kv+team\" target=\"_blank\" rel=\"nofollow noopener\">MinimOSD</a> от KV_Team (с аналоговыми входами),</li>\n<li>сонар <a href=\"http://rcsearch.ru/?s=HC-SR04\" class=\"link link-ext\" data-nd-link-orig=\"http://rcsearch.ru/?s=HC-SR04\" target=\"_blank\" rel=\"nofollow noopener\">HC-SR04</a>,</li>\n<li>приемник с PWM и конвертор PWM в CPPM (<a href=\"https://github.com/diydrones/ardupilot/tree/master/Tools/ArduPPM\" class=\"link link-ext\" data-nd-link-orig=\"https://github.com/diydrones/ardupilot/tree/master/Tools/ArduPPM\" target=\"_blank\" rel=\"nofollow noopener\">ArduPPM</a> на <a href=\"http://rcsearch.ru/?s=Arduino+328p+Mini+-usb\" class=\"link link-ext\" data-nd-link-orig=\"http://rcsearch.ru/?s=Arduino+328p+Mini+-usb\" target=\"_blank\" rel=\"nofollow noopener\">Arduino 328pm Mini</a>),</li>\n<li>датчик тока <a href=\"http://rcsearch.ru/?s=ACS712\" class=\"link link-ext\" data-nd-link-orig=\"http://rcsearch.ru/?s=ACS712\" target=\"_blank\" rel=\"nofollow noopener\">ACS712</a> (у меня есть только биполярный на 20A),</li>\n<li>остальное <a href=\"http://multicopterwiki.ru/index.php/FPV-%D0%BC%D0%B8%D0%BD%D0%B8%D0%BA%D0%BE%D0%BF%D1%82%D0%B5%D1%80%D1%8B#.D0.9C.D0.BE.D1.82.D0.BE.D1.80.D1.8B_.D0.B4.D0.BB.D1.8F_.D0.BC.D0.B8.D0.BD.D0.B8.D0.BA.D0.BE.D0.B2\" class=\"link link-ext\" data-nd-link-orig=\"http://multicopterwiki.ru/index.php/FPV-%D0%BC%D0%B8%D0%BD%D0%B8%D0%BA%D0%BE%D0%BF%D1%82%D0%B5%D1%80%D1%8B#.D0.9C.D0.BE.D1.82.D0.BE.D1.80.D1.8B_.D0.B4.D0.BB.D1.8F_.D0.BC.D0.B8.D0.BD.D0.B8.D0.BA.D0.BE.D0.B2\" target=\"_blank\" rel=\"nofollow noopener\">оборудование</a> (моторы, реги, BEC, FPV).</li>\n</ul>\n<p>Сначала научился компилировать Harakiri, ибо та прошивка, что была найдена, че-то не работала. Для этого поставил в виртуалку Keil (evaluation, но после ряда действий ограничения на размер кода будут обойдены), GCC, и провел сложные действия по настройке проекта Keil для работы с GCC (это и обошло ограничения и позволило скомпилировать прошивку). Инструкция <strong data-nd-pair-src=\"**\">baseflight_howto_0r2.pdf</strong> в архивах в теме <a href=\"http://www.fpv-treff.de/viewtopic.php?f=18&t=3611\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"http://www.fpv-treff.de/viewtopic.php?f=18&t=3611\" target=\"_blank\" rel=\"nofollow noopener\">www.fpv-treff.de/viewtopic.php?f=18&t=3611</a>.</p>\n<p>Исходники Harakiri взял из репозитория GIT HarakiriWebstore1 или HarakiriWebstore2. В ней не работал сонар, GPS, и MultiWiiGUI глючила. Спустя неделю изматывающего массажа я понял, что это бета, а правильная версия должна браться из GIT TestCode3 (<a href=\"https://github.com/Crashpilot1000/TestCode3\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"https://github.com/Crashpilot1000/TestCode3\" target=\"_blank\" rel=\"nofollow noopener\">github.com/Crashpilot1000/TestCode3</a>). Дальше дело пошло - GUI ожил, GPS заработал, и даже в passthru режиме ловил спутники, но сонар (подключенный к входам RC7 и RC8) так и не заработал. Далее я понял, что сонар отключается при наклоне больше определенного угла (18 г.), а если не откалиброван аксель, то угол не определен. А еще потребовалось увеличение константы в drv_sonar.c, а то сонар через некоторое время отваливался:</p>\n<blockquote class=\"quote\"><div class=\"quote__content\">\n<p>if ((curT - calltime) > <strong data-nd-pair-src=\"**\">300000</strong>) disable = true; // Data stalled for ca. 300ms, disconnect error.</p>\n</div></blockquote>\n<p>на</p>\n<blockquote class=\"quote\"><div class=\"quote__content\">\n<p>if ((curT - calltime) > <strong data-nd-pair-src=\"**\">350000</strong>) disable = true; // Data stalled for ca. 300ms, disconnect error.</p>\n</div></blockquote>\n<p>До этого я поставил ферритовое кольцо на провод к сонару, но это не решило проблему.</p>\n<p>Отлаживая этот код, расширил CLI расширенной информацией про GPS и сонар в команде “status” и добавил команду “ret” для возврата к работе из CLI без перезагрузки. Вот только сонар отрубается от бездействия, пока прошивка находите в режиме CLI.</p>\n<p>Мои настройки Harakiri (mag_dec для Москвы):</p>\n<pre class=\"hljs\"><code>feature PPM\nfeature VBAT\nfeature GPS\nfeature SONAR\n\nset minthrottle=1150\nset mag_dec=105\nset gps_baudrate = 57600\nset gps_type = 1\nset snr_type = 1\nset snr_min = 20\nset snr_dbg = 1\n</code></pre>\n<p>**Харакири с OSD</p>\n<p>** Для прошивки OSD выбрал MW_OSD, т.к. она поддерживает режим Harakiri. Сначала как обычно взял не из того репозитория, и удивился, что OSD получает из Harakiri только часть инфы - например, настройки и углы, но не статусы датчиков, режим и arm/disarm. После пары дней расширенного массажа взял из правильного репозитория версию scarab-osd-1.4.2.10 (<a href=\"https://github.com/ShikOfTheRa/scarab-osd\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"https://github.com/ShikOfTheRa/scarab-osd\" target=\"_blank\" rel=\"nofollow noopener\">github.com/ShikOfTheRa/scarab-osd</a>), но там тоже это не работало. Еще денек глубокой отладки, и я нашел что в файле MW_OSD.ino вместо <strong data-nd-pair-src=\"**\">USE_BOXNAMES</strong> надо писать <strong data-nd-pair-src=\"**\">BOXNAMES</strong>. После этой замены все ожило и воспело. Тема об MW_OSD: <a href=\"http://www.multiwii.com/forum/viewtopic.php?f=8&t=4865\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"http://www.multiwii.com/forum/viewtopic.php?f=8&t=4865\" target=\"_blank\" rel=\"nofollow noopener\">www.multiwii.com/forum/viewtopic.php?f=8&t=4865</a></p>\n<p>Программа настройки MW_OSD не запускалась из-за каких-то разногласий с Oracle Java, и если и запускалась, то очень долго опрашивала порты в Serial.list(). Эта задержка связана с реализаций Bluetooth портов под Windows, когда вызываешь их функцию драйвера GetName, драйвер медитирует полминуты. Т.к. портов много, все замирает. Пришлось передавать нужный порт из командной строки и я поменял MW_OSD_GUI.java и сделал батники для ее компиляции в обход Processing, и запуска, заодно примирив ее с Oracle Java.<br>\nБатники кладуться в .\\scarab-osd-1.4.2.10\\MW_OSD_GUI\\application.windows32\\</p>\n<p>Сборка (build.MW_OSD_GUI.bat):</p>\n<pre class=\"hljs\"><code>set javahome=C:\\Program Files (x86)\\Java\\jdk1.7.0_45\\bin\\\n\nset 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\n"%javahome%\\javac.exe" -classpath %p% -verbose source\\*.java\n\nif exist lib\\MW_OSD_GUI1.jar del lib\\MW_OSD_GUI1.jar\n"%javahome%\\jar.exe" -cvfm lib\\MW_OSD_GUI1.jar META-INF\\MANIFEST.MF -C source/ source/*.class source/*$*$*.class\ndel source\\*.class\n</code></pre>\n<p>Запуск (OSD_GUI.bat):</p>\n<pre class=\"hljs\"><code>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\n\nset path=C:\\Andrey\\Arduino.1.5.6.2\\java\\bin;%path%\njava -Djava.library.path=lib -cp %p% MW_OSD_GUI %*\n</code></pre>\n<p>Запуск редактора font’ов (CharEdit.bat):</p>\n<pre class=\"hljs\"><code>C:\\Andrey\\Arduino.1.5.6.2\\java\\bin\\java.exe -verbose -jar data\\MAX7456Charwizard.jar\n</code></pre>\n<p><strong data-nd-pair-src=\"**\">Можно ставить на квадрик и крутить PIDы! <span class=\"emoji emoji-wink\" data-nd-emoji-src=\":wink:\">😉</span></strong></p>\n","user":"41b8a4ac3df9550077792e83","ts":"2015-08-08T19:44:24.000Z","st":1,"cache":{"comment_count":21,"last_comment":"56016ff2997073007712b408","last_comment_hid":21,"last_ts":"2015-09-22T15:12:50.000Z","last_user":"41b8a4ac3df9550077792e83"},"views":3280,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}