ArduPilotログ解析:CMD と MAVC の正しい読み解き方
ArduCopter 4.5.x の DataFlash ログを解析していると、CMD と MAVC という似たようなレコードが登場します。しかしこの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 | 映像ストリーム状態要求 |
参考リンク
- MAVLink Common Message Set(MAV_CMD の定義元)
https://mavlink.io/en/messages/common.html - ArduPilot Mission Commands 仕様(Copter/Plane/Rover 共通)
https://ardupilot.org/plane/docs/common-mavlink-mission-command-messages-mav_cmd.html - MAVLink Command Protocol(MAV_CMD 動作仕様)
https://mavlink.io/en/services/command.html
Discussion