ROS 2の基礎

このレッスンでは、ROS 2の基本概念と使い方について学びます。

1. はじめに

ロボットを動かすためには、様々なプログラムが必要です。例えば、センサからの情報を受け取るプログラム、モータを制御するプログラム、ロボットの位置を計算するプログラムなどです。これらのプログラムを効率的に開発・実行するための仕組みが「ROS 2」です。

2. ROS 2とは

ROS 2(Robot Operating System 2)は、ロボット開発のためのソフトウェアフレームワークです。フレームワークとは、特定の目的のためにプログラミングをしやすくするための仕組みです。

ROS 2の主な特徴

  1. 分散システム: 複数のプログラムが同時に動作し、互いに通信できます。
  2. 言語非依存: Python、C++、Javaなど、様々なプログラミング言語でプログラムを書けます。
  3. オープンソース: 無料で使え、世界中の開発者が協力して改善しています。
  4. 豊富なライブラリ: ロボット開発に必要な様々な機能が既に実装されています。

3. ROS 2の基本概念

ノード(Node)

ノードは、ROS 2システムを構成する基本的な実行単位です。一つのプログラムが一つのノードとして動作します。

:

  • カメラからの画像を受け取るノード
  • モータを制御するノード
  • ロボットの位置を計算するノード

トピック(Topic)

トピックは、ノード同士が情報をやり取りするための通信チャネルです。一つのトピックには、特定の種類のデータが送信されます。

:

  • /camera/image - カメラからの画像データ
  • /cmd_vel - ロボットの速度指令
  • /odom - ロボットの位置情報

パブリッシャ(Publisher)とサブスクライバ(Subscriber)

  • パブリッシャ: トピックにデータを送信するノード
  • サブスクライバ: トピックからデータを受信するノード

:

  • カメラノードは /camera/image トピックに画像データをパブリッシュ
  • ナビゲーションノードは /camera/image トピックから画像データをサブスクライブ

メッセージ(Message)

メッセージは、トピックを通じてやり取りされるデータの形式を定義したものです。ROS 2では、様々な種類のメッセージが用意されています。

:

  • std_msgs/String - 文字列データ
  • sensor_msgs/Image - 画像データ
  • geometry_msgs/Twist - 速度と角速度のデータ

サービス(Service)とアクション(Action)

  • サービス: リクエストとレスポンスの形式で通信する仕組み
  • アクション: 長時間実行されるタスクを管理する仕組み

4. ROS 2の主要なツール

ビルドシステム

ROS 2では、colconというツールを使ってプログラムをビルドします。ビルドとは、プログラムのソースコードを実行可能なファイルに変換する作業です。

# ワークスペースのビルド
colcon build

# 特定のパッケージのみビルド
colcon build --packages-select パッケージ名

# シンボリックリンクを使用したビルド(開発時に便利)
colcon build --symlink-install

--symlink-installオプションは、特にPythonパッケージの開発時に便利な機能です。このオプションを使用すると:

  • ソースコードを変更した後、再ビルドせずに変更が即座に反映されます

ビルド後の環境設定

# ビルドしたパッケージの環境を設定
source install/setup.bash

可視化ツール

  • RViz2: ロボットの状態やセンサデータを3Dで可視化するツール
  • rqt: ROS 2の様々なツールを提供するGUIフレームワーク

5. ROS 2のメッセージ例

以下は、ロボットの位置と向きを表すgeometry_msgs/msg/PoseStampedメッセージの例です。

std_msgs/Header header
  uint32 seq          # シーケンス番号
  time stamp          # タイムスタンプ
  string frame_id     # 座標系の名前

geometry_msgs/Pose pose
  geometry_msgs/Point position
    float64 x         # X座標(メートル)
    float64 y         # Y座標(メートル)
    float64 z         # Z座標(メートル)
  geometry_msgs/Quaternion orientation
    float64 x         # 四元数のX成分
    float64 y         # 四元数のY成分
    float64 z         # 四元数のZ成分
    float64 w         # 四元数のW成分

演習

カチャカを起動

カチャカを起動

基本的なROS 2コマンド

# 実行中のノードを表示
ros2 node list

# 利用可能なトピックを表示
ros2 topic list

# ノードとトピックの関係を表示
rqt_graph

キーボードで遠隔操作

ros2 run teleop_twist_keyboard teleop_twist_keyboard