INERTIAL GUIDE
IMUの座標系と取付変換|CV7のSensor Frame・Vehicle Frame・NED/ENU
IMUのSensor Frame、Vehicle Frame、NED/ENUを整理し、3DM-CV7の取付変換、符号、二重補正を防ぐ考え方を解説します。
IMUのデータを装置やロボットへ組み込むときは、センサー自身の軸、車体・装置の軸、地球基準の座標系を分けて考える必要があります。
軸を取り違えると、値の大きさが正しくても方向や符号が間違います。また、センサー内部とアプリケーションの両方で同じ取付変換を行う「二重補正」にも注意が必要です。
このページでは3DM-CV7を中心に、取付変換とNED/ENUの考え方を整理します。
このページでできること
- Sensor Frame / Vehicle Frame / World Frameを区別する
- Sensor to Vehicle Transformの向きを理解する
- Euler角とDCMを扱うときの注意点を確認する
- 二重補正を防ぐ
- NED / ENU / ROS機体軸の違いを整理する
- 実機で軸と符号を確認する
1. 3種類の座標系を分ける
Sensor Frame
センサー筐体に固定された座標系です。
CV7本体に定義されたX/Y/Z軸を基準に、センサー出力や一部のバイアス値が表されます。
Vehicle Frame
装置、車両、ロボットなどに固定した座標系です。
CV7の標準Vehicle Frameは、
- X:前
- Y:右
- Z:下
です。
World / Navigation Frame
地球に対する方向を表す座標系です。
NEDやENUなどがあります。
Vehicle Frameの「前」が常に北を意味するわけではありません。
2. Sensor to Vehicle Transformを設定する
CV7をVehicle Frameと同じ向きに取り付けられない場合は、Sensor to Vehicle Frame Transformationを設定します。

CV7ではEuler角またはDirection Cosine Matrix(DCM)で取付変換を指定できます。
MIPのEuler角コマンドではradを使用します。
度で測った角度をそのまま入力しないようにしてください。
3. 変換の向きを明記する
行列を扱うときは、
R_vehicle←sensor
のように「何座標のベクトルを何座標へ変換するか」を明記すると間違いを減らせます。
例えば、センサーX軸がVehicleの右方向を向き、センサーY軸がVehicleの後方を向く単純な例では、
R_vehicle←sensor =
[ 0 -1 0 ]
[ 1 0 0 ]
[ 0 0 1 ]
となります。
このとき、Sensor FrameのX基底ベクトル (1,0,0) はVehicle Frameでは (0,1,0) になります。
これは行列の読み方を説明する例で、実際の取付設定値ではありません。
4. Euler角は回転順序も確認する
Euler角はRoll / Pitch / Yawの数値だけでは変換を一意に理解できません。
- どの軸の周りに回すか
- 正方向
- 回転順序
- Sensor→VehicleかVehicle→Sensorか
を合わせて確認します。
CV7のVehicle Frame資料には、Sensor to Vehicle変換の定義と設定例があります。
別の数学ライブラリやROSドライバのEuler角規約が同じとは限らないため、そのまま数値を移植しないでください。
5. DCMは3つの基底ベクトルで確認する
DCMを設定するときは、行列の数字だけを見るより、Sensor Frameの3つの基底ベクトルがVehicle Frameのどちらへ向くか確認すると分かりやすくなります。
- Sensor X → Vehicleのどの方向か
- Sensor Y → Vehicleのどの方向か
- Sensor Z → Vehicleのどの方向か
を1軸ずつ確認します。
CV7のDCMコマンドでは9要素をrow-majorで扱います。
6. SensorConnectのVisualizationで確認する
SensorConnectではSensor FrameとVehicle Frameの関係を可視化できます。

画面上で軸が合って見えても、実物の装置側で定義した前後・左右・上下と一致しているか確認してください。
7. 二重補正を防ぐ
次のような構成では、同じ取付変換を2回適用してしまうことがあります。
- CV7内部でSensor→Vehicle変換
- ROSドライバでもSensor→Vehicle変換
- アプリケーションでも同じ回転を適用
どのレイヤーで変換するかを決め、1回だけ適用します。
データ列名にvehicleと書かれているだけで判断せず、そのソフトウェアが実際に何を変換しているか確認してください。
8. 旧製品の設定値をそのまま移植しない
世代の異なるMicroStrain製品では、取付変換コマンドの定義や変換方向に違いがある場合があります。
旧機種のRoll/Pitch/Yaw値をCV7へそのままコピーするのではなく、
- 変換方向
- 単位
- 回転順序
- 正方向
を現行マニュアルで確認します。
複数軸の回転では「3つの角度の符号を全部反転」しても逆変換にならない場合があります。
行列として変換を確認する方が安全です。
9. NEDとENUを区別する
代表的なWorld Frameには、
NED
- X:North
- Y:East
- Z:Down
ENU
- X:East
- Y:North
- Z:Up
があります。
同じベクトルをNEDからENUへ表す場合、軸の入替えとZ方向の反転が必要です。
ただし、姿勢角やQuaternionを単純な成分入替えだけで変換できるとは限りません。
姿勢表現では、回転の向き、基準Frame、Quaternionの成分順序も確認します。
10. ROSの機体軸も確認する
REP-103の標準的なROS機体軸は、
- X:前
- Y:左
- Z:上
です。
CV7の標準Vehicle Frameは、
- X:前
- Y:右
- Z:下
なので、YとZの向きが異なります。
ROSドライバ側ですでに変換されている場合は、アプリ側で重ねて変換しないでください。
11. 実機では既知の動きで確認する
取付変換を設定したら、許容範囲内で方向が分かる動きを与えて確認します。
例えば、
- 装置を前方向へ加速させる
- 右側を持ち上げる
- 既知方向へYaw回転する
などです。
そのとき、
- どの軸が変化したか
- 符号は正しいか
- 単位は正しいか
- Sensor DataとFilter Dataのどちらを見ているか
- Filter Stateは正常か
を確認します。
記録しておくとよい項目
- センサー型式・ファームウェア
- センサー本体の軸方向
- Vehicle Frameの定義
- Sensor→Vehicle変換
- Euler / DCMのどちらを使用したか
- 角度単位
- ROS / ドライバ側での変換
- 出力データのFrame
- 既知動作で確認した軸と符号
参考資料
- CV7 Sensor Frame
https://files.microstrain.com/CV7%20Online/user_manual_content/coordinate_frames/Sensor%20Frame.htm - CV7 Vehicle Frame
https://files.microstrain.com/CV7%20Online/user_manual_content/coordinate_frames/Vehicle%20Frame.htm - Sensor to Vehicle Frame Transformation Euler (0x0C,0x31)
https://files.microstrain.com/CV7%20Online/external_content/dcp/Commands/0x0c/data/0x31.htm - Sensor to Vehicle Frame Transformation DCM (0x0C,0x33)
https://files.microstrain.com/CV7%20Online/external_content/dcp/Commands/0x0c/data/0x33.htm - ROS REP-103
https://github.com/ros-infrastructure/rep/blob/master/rep-0103.rst
既存の関連ページもあわせて確認
既存の技術解説・ソフトウェア説明と相互に参照できるよう、本番反映時に現在のURLへ接続します。
