ROS入門 (9) - ROS2のパッケージの作成
ROS2のパッケージの作成についてまとめました。
前回
1. ワークスペースのセットアップ
「colcon」のワークスペースを作成します。「colcon」は、ROSのビルドシステムで、ROSのソースコードを実行ファイルに変換します。
(1) ワークスペースのフォルダを作成し移動。
今回は、「~/colcon_ws」をワークスペースのフォルダとします。「src」フォルダも初期化時に必要なので、同時に作成しています。
$ mkdir -p ~/colcon_ws/src
$ cd ~/colcon_ws
(2) ワークスペースのビルド。
$ colcon build
「colcon_wsフォルダ」直下に、以下のファイル群が生成されています。
(3) ワークスペースのセットアップ。
ワークスペースのパッケージの最新状態をROSシステムに反映します。
$ source ~/colcon_ws/install/setup.bash
ターミナルを開くたびに必要になるため、「~/.bashrc」にも追加します。
2. パッケージの作成
(1) 「~/colcon_ws/src」に移動し、「hello」という名前のパッケージを作成。
今回は、Pythonで開発したいので「ament_python」を指定します。
$ cd ~/colcon_ws/src
$ ros2 pkg create --build-type ament_python hello
以下のファイルとフォルダが生成されています。
(2) 「setup.py」を以下のように編集。
・entry_points
利用するPythonスクリプト名を指定します。
from setuptools import setup
package_name = "hello"
setup(
:
entry_points={
"console_scripts": [
"hello_node = hello.hello_node:main",
],
},
)
3. ソースコードの作成
(1) 「~/colcon_ws/src/hello/hello/hello_node.py」を作成し、以下のように編集。
・hello_node.py
import rclpy
from rclpy.node import Node
# メイン
def main():
# ROS通信の初期化
rclpy.init()
# ノードの生成
node = Node("hello_node")
# ログ出力
print("Hello World!")
# ノード終了の待機
rclpy.spin(node)
# ROS通信のシャットダウン
rclpy.shutdown()
if __name__ == "__main__":
main()
(2) ワークスペースのビルド。
$ cd ~/colcon_ws
$ colcon build
(3) ワークスペースのセットアップ。
ワークスペースのセットアップはビルド毎にも必要になります。
$ source ~/colcon_ws/install/setup.bash
4. 実行
(1) 「ros2 run <パッケージ名> <ノード名>」の実行。
「Hello World!」と表示されます。
$ ros2 run hello hello_node
Hello World!
5. 参考
【おまけ】 APIリファレンス
APIリファレンスは、以下で参照できます。
【おまけ】 DockerコンテナにPCのフォルダをマウント
DockerコンテナにPCのフォルダをマウントすることで、PC上でVSCodeなど使ってソースコードを編集できるようになります。
Dockerコンテナの「/home/ubuntu/colcon_ws」にPCの「~/ros2_ws」をマウントする手順は、次のとおりです。
(1) PCで「~/ros2_ws」フォルダを作成。
(2) 以下のコマンドでDockerコンテナを起動。
$ docker run -v ~/ros2_ws:/home/ubuntu/colcon_ws:cached -p 6080:80 --shm-size=1024m tiryoh/ros2-desktop-vnc:galactic
【おまけ】 パッケージ登録されたことの確認
「hello」パッケージが登録されるため、「ros2 pkg list」で確認したり、「cd `ros2 pkg prefix --share hello`」でフォルダ移動したりできます。
$ ros2 pkg list
action_msgs
action_tutorials_cpp
:
hello
:
$ cd `ros2 pkg prefix --share hello`
$ pwd
/home/ubuntu/colcon_ws/install/hello/share/hello
【おまけ】 ROSプログラムのライフサイクル
ROSプログラムのライフサイクルは、次のとおりです。
初期化はrclpy.init()で行います。これは、ノードを作成する前に実行する必要があります。ノードの作成は、create_node()か、Nodeのインスタンス化で行います。このノードを使用して、トピック、サービス、アクションなどの通信を行います。シャットダウンはrclpy.shutdown()で行います。
次回
この記事が気に入ったらサポートをしてみませんか?