[ROS2 ガイド-19] Launch を使用して複数のノードを起動/監視する

ROS 2 ブート システム

ROS 2 のスタートアップ システムは、ユーザーがシステムの構成を記述し、記述されたとおりに実行できるようにする役割を担っています。システムの構成には、実行するプログラム、実行する場所、プログラムに渡される引数、およびコンポーネントに異なる構成を提供することでシステム全体でコンポーネントを簡単に再利用できるようにする ROS 固有の規則が含まれます。また、開始されたプロセスのステータスを監視し、これらのプロセスのステータスの変更を報告したり、それに応答したりする責任もあります。

Python で書かれた起動ファイルは、さまざまなノードを起動および停止し、さまざまなイベントをトリガーおよび処理できます。このフレームワークを提供するパッケージは、launch_ros次の非 ROS 固有launchフレームワークを使用します。

設計文書には、 ROS 2 の起動システムの設計目標が詳しく記載されています (現在、すべての機能が利用できるわけではありません)。

ROS 2 スタートアップ ファイルの書き込み

まだお読みでない場合は、ROS 2 パッケージの作成方法に関するクイック スタート チュートリアルを必ずお読みください。ROS 2 でスタートアップ ファイルを作成する 1 つの方法は、ROS 2 CLI ツールによって実行される Python ファイルを使用することです。まず、新しいディレクトリの作成を使用してワークスペースに ROS 2 パッケージを作成します。ros2 launchros2 pkg create <pkg-name> --dependencies [deps]launch

Python パッケージ

Python パッケージの場合、ディレクトリは次のようになります。

src/ 
    my_package/ 
        launch/ 
        setup.py 
        setup.cfg 
        package.xml

Colcon が起動ファイルを見つけるには、 をdata_files使用する必要がありますsetup

私たちのsetup.pyドキュメントでは次のようになります。

import os 
from glob import glob 
from setuptools import setup 

package_name = 'my_package' 

setup( 
    # その他のパラメータ ... 
    data_files=[ 
        # ... その他のデータ ファイル
        # すべての起動ファイルを含めます。これがここで最も重要な行です! 
        (os. path.join('share', package_name), glob('launch/*.launch.py​​')) 
    ] 
)

C++ パッケージ

C++ パッケージを作成している場合は、CMakeLists.txt以下を追加することによってのみファイルを調整します。

# 起動ファイルをインストールします。
install(DIRECTORY 
  launch 
  DESTINATION share/${PROJECT_NAME}/ 
)

ファイルの最後まで (ただしament_package()の前)。

スタートアップファイルの書き込み

起動ディレクトリに、接尾辞.launch.py.を付けた新しい起動ファイルを作成しますmy_script.launch.py

.launch.py起動ファイルとして使用されるファイル拡張子は特に必要ありません。もう 1 つの人気のあるオプションは、初心者レベル_launch.py向けのスタートアップ ファイル チュートリアルですサフィックスを変更する場合は、それに応じてファイル内のパラメータを必ず調整してくださいglob()setup.py

起動ファイルでは、動詞の使用に対して をgenerate_launch_description()返すものを定義する必要がありますlaunch.LaunchDescription()ros2 launch

import launch 
import launch.actions 
import launch.substitutions 
import launch_ros.actions 


defgenerate_launch_description(): 
    return launch.LaunchDescription([ 
        launch.actions.DeclareLaunchArgument( 
            'node_prefix', 
            default_value=[launch.substitutions.EnvironmentVariable('USER'), ' _']、
            description='ノード名のプレフィックス')、
        launch_ros.actions.Node( 
            package='demo_nodes_cpp'、node_executable='talker'、output='screen'、
            node_name=[launch.substitutions.LaunchConfiguration('node_prefix' ), '話し手']), 
    ])

使用法

スタートアップ ファイルはスタンドアロン スクリプトとして作成できますが、ROS での一般的な使用法は、ROS 2 ツールにスタートアップ ファイルを呼び出すことです。

ワークスペースを実行してソースした後、次のように起動ファイルを起動できるようになります。colcon build

ros2 起動 my_package script.launch.py

ROS 2 起動コンセプト例

この例の起動ファイルは 2 つのノードを起動します。そのうちの 1 つは管理されたライフサイクルを持つノード(「ライフサイクル ノード」) です。イベントは、起動されたライフサイクル ノードを介して状態間を遷移するときにlaunch_ros自動的に発行されますその後、起動フレームワークを介してイベントに対応できます。たとえば、ライフサイクル ノードを通じて起動されたライフサイクル ノードには、launch_ros他のイベント (別の状態遷移の要求など) を発行したり、他のアクション(別のノードの起動など) をトリガーしたりすることによって、イベント ハンドラーが自動的に組み込まれます。

上記の例では、さまざまな遷移リクエストがライフサイクル ノード に対して行われtalker、その遷移イベントはlistener、たとえば、ライフサイクル トーカーが適切な状態に到達したときにノードを起動することによって応答します。

書類

スタートアップ ドキュメントには、に関する情報が記載されていますlaunch_ros

追加のドキュメント/機能サンプルも近々公開される予定です。3 つのソース コードを同時に表示します。

おすすめ

転載: blog.csdn.net/weixin_39538031/article/details/130085170