日本語 | English
株式会社アールティが販売しているUSB出力9軸IMUセンサモジュール用のROS 2パッケージです。
現在、以下のROSのディストリビューションに対応しております。
rt_usb_9axisimu_driverは株式会社アールティが販売している USB出力9軸IMUセンサモジュール のROS 2パッケージです。
株式会社アールティによって開発、メンテナンスがなされています。
- License: The 3-Clause BSD License
USB出力9軸IMUセンサモジュールは、センサとしてInvenSense社のMPU9250を使用しております。 このセンサの磁気センサの座標系はNED座標系(x-north, y-east, z-down)ですが、 モジュール内のマイコン(LPC1343)においてENU座標系(x-east, y-north, z-up)に変換され、 ジャイロセンサおよび加速度センサの座標系と揃えられております。 これはROSで使われる座標系のルールにも適合しています。詳しくは、REP-0103をご覧ください。
USB出力9軸IMUセンサモジュールはオープンハード・オープンソースのため、モジュール内のマイコンのファームウェアの変更が可能です。 このROSパッケージはデフォルトのファームウェアにのみ対応しております。ファームウェアを変更された場合、正常な動作ができなくなる恐れがございますので、ご了承ください。
2020年8月現在、販売されているUSB出力9軸IMUセンサモジュールはver2.0となります。 このバージョンのデフォルトのファームウェアには、ASCII出力とBinary出力の2つのデータ出力形式があります。 センサ出荷時点ではASCII出力に設定されています。出力形式の切り替え方法は、以下のリポジトリにあるマニュアルをご参照ください。 https://github.com/rt-net/RT-USB-9AXIS-00
ポートの権限を変更してください。
$ sudo chmod 666 /dev/ttyACM0
# ROS 2 Humble
$ sudo apt install ros-humble-rt-usb-9axisimu-driver
# ROS 2 Jazzy (ToDo)
$
$ cd ~/ros2_ws/src
# Clone package & checkout ROS 2 branch
$ git clone -b $ROS_DISTRO https://github.com/rt-net/rt_usb_9axisimu_driver
# Install dependencies
$ rosdep install -r -y -i --from-paths .
# Build & Install
$ cd ~/ros2_ws
$ colcon build --symlink-install
$ source ~/ros2_ws/install/setup.bash
# Terminal 1
$ source ~/ros2_ws/install/setup.bash
$ ros2 run rt_usb_9axisimu_driver rt_usb_9axisimu_driver
# Terminal 2
$ source ~/ros2_ws/install/setup.bash
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# Echo topics (Press Ctrl+C for exit)
$ ros2 topic echo /imu/data_raw
$ ros2 topic echo /imu/mag
$ ros2 topic echo /imu/temperature
rt_usb_9axisimu_driverはUSB出力9軸IMUセンサモジュールの出力を受信し、角速度と並進加速度・磁束密度をパブリッシュします。
-
/imu/data_raw(sensor_msgs/Imu)
- 並進加速度と角速度の生データ
-
/imu/mag(sensor_msgs/MagneticField)
- 磁束密度の生データ
-
/imu/temperature(std_msgs/Float64)
- センサの温度データ
-
~frame_id (string, default: imu_link)
- IMUデータのヘッダーにセットされるフレーム名
-
~port (string, default: /dev/ttyACM0)
- モジュールが接続されているポート名
-
~linear_acceleration_stddev (double, default: 0.023145)
- 並進加速度の共分散行列の対角成分の平方根(m/s^2)
-
~angular_velocity_stddev (double, default: 0.0010621)
- 角速度の共分散行列の対角成分の平方根(rad/s)
-
~magnetic_field_stddev (double, default: 0.00000080786)
- 磁束密度の共分散行列の対角成分の平方根(T)
Lifecycle 機能を使うことで、ノード実行中にUSBの抜き差しや、 トピックのパブリッシュを稼働/停止できます。
各状態での動作内容は次のとおりです。
- USBポート(
~port
)にアクセスしません - トピックをパブリッシュしません
- パラメータを反映します
- USBポート(
~port
)をオープンし9軸IMUセンサと通信します- 9軸IMUセンサの認識に失敗したら
Unconfigured state
に遷移します
- 9軸IMUセンサの認識に失敗したら
- トピックをパブリッシュしません
- 9軸IMUセンサと定期通信を開始します
- 9軸IMUセンサとの通信に失敗したら
Unconfigured state
に遷移します
- 9軸IMUセンサとの通信に失敗したら
- トピックのパブリッシュを開始します
- トピックをパブリッシュします
- 9軸IMUセンサとの通信に失敗しても状態遷移しません
- 9軸IMUセンサとの定期通信を停止します
- トピックのパブリッシュを停止します
- USBポート(
~port
)をクローズし9軸IMUセンサと通信を終了します
# Terminal 1
$ source ~/ros2_ws/install/setup.bash
$ ros2 run rt_usb_9axisimu_driver rt_usb_9axisimu_driver
# Terminal 2
$ source ~/ros2_ws/install/setup.bash
# User can plug-in/out the IMU module at unconfigure state.
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.
# Stop publishing
$ ros2 lifecycle set rt_usb_9axisimu_driver deactivate
$ ros2 lifecycle set rt_usb_9axisimu_driver cleanup
# User can plug-in/out the IMU module at unconfigure state.
# User can set parameters of the node.
$ ros2 param set /rt_usb_9axisimu_driver frame_id "imu2-link"
$ ros2 param set /rt_usb_9axisimu_driver port "/dev/ttyACM1"
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.
rt_usb_9axisimu_driver::Driverは Component として実装されているため、共有ライブラリとして実行できます。
# Terminal 1
$ source ~/ros2_ws/install/setup.bash
$ ros2 run rclcpp_components component_container
# Terminal 2
$ source ~/ros2_ws/install/setup.bash
$ ros2 component load /ComponentManager rt_usb_9axisimu_driver rt_usb_9axisimu_driver::Driver
$ ros2 lifecycle set rt_usb_9axisimu_driver configure
$ ros2 lifecycle set rt_usb_9axisimu_driver activate
# The node start publishing the topics.