👌

ArduPilotログ解析:CMD と MAVC の正しい読み解き方

に公開

ArduCopter 4.5.x の DataFlash ログを解析していると、CMDMAVC という似たようなレコードが登場します。しかしこの2つは役割が根本的に異なっています。
CMD は Mission Planner で設定した ミッションの計画情報(Waypoints / DO / Condition) を記録した静的なデータで、
MAVC は飛行中にautopilotが 実際に受信したコマンド(MODE変更・速度変更・GCSの要求など) を記録した動的データです。
本記事では、両者の違いと読み方を体系的に整理します。
ちなみにこの二つのパラメータは、まだweb版のlog viewerだと出てこないです。まだ対応していないのかもしれませんが、そのうち対応してくれると思います。
今回はmission plannerのLog Browserを使用しています。

CMD(Mission Command)とは何か?

CMD は「ミッションに書かれている内容そのもの」をログ化したものです。
Mission Planner の「PLAN」で作成する WP / DO / Condition といった 計画データ(静的情報) がそのまま記録されます。

CMD の主なフィールド

フィールド 内容
TimeUS 記録時刻
CTot ミッション全体のコマンド数
CNum この行のインデックス(WP番号)
CId MAV_CMD 番号(ミッション項目の種類)
Prm1〜4 param1〜4(Mission Planner の列と完全一致)
Lat / Lng / Alt param5〜7(位置系コマンドの場合)
Frame MAV_FRAME の番号(相対/絶対高度などを表す)

CId(= MAV_CMD)の意味

CMD の CId は MAVLink の MAV_CMD 番号そのもの です。

例:

  • 16 → MAV_CMD_NAV_WAYPOINT
  • 178 → MAV_CMD_DO_CHANGE_SPEED
  • 112 → MAV_CMD_CONDITION_DELAY

(全ID一覧は本文末のAppendixへ)

Prm1〜4 の意味

Mission Planner の「WP編集画面」で入力する各パラメータが、param1〜4 にそのまま対応します。

この部分です。
たとえば:

● WAYPOINT(CId=16)

Prm MissionPlanner名 意味
Prm1 Delay 到達後の待機時間
Prm2 - -
Prm3 - -
Prm4 - -

位置情報(param5〜7)は Lat/Lng/Alt フィールドに分離されます。

● DO_CHANGE_SPEED(CId=178)

Prm MissionPlanner名 意味
Prm1 Type 0:horizontal, 2:up, 3:down
Prm2 Speed m/s
Prm3 - -
Prm4 - -

Frame の意味

フレーム名 意味
0 GLOBAL AMSL(海抜)高度基準のWGS84座標
1 LOCAL_NED ローカル NED(North-East-Down)座標
2 MISSION ミッション用特別フレーム(位置なし系)
3 GLOBAL_RELATIVE_ALT ホームからの相対高度基準
10 GLOBAL_TERRAIN_ALT 地形高度基準

ログに 0 と 3 が混在するのは、
各ミッション行の Frame がもともと違うだけで、飛行中に座標系が変わるわけではありません。


MAVC(MAVLink Command)とは何か?

MAVC は autopilot が「実際に受信したコマンド」を記録するログ です。
ここが CMD と決定的に違います。

MAVC に記録されるもの

  • GCS(Mission Planner)が送ってきたコマンド
  • Companion Computer が送ってきた GUIDED 命令
  • Failsafe が内部で発行する RTL コマンド
  • Mission Planner が常時送信する REQUEST_MESSAGE 系
  • オートパイロットが内部的に実行した MODE切替

つまり、飛行中の「意思決定の履歴」そのもの です。

MAVC の主なフィールド

フィールド 内容
TimeUS 記録時刻
SS / SC Source System / Component(誰が送ったか)
TS / TC Target System / Component(宛先)
Fr CommandLong / CommandInt の種類
Cmd MAV_CMD 番号(実際に受信したコマンド)
P1〜P7 param1〜7(受信した MAVLinkコマンドそのもの)
X / Y / Z COMMAND_INT の座標
Res コマンドACK(成功/失敗/未対応など)
WL 状況フラグ

各フィールドの実務的な意味

● SS / SC(Source System / Source Component)

このコマンドを送ってきた側を示します。

  • SS=255 → Mission Planner(GCS)
  • SS=1 → 機体自身(Autopilot)
  • SS=8 → Companion Computer(Raspberry Pi など)
    「誰が何のコマンドを送ったか」を特定するのに便利です。

● TS / TC(Target System / Target Component)

コマンドの宛先です。
ほとんどの場合 TS=1, TC=1 で「機体本体」ですが、ジンバルやカメラを持つ機体では別 ID が出ることもあります。

● Fr(Frame / Format)

このコマンドが

  • 0 = COMMAND_LONG(param1〜7形式)
  • 2 = COMMAND_INT(座標X/Y/Z形式)
    のどちらで送られたかを示します。
    位置を伴うコマンドは多くが COMMAND_INT です。

● Cmd

実際に autopilot が受信した MAV_CMD の番号です。
CMD(ミッション計画)と細かい値が一致しないのは正常で、
飛行中のモード変更・Failsafe・GCSリクエストなどもここに記録されます。

● P1〜P7(param1〜7)

受信した MAV_CMD のパラメータそのものです。
Mission Planner の DO/CONDITION のパラメータ形式と同じ考え方で読み解けます。

● X / Y / Z(COMMAND_INT の座標)

Fr=2(COMMAND_INT)のときだけ利用される座標値です。

  • X:緯度 × 1e7
  • Y:経度 × 1e7
  • Z:高度
    Guided モードや Companion Computer から座標指令が来たときに使われます。

● Res(Result / ACK結果)

非常に重要なデバッグ指標です。
autopilot がコマンドに返した ACK結果(成功/失敗) が入ります。

意味
0 受理(ACCEPTED)
1 一時的に拒否(TEMPORARILY REJECTED)
2 拒否(DENIED)
3 未対応(UNSUPPORTED)
4 失敗(FAILED)
5 実行中(IN PROGRESS)

特に、

  • 速度変更が効かない理由
  • RTL が出た理由
  • GUIDED コマンドが無視された理由

などを解析するとき、この値が強力なヒントになります。

● WL(Was Loitering など状況フラグ)

内部的な状態を表すフラグが入ることがあるようです。

CMD と MAVC の違いをまとめると?

項目 CMD MAVC
役割 ミッションの計画データ 飛行中の命令の履歴
CId/Cmd の値 プランナーで設定したコマンド 実際に autopilot が受けたコマンド
Prm の意味 ミッションパラメータ MAVLink COMMAND のパラメータ
出力タイミング ミッションを読み込んだ瞬間のみ 飛行中ずっと

実務での使い分け

● CMD から分かること

  • ミッションがどう定義されていたか(計画)
  • 各WPの位置・パラメータ
  • DO/Condition の設定内容

● MAVC から分かること

  • 実際に autopilot がどんなコマンドを受信したか
  • モード変更の原因(外部か内部か)
  • ジオフェンス・Failsafe の発生
  • Companion Computer の挙動
  • DO_CHANGE_SPEED などが“いつ実行されたか”

まとめ

  • CMD と MAVC は役割がまったく違う
  • CMD は ミッションの計画
  • MAVC は 飛行中に autopilot が受けた命令の履歴
  • CId と Cmd の値が違うのは正常
  • param の内容も一致する必要はない
  • フライト解析では CMD は計画の確認用、MAVC は原因解析用 と使い分けると効果的

Appendix: コマンドID一覧

ID MAV_CMD 名 説明
0 MAV_CMD_NAV_GUIDED_ENABLE Guidedモードの有効化
1 MAV_CMD_NAV_GUIDED Guided移動(非推奨)
16 MAV_CMD_NAV_WAYPOINT ウェイポイント
17 MAV_CMD_NAV_LOITER_UNLIM 無限ロイター
18 MAV_CMD_NAV_LOITER_TURNS 指定回数ロイター
19 MAV_CMD_NAV_LOITER_TIME 指定時間ロイター
20 MAV_CMD_NAV_RETURN_TO_LAUNCH RTL
21 MAV_CMD_NAV_LAND 自動着陸
22 MAV_CMD_NAV_TAKEOFF 自動離陸
23 MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT 継続しつつ高度変更
24 MAV_CMD_NAV_LOITER_TO_ALT 指定高度までロイター
30 MAV_CMD_DO_FOLLOW Follow ターゲット
31 MAV_CMD_DO_FOLLOW_REPOSITION Follow位置更新
32 MAV_CMD_DO_ORBIT オービット
33 MAV_CMD_DO_SET_ROI_LOCATION ROI位置指定
34 MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET ROIオフセット
35 MAV_CMD_DO_SET_ROI_NONE ROI解除
36 MAV_CMD_DO_SET_ROI ROI設定(一般)
39 MAV_CMD_DO_DIGICAM_CONTROL カメラ制御
40 MAV_CMD_DO_MOUNT_CONFIGURE ジンバル設定
41 MAV_CMD_DO_MOUNT_CONTROL ジンバル角度制御
44 MAV_CMD_NAV_ROI ROI(旧形式)
80 MAV_CMD_NAV_SPLINE_WAYPOINT スプラインWP
81 MAV_CMD_NAV_VECTOR ベクター移動
82 MAV_CMD_NAV_ALTITUDE_WAIT 高度到達待ち
83 MAV_CMD_NAV_VTOL_TAKEOFF VTOL離陸
84 MAV_CMD_NAV_VTOL_LAND VTOL着陸
85 MAV_CMD_NAV_GUIDED_LIMITS Guided移動制限
95 MAV_CMD_NAV_LAST NAV終端
100 MAV_CMD_DO_SET_MODE モード変更
112 MAV_CMD_CONDITION_DELAY 待機
113 MAV_CMD_CONDITION_CHANGE_ALT 高度条件
114 MAV_CMD_CONDITION_DISTANCE 距離条件
115 MAV_CMD_CONDITION_YAW ヨー条件
121 MAV_CMD_DO_GRIPPER グリッパ制御
128 MAV_CMD_DO_AUTOTUNE_ENABLE オートチューン
175 MAV_CMD_DO_SET_CAM_TRIGG_DIST カメラ距離トリガ
176 MAV_CMD_DO_SET_MODE モード設定
177 MAV_CMD_DO_JUMP ミッションジャンプ
178 MAV_CMD_DO_CHANGE_SPEED 速度変更
179 MAV_CMD_DO_SET_HOME ホーム設定
180 MAV_CMD_DO_SET_PARAMETER パラメータ変更
181 MAV_CMD_DO_SET_RELAY リレー制御
182 MAV_CMD_DO_REPEAT_RELAY リレー繰返し
183 MAV_CMD_DO_SET_SERVO サーボ制御
184 MAV_CMD_DO_REPEAT_SERVO サーボ繰返し
185 MAV_CMD_DO_CONTROL_VIDEO ビデオ制御
186 MAV_CMD_DO_SET_ROI ROI設定
187 MAV_CMD_DO_DIGICAM_CONFIGURE カメラ設定
188 MAV_CMD_DO_DIGICAM_CONTROL カメラ制御(詳細版)
189 MAV_CMD_DO_MOUNT_CONTROL_QUAT クォータニオンジンバル
190 MAV_CMD_DO_SET_CAM_TRIGG_INTERVAL カメラ間隔
191 MAV_CMD_DO_SET_CAM_TRIGG_POLARITY カメラ極性
192 MAV_CMD_IMAGE_START_CAPTURE 静止画撮影開始
193 MAV_CMD_IMAGE_STOP_CAPTURE 静止画撮影停止
194 MAV_CMD_VIDEO_START_CAPTURE 動画撮影開始
195 MAV_CMD_VIDEO_STOP_CAPTURE 動画撮影停止
200 MAV_CMD_DO_AUX_FUNCTION AUX機能操作
201 MAV_CMD_DO_SET_ROI_SYSID ROI対象SYSID
202 MAV_CMD_DO_SET_ROI_LOCATION ROI位置
203 MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET ROIオフセット
204 MAV_CMD_DO_SET_ROI_NONE ROI解除
205 MAV_CMD_DO_SET_CAM_GIMBAL ジンバル設定
206 MAV_CMD_DO_MOTOR_TEST モーターテスト
207 MAV_CMD_DO_INVERTED_FLIGHT 反転飛行
208 MAV_CMD_DO_GRIPPER グリッパ(別形式)
209 MAV_CMD_DO_AUTOTUNE_ENABLE オートチューン
210 MAV_CMD_NAV_FENCE_RETURN_POINT フェンス返還ポイント
211 MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION フェンス(内側)
212 MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION フェンス(外側)
213 MAV_CMD_DO_PARACHUTE パラシュート
220 MAV_CMD_DO_SET_RESUME_REPEAT_DIST ミッション再開距離
221 MAV_CMD_DO_JUMP_TAG タグジャンプ制御
240 MAV_CMD_DO_TRIGGER_CONTROL トリガ制御
241 MAV_CMD_CAMERA_CONTROL カメラ制御
242 MAV_CMD_CAMERA_DO_DIGICAM_CONTROL カメラ制御(旧)
243 MAV_CMD_DO_TRIGGER_INTERVAL トリガ間隔
245 MAV_CMD_SET_CAMERA_ZOOM ズーム設定
246 MAV_CMD_SET_CAMERA_FOCUS フォーカス設定
252 MAV_CMD_OVERRIDE_GOTO 強制Goto
253 MAV_CMD_OBLIQUE_SURVEY 斜め撮影サーベイ
300 MAV_CMD_MISSION_START ミッション開始
301 MAV_CMD_COMPONENT_ARM_DISARM ARM/DISARM
302 MAV_CMD_GET_HOME_POSITION ホーム取得
303 MAV_CMD_START_RX_PAIR バインド
304 MAV_CMD_GET_POSITION 位置取得
305 MAV_CMD_SET_POSITION 位置設定
306 MAV_CMD_DO_ENGINE_CONTROL エンジン制御(Plane)
310 MAV_CMD_DO_SET_MISSION_CURRENT ミッション番号指定
331 MAV_CMD_DO_SET_ACTUATOR アクチュエータ複数制御
400 MAV_CMD_NAV_ROI ROI(旧互換)
500 MAV_CMD_ENUM_END 終端(識別用)
512 MAV_CMD_REQUEST_MESSAGE 状態メッセージ要求(MissionPlanner が高頻度送信)
513 MAV_CMD_REQUEST_PROTOCOL_VERSION MAVLinkバージョン要求
514 MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES FC機能照会
515 MAV_CMD_REQUEST_CAMERA_INFORMATION カメラ情報照会
516 MAV_CMD_REQUEST_CAMERA_SETTINGS カメラ設定照会
517 MAV_CMD_REQUEST_STORAGE_INFORMATION ストレージ照会
518 MAV_CMD_STORAGE_FORMAT ストレージフォーマット
519 MAV_CMD_REQUEST_CAMERA_CAPTURE_STATUS カメラ撮影状態要求
520 MAV_CMD_REQUEST_FLIGHT_INFORMATION 飛行情報照会
521 MAV_CMD_REQUEST_BATTERY_INFORMATION バッテリー情報照会
522 MAV_CMD_REQUEST_CAMERA_IMAGE_CAPTURE 撮影要求
523 MAV_CMD_REQUEST_VIDEO_STREAM_INFORMATION 映像ストリーム情報要求
524 MAV_CMD_REQUEST_VIDEO_STREAM_STATUS 映像ストリーム状態要求

参考リンク

Discussion