MavLink протокол получить данные

mr_smit

Хочу вытащить значение напряжения на аккумуляторе. Сохранил обмен что шлет мой APM 2.6. И не могу понять почему Message ID у многих посылок одинаковый 16 ?

FE 19 7D 01 01 16 00 00 00 00 32 01 03 01 42 41 54 54 5F 4D 4F 4E 49 54 4F 52 00 00 00 00 02 F9 82 þ.}…2…BATT_MONITOR…ù‚

FE 19 7E 01 01 16 00 00 80 BF 32 01 04 01 42 41 54 54 5F 56 4F 4C 54 5F 50 49 4E 00 00 00 02 CD 16 þ.~…€¿2…BATT_VOLT_PIN…Í

FE 19 7F 01 01 16 00 00 80 BF 32 01 05 01 42 41 54 54 5F 43 55 52 52 5F 50 49 4E 00 00 00 02 64 6D þ.…€¿2…BATT_CURR_PIN…

Я думал достаточно отловить начало посылки 0xFE, посмотреть какой параметр тут содержится (Message ID) и вытащить его. Как тогда разбирать эти посылки? Или надо парсить по ключевым словам (BATT_MONITOR и т.д.)?

mr_smit

Вот, например, ещё одна посылка:

FE 1A FA 01 01 1B 36 B6 AA 2C 00 00 00 00 DA FF D7 FE 40 FC 00 00 FF FF 00 00 14 00 FC FF 57 00 71 DA

Описания в самой строке уже нет. Какой параметр тут передается?

FE - заголовок
1A - длина (26 байт)
FA - порядковый номер посылки
01 - System ID
01 - Component ID
1B - Message ID

… 26 байт данных …

71 DA - контрольная сумма

Я не смог найти описания Message ID и как потом разобрать данные.

7 days later
WhiteWind

Дмитрий, рекомендую разобрать вот этот проект, там есть все, что нужно для разбора mavlink. Думал тоже задать вопрос по этой теме, но судя по количеству ответов тут, похоже без толку ((

emax

если поможет, то смотреть здесь pixhawk.ethz.ch/mavlink/

конкретно Ваш пакет:

RAW_IMU ( #27 )

The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging.
Field Name Type Description
time_usec uint64_t Timestamp (microseconds since UNIX epoch or microseconds since system boot)
xacc int16_t X acceleration (raw)
yacc int16_t Y acceleration (raw)
zacc int16_t Z acceleration (raw)
xgyro int16_t Angular speed around X axis (raw)
ygyro int16_t Angular speed around Y axis (raw)
zgyro int16_t Angular speed around Z axis (raw)
xmag int16_t X Magnetic field (raw)
ymag int16_t Y Magnetic field (raw)
zmag int16_t Z Magnetic field (raw)

bolodyag

Если еще актуально…
Посылки что вы отлавливали с message id 0x16 (PARAM_VALUE) - идут только в начале, при загрузке (около 300) и содержат настройки контроллера, одна переменная в одной посыле.

А напряжение содержится в message id 0x01 (SYS_STATUS)

У меня только .tlog с APM2.5 без подключенного “напряжеметра” имелся под рукой, поэтому там ~1 вольт и ~1 ампер выдает. Вот так выглядит:

FE 1F 88 01 01 01 - заголовок
2F FC 20 00
2F 9C 20 00
2F FC 20 00
CC 02
15 04 <- напряжение 1045 mV (байты задом наперед)
A0 03 <- ток 928 mA
00

9 months later
Glinco

Ребят, не поделитесь полным скетчем для загрузки в нано-ардуину?
Проблема у меня простая - новые прошивки АПМ не поддерживают вывод на пины А6 и A7 сигналов арминга и статуса GPS. А очень надо. Есть идея подключиться к телеметрийному выходу АПМ вместе с осд и прочитать пакеты автопилота, вытащить два статуса и мигать двумя светодиодами. Я понимаю, что получается жесткий зверинец, ноиначе я не знаю, как решить задачу.

emax

а вы уверены, что в мавлинке есть информация об арминге? в каком сообщении?

Glinco

Конечно есть. Раз автопилот отдает информацию в МП, а также на осд, то конечно она есть.
Систем стейт, по-моему. Там все есть.
Я поэтому и попросил поделиться кодом, чтобы не ходить по одним и тем же граблям.

WhiteWind
Glinco:

поделиться кодом

Дмитрий, вот тут рабочий пример. У меня, однако, он так и не завелся, может ардуинка с неверным кварцем или еще что…
github.com/ptsneves/FrSkyTelemetry

Glinco

Благодарю, буду разбираться. По делу, нужно обвернуть имеющиеся функции в класс со всеми пропертями и сделать совсем доступным для неопытных юзеров.
Я не прогал семь лет уже, сменил область деятельности. 😃

WhiteWind
Glinco:

сделать совсем доступным для неопытных юзеров

Надо, но всем влом. Я вообще мало опытен в программирование железа (больше веб-разработка), и я вечно спотыкаюсь. В итоге у меня не получилось даже завести этот пример, даже части его. Я уже не помню всего, но там такая мистика была, что даже не смешно уже было. Я плюнул и забил на переписывание на arduino nano, пользуюсь на своем квадрике Teensy, где все заводится и работает.

emax

Хорошо, попробую вам помочь, напишу индикатор арминга и статуса GPS из мавлинка. Еще что нибудь добавить?

Glinco

Ооо, благодарю! Нет, это все что мне нужно! Остальное работает. Спасибо!!!