Ubuntu 20.04 への ROS2 Foxy のインストール
「Ubuntu 20.04」への「ROS2 Foxy」のインストール手順をまとめました。
1. ROS2 Foxy のインストール
「ROS2 Foxy」のインストール手順は、次のとおりです。
(1) 「Ubuntu 20.04」の環境を準備。
今回は、「WSL2」で「Ubuntu 20.04」の環境を準備しました。
(2) 「ROS 2」のリポジトリの準備。
「ROS 2」のリポジトリからインストールできるように準備します。
~$ sudo apt update && sudo apt upgrade -y
~$ sudo apt install curl gnupg lsb-release -y
~$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
~$ sudo sh -c 'echo "deb [arch=amd64] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
(3) 「ROS 2」のインストール。
~$ sudo apt update
~$ sudo apt install ros-foxy-desktop -y
(4) 「ROS 2」のセットアップスクリプトを「~/.bashrc」に追加。
Ubuntu 起動時に自動実行するようになります。
~$ echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
~$ source ~/.bashrc
(5) 「ROS 2 」の依存関係ツールのインストール。
「colcon」はビルドツール、「argcomplete」は自動補完ツールになります。
~$ sudo apt install python3-colcon-common-extensions -y
~$ sudo apt install python3-argcomplete
2. ROS 2 の動作確認
「ROS 2」のインストールが正常に完了しているか確認します。
(1) 「talker」を起動。
~$ ros2 run demo_nodes_cpp talker
[INFO] [1728804852.487135627] [talker]: Publishing: 'Hello World: 1'
[INFO] [1728804853.487033120] [talker]: Publishing: 'Hello World: 2'
[INFO] [1728804854.487094554] [talker]: Publishing: 'Hello World: 3'
:
(2) 別のターミナルを開いて「listener」を起動。
~$ ros2 run demo_nodes_py listener
[INFO] [1728804878.493128370] [listener]: I heard: [Hello World: 27]
[INFO] [1728804879.487816334] [listener]: I heard: [Hello World: 28]
[INFO] [1728804880.487765651] [listener]: I heard: [Hello World: 29]
:
「talker」と「listener」が正しく通信できれば、インストール成功です。
3. ROS 2 のワークスペースの作成
Pythonで「talker」と「listener」を自作する手順は次のとおりです。
3-1. ワークスペースの作成
(1) ワークスペースのフォルダの作成。
~$ mkdir -p ~/ros2_ws/src
~$ cd ~/ros2_ws
(2) ワークスペースを初期化。
~$ colcon build
~$ source install/setup.bash
(3) Pythonパッケージの作成。
~$ cd ~/ros2_ws/src
~$ ros2 pkg create --build-type ament_python my_python_pkg
「~/ros2_ws/src/my_python_pkg」が作成されます。
フォルダ構造は、次のとおりです。
(4) 「talker.py」と「listener.py」の作成。
・~/ros2_ws/src/my_python_pkg/my_python_pkg/talker.py
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class Talker(Node):
def __init__(self):
# talkerという名前のノードの初期化
super().__init__('talker')
# chatterトピックにString型メッセージを送信するPublisherの作成
self.publisher_ = self.create_publisher(String, 'chatter', 10)
# 0.5秒毎にtimer_callback()を実行
self.timer = self.create_timer(0.5, self.timer_callback)
def timer_callback(self):
# chatterトピックにString型メッセージを送信
msg = String()
msg.data = 'Hello, ROS 2!'
self.publisher_.publish(msg)
self.get_logger().info(f'Publishing: "{msg.data}"')
def main(args=None):
# ROS 2の初期化
rclpy.init(args=args)
# talkerノードをインスタンス化して実行
node = Talker()
rclpy.spin(node)
# ノードが終了したらリソース解放
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
・~/ros2_ws/src/my_python_pkg/my_python_pkg/listener.py
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class Listener(Node):
def __init__(self):
# listenerという名前のノードの初期化
super().__init__('listener')
# chatterトピックからString型メッセージを受信するSubscriberの作成
self.subscription = self.create_subscription(
String,
'chatter',
self.listener_callback,
10)
def listener_callback(self, msg):
# 受信したメッセージ内容をログ出力
self.get_logger().info(f'I heard: "{msg.data}"')
def main(args=None):
# ROS 2の初期化
rclpy.init(args=args)
# Listenerノードをインスタンス化して実行
node = Listener()
rclpy.spin(node)
# ノードが終了したらリソース解放
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
(5) 「setup.py」の編集。
・~/ros2_ws/src/my_python_pkg/setup.py
from setuptools import setup
package_name = 'my_python_pkg'
setup(
name=package_name,
version='0.0.0',
packages=[package_name],
install_requires=['setuptools'],
zip_safe=True,
maintainer='your_name',
maintainer_email='your_email@example.com',
description='A simple ROS 2 Python package',
license='Apache License 2.0',
entry_points={
'console_scripts': [
'talker = my_python_pkg.talker:main',
'listener = my_python_pkg.listener:main',
],
},
)
(6) ビルド。
~$ cd ~/ros2_ws
~$ colcon build
(7) インストール環境を反映。
~$ source install/setup.bash
3-2. 動作確認
(1) 「talker」を起動。
~$ ros2 run my_python_pkg talker
[INFO] [1728811707.037199143] [talker]: Publishing: "Hello, ROS 2!"
[INFO] [1728811707.531674119] [talker]: Publishing: "Hello, ROS 2!"
[INFO] [1728811708.031694539] [talker]: Publishing: "Hello, ROS 2!"
(2) 別のターミナルを開いて「listener」を起動。
~$ source ~/ros2_ws/install/setup.bash
~$ ros2 run my_python_pkg listener
[INFO] [1728811743.647122451] [listener]: I heard: "Hello, ROS 2!"
[INFO] [1728811744.032225817] [listener]: I heard: "Hello, ROS 2!"
[INFO] [1728811744.532244811] [listener]: I heard: "Hello, ROS 2!"
この記事が気に入ったらサポートをしてみませんか?