0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【ROS】sensor_msgs/Imuメッセージを扱うときに注意すべきポイント

Last updated at Posted at 2024-07-06

お疲れ様です。秋並です。

今回は、ROSの「sensor_msgs/Imuメッセージ」を扱う際に注意すべきポイントを紹介します。

ちなみに、今回紹介することはImuメッセージの公式ドキュメントに書いてあります。

ポイント1:加速度の単位はm/s^2

「加速度:linear_acceleration 」に格納する加速度の単位はm/s^2になります。

使用するIMUモジュールによってはG単位で加速度が取得されるため、その場合は単位変換してから格納する必要があります。

Gに重力加速度(≒9.8)を掛けるとrad/s^2に変換できます。

msg.linear_acceleration.x = acc_g_x * 9.8F
msg.linear_acceleration.y = acc_g_y * 9.8F
msg.linear_acceleration.z = acc_g_z * 9.8F

ポイント2:角速度の単位はrad/s

「角速度: angular_velocity 」に格納する角速度の単位はrad/sになります。


degree/sec に π/180.0 を掛けると rad/sec に変換できます。

割り算は計算量が大きいので、下コードのように π/180.0 の計算結果である0.017453を掛けることが一般的です。

msg.angular_velocity.x = gyro_degree_x * 0.0174533F
msg.angular_velocity.y = gyro_degree_y * 0.0174533F
msg.angular_velocity.z = gyro_degree_z * 0.0174533F

ポイント3:取得できない要素は、共分散の0番目に-1を代入

IMUの種類によっては、「姿勢: orientation 」「加速度: linear_acceleration」「角速度: angular_velocity 」のうち、一部の情報が取得できない場合があります。


例えば、「姿勢: orientation 」を取得できないような場合は、対応する共分散行列の0番目の要素に-1を代入することで、

  • orientation は無効値である

ということを示します。

msg.orientation_covariance[0] = -1 // orienationは無効値であること示す

ポイント4:姿勢はクォータニオン

ROS2では、基本的にクォータニオンで姿勢を示すため、Imuの「姿勢: orientation 」もオイラー角ではなく、クォータニオンで示す必要があります。

オイラー角→クォータニオンへの変換は、元のオイラー角の回転の順番によります。
詳しくは下記記事を参照してください。

さいごに

今回は、Imuメッセージを扱う際の注意点を紹介しました。

navigation2などのパッケージと連携させてImuメッセージを扱う場合は、この辺りが間違っていると正しく動作しないので注意しましょう。

一言

公式ドキュメントは確認しよう!

参考サイト

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?