micro-ROSにカスタムメッセージを追加する(コーディング編)

環境

WIndows11
開発環境: VScode + PlatformIO + Docker
動作環境: WSL2(Ubuntu 22.04) + ROS2

以下のサイトを参考にした

1.WSL上のROS環境にてカスタムメッセージを作成する

1.ROS環境上にてカスタムメッセージに関するプロジェクトを生成する

cd ~/ros2_ws/src
ros2 pkg create custom_msgs --build-type ament_cmake --dependencies rosidl_default_generators std_msgs

2. メッセージファイルの生成

msgフォルダを作り、その中にメッセージ記述ファイル(例:imu.msg)を生成しておく

cd custom_msgs
mkdir msg
touch msg/ImuInfo.msg

3. CMakeList.txtの編集

ament_package()の前に以下の2行を追加

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/ImuInfo.msg"
)

4. Package.xmlの編集

  <exec_depend>rosidl_default_runtime</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>

5. msgファイルの編集

先ほど生成したImuInfo.msgファイルを編集する

10軸IMUの例である。

4. 一応ビルドしてみる

colcon build --packages-select custom_msgs
ビルドが通ることを確認しておく

2. micro-ROS環境でのビルド

ROS上で生成したメッセージをもとにmicro-ROS環境でも同じようにライブラリを生成する。

1.プロジェクトフォルダにextra_packagesというフォルダを作り、そこにカスタムメッセージのプロジェクトフォルダごとコピーする

2.libdeps/rpipicow/ci/extra_packagesフォルダのextra_packages.reposを1.で作ったフォルダにコピーし、ファイルを編集する

custom_msgs:の行以下を追加

3.micro-ROSライブラリを再構築するため、リモート接続を行う

「コンテナーで再度開く」を選択する

4.リモート接続が始まると、ライブラリの再ビルドが行われる。

ビルド完了を確認した後・・・
libmicroros/includeの下にcustom_msgsというフォルダができていれば成功

5. ライブラリを再構築したいときは…

libmicroros.aというファイルをいったん削除し、
platformio.iniを上書き保存すれば再構築が始まる

6. ビルドができていることが確認できれば、リモート接続を終了する

左下の「開発コンテナー:xxxx」みたいなのをクリックすると出てくるメニュー

3. コーディング

1.ヘッダファイル

フォルダ構成がこうなので・・・
インクルードはこのようになる
imu_info.hの中身
さらにほかのヘッダファイルをインクルードする構成
その中の一つ、imu_info__struct.hにメッセージオブジェクトで使用する型が宣言されている。

2.メッセージのオブジェクトの宣言

imu_info_struct.hに宣言されている型を使用する

メッセージに使用するオブジェクト

フォルダ:custom_msgs/msg
ファイル名:ImuInfo.msg
慣れてくると、この法則で型名が推測できるようになるようだ。
(ちなみに自分は慣れていない💦)

3. メッセージオブジェクトの初期化

setup()内で初期化を行っておく。
動作を見るためなので、以下のようにした

4.オブジェクトの送信部分

各メンバの値を更新しrcl_publishで送信する。

4. ビルド

ビルド成功することを確認する

いいなと思ったら応援しよう!