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ファイルを編集する
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.で作ったフォルダにコピーし、ファイルを編集する
3.micro-ROSライブラリを再構築するため、リモート接続を行う
4.リモート接続が始まると、ライブラリの再ビルドが行われる。
5. ライブラリを再構築したいときは…
libmicroros.aというファイルをいったん削除し、
platformio.iniを上書き保存すれば再構築が始まる
6. ビルドができていることが確認できれば、リモート接続を終了する
3. コーディング
1.ヘッダファイル
2.メッセージのオブジェクトの宣言
imu_info_struct.hに宣言されている型を使用する
フォルダ:custom_msgs/msg
ファイル名:ImuInfo.msg
慣れてくると、この法則で型名が推測できるようになるようだ。
(ちなみに自分は慣れていない💦)
3. メッセージオブジェクトの初期化
setup()内で初期化を行っておく。
動作を見るためなので、以下のようにした
4.オブジェクトの送信部分
各メンバの値を更新しrcl_publishで送信する。