ROS 2の基礎
このレッスンでは、ROS 2の基本概念と使い方について学びます。
1. はじめに
ロボットを動かすためには、様々なプログラムが必要です。例えば、センサからの情報を受け取るプログラム、モータを制御するプログラム、ロボットの位置を計算するプログラムなどです。これらのプログラムを効率的に開発・実行するための仕組みが「ROS 2」です。
2. ROS 2とは
ROS 2(Robot Operating System 2)は、ロボット開発のためのソフトウェアフレームワークです。フレームワークとは、特定の目的のためにプログラミングをしやすくするための仕組みです。
ROS 2の主な特徴
- 分散システム: 複数のプログラムが同時に動作し、互いに通信できます。
- 言語非依存: Python、C++、Javaなど、様々なプログラミング言語でプログラムを書けます。
- オープンソース: 無料で使え、世界中の開発者が協力して改善しています。
- 豊富なライブラリ: ロボット開発に必要な様々な機能が既に実装されています。
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