Skip to content

turtlesimros2rqtの使用

目標: 今後のチュートリアルに備えて、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:

bash
$ sudo apt update
$ sudo apt install ros-humble-turtlesim

macOS:

bash
$ brew install ros-humble-turtlesim

Windows:

cmd
> call C:\dev\ros2_humble\setup.bat
> colcon build --packages-select turtlesim

パッケージがインストールされているかを確認するには、次のコマンドを実行します。これはturtlesimの実行可能ファイルのリストを返すはずです:

bash
$ ros2 pkg executables turtlesim
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

2 turtlesimの開始

turtlesimを開始するには、ターミナルで次のコマンドを入力します:

bash
$ 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]

コマンドの下に、ノードからのメッセージが表示されます。そこで、デフォルトのタートルの名前とそれがスポーンする座標を確認できます。

シミュレータウィンドウが表示され、中央にランダムなタートルが配置されます。

turtlesim

3 turtlesimの使用

新しいターミナルを開き、再度ROS 2をソースします。

次に、最初のノードでタートルを制御するために新しいノードを実行します:

bash
$ ros2 run turtlesim turtle_teleop_key

この時点で、3つのウィンドウが開いているはずです:turtlesim_nodeを実行しているターミナル、turtle_teleop_keyを実行しているターミナル、そしてturtlesimウィンドウです。turtlesimウィンドウが見えるように、またturtle_teleop_keyを実行しているターミナルがアクティブになるようにこれらのウィンドウを配置して、turtlesimでタートルを制御できるようにします。

キーボードの矢印キーを使用してタートルを制御します。画面上を移動し、付属の「ペン」を使用してこれまでにたどった軌跡を描画します。

注意

矢印キーを押すと、タートルは短い距離だけ移動して停止します。これは現実的に、例えばオペレーターがロボットとの接続を失った場合に、ロボットが指示を実行し続けることを望まないからです。

ノードとそれらに関連するトピック、サービス、アクションは、それぞれのコマンドのlistサブコマンドを使用して確認できます:

bash
$ ros2 node list
$ ros2 topic list
$ ros2 service list
$ ros2 action list

これらの概念については、今後のチュートリアルで詳しく学習します。このチュートリアルの目標はturtlesimの概要を得ることのみなので、rqtを使用してturtlesimのサービスの一部を呼び出し、turtlesim_nodeと対話します。

4 rqtのインストール

新しいターミナルを開いてrqtとそのプラグインをインストールします:

Ubuntu Linux:

bash
$ sudo apt update
$ sudo apt install '~nros-humble-rqt*'

macOS:

bash
$ brew install ros-humble-rqt*

Windows: 通常、rqtはROS 2インストールに含まれています。

rqtを実行するには:

bash
$ rqt

5 rqtの使用

rqtを初回実行する際、ウィンドウは空白になります。心配無用です。上部のメニューバーから「Plugins > Services > Service Caller」を選択してください。

注意

rqtがすべてのプラグインを見つけるのに時間がかかる場合があります。「Plugins」をクリックしても「Services」やその他のオプションが表示されない場合は、rqtを閉じてターミナルでrqt --force-discoverコマンドを入力してください。

rqt

Serviceドロップダウンリストの左側にある更新ボタンを使用して、turtlesimノードのすべてのサービスが利用可能であることを確認してください。

Serviceドロップダウンリストをクリックしてturtlesimのサービスを確認し、/spawnサービスを選択します。

5.1 spawnサービスの試行

rqtを使用して/spawnサービスを呼び出しましょう。その名前から、/spawnがturtlesimウィンドウに別のタートルを作成することが推測できます。

Expressionカラムの空の一重引用符の間をダブルクリックして、新しいタートルにturtle2のような一意の名前を付けます。この式がnameの値に対応し、string型であることがわかります。

次に、新しいタートルをスポーンする有効な座標を入力します。例:x = 1.0y = 1.0

spawn

注意

デフォルトの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に独特のペンを与えましょう:

set_pen

0から255の間のr、g、bの値は、turtle1が描画するペンの色を設定し、widthは線の太さを設定します。

turtle1に明確な赤い線で描画させるには、rの値を255に、widthの値を5に変更します。値を更新した後、忘れずにサービスを呼び出してください。

turtle_teleop_keyを実行しているターミナルに戻り、矢印キーを押すと、turtle1のペンが変更されたことがわかります。

new_pen

turtle2を動かす方法がないことにも気づいたでしょう。これは、turtle2用のteleop ノードがないためです。

6 リマッピング

turtle2を制御するには、2番目のteleopノードが必要です。しかし、以前と同じコマンドを実行しようとすると、これもturtle1を制御することがわかります。この動作を変更する方法は、cmd_velトピックをリマップすることです。

新しいターミナルで、ROS 2をソースして実行します:

bash
$ ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel

これで、このターミナルがアクティブな時にturtle2を、turtle_teleop_keyを実行している他のターミナルがアクティブな時にturtle1を動かすことができます。

remap

7 turtlesimの終了

シミュレーションを停止するには、turtlesim_nodeターミナルでCtrl + Cを、turtle_teleop_keyターミナルでqを入力できます。

まとめ

turtlesimとrqtの使用は、ROS 2のコア概念を学習する優れた方法です。

次のステップ

turtlesimとrqtが稼働し、それらの動作方法のアイデアを得たので、次のチュートリアル「ノードの理解」で最初のコアROS 2概念に深く掘り下げましょう。

関連コンテンツ

turtlesimパッケージはros_tutorialsリポジトリにあります。

このコミュニティ提供のビデオでは、このチュートリアルで扱われている多くの項目が実演されています。

Released under the MIT License.