Ubuntu 22.04 への ROS 2 Humble のインストール
「Ubuntu 22.04」への「ROS 2 Humble」のインストール手順をまとめました。
1. ROS 2 Humble のインストール
「ROS 2 Humble」のインストール手順は、次のとおりです。
(1) 「ROS 2」のリポジトリの準備。
「ROS 2」のリポジトリからインストールできるように準備します。
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 lsb-release
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo tee /usr/share/keyrings/ros-archive-keyring.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2-latest.list > /dev/null
(2) 「ROS 2」のインストール。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ros-humble-desktop -y
(3) 環境変数の設定。
$ echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
(4) 「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!"