Модуль двигательной активности

_images/module_bno055.jpg

Технические характеристики

  • Размеры: TBA
  • Напряжение питания: TBA
  • Потребляемые ток, пиковый: TBA

Подключение к головному устройству

Подключение к головному устройству осуществляется по протоколу RS-485 через разъем SH04, расположенному на плате. Распиновка приведена на рисунке ниже.

_images/sh04w.png

Выполняемые команды

Команда на получение углов Эйлера

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x30 Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x30 Параметр для действия. 0x30 - Данные углов Эйлера.
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x0B Котрольная сумма пакета - младший байт суммы всех байтов пакета

Формат ответа

Длина ответа - 20 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головной модуль
2 type uint8_t 0x30 0x30 - Данные углов Эйлера
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 heading int16_t 0xXX

Один из углов Эйлера - рысканье. 1 градус = 16 LSB

Порядок байт - little endian

8 0xXX
9 roll int16_t 0xXX

Один из углов Эйлера - крен. 1 градус = 16 LSB

Порядок байт - little endian

10 0xXX
11 pitch int16_t 0xXX

Один из углов Эйлера - тангаж. 1 градус = 16 LSB

Порядок байт - little endian

12 0xXX
13 lin_acc_x int16_t 0xXX

Линейное ускорение по оси X. 1 м/с^2 = 100 LSB

Порядок байт - little endian

14 0xXX
15 lin_acc_y int16_t 0xXX

Линейное ускорение по оси Y. 1 м/с^2 = 100 LSB

Порядок байт - little endian

16 0xXX
17 lin_acc_z int16_t 0xXX

Линейное ускорение по оси Z. 1 м/с^2 = 100 LSB

Порядок байт - little endian

18 0xXX
19 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета

Имплементация значений

  • Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
  • Поле heading содержит значение одного из углов Эйлера - рысканье. Диапазон значений: от 0° до 360°. (поворот по часовой стрелке увеличивает значение)
  • Поле roll содержит значение одного из углов Эйлера - крен. Диапазон значений: от -90° до 90°. (увеличивается с увеличинеим наклона)
  • Поле pitch содержит значение одного из углов Эйлера - тангаж. Диапазон значений: от -180° до 180° (поворот по часовой стрелке увеличивает значение)
  • Поля lin_acc_x, lin_acc_y, lin_acc_z содержат значения линейного ускорения по соответствующим осям

Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 30 01 00 30 00 00 0B

Ответ: AA 01 30 FA 27 00 00 00 00 C3 FE 98 FF 01 00 FE FF 00 00 52

Интерпретация ответа:

  • тип пакета - данные углов Эйлера
  • systime = 00 00 27 FA = 10 234 мc,
  • heading = 00 00 = 0°,
  • roll = FE C3 = -19.8125°,
  • pitch = FF 98 = -6.5°,
  • acc_x = 00 01 = 0.01 м/с2,
  • acc_y = FF FE = -0.02 м/с2,
  • acc_z = 00 00 = 0 м/с2.

Команда на получение кватернионов

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x30 Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x31 Параметр для действия. 0x40 - Данные кватернионов
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x0C Контрольная сумма пакета - младший байт суммы всех байтов пакета

Формат ответа

Длина ответа - 16 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головной модуль
2 type uint8_t 0x31 0x31 - Данные кватернионов
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 w int16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

8 0xXX
9 x int16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

10 0xXX
11 y int16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

12 0xXX
13 z int16_t 0xXX

Значение кватерниона. 1 кватернион = 2^14 LSB

Порядок байт - little endian

14 0xXX
15 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета

Имплементация значений

  • Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
  • Поля w, x, y, z содержат значения кватернионов

Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 30 01 00 31 00 00 0C

Ответ: AA 01 31 A1 0E 00 00 F5 3E 8A 03 F4 0A FF FF 47

Интерпретация ответа:

  • тип пакета - данные кватерниона
  • systime = 00 00 0E A1 = 3745 мс,
  • w = 3E F5 = 0.98370361328125,
  • x = 03 8A = 0.0552978515625,
  • y = 0A F4 = 0.171142578125,
  • z = FF FF = -0.00006103515625.

Команда на получение сырых данных

Формат запроса

Длина запроса - 8 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x30 Идентификатор получателя пакета. 0x30 - получатель - Датчик ДА
2 type uint8_t 0x01 Тип пакета. 0x01 - пакет команды управления
3 action uint8_t 0x00 Действие, которое необходимо выполнить. 0x00 - Чтение
4 param uint8_t 0x32 Параметр для действия. 0x32 - Сырые данные
5 data uint8_t 0x00 Данные для действия. 0x00 - нет данных
6 payload uint8_t 0x00 Дополнительные данные для действия. 0x00 - нет данных
7 checksum uint8_t 0x0D Контрольная сумма пакета - младший байт суммы всех байтов пакета

Формат ответа

Длина ответа - 26 байт.

Байт # Поле Тип Значение Описание
0 start_byte uint8_t 0xAA Стартовый байт. Всегда равен 0xAA
1 id uint8_t 0x01 Идентификатор получателя пакета 0x01 - получатель - Головной модуль
2 type uint8_t 0x32 0x32 - Сырые данные
3 systime uint32_t 0xXX

Системное время модуля в миллисекундах.

Порядок байт - little endian

4 0xXX
5 0xXX
6 0xXX
7 acc_x int16_t 0xXX

Данные акселерометра по оси X. 1 м/с^2 = 100 LSB

Порядок байт - little endian

8 0xXX
9 acc_y int16_t 0xXX

Данные акселерометра по оси Y. 1 м/с^2 = 100 LSB

Порядок байт - little endian

10 0xXX
11 acc_z int16_t 0xXX

Данные акселерометра по оси Z. 1 м/с^2 = 100 LSB

Порядок байт - little endian

12 0xXX
13 mag_x int16_t 0xXX

Данные магнитометра по оси X. 1 мкТ = 16 LSB

Порядок байт - little endian

14 0xXX
15 mag_y int16_t 0xXX

Данные магнитометра по оси Y. 1 мкТ = 16 LSB

Порядок байт - little endian

16 0xXX
17 mag_z int16_t 0xXX

Данные магнитометра по оси Z. 1 мкТ = 16 LSB

Порядок байт - little endian

18 0xXX
19 gyro_x int16_t 0xXX

Данные гироскопа по оси X. 1 Dps = 16 LSB

Порядок байт - little endian

20 0xXX
21 gyro_y int16_t 0xXX

Данные гироскопа по оси Y. 1 Dps = 16 LSB

Порядок байт - little endian

22 0xXX
23 gyro_z int16_t 0xXX

Данные гироскопа по оси Z. 1 Dps = 16 LSB

Порядок байт - little endian

24 0xXX
25 checksum uint8_t 0xXX Контрольная сумма пакета - младший байт суммы всех байтов пакета

Имплементация значений

  • Поле systime содержит значение системного времени модуля с дискретностью миллисекунда
  • Поля acc_x, acc_y, acc_z содержат данные акселерометра по соответствующим осям
  • Поля mag_x, mag_y, mag_z содержат данные магнитометра по соответствующим осям
  • Поля gyro_x, gyro_y, gyro_z содержат данные гироскопа по соответствующим осям

Примеры

Все команды приведены в HEX-формате без указания 0x

Запрос: AA 30 01 00 32 00 00 0D

Ответ: AA 01 32 3F 0C 00 00 B7 FE 69 00 99 03 D0 00 C4 FF 77 FE FF FF 01 00 01 00 EA

Интерпретация ответа:

  • тип пакета - сырые данные ДА
  • systime = 00 00 0C 3F = 3135 мс,
  • acc_x = FE B7 = -3.29 м/с^2,
  • acc_y = 00 69 = 1.05 м/с^2,
  • acc_z = 03 99 = 9.21 м/с^2,
  • mag_x = 00 D0 = 13 1 мкТ,
  • mag_y = FF C4 = -3.75 1 мкТ,
  • mag_z = FE 77 = -24.5625 1 мкТ,
  • gyro_x = FF FF = -0.0625 Dps,
  • gyro_y = 00 01 = 0.0625 Dps,
  • gyro_z = 00 01 = 0.0625 Dps.