1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROS2講座17 parameterを使う2

Posted at

環境

この記事は以下の環境で動いています。

項目
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

目次ページへのリンク

ROS2講座の目次へのリンク

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?