ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

【ROS2】パッケージ作成方法

ずっとROSでロボット開発していましたが、ROSのサポートは、Noeticが2025/05まで。ちなみに私が使っているROS Melodicに関しては、2023/06でサポートは終了しています。。。
流石にそろそろROS2にしないと! ということで、ROS→ROS2へ乗り換えようと思います。
ROS2はROSから色々変更が入ったみたいなので、ブログにまとめていきます。
今回は、ROS2で簡単なパッケージを作ってみます。

スポンサーリンク

環境

環境は、vncサーバーで動くROS2 dockerイメージを使いました。

以下コマンドを実行します。(開発PCはiMac macOS Monterey)

docker run -p 6080:80 --security-opt seccomp=unconfined --shm-size=512m tiryoh/ros2-desktop-vnc:humble

コマンド一発でMAC上にROS2の環境ができました。大変便利です!ありがとうございます!
docker-ros2-desktop-vnc

パッケージの作成

パッケージを作ってみます。

まずはワークスペースとソース用のディレクトリを作ります。

mkdir -p ~/ros2_ws/src

ワークスペースを一旦ビルドします。

colcon build

※ROSでは、catkin buildでしたが、ROS2は、colcon buildなんですね。

次にパッケージを作ります。今回テスト用で、”test_package”というパッケージを作ってみます。
以下コマンドを入力します。

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_python test_package

上記の後、~/ros2_ws/src配下にtest_packageディレクトリができていました。
中身を確認すると、
・package.xml
・resource
・setup.cfg
・setup.py
・test
・test_package(作成したパッケージ名のディレクトリ)
ができていました。

それぞれのファイルの意味を調べてみます。
・package.xml:パッケージのメタデータを記述するファイル
・resource:パッケージのリソースファイルを保持するためのディレクトリ。通常はパッケージ名の空ファイルがここに配置されるようです。
・setup.cfg:Pythonパッケージのメタデータやオプションを記述する。基本はデフォルトのまま使用することが多い。
・setup.py:パッケージのインストール情報。pythonスクリプトを作ったらここのエントリポイントに実行スクリプトを記述するようです。
・test:パッケージのテストコードに関するディレクトリ

おためしPublisherを実装する

さて、では実際にpythonスクリプトを作ってみます。

cd ~/ros2_ws/src/test_package/test_package
vi test_publisher.py

今回は、単純に0.5sec毎に’hello!’を通知するノードを作ってみました。

コード解説

7行目のsuper().__init__('ノード名')で、ノード名を指定します。今回は、’test_publisher’というノード名にしました。
8行目のself.create_publisherで、String型の’test_topic’、キューサイズ10でトピックの宣言をしています。
10行目のタイマー設定、12行目〜16行目のタイマーコールバックtimer_callbackで、0.5秒毎にトピック送信しています。

メイン処理では、21行目のrclpy.spin(ノード)で、引数に指定したノードのイベント処理が有効になります。以降、test_publisherのイベント待ちループ処理が実行されます。
ユーザーが終了(Ctrl+C等)すると、ループ処理から抜けて、23行目、24行目の終了処理が実行されます。

以下のチュートリアルを参考にしました
Writing a simple publisher and subscriber (Python)

作成したpythonスクリプトを実行するには、setup.pyのentry_pointsに実行スクリプトを追記します。

[setup.py]
entry_points={
'console_scripts': [
'talker = test_package.test_publisher:main',
],

talker = ・・・の箇所は、
実行スクリプト名 = パッケージ名.pythonスクリプト:main 
のような記載とします。

ビルドします。

cd ~/ros2_ws
colcon build
source install/setup.bash

スクリプト実行

作ったPythonスクリプトを実行してみます。

ros2 run test_package talker

もう1つTerminalを開いて、トピックが通知されているか確認してみます。

ros2 topic echo /test_topic

ちゃんとトピック送信できていました。成功です。

最後に

以上、ROS2でパッケージを作成し、簡単なPythonスクリプトを実装してみました。
コマンドやライブラリの使い方などはROSと異なりますが、今のところそこまで大きな違いはないようです。
もう少しROS2を色々触ってみてROSとの違いなどいろいろ整理していこうと思います。
それでは!!

スポンサーリンク

いいね!を押すと、
最新記事をお届けします。

Twitter で
関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン