Main共通フィードバックパケット¶
MainからCM4、CM4からcrane・PCの生データデバッグツールへ渡す128バイトの契約を定義する。Orion向けのCM4送受信とPCデコーダがこの配置を使う。4WSは同じ配置を採用する設計で、MainのSPI通信とCM4からの配信は未実装である。
送信元と経路¶
OrionMain(STM32G474)のUARTからCM4へ送る。通信設定は基板の対外仕様、ネットワーク宛先はシステム構成を参照する。
OrionMainは制御周期の中で目標125 Hzに間引いて送信する。デバッグ操作による一時停止、FW更新、UART送信中などで送信できない場合があるため、受信側は固定周期の到着を保証として使わず、停止判定に従って鮮度を判定する。
CM4は検証済みフレームを生データmulticastとCM4内の位置制御用loopbackへ渡す。UARTの読み手とソケット構成はCM4ブリッジ実装に記載する。
パケット仕様¶
パケット長は 128 バイト固定です。
ヘッダ¶
0: 同期バイト0xAB1: 同期バイト0xEA2: CRC-8/ATM(byte 3..127 を対象)3:check_counter(Mainが受けた指令のcheck_counterをそのまま返す)
CRC-8/ATM のパラメータは多項式 0x07、初期値 0x00、入力・出力とも反転なし、最終 XOR 0x00 です。
計算範囲は **byte 3..127 の125バイト**で、同期バイトとbyte 2は含めません。
標準検査値は "123456789" → 0xF4 です。送信側は全ペイロードの確定後にbyte 2を書きます。
CM4は長さ・同期バイト・CRCを確認し、不正なパケットを位置制御にも再配信にも渡しません。
Main→CM4ではOrionMainと4WS Mainのどちらも同期値0xAB 0xEAを使います。CM4からPCへUDP multicastで送る際、4WSに限り転送コピーのbyte 1を0xEBに変更します。OrionのUDPコピーは0xAB 0xEAのままです。PCのデバッグツールはこの値で機体を判別し、同じペイロードデコーダを使います。同期バイトはCRC対象外なのでbyte 1の変更後もCRC値は有効です。4WSのUDP配信は未実装です。
byte 3 は指令の check_counter の反射です。mode 4 の位置制御経路では CM4 が check_counter を採番する
ので、ここを見れば「CM4 が出した指令がどこまで OrionMain に届いたか」が分かります
(詳細は 制御パケット を参照)。
これは実機だけの性質です。 シミュレータは自走カウンタを送ります
(シミュレータとの接続を参照)。
ペイロード¶
ヘッダの後、byte 4から下表の記述順に隙間なく配置します。各項目は表のバイト位置で扱います。
コア機能¶
| バイト | 項目 | 形式・意味 |
|---|---|---|
4 |
tx_cycle_count |
DMA送信登録成功ごとに1増えるuint8_t。送信完了・受信の確認ではない |
5..6 |
current_error_id |
little-endian uint16_t |
7..8 |
current_error_info |
little-endian uint16_t |
9..12 |
current_error_value |
little-endian IEEE754 float |
メイン基板¶
| バイト | 項目 | 形式 |
|---|---|---|
13..16 |
imu_yaw_deg |
little-endian IEEE754 float |
17..18 |
ball_detection[2] |
各1バイト |
19 |
ball_detection_extra |
1バイト。OrionMainでは未使用で0 |
20..23 |
diff_angle_deg |
little-endian IEEE754 float |
電源基板¶
| バイト | 項目 | 形式 |
|---|---|---|
24..27 |
battery_voltage |
little-endian IEEE754 float |
28 |
kick_state_div10 |
1バイト |
29 |
temp_fet |
1バイト |
30..31 |
temp_coil[2] |
各1バイト |
32..35 |
capacitor_boost_voltage |
little-endian IEEE754 float |
36..39 |
mouse_odom_x |
little-endian IEEE754 float |
40..43 |
mouse_odom_y |
little-endian IEEE754 float |
44..47 |
mouse_global_vel_x |
little-endian IEEE754 float |
48..51 |
mouse_global_vel_y |
little-endian IEEE754 float |
52..55 |
mouse_quality |
little-endian IEEE754 float |
モーター基板¶
| バイト | 項目 | 形式 |
|---|---|---|
56..59 |
motor_current_x10[4] |
各1バイト、電流の10倍 |
60..63 |
temp_motor[4] |
各1バイト、駆動モーター温度 [°C] |
64..67 |
output_vel_x |
little-endian IEEE754 float |
68..71 |
output_vel_y |
little-endian IEEE754 float |
72..75 |
motor_feedback_0 |
little-endian IEEE754 float、回転数 [rps] |
76..79 |
motor_feedback_1 |
little-endian IEEE754 float、回転数 [rps] |
80..83 |
motor_feedback_2 |
little-endian IEEE754 float、回転数 [rps] |
84..87 |
motor_feedback_3 |
little-endian IEEE754 float、回転数 [rps] |
88..91 |
local_odom_speed_mvf_x |
little-endian IEEE754 float |
92..95 |
local_odom_speed_mvf_y |
little-endian IEEE754 float |
96..99 |
local_odom_speed_mvf_w |
little-endian IEEE754 float |
100..107 |
steering_angle[4] |
各2バイト、ステア現在角度 [rad] |
108..111 |
temp_steering_motor[4] |
各1バイト、ステアモーター温度 [°C] |
steering_angle[0..3]は輪番号順に各2バイトを上位バイトから格納します。
符号化範囲は±10π radで、mode 5の設計案の操舵角と同じ2バイト表現です。
temp_steering_motor[0..3]の輪番号も操舵角と対応させます。
OrionMainはステアを搭載しないため、各角度を0 radの符号化値0x7FFF、各ステアモーター温度を0として送ります。
制御¶
| バイト | 項目 | 形式 |
|---|---|---|
112..115 |
vision_based_position_x |
little-endian IEEE754 float |
116..119 |
vision_based_position_y |
little-endian IEEE754 float |
120..123 |
global_odom_speed_x |
little-endian IEEE754 float |
124..127 |
global_odom_speed_y |
little-endian IEEE754 float |
byte 4..127はすべて上表のフィールドに割り当てます。
FW更新ゲートウェイ動作中は通常のfeedback送信を停止します。更新プロトコルの応答と、独立した16バイトのFWRP応答フレームはこの128バイト配置に格納しません。更新の経路はMCU更新を参照してください。
CM4のローカルカメラ情報は、このfeedbackパケットとは別の経路で受けます。形式はCM4カメラ実装を参照してください。
受信側の契約¶
- CM4の位置制御と生データ再配信は、長さ・同期・CRCが正しいフレームだけを採用する。位置制御は位置のX・Yが有限であることも確認する。不正フレームで受信鮮度を更新しない。
- PCデバッグツールはOrion/4WSのUDP同期値を判別して共通配置を復号する。CRC不一致は診断結果として表示し、CM4の制御経路のように一律破棄する扱いではない。
- 操舵角の各2バイトは上位バイト先行で、
0xFFFFを無効値として拒否する。他の整数・floatのlittle-endianと区別する。 - ボールセンサは
ball_detection[2]とball_detection_extraである。送信サイクルカウンタをセンサ値として読まない。 - 稼働中のFWゲートウェイは通常のfeedbackを停止する。独立した
FWRP応答はこの128バイト配置として復号しない。
シミュレータとの接続¶
simulator-cliもこの配置とCRCを生成する必要がある。CRCを定数で代用した出力はCM4で受け付けない。シミュレータのbyte 3は自走カウンタであり、指令到達の反射として使わない。位置・速度の更新源の違いと接続条件はシミュレーション連携を参照する。
実装と運用の参照先¶
- CM4:
cm4/bridge/robot_feedback_packet.h、forward_robot_feedback.cpp、forward_ai_cmd_v2.cpp。 - PC:
host/lib/feedback/packet.py、receiver.py。 - 受信・表示ツール
- 非走行での確認手順
- CM4共通状態パケット案(未実装)