Как подружить APM 2.8 и MinimOSD (сложный случай)

Итак история. У пользователя Друг не подключалась minimOSD к APM2.8.
В форуме, как обычно, слали на RTFM и советовали выкинуть старье в мусорку. Но так как было сделано всё по инструкциям, было решено провести мозговой штурм. Вооружившись паяльником и терпением с одной стороны и тимвьюером, интернетом, и желанием разгадать загадку с другой мы приступили.

Железо:
APM 2.8 (ArduCopter 3.2.1)
MinimOSD v1.1

Начнем с диагноза:
Не работает OSD. То есть на экране из отображается окно с сообщением No INPUT DATA

Диагностика:

Проверка minimOSD:

Для начала прошиваем последней желаемой прошивкой. Из вариантов был MW OSD и MinimOSD-extra. Будем использовать последний. Инструкции по прошивке легко ищутся в интернете, но я пользовался официальной документацией.
Как раз в официальной документации прописано, что можно подать лог полёта на OSD тем самым эмулируя наличия полетного контроллера. Что и было сделано. Показания на экране OSD меняются. Значит OSD работает.

Проверка APM 2.8:

Подготовка:

  1. Отключаем USB кабель.
  2. Подключаем APM 2.8 (прошитый последней официальной прошивкой 3.2.1), а именно порт Telem к компьютеру через USB-TTL конвертер.
  3. Запускаем MissionPlanner соединяемся с APM указывая COM-порт конвертера и скорость 57600.
  4. Поверяем значения параметров, и меняем их на те, которые рекомендованы в официальной документации. Перегружаем APM. Проверяем, что значения сохраняются.
  5. Теперь заходим в Configuration-Planner и запоминаем/записываем путь Log Path. Там мы будут создаваться логи и там мы буем их искать.
  6. Закрываем MissionPlanner.

Создание лога:

  1. Отключаем провод TX от USB-TTL конвертера. Нам же надо записать реальный поток который будет идти на плату OSD. Должно остаться только два провода GND и RX.
  2. Заново запускаем MissionPlanner соединяемся с APM.
    MissionPlaner находит поток от APM и начинает запрашивать параметры. Но запросы до APM не доходят, так как проводка то TX у нас нет. Поэтому когда появляется окно с Getting Parameters нажимаем Cancel.
  3. Ждем минуту.
  4. Армим коптер.
  5. Ждем минуту покачивая коптер, чтобы в лог попали изменения положения.
  6. Дизармим коптер.
  7. Отключаемся от APM кнопкой Disconnect.
  8. Закрываем MissionPlanner.
    Таким образом мы сняли лог протокола MavLink который коптер шлет на OSD.

Теперь находим последний файл лога (нас интересует, который с расширением tlog), который находится в папке, путь до которой записали ранее + QUADROTOR (для квадрокоптеров, для самолета будет наверное другой)\<номер месяца>\
Я скопировал его на рабочий стол, чтобы не путаться.

Далее опять подключаем к USB-TTL нашу minimOSD. И опять открываем лог файл, но уже наш (который на рабочем столе) и отправляем его на OSD. Изображение на мониторе начало меняться. Значит поток данных правильный.

Получается интересная ситуация - поток mavlink c APM идет хорошо. Тот же поток на mininOSD отображается отлично. Но если соединить APM+minimOSD по боевой схеме - опять получим No INPUT DATA.

Решение проблемы:

Значит проблема где-то в области физики (скорее всего что-то с мультиплексором). Будем искать обходные пути.

И тут глаз падает на порт I2C, во всяком случае так написано на корпусе.

Если корпус снять, то на палате он обозначен как MUX /OSD/I2C/UART2.

Чтобы активировать порт UART2 на порту MUX (согласно официальной инструкции на APM 2.8) надо запаять перемычки на MUX_RX2 и MUX_TX2.

Что мы и делаем.

Однако и после запайки перемычек подключиться к APM через USB-TTL конвертер не получается.
И опять лезем в документацию. На этот раз в прошивку.
И находим интересный комментарий:

#if CONFIG_HAL_BOARD != HAL_BOARD_APM2
    // we have a 2nd serial port for telemetry on all boards except
    // APM2. We actually do have one on APM2 but it isn't necessary as
    // a MUX is used
    gcs[1].setup_uart(hal.uartC, map_baudrate(g.serial1_baud), 128, 128);
#endif

Приблизительный перевод такой “У нас есть второй порт для телеметрии на всех платах за исключением APM2, по правде говоря он и на ней тоже есть, но он не нужен, так как там MUX используется”

Начинаем разбираться.
На APM2.5 и APM2.6 действительно MUX по умолчанию используется как I2C.

Но у нас APM 2.8 и штатный I2C живет рядом с портом GPS.

Таким образом можно смело задействовать UART2 на разъеме MUX. Для это надо привести закоментировать условие. В итоге должно получится так:

//#if CONFIG_HAL_BOARD != HAL_BOARD_APM2
    // we have a 2nd serial port for telemetry on all boards except
    // APM2. We actually do have one on APM2 but it isn't necessary as
    // a MUX is used
    gcs[1].setup_uart(hal.uartC, map_baudrate(g.serial1_baud), 128, 128);
//#endif

И пересобрать прошивку по официальной инструкции.
Должен получится такой файлик ArduCopter.hex. Выложу его здесь:
ArduCopter_3.2.1_uart2.zip
Прошиваем его в APM через Mission Planner таким образом: Initial Setup -> Install Firmware -> Load custom firmware.

Далее сбрасываем APM в дефолт. Зачищаем EPROM. Опять вводим параметры согласно инструкции к minimOSD-extra.

И радуемся результату.

PS: Понимаю что получилась ода официальной документации, но именно там найдены все решения.

  • 3278
Comments
Можаефф

У меня было два АПМ2.8 - ОСД всегда работало штатно, без пересборки прошивки и таких долгих ухищрений.
Варианта там было два - нажать кнопку Enable OSD в Гуе, либо подключить параллельно с ОСД блютус.

Как людям удается придумать себе проблемы на ровном месте, всегда удивляет.

CZC

Если у вас все работало - прекрасно. Рад за вас. Но раз на раз не приходится.

Я рассказал свою историю.
Пробовали и то, и другое. Безрезультатно.

Проблемы никто себе не придумывал. Проблемы как раз решали.
Надеюсь что мое решение кому-то будет полезно.

Можаефф

У меня же работало, и я думаю у всех остальных тоже. Уже много лет как 2.8 в эксплуатации, и никто вашим путем не ходил. Это не заставляет спросить себя, как тогда работает у остальных?

CZC

Я поздравляю вас! Очень за вас рад!
И за всех остальных тоже!
Как здорОво, что у вас все сработало по нажатию кнопки!

Да, я действительно криворукий любитель искать себе проблемы.
Вы это хотели услышать? Ещё вопросы?

Alex135

не обращайте внимания Константин. Спасибо. В копилку знаний по миним осд закинул. В основной массе кто сталкивался с этой осд знают что все не просто так с ней. Подводных камней много тем более когда впервые сталкиваешься с этим(заливка прошивки, шрифты и т.д.) Тем более это Ваш дневник.

Dok555

Большущее спасибо за информацию!

Dynamitry

Этот осд очень люблю
Вообще была на старых контроллерах проблема активации ОСД, лечилась так:

Для этого идем в вкладку CONFIG/TUNING > Full Parameter List, листаем до буквы S, и проверяем (или исправляем) значения параметров:

SR0_EXT_STAT = 2
SR0_EXTRA1 = 5
SR0_EXTRA2 = 2
SR0_EXTRA3 = 3
SR0_POSITION = 2
SR0_RAW_SENS = 2
SR0_RC_CHAN = 5

CZC

Эти параметры тоже пробовали (они прописаны в официальной документации к MinimOSD-extra).
Но там проблема была именно в железе.
Задним числом понимаю, что можно было бы просто прогнать через ардуинку, копируя данные порта из полетника в порт OSD, но во первых её не было, а во вторых это лишнее промежуточной звено. А нам чем проще - тем надежнее.

keks_007

У меня подобная ситуация. Только ОСД работает, и параметры получает. А вот ни Блютус модуль,ни ttl адаптер при подключении к апм данных не выводят. Не помешал бы еще один сериал портт. Но влом все перепрошивать и заново настраивать