環境
この記事は以下の環境で動いています。
項目 | 値 |
---|---|
CPU | Core i5-8250U |
Ubuntu | 22.04 |
ROS2 | Humble |
概要
前回はROS2のパラメーターを操作するROSノードの記載について解説しました。今回はROS2の起動時でのROSパラメーターの動きを解説します。
runでのパラメーターの指定
'--ros-args -p (パラメーター名):=(パラメーター値)'を後ろにつけて実行します。
パラメーターを指定して実行
source ~/ros2_ws/install/setup.bash
ros2 run rclcpp_param_lecture param_server --ros-args -p int_param:=3
ros_launchでのパラメーターの指定
大きく分けてlaunchファイルで直接指定する方法とyamlファイルで指定する方法があります。指定するパラメーターの数が少ない時は前者、多い時は後者がおすすめです。なおこれらの記述を混ぜることも可能です。
launchファイルで直接指定
rclcpp_param_lecture/launch/param_by_dic.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_path
def generate_launch_description():
return LaunchDescription([
Node(
package='rclcpp_param_lecture',
executable='param_server',
parameters=[{'int_param': 4}],
output='screen',
emulate_tty=True,
),
])
-
Node
の引数のparameter
のリストの中に辞書型で指定します。
yamlファイルで指定
rclcpp_param_lecture/launch/param_by_yaml.launch.py
from launch import LaunchDescription
from launch.substitutions import PathJoinSubstitution
from launch_ros.substitutions import FindPackageShare
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='rclcpp_param_lecture',
executable='param_server',
parameters=[PathJoinSubstitution([FindPackageShare('rclcpp_param_lecture'), 'config', 'param_server.yaml'])],
output='screen',
emulate_tty=True,
),
])
-
Node
の引数のparameter
のリストの中で、yamlファイルのファイルパスを指定します。
rclcpp_param_lecture/config/param_server.yaml
/**:
ros__parameters:
int_param: 5
- ROS2では1プロセス中で複数のROSノードを実装することが可能です。この場合は(ノード名)/ros__parameters以下がそのROSノード毎ののパラメーター指定となります。ノード名はnamespaceも含むことに注意です。
-
/**
はワイルドカードになります。ROSノードが1つの場合はこれで良いでしょう
LaunchArgument経由で指定する
パラメーターとは別物ですが、ROS launchではlaunch argumentという引数を指定できます。この引数の値をパラメーターに渡すことで、ros launch時のコマンドでパラメーターを間接的に指定できます。
rclcpp_param_lecture/launch/param_by_arg.launch.py
from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
DeclareLaunchArgument(name='param', default_value='0', description='int parameter'),
Node(
package='rclcpp_param_lecture',
executable='param_server',
parameters=[{'int_param': LaunchConfiguration('param')}],
output='screen',
emulate_tty=True,
),
])
ros launch実行時に(arg名:=arg値)
という形で指定します。
実行
source ~/ros2_ws/install/setup.bash
ros2 launch rclcpp_param_lecture param_by_arg.launch.py param:=2