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ファイルを編集する
![](https://assets.st-note.com/img/1713357257524-AygOMa9Vak.png)
4. 一応ビルドしてみる
colcon build --packages-select custom_msgs
![](https://assets.st-note.com/img/1713786983516-b5xfx24xB4.png?width=800)
2. micro-ROS環境でのビルド
ROS上で生成したメッセージをもとにmicro-ROS環境でも同じようにライブラリを生成する。
1.プロジェクトフォルダにextra_packagesというフォルダを作り、そこにカスタムメッセージのプロジェクトフォルダごとコピーする
![](https://assets.st-note.com/img/1713872334045-nDxVhoi6k2.png)
2.libdeps/rpipicow/ci/extra_packagesフォルダのextra_packages.reposを1.で作ったフォルダにコピーし、ファイルを編集する
![](https://assets.st-note.com/img/1714474304412-h98DFtO0GI.png)
3.micro-ROSライブラリを再構築するため、リモート接続を行う
![](https://assets.st-note.com/img/1713872571968-Opic7fKWM2.png)
4.リモート接続が始まると、ライブラリの再ビルドが行われる。
![](https://assets.st-note.com/img/1714474599818-us4yFgOWfY.png)
![](https://assets.st-note.com/img/1714474458269-pd5Lo7GV2C.png)
5. ライブラリを再構築したいときは…
libmicroros.aというファイルをいったん削除し、
platformio.iniを上書き保存すれば再構築が始まる
![](https://assets.st-note.com/img/1714474534605-heyUqIbRje.png)
6. ビルドができていることが確認できれば、リモート接続を終了する
![](https://assets.st-note.com/img/1714474714086-Zrs0biouv0.png)
3. コーディング
1.ヘッダファイル
![](https://assets.st-note.com/img/1714527713693-kc5sIPM1tR.png)
![](https://assets.st-note.com/img/1714527431824-4Eug6DRQnV.png)
![](https://assets.st-note.com/img/1714527817472-NePzPtdm7L.png)
さらにほかのヘッダファイルをインクルードする構成
![](https://assets.st-note.com/img/1714527871219-CBM6OOUn8P.png)
2.メッセージのオブジェクトの宣言
imu_info_struct.hに宣言されている型を使用する
![](https://assets.st-note.com/img/1714527536122-fcBmtquUmX.png)
フォルダ:custom_msgs/msg
ファイル名:ImuInfo.msg
慣れてくると、この法則で型名が推測できるようになるようだ。
(ちなみに自分は慣れていない💦)
3. メッセージオブジェクトの初期化
setup()内で初期化を行っておく。
動作を見るためなので、以下のようにした
![](https://assets.st-note.com/img/1714528416156-37iifDMvYC.png)
4.オブジェクトの送信部分
各メンバの値を更新しrcl_publishで送信する。
![](https://assets.st-note.com/img/1714528579620-4lNt3xqsHS.png)
4. ビルド
![](https://assets.st-note.com/img/1714528703371-GFdUgAP0nS.png?width=800)
この記事が気に入ったらサポートをしてみませんか?