Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
見出し画像

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」が作成されます。
フォルダ構造は、次のとおりです。

・my_python_pkg/
 ・package.xml
 ・setup.cfg
 ・setup.py
 ・my_python_pkg/
  ・__init__.py

(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!"



この記事が気に入ったらサポートをしてみませんか?