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 launch
ros2 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
、たとえば、ライフサイクル トーカーが適切な状態に到達したときにノードを起動することによって応答します。