turtlesim、ros2、rqtの使用
目標: 今後のチュートリアルに備えて、turtlesimパッケージとrqtツールをインストールして使用します。
チュートリアルレベル: 初心者
所要時間: 15分
背景
Turtlesimは、ROS 2を学習するための軽量シミュレータです。ROS 2が最も基本的なレベルで何を行うかを示し、後で実際のロボットやロボットシミュレーションで何を行うかのアイデアを提供します。
ros2ツールは、ユーザーがROSシステムを管理、検査、操作する方法です。システムとその動作の異なる側面をターゲットにする複数のコマンドをサポートしています。ノードの開始、パラメータの設定、トピックのリスニングなど、多くの用途で使用できます。ros2ツールは、コアROS 2インストールの一部です。
rqtは、ROS 2のグラフィカルユーザーインターフェース(GUI)ツールです。rqtで行うすべてのことはコマンドラインで行うことができますが、rqtはROS 2要素を操作するためのよりユーザーフレンドリーな方法を提供します。
このチュートリアルでは、ノード、トピック、サービスなどのコアROS 2概念に触れます。これらの概念はすべて後のチュートリアルで詳しく説明されます。今のところ、ツールを設定してそれらに慣れるだけです。
前提条件
前のチュートリアル「環境の設定」では、環境を設定する方法を説明しています。
タスク
1 turtlesimのインストール
いつものように、前のチュートリアルで説明されているように、新しいターミナルでセットアップファイルをソースすることから始めます。
ROS 2ディストロ用のturtlesimパッケージをインストールします:
Linux:
$ sudo apt update
$ sudo apt install ros-humble-turtlesimmacOS:
$ brew install ros-humble-turtlesimWindows:
> call C:\dev\ros2_humble\setup.bat
> colcon build --packages-select turtlesimパッケージがインストールされているかを確認するには、次のコマンドを実行します。これはturtlesimの実行可能ファイルのリストを返すはずです:
$ ros2 pkg executables turtlesim
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node2 turtlesimの開始
turtlesimを開始するには、ターミナルで次のコマンドを入力します:
$ ros2 run turtlesim turtlesim_node
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445],
theta=[0.000000]コマンドの下に、ノードからのメッセージが表示されます。そこで、デフォルトのタートルの名前とそれがスポーンする座標を確認できます。
シミュレータウィンドウが表示され、中央にランダムなタートルが配置されます。

3 turtlesimの使用
新しいターミナルを開き、再度ROS 2をソースします。
次に、最初のノードでタートルを制御するために新しいノードを実行します:
$ ros2 run turtlesim turtle_teleop_keyこの時点で、3つのウィンドウが開いているはずです:turtlesim_nodeを実行しているターミナル、turtle_teleop_keyを実行しているターミナル、そしてturtlesimウィンドウです。turtlesimウィンドウが見えるように、またturtle_teleop_keyを実行しているターミナルがアクティブになるようにこれらのウィンドウを配置して、turtlesimでタートルを制御できるようにします。
キーボードの矢印キーを使用してタートルを制御します。画面上を移動し、付属の「ペン」を使用してこれまでにたどった軌跡を描画します。
注意
矢印キーを押すと、タートルは短い距離だけ移動して停止します。これは現実的に、例えばオペレーターがロボットとの接続を失った場合に、ロボットが指示を実行し続けることを望まないからです。
ノードとそれらに関連するトピック、サービス、アクションは、それぞれのコマンドのlistサブコマンドを使用して確認できます:
$ ros2 node list
$ ros2 topic list
$ ros2 service list
$ ros2 action listこれらの概念については、今後のチュートリアルで詳しく学習します。このチュートリアルの目標はturtlesimの概要を得ることのみなので、rqtを使用してturtlesimのサービスの一部を呼び出し、turtlesim_nodeと対話します。
4 rqtのインストール
新しいターミナルを開いてrqtとそのプラグインをインストールします:
Ubuntu Linux:
$ sudo apt update
$ sudo apt install '~nros-humble-rqt*'macOS:
$ brew install ros-humble-rqt*Windows: 通常、rqtはROS 2インストールに含まれています。
rqtを実行するには:
$ rqt5 rqtの使用
rqtを初回実行する際、ウィンドウは空白になります。心配無用です。上部のメニューバーから「Plugins > Services > Service Caller」を選択してください。
注意
rqtがすべてのプラグインを見つけるのに時間がかかる場合があります。「Plugins」をクリックしても「Services」やその他のオプションが表示されない場合は、rqtを閉じてターミナルで
rqt --force-discoverコマンドを入力してください。

Serviceドロップダウンリストの左側にある更新ボタンを使用して、turtlesimノードのすべてのサービスが利用可能であることを確認してください。
Serviceドロップダウンリストをクリックしてturtlesimのサービスを確認し、/spawnサービスを選択します。
5.1 spawnサービスの試行
rqtを使用して/spawnサービスを呼び出しましょう。その名前から、/spawnがturtlesimウィンドウに別のタートルを作成することが推測できます。
Expressionカラムの空の一重引用符の間をダブルクリックして、新しいタートルにturtle2のような一意の名前を付けます。この式がnameの値に対応し、string型であることがわかります。
次に、新しいタートルをスポーンする有効な座標を入力します。例:x = 1.0、y = 1.0。

注意
デフォルトの
turtle1のように、既存のタートルと同じ名前で新しいタートルをスポーンしようとすると、turtlesim_nodeを実行しているターミナルにエラーメッセージが表示されます:[ERROR] [turtlesim]: A turtle named [turtle1] already exists
turtle2をスポーンするには、rqtウィンドウの右上のCallボタンをクリックしてサービスを呼び出す必要があります。
サービス呼び出しが成功した場合、xとyに入力した座標に新しいタートル(再びランダムなデザイン)がスポーンされるはずです。
rqtでサービスリストを更新すると、/turtle1/...に加えて新しいタートルに関連するサービス/turtle2/...が表示されるようになります。
5.2 set_penサービスの試行
次に、/set_penサービスを使用してturtle1に独特のペンを与えましょう:

0から255の間のr、g、bの値は、turtle1が描画するペンの色を設定し、widthは線の太さを設定します。
turtle1に明確な赤い線で描画させるには、rの値を255に、widthの値を5に変更します。値を更新した後、忘れずにサービスを呼び出してください。
turtle_teleop_keyを実行しているターミナルに戻り、矢印キーを押すと、turtle1のペンが変更されたことがわかります。

turtle2を動かす方法がないことにも気づいたでしょう。これは、turtle2用のteleop ノードがないためです。
6 リマッピング
turtle2を制御するには、2番目のteleopノードが必要です。しかし、以前と同じコマンドを実行しようとすると、これもturtle1を制御することがわかります。この動作を変更する方法は、cmd_velトピックをリマップすることです。
新しいターミナルで、ROS 2をソースして実行します:
$ ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_velこれで、このターミナルがアクティブな時にturtle2を、turtle_teleop_keyを実行している他のターミナルがアクティブな時にturtle1を動かすことができます。

7 turtlesimの終了
シミュレーションを停止するには、turtlesim_nodeターミナルでCtrl + Cを、turtle_teleop_keyターミナルでqを入力できます。
まとめ
turtlesimとrqtの使用は、ROS 2のコア概念を学習する優れた方法です。
次のステップ
turtlesimとrqtが稼働し、それらの動作方法のアイデアを得たので、次のチュートリアル「ノードの理解」で最初のコアROS 2概念に深く掘り下げましょう。
関連コンテンツ
turtlesimパッケージはros_tutorialsリポジトリにあります。
このコミュニティ提供のビデオでは、このチュートリアルで扱われている多くの項目が実演されています。