Skip to content

ros2doctorを使った問題の特定

目標: ros2doctorツールを使用してROS 2セットアップの問題を特定する。

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

所要時間: 10分

背景

ROS 2セットアップが期待通りに動作していない場合、ros2doctorツールで設定をチェックできます。

ros2doctorは、プラットフォーム、バージョン、ネットワーク、環境、実行中のシステムなど、ROS 2のあらゆる側面をチェックし、考えられるエラーや問題の原因について警告を発します。

前提条件

ros2doctorros2cliパッケージの一部です。 ros2cliがインストールされている限り(通常のインストールでは含まれています)、ros2doctorを使用できます。

このチュートリアルでは、いくつかの例を説明するためにturtlesimを使用します。

タスク

1 セットアップの確認

まず、ros2doctorを使ってROS 2セットアップ全体を調べてみましょう。 新しいターミナルでROS 2をソースし、以下のコマンドを入力します:

bash
ros2 doctor
All <n> checks passed

これにより、すべてのセットアップモジュールに対してチェックが実行され、警告とエラーが返されます。 ROS 2セットアップが完璧な状態であれば、上記のようなメッセージが表示されます。

ただし、いくつかの警告が返されることは珍しくありません。 UserWarningは、セットアップが使用できないことを意味するものではありません。むしろ、何かが理想的でない方法で設定されていることを示している可能性が高いです。

警告を受け取った場合、次のような形式になります:

<path>: <line>: UserWarning: <message>

例えば、不安定なROS 2ディストリビューションを使用している場合、ros2doctorは以下の警告を発見します:

UserWarning: Distribution <distro> is not fully supported or tested. To get more consistent features, download a stable version at https://index.ros.org/doc/ros2/Installation/

ros2doctorがシステムで警告のみを発見した場合でも、All <n> checks passedメッセージが表示されます。

ほとんどのチェックは、エラーではなく警告として分類されます。 ros2doctorが返すフィードバックの重要性を判断するのは、主にユーザーであるあなた次第です。 セットアップに稀なエラーが発見された場合、UserWarning: ERROR:で示され、チェックは失敗と見なされます。

以下のような問題フィードバックのリストに似たメッセージが表示されます:

1/3 checks failed

Failed modules:  network

エラーは、システムがROS 2にとって重要な設定や機能を欠いていることを示します。 エラーは、システムが適切に機能することを保証するために対処する必要があります。

2 システムの確認

実行中のROS 2システムを調べて、問題の考えられる原因を特定することもできます。 実行中のシステムでros2doctorの動作を確認するために、ノード同士が積極的に通信しているturtlesimを実行してみましょう。

新しいターミナルを開き、ROS 2をソースし、以下のコマンドを入力してシステムを起動します:

bash
ros2 run turtlesim turtlesim_node

別のターミナルを開き、ROS 2をソースしてteleopコントロールを実行します:

bash
ros2 run turtlesim turtle_teleop_key

今度は専用のターミナルで再びros2doctorを実行します。 以前にros2doctorをセットアップで実行したときに警告やエラーがあった場合、それらが表示されます。 その後に、システム自体に関連するいくつかの新しい警告が続きます:

bash
ros2 doctor
UserWarning: Publisher without subscriber detected on /turtle1/color_sensor.
UserWarning: Publisher without subscriber detected on /turtle1/pose.

/turtlesimノードが購読されていない2つのトピックにデータをパブリッシュしており、ros2doctorはこれが問題につながる可能性があると考えているようです。

/color_sensor/poseトピックをエコーするコマンドを実行すると、パブリッシャーにサブスクライバーが存在するようになるため、これらの警告は消えます。

turtlesimがまだ実行中の間に2つの新しいターミナルを開き、それぞれでROS 2をソースし、それぞれのターミナルで以下のコマンドのいずれかを実行してこれを試すことができます:

bash
ros2 topic echo /turtle1/color_sensor
bash
ros2 topic echo /turtle1/pose

次に、専用のターミナルで再びros2doctorを実行します。 publisher without subscriberの警告は消えます。 (echoを実行したターミナルで必ずCtrl+Cを入力してください)。

次に、turtlesimウィンドウを終了するか、teleopを終了し、再びros2doctorを実行してみてください。 システム内の1つのノードが利用できなくなったため、異なるトピックに対してpublisher without subscriberまたはsubscriber without publisherを示すより多くの警告が表示されます。

多くのノードを持つ複雑なシステムでは、ros2doctorは通信問題の考えられる原因を特定するのに非常に価値があります。

3 完全なレポートの取得

ros2doctorは、ネットワーク、システムなどについての警告を知らせますが、--report引数を付けて実行すると、問題の分析に役立つより詳細な情報が得られます。

ネットワークセットアップについて警告を受けた場合に、設定のどの部分が警告の原因となっているかを正確に知りたい場合、--reportを使用することを推奨します。

ROS 2のサポートチケットを開く必要がある場合にも非常に役立ちます。 レポートの関連部分をコピーしてチケットに貼り付けることで、支援する人があなたの環境をよりよく理解し、より良い支援を提供できます。

完全なレポートを取得するには、ターミナルで以下のコマンドを入力します:

bash
ros2 doctor --report

これにより、5つのグループに分類された情報のリストが返されます:

NETWORK CONFIGURATION
...

PLATFORM INFORMATION
...

RMW MIDDLEWARE
...

ROS 2 INFORMATION
...

TOPIC LIST
...

ここの情報をros2 doctorを実行したときに得られる警告と照合することができます。 例えば、ros2doctorが(前述の)ディストリビューションが「完全にサポートされていない、またはテストされていない」という警告を返した場合、レポートのROS 2 INFORMATIONセクションを確認するかもしれません:

distribution name      : <distro>
distribution type      : ros2
distribution status    : prerelease
release platforms      : {'<platform>': ['<version>']}

ここでdistribution statusprereleaseであることがわかり、これが完全にサポートされていない理由を説明しています。

まとめ

ros2doctorは、ROS 2セットアップと実行中のシステムの問題について通知します。 --report引数を使用することで、これらの警告の背後にある情報をより深く調べることができます。

ros2doctorはデバッグツールではないことを覚えておいてください。コードのエラーやシステムの実装側のエラーには役立ちません。

関連コンテンツ

ros2doctorのREADMEでは、さまざまな引数について詳しく説明されています。 ros2doctorリポジトリを見回すこともお勧めします。初心者にやさしく、貢献を始めるのに最適な場所です。

次のステップ

初心者レベルのチュートリアルが完了しました!

Released under the MIT License.