Search

[ROS2, launch] launch_ros.actions.Node의 arguments, parameters, ros_arguments, remappings, namespace 옵션

Last update:

개요

ROS2에서 Python launch파일 작성 시 launch_ros.actions.Node 클래스를 초기화할 때 전달하는 arguments, parameters, ros_arguments, remappings, namespace 파라미터에 대해 설명한다.

arguments

아래와 같은 커맨드라인 명령어가 있다고 치자.
ros2 run my_package my_node \ arg1 \ --ros-args \ -r __ns:=/my_robot \ -r /tf:=tf \ -p param1:=value1 \ --params-file /path/to/params1.yaml \ --params-file /path/to/params2.yaml
Shell
복사
위 명령어는 python launch 파일에서 아래처럼 arguments 파라미터만으로 작성할 수 있다.
from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): my_node = Node( package='my_package', executable='my_node', arguments=[ 'arg1', '--ros-args', '-r', '__ns:=/my_robot', '-r', '/tf:=tf', '-p', 'param1:=value1', '--params-file', '/path/to/params.yaml' ], ) return LaunchDescription(my_node)
Python
복사
arguments의 값으로 넘어간 배열들은 한 칸씩 띄어쓰기가 되어 들어간다. 즉, arguments 파라미터는 ros2 run my_package 이후에 입력하는 모든 인자들을 날것으로 전달할 수 있는 기본적인 파라미터이다.
그리고 나머지 parameters, ros_arguments, remappings, namespace 파라미터는 이 arguments 파라미터를 편리하게 쓸 수 있도록 만든 편의성 파라미터에 불과하다.

ros_arguments

ros_arguments--ros-args 옵션을 생략하고 인자를 넘길 수 있다.
# arguments 사용 시 arguments=[ '--ros-args', '--params-file', '/path/to/params1.yaml', ] # ros_arguments 사용 시 ros_arguments=[ '--params-file', '/path/to/params1.yaml', ]
Python
복사

remappings

remappings--ros-args -r 옵션을 생략하고 인자를 넘길 수 있다.
# arguments 사용 시 arguments=[ '--ros-args', '-r', '/tf:=tf', ] # remappings 사용 시 remappings=[ ('/tf', 'tf') ]
Python
복사

namespace

namespace--ros-args -r __ns:=/ 옵션을 생략하고 인자를 넘길 수 있다.
# arguments 사용 시 arguments=[ '--ros-args', '-r', '__ns:=/my_robot', ] # remappings 사용 시 namespace='my_robot'
Python
복사
단, --ros-args -r __ns:=/my_robot으로 namespace를 지정할 경우에는 맨 앞에 /가 와야하지만 namespace 파라미터 사용 시에는 그냥 넘겨도 맨 앞에 /가 알아서 붙는 차이점이 있다.

parameters

parameters--ros-args --params-file 옵션을 생략하고 파라미터 파일 경로를 넘길 수 있다.
# arguments 사용 시 arguments=[ '--ros-args', '--params-file', '/path/to/params1.yaml', '--params-file', '/path/to/params2.yaml' ] # parameters 사용 시 parameters=[ '/path/to/params1.yaml', '/path/to/params2.yaml' ] # PathJoinSubstitution 사용 시 parameters=[ PathJoinSubstitution( [ FindPackageShare("my_package"), "config", "config.yaml"] ) ]
Python
복사
parameters 파라미터에 dictionary도 넘길 수 있다.
my_node = Node( package='my_package', executable='my_node', parameters=[ {'param1': 'value1'}, {'param2': 'value2'} ], )
Python
복사
이 dictionary는 내부적으로 .yaml 파일로 변환된 후 /tmp 디렉터리에 저장되며, 마찬가지로 --params-file 옵션을 통해 .yaml 파일의 경로가 전달된다.
참고로 --params-file로 넘겨지는 모든 파일은 /tmp 경로에 랜덤한 이름으로 복사되어 넘겨진다. 만약 파일 간 충돌하는(중복되는) 파라미터가 있을 경우, 순서 상 뒤쪽에 넘겨진 파라미터가 이전 파라미터를 override한다. 예를 들어보자. 아래와 같은 my_config.yaml이 있다.
my_node: ros__parameters: param1: 'value1'
YAML
복사
아래처럼 launch할 경우
my_config_file = PathJoinSubstitution([ FindPackageShare("my_package"), "config", "my_config.yaml" ]) my_node = Node( package='my_package', executable='my_node', parameters=[ {"param1": "value from dictionary"}, my_config_file, ], )
Python
복사
결과는 아래와 같다.
[my_node-1] [INFO] [1744078825.248312005] [my_node]: param1: value from yaml
Shell
복사
parameters 배열의 순서를 뒤집을 경우
my_node = Node( package='my_package', executable='my_node', parameters=[ my_config_file, {"param1": "value from dictionary"}, ], )
Python
복사
결과는 아래와 같다.
[my_node-1] [INFO] [1744078873.322746678] [my_node]: param1: value from dictionary
Shell
복사

References

관련 문서