コンテンツにスキップ

robot_packetの意味定義について

前提

このマイコンに対して指令を送信するAI側(AI PC→CM4→UART経由でデータが送られてくる)による、外部センサーデータと指令値。 モード選択スイッチ(とエラーかどうか)によって決定されるmainmodeが、MAIN_MODE_MANUAL_CONTROLもしくはMAIN_MODE_FULL_AI_CONTROLのとき、maintaskRun()で実行される動作を制御する。

設計思想

コード自体がAI(ROS2,C++)側と共通化されている。 影響範囲が非常に広域になるので、極力変更を加えず、互換性を維持する。 ControlModeとmode_argsにより、指令コマンドタイプに拡張性を持たせている。 通信経路としては、PC→(WiFi)→CM4→(UART)→STM32で、UART 1Mbpsが最も強いパケットサイズ制約条件となっている。 基本的にはCM4側はWiFi→UART変換を透過するのみで、中身を変更しない

RobotCommandV2

0xFEで固定のヘッダ。UARTラインでのパケットヘッダに使用。

check_counter

AI側が指令を出すたびに+1する。FW側で、受信したパケットが正しく更新されているかを確認したり、受信安定性を評価するために使用

vision_global_pos[2]

外部グローバルカメラ座標系のロボット座標[X,Y]。単位はm。 ただし、レイテンシが大きい・不安定であるため、参照方法には注意が必要。

vision_global_theta

外部グローバルカメラ座標系のロボットの現在角度。単位はrad。 レイテンシが大きく不安定なので、特に旋回中の参照には注意が必要。

is_vision_available

外部グローバルカメラで、ロボットが見えているかどうか カメラからロボットが見えていない場合、暴走を防ぐために一定時間以上見えていない場合は出力をロボット側でも停止しなければならない。 一方、瞬間的な外部カメラからのロストにおいては、ロボット側オドメトリを使うことで、安全性を保ちながらある程度動くことが可能なので、一定の条件下では許可される。

target_global_theta

外部グローバルカメラ座標系のロボットのターゲット角度。単位はrad。

kick_power

キッカー出力

dribble_power

ドリブラー出力。

enable_chip

キッカー(ストレートorチップ)の選択。 デフォルトはストレートキックで、これが有効の場合はチップキッカーを使用

stop_emergency

停止コマンド。 robot_packet内のあらゆる指令に優先して走行出力を停止させる。

acceleration_limit

機体が出すことを期待されている並進加速度の上限。単位はm/s²。 ただし、機体側でより高い加速度を勝手に使うことは許容されている。

linear_velocity_limit

機体が出していい並進速度の上限。単位はm/s。 ただし、今は使われていない

angular_velocity_limit

機体が出していい角速度の上限。単位はrad/s。現行FWでは角度制御が生成する目標角速度を制限する。 ボールを保持しているときにゆっくり動きたい時に下げたり、 不必要に旋回してほしくないときに0にしたりする

latency_time_ms

外部グローバルカメラで得られる情報がどれだけ遅延しているかの情報 走行中のオドメトリ計算で、得られた座標をもとに現在位置を推定する際に使用。 環境によって遅延時間が異なるため可変

elapsed_time_ms_since_last_vision

直近のグローバルカメラで得られた"この機体の"情報がどの程度過去のものか latency_time_ms同様に、走行中のオドメトリ計算で、得られた座標をもとに現在位置を推定する際に使用。 現行FWの位置補償に使う時間は、latency_time_ms + elapsed_time_ms_since_last_vision + ai_cmd_delta_time。最後の項はFWがcheck_counterの変化を最後に検出してからの経過時間(ms)。先頭2項は加算されるため、同じ遅延を二重計上しないようAI側の基準時刻を合わせる必要がある。

control_mode

以下モードの解釈用。 現状、POLAR_VELOCITY_TARGET_MODE=3のみ使用

PolarVelocityModeArgs

極座標指示での速度指令モード グローバル座標系の速度を大きさと方向で指定する。

target_global_velocity_r

目標速度の大きさ。単位はm/s。

target_global_velocity_theta

グローバル座標系での移動方向。単位はrad。