WitMotionの9軸IMU「BWT901CL」を使ってみたので、そのメモです。
最初のうちは、値やキャリブレーションで何が正解かわからずに苦労しました。
けど、公式がYouTubeに説明動画をあげてくれていたので、それを見たら、あっさり解決。
(WitMotionは製品ごとに説明動画プレイリストを用意してくれていた。わかりやすい。)
- なぜBWT901CL?
- スペックとか
- Windows用ツール、シリアルドライバ、ドキュメント
- iPhone用ツール
- 磁気キャリブレーション方法
- ネイティブ座標系
- Linuxでの認識、ROS2ドライバの設定
- リンク
なぜBWT901CL?
WitMotionは似たような型番やインタフェースの製品が多すぎて、よくわからない。。。
(どこかで分かりやすい製品表を見かけたけど、URL無くした。)
「USBで直接接続でき、取り外してキャリブレーションできると便利かな」程度の浅い考えで BWT901CL をチョイス。
購入した結果、キャリブレーションは想定どおり、とてもやりやすかった。
シリアル変換不要も想定通り、使いやすい。
誤算だったのは、電源ボタン。 有線接続時でもONにしないといけなかったこと。あと、電源ON中のLEDがまぶしい。。。
スペックとか
| 項目 | 値 / 既定 | メモ |
|---|---|---|
| 出力レート(Output Rate) | 既定 10 Hz / 最大 200 Hz | |
| ボーレート(Baud rate) | 115200 bps | 固定 |
| 加速度計の静止時ドリフト | 水平時 ±20~40 mg | 生成AIによると、加速度計のみで計算すると約 ±1.1~2.3° |
| ジャイロの静止時ドリフト | 水平時 ±0.5~1°/s | 実際は融合でこれよりも低く抑えられるはず |
| ジャイロのバイアス(不)安定性(Bias stability) | ≤10 deg/h |
搭載チップ、詳細なスペックは製品ページ参照
Windows用ツール、シリアルドライバ、ドキュメント
ダウンロード、できること
こちらでダウンロードできる
ダウンロードすると WitMotion.exe が含まれている。
このプログラムでセンサー値確認、Output Rate変更、6軸と9軸の切り替えができる。
Windows PCとのUSBケーブルで接続したときの認識名称
「USB-SERIAL CH340という名称のCOMポート」として認識。名前の由来は中で使っているチップ。
iPhone用ツール
ダウンロード、できること
AppStoreからダウンロードできる。
画面がわかりにくいけど、各種キャリブレーションもできる。
Android用もあるらしいけど、未確認。
Bluetooth接続時
「HC-06」と認識。(Bluetooth接続時、PINコードが必要な場合は1234。アプリだといらないかも)。名前の由来は中で使っているチップ。
磁気キャリブレーション方法
磁気キャリブレーション方法については、公式動画がわかりやすかった。
https://www.youtube.com/watch?v=BDU8Yy5oYmo
北を向けたときに次のような画面になればOK。
オレンジ色の線が方位。
ネイティブ座標系
公式ドキュメントによると座標系は「northeast sky coordinate system」。日本語訳だと、北東天空座標系。
Y軸が北を差すとき、Xが東、Zが上。

「Angle reference」ボタンでAngle XとYはリセット(=現在の傾きを基準にする)できる。
WitMotion.exeのMain画面で確認した内容は次のとおり。
| 表示名 | 回転の基準軸 |
|---|---|
| Angle X | X 軸 基準の回転 |
| Angle Y | Y 軸 基準の回転 |
| Angle Z | Z 軸 基準の回転 |
Angle X(=X軸基準回転)
| 条件 | 表示角 |
|---|---|
| Y 軸が水平なとき | 0° |
| Y 軸が上を向くと | +90° |
| Y 軸がひっくり返ると | ±180° |
| Y 軸が下を向くと | −90° |
Angle Y(=Y軸基準回転)
| 条件 | 表示角 |
|---|---|
| X 軸が水平なとき | 0° |
| X 軸が上を向くと | −90° |
| X 軸が下を向くと | +90° |
| X 軸がひっくり返ると | 0°(!!!) |
| X軸を上経由でひっくり返すと | 0度→-90度→0度と変化していく |
| X軸を下経由でひっくり返すと | 0度→90度→0度と変化していく |
Angle Z(=Z軸基準回転)
| 仕様/条件 | 表示角 |
|---|---|
| Y 軸が北を指すとき | 0° |
| Y 軸が西を指すとき | +90° |
| Y 軸が東を指すとき | −90° |
| Y 軸が南を指すとき | ±180° |
Linuxでの認識、ROS2ドライバの設定
セットアップ方法
AbudoriLab. さんの「SLAM用のセンサデータを取ろう!【つくチャレ2024-3】」ページの方法がわかりやすかった。セットアップ方法はそちら参照
Ubuntuでのデバイス認識結果
$ lsusb 省略 Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics CH340 serial converter 省略 $ ls /dev/serial/by-id -1 usb-1a86_USB_Serial-if00-port0
witmotion_IMU_rosの設定ファイル例
設定ファイルは次のような内容にしてみた。
temperature、magnetometerはtrueに設定してみたけど、有効にはならなかった。use_native_orientationについては、trueに設定してみた。これで地磁気センサーも考慮した姿勢になるはず?
(なんとなく考慮した姿勢になってる気はするけど未検証)
covarianceは元ファイル(WT901)のまま。
witmotion:
ros__parameters:
port: ttyUSB0
baud_rate: 115200 # baud
polling_interval: 5 # ms
timeout_ms: 150 # ms
restart_service_name: /restart_imu
imu_publisher:
topic_name: /imu
frame_id: imu_link
use_native_orientation: true
measurements:
acceleration:
enabled: true
covariance: [0.0364, 0.0, 0.0, 0.0, 0.0048, 0.0, 0.0, 0.0, 0.0796]
angular_velocity:
enabled: true
covariance: [0.0663, 0.0, 0.0, 0.0, 0.1453, 0.0, 0.0, 0.0, 0.0378]
orientation:
enabled: true
covariance: [0.0479, 0.0, 0.0, 0.0, 0.0207, 0.0, 0.0, 0.0, 0.0041]
temperature_publisher:
enabled: false # not supported by BWT901CL
topic_name: /temperature
frame_id: imu_link
from_message: magnetometer # acceleration, angular_vel, orientation, magnetometer
variance: 0.01829
coefficient: 1.0 # Linear calibration parameters: coefficient
addition: 0.0 # and addendum
magnetometer_publisher:
enabled: false
topic_name: /magnetometer
frame_id: compass
coefficient: 0.00000001 # Linear calibration parameters: coefficient
addition: 0.0 # and addendum
covariance:
[0.000000187123, 0.0, 0.0, 0.0, 0.000000105373, 0.0, 0.0, 0.0, 0.000000165816]
barometer_publisher:
enabled: false
topic_name: /barometer
frame_id: base_link
variance: 0.001
coefficient: 1.0 # Linear calibration parameters: coefficient
addition: 0.0 # and addendum
altimeter_publisher:
enabled: false
topic_name: /altitude
coefficient: 1.0 # Linear calibration parameters: coefficient
addition: 0.0 # and addendum
orientation_publisher:
enabled: false # not supported by BWT901CL
topic_name: /orientation
gps_publisher:
enabled: false
navsat_fix_frame_id: world
navsat_fix_topic_name: /gps
navsat_altitude_topic_name: /gps_altitude
navsat_satellites_topic_name: /gps_satellites
navsat_variance_topic_name: /gps_variance
ground_speed_topic_name: /gps_ground_speed
rtc_publisher:
enabled: false
topic_name: /witmotion_clock
Topic確認
200Hzで出力されていることを確認。
$ ros2 topic hz /imu
average rate: 201.013
min: 0.000s max: 0.011s std dev: 0.00385s window: 202
average rate: 200.505
min: 0.000s max: 0.011s std dev: 0.00337s window: 402
Topicの詳細も大丈夫そう。
$ ros2 topic echo /imu --once
header:
stamp:
sec: 1760181392
nanosec: 808367199
frame_id: imu_link
orientation:
x: 0.021968553947989716
y: -0.09403750700011992
z: 0.09731090919587884
w: 0.99055788163343
orientation_covariance:
- 0.0479
- 0.0
- 0.0
- 0.0
- 0.0207
- 0.0
- 0.0
- 0.0
- 0.0041
angular_velocity:
x: 0.007456851191818714
y: 0.007456851191818714
z: 0.006391586735844612
angular_velocity_covariance:
- 0.0663
- 0.0
- 0.0
- 0.0
- 0.1453
- 0.0
- 0.0
- 0.0
- 0.0378
linear_acceleration:
x: 1.925595760345459
y: 0.5460644364356995
z: 9.5896577835083
linear_acceleration_covariance:
- 0.0364
- 0.0
- 0.0
- 0.0
- 0.0048
- 0.0
- 0.0
- 0.0
- 0.0796
RVizでの表示
RVizでIMUの情報を確認する場合、IMUプラグインのインストールが必要
sudo apt install ros-${ROS_DISTRO}-rviz-imu-plugin
IMUのX,Y,Z軸がそのままRViz上のIMU表示でもX,Y,Z軸として表示される。
こちらでもそうなっているので、これでセットアップ完了・・・でいいのかな。

リンク
製品情報
製品情報
形状の情報、使われているチップなど詳細が記載されている。
ドキュメントやツールのダウンロード
AbudoriLab. さんの「SLAM用のセンサデータを取ろう!【つくチャレ2024-3】」ページ
REP145 Conventions for IMU Sensor Drivers
REP103 Standard Units of Measure and Coordinate Conventions
WitMotion公式 BWT901CL 説明動画プレイリスト
![[加速度計+傾斜計] BWT901CL MPU9250高精度9軸ジャイロスコープ+角度(XY0.05°精度)+カルマンフィルター付き磁力計, パッケージに含まれているUSB-HIDアダプタ [加速度計+傾斜計] BWT901CL MPU9250高精度9軸ジャイロスコープ+角度(XY0.05°精度)+カルマンフィルター付き磁力計, パッケージに含まれているUSB-HIDアダプタ](https://m.media-amazon.com/images/I/21jbHBNSvAL._SL500_.jpg)