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 説明動画プレイリスト