SUSTAINA-OP / IMU-Measurement-and-Transmission-Module

Module to send IMU sensor values through Arduino with USB and RS-485 I/F
Other
3 stars 0 forks source link

パケット構成について考える #7

Open MasatoKubotera opened 1 year ago

MasatoKubotera commented 1 year ago

SoMとの通信は,現状特定の文字(1byte)に応じて応答する.

応答の種類は,現時点(2023/10/19)時点で以下の通りである. 送信文字:'B' or 'b' - biasの設定 送信文字:'T' or 't' - biasおよび温度の取得 送信文字:その他 - 加速度,ジャイロ,温度の取得

上記の構成を,ヘッダおよびチェックサムを含めた,アクチュエータに似たコマンド体系にする.

このときに,特定のコマンドに対してはセンサ取得を挟まずになにか返すようにする(例:バージョンの応答など)

MasatoKubotera commented 1 year ago

コマンド体系(データ構造・フォーマット)

シングルボードコンピュータからの送信フォーマット

byte item contents
1 header 0xFE
1 header 0xFE
1 command -
2 CRC16 CRC16 from header to command

IMUからの応答フォーマット例

byte item contents
1 header 0xFE
1 header 0xFE
1 command Same Command as sent Command
1 packet length Length from header to CRC16
1 error -
n data -
2 CRC16 CRC16 from header to command

参考: PMX https://www.kondokagaku.jp/wp_mn/archives/1144#i-16 DYNAMIXEL Communiation Protocol 2.0 https://www.besttechnology.co.jp/modules/knowledge/?DYNAMIXEL%20Communiation%20Protocol%202.0#f7c5cc11

MasatoKubotera commented 1 year ago

コマンド

MasatoKubotera commented 1 year ago
command type response process
0xa0 read 【float*7】acceleration (x, y, z), gyro (x, y, z), temperature
0xa1 read 【float*3】acceleration (x, y, z)
0xa2 read 【float*3】gyro (x, y, z)
0xa3 read 【float*1】temperature
0xa4 read 【float*3】estimated 3-axis gyro bias [dps] Estimates the gyro bias and reads it. The bias is not updated.
0xa5 read 【float*3】 3-axis gyro bias [dps] in non-volatile flash memory Reads gyro bias stored in non-volatile flash memory.
0xa6 read 【float*3】Currently adapted 3-axis gyro bias [dps] Reads currently adapted gyro bias.
0xb0 setting 【float*3】estimated 3-axis gyro bias [dps] Estimates the gyro bias, adapt the estimated bias, store it in non-volatile flash memory
0xc0 setting restarts communication with the ICM42688
0xd0 read 【uint8_t*1】firmware version
MasatoKubotera commented 1 year ago

CRC16の計算

KONDO PMXシリーズに準拠 https://kondo-robot.com/faq/pmx-library-for-python

MasatoKubotera commented 1 year ago

メモ:シングルボードコンピュータ側から指定したジャイロバイアス値を適応し使用のみ,およびArduino側のストレージに保存ができるようにする.

※常用コマンドではなく,完全なオプションとして使用することが前提

MasatoKubotera commented 12 months ago

検証バージョンのファームウェアをリリースしました.

https://github.com/SUSTAINA-OP/IMU-Measurement-and-Transmission-Module/tree/fdd1aa3bdd7b03befb92f92156f7a4745ce25113

MasatoKubotera commented 12 months ago

@AD58-3104 マスタースレーブの方で,IMUモジュールと接続するときに,ファームウェアバージョンの確認とバイアスオフセットが0ではないことを確認してください.

MasatoKubotera commented 12 months ago

現状のコマンドおよびパケット構成

送信(マスタ→スレーブ)

0xA0: 加速度,ジャイロ,温度取得 0xA1: 加速度取得 0xA2: ジャイロ取得 0xA3: 温度取得 0xA4: 新規推定バイアス取得 0xA5: 保存済みバイアス取得 0xA6: 適応済みバイアス取得

0xB0: ジャイロバイアス更新

0xC0: ファームウェアバージョン取得

応答(スレーブ→マスタ)

エラー

受信パケットのCRCエラー:エラーステータス0xA0

0xA or 0xB

0xA0: データ(加速度x,加速度y,加速度z,ジャイロx,ジャイロy,ジャイロz,温度) 0xA1: データ(加速度x,加速度y,加速度z) 0xA2: データ(ジャイロx,ジャイロy,ジャイロz) 0xA3: データ(温度) 0xA4: データ(ジャイロバイアスx,ジャイロバイアスy,ジャイロバイアスz) 0xA5: データ(ジャイロバイアスx,ジャイロバイアスy,ジャイロバイアスz) 0xA6: データ(ジャイロバイアスx,ジャイロバイアスy,ジャイロバイアスz)

0xB0: データ(ジャイロバイアスx,ジャイロバイアスy,ジャイロバイアスz)

0xC*

0xC0: データ(ファームウェアバージョン)

MasatoKubotera commented 12 months ago

パケット時期更新内容

https://github.com/SUSTAINA-OP/IMU-Measurement-and-Transmission-Module/issues/7#issuecomment-1794696805

MasatoKubotera commented 11 months ago

ファームウェアを更新(Firmware vasion: 0x01):https://github.com/SUSTAINA-OP/IMU-Measurement-and-Transmission-Module/commit/06d19eb41482d779a32754acb59068a29abd6d34

マスターからのデータ送信,エラーステータスを実装.

従来のファームウェア(Firmware vasion: 0x00)とは互換性がないので要注意.

command table

Command Command description Txdata on the master side Packet Configuration Txpacket length Processing on the Slave Side Txdata on the Slave Side Packet Configuration Txpacket length
0xA0 gets the estimated 3-axis accel, 3-axis gyro, temp - master-01 6 reads the most current data from IMU 3-axis accel, 3-axis gyro, temp 35 slave-01
0xA1 gets the estimated 3-axis accel - master-01 6 reads the most current data from IMU 3-axis accel 19 slave-01
0xA2 gets the estimated 3-axis gyro - master-01 6 reads the most current data from IMU 3-axis gyro 19 slave-01
0xA3 gets the estimated 3-axis temp - master-01 6 reads the most current data from IMU temp 11 slave-01
0xA4 gets the estimated 3-axis gyro-bias - master-01 6 estimates the gyro biases 3-axis gyro-bias 19 slave-01
0xA5 gets the stored 3-axis gyro-bias in flash storage - master-01 6 - 3-axis gyro-bias 19 slave-01
0xA6 gets the adapted 3-axis gyro-bias - master-01 6 - 3-axis gyro-bias 19 slave-01
0xB0 estimates and adapts to 3-axis gyro-bias - master-01 6 estimates and adapts to gyro biases 3-axis gyro-bias 19 slave-01
0xB1 adapts the specified 3-axis gyro-bias and store it in flash storage 3-axis gyro-bias master-02 18 adapt the specified 3-axis gyro-bias and store it in flash storage 3-axis gyro-bias 19 slave-01
0xB2 adapts the specified 3-axis gyro-bias 3-axis gyro-bias master-02 18 adapt the specified 3-axis gyro-bias 3-axis gyro-bias 19 slave-01
0xD0 gets the firmware version - master-01 6 - firmware-version 8 slave-02

error status

Bit Error Description Details
0 - -
1 CRC error CRC calculation result not match the received CRC
2 IMU connection error IMU is not connected.
3 IMU response error response error in estimating
4 unsupported command error process corresponding to the command is not defined
5 command processing error exception error when processing against a command
6 - -
7 - -

The units for sensor values are as follows.

Note

example of packet configuration from the master

master-01: header + command + packet length + CRC

master-02: header + command + packet length + float data + CRC

example of packet configuration from the slave

slave-01: header + command + packet length + error status + float data + CRC

slave-02: header + command + packet length + error status + byte data + CRC

slave-03: header + command + packet length + error status + CRC

MasatoKubotera commented 11 months ago

シリアルポートを開くとArduino側で初期化処理が入る. そのため,Arduno内部でも最低1500 msの処理時間が発生する.

MasatoKubotera commented 10 months ago

ファームウェア Ver. 1をリリースしました. https://github.com/SUSTAINA-OP/IMU-Measurement-and-Transmission-Module/releases/tag/ver.1

バイアスは,ArduinoボードのFlashStorageに書き込む方法とコンピュータボードに保管されたバイアスをArduinoボードに送信し使用する方法がある.