Skip to content

ノードの理解

目標: ROS 2におけるノードの機能と、それらと対話するためのツールについて学習します。

チュートリアルレベル: 初心者

所要時間: 10分

背景

1 ROS 2グラフ

次のいくつかのチュートリアルでは、「ROS(2)グラフ」と呼ばれるものを構成する一連のコアROS 2概念について学習します。

ROSグラフは、同時にデータを処理するROS 2要素のネットワークです。それらをすべてマップして視覚化した場合の、すべての実行可能ファイルとそれらの間の接続を包含しています。

2 ROS 2のノード

ROSの各ノードは、単一でモジュラーな目的を担当する必要があります。例えば、車輪モーターの制御やレーザー測距センサーからのセンサーデータの公開などです。各ノードは、トピック、サービス、アクション、またはパラメータを介して他のノードとデータを送受信できます。

Nodes-TopicandService

完全なロボットシステムは、協調して動作する多くのノードで構成されます。ROS 2では、単一の実行可能ファイル(C++プログラム、Pythonプログラムなど)は1つ以上のノードを含むことができます。

前提条件

前のチュートリアルでは、ここで使用するturtlesimパッケージのインストール方法を説明しています。

いつものように、開く新しいターミナルごとにROS 2をソースすることを忘れないでください。

タスク

1 ros2 run

ros2 runコマンドは、パッケージから実行可能ファイルを起動します。

bash
$ ros2 run <package_name> <executable_name>

turtlesimを実行するには、新しいターミナルを開いて次のコマンドを入力します:

bash
$ ros2 run turtlesim turtlesim_node

前のチュートリアルで見たように、turtlesimウィンドウが開きます。

ここで、パッケージ名はturtlesimで、実行可能ファイル名はturtlesim_nodeです。

しかし、まだノード名がわかりません。ノード名はros2 node listを使用して見つけることができます。

2 ros2 node list

ros2 node listは、実行中のすべてのノードの名前を表示します。これは、ノードと対話したい場合や、多くのノードを実行しているシステムがあり、それらを追跡する必要がある場合に特に便利です。

turtlesimが他のターミナルでまだ実行されている間に新しいターミナルを開き、次のコマンドを入力します。ターミナルはノード名を返します:

bash
$ ros2 node list
/turtlesim

別の新しいターミナルを開き、次のコマンドでteleopノードを開始します:

bash
$ ros2 run turtlesim turtle_teleop_key

ここでは、turtlesimパッケージを再び参照していますが、今度はturtle_teleop_keyという名前の実行可能ファイルをターゲットにしています。

ros2 node listを実行したターミナルに戻り、再度実行します。これで、2つのアクティブなノードの名前が表示されます:

bash
$ ros2 node list
/turtlesim
/teleop_turtle

2.1 リマッピング

リマッピングにより、ノード名、トピック名、サービス名などのデフォルトのノードプロパティをカスタム値に再割り当てできます。前のチュートリアルでは、turtle_teleop_keyでリマッピングを使用してcmd_velトピックを変更し、turtle2をターゲットにしました。

次に、/turtlesimノードの名前を再割り当てしましょう。新しいターミナルで、次のコマンドを実行します:

bash
$ ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

turtlesimで再度ros2 runを呼び出しているため、別のturtlesimウィンドウが開きます。ただし、ros2 node listを実行したターミナルに戻って再度実行すると、3つのノード名が表示されます:

bash
/my_turtle
/turtlesim
/teleop_turtle

3 ros2 node info

ノードの名前がわかったので、次のコマンドでそれらについてより多くの情報にアクセスできます:

bash
$ ros2 node info <node_name>

最新のノードmy_turtleを調べるには、次のコマンドを実行します:

bash
$ ros2 node info /my_turtle
/my_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Service Servers:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

ros2 node infoは、サブスクライバー、パブリッシャー、サービス、アクションのリストを返します。つまり、そのノードと対話するROSグラフ接続です。

次に、/teleop_turtleノードで同じコマンドを実行して、その接続がmy_turtleとどう異なるか確認してみてください。

今後のチュートリアルで、メッセージタイプを含むROSグラフ接続概念について詳しく学習します。

まとめ

ノードは、ロボットシステムにおいて単一でモジュラーな目的を果たす基本的なROS 2要素です。

このチュートリアルでは、実行可能ファイルturtlesim_nodeturtle_teleop_keyを実行することで、turtlesimパッケージで作成されたノードを利用しました。

アクティブなノード名を発見するためのros2 node listと、単一のノードを検査するためのros2 node infoの使用方法を学習しました。これらのツールは、複雑で実世界のロボットシステムにおけるデータの流れを理解するために不可欠です。

次のステップ

ROS 2のノードを理解したので、トピックチュートリアルに進むことができます。トピックは、ノードを接続する通信タイプの1つです。

関連コンテンツ

概念ページでは、ノードの概念にさらに詳細を追加しています。

Released under the MIT License.