이번 포스팅에서는 지난 포스팅에 이어서, roslaunch 프로그래밍을 조금 더 공부해보자.
이번 포스팅에서 다룰 주제는 launch 파일을 작성할 때 사용하는 태그들에 대한 내용이다.
launch 태그는 .launch 파일의 root 태그로써, 모든 태그는 launch 태그 내부에 작성된다.
<launch>
<!-- 모든 내용은 이 안에 작성된다. -->
</launch>
또 다른 예시는 다음과 같다.
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="sim" output=
screen" />
</launch>
이런 식으로 launch 태그 내부에 각종 다른 태그들을 작성해서, launch 파일을 작성할 수 있다.
node 태그는 roslaunch 파일에서 ROS 노드를 실행시키기 위해서 사용한다.
node 태그 내부에서 사용할 수 있는 속성들은 다음과 같다.
예시를 들면 다음과 같다.
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="sim" output=
screen" />
</launch>
또 다른 예시는 다음과 같다.
<launch>
<!-- Parameter 설정 -->
<param name="parameter_name" value="parameter_value" />
<!-- Node 실행 -->
<node pkg="package_name" type="executable_name" name="node_name" output="screen">
<!-- Node에 전달할 인자 -->
<param name="param_name" value="param_value" />
<rosparam command="load" file="$(find package_name)/config/config.yaml" />
</node>
<!-- Grouping Nodes (옵션) -->
<group ns="namespace">
<node pkg="package_name" type="executable_name" name="node_name" />
</group>
<!-- Include 다른 launch 파일 (옵션) -->
<include file="$(find package_name)/launch/other_launch_file.launch" />
</launch>
machine 태그는 노드를 다른 컴퓨터에서 실행할 때 사용한다.
machine 태그에서 사용할 수 있는 주요 속성은 다음과 같다.
예시를 들면 다음과 같다.
<launch>
<machine name="remote_machine" address="192.168.1.2" user="user_name" env-loader="/home/user/env.sh"/>
<node pkg="my_package" type="my_node" machine="remote_machine"/>
</launch>
include 태그는 launch 파일 내부에서 다른 패키지에 작성되어있는 .launch 파일을 같이 불러와서, 같이 실행시키기 위해서 사용한다.
<launch>
<include file="$(finde_my_package)/launch/other.launch"/>
</launch>
remap 태그는 특정 토픽 이름을 다른 이름으로 바꿔어서 노드에 전달할 때 사용한다.
<launch>
<node pkg="turtlesim type="turtlesim_node" name="sim>
<remap from="/turtle1/cmd_vel" to-"/new_cmd_vel" />
</node>
</launch>
env 태그는 노드를 실행할 때 환경 변수를 설정하기 위해서 사용한다
<launch>
<node pkg="my_package" type="my_node" name="my_node">
<env name="MY_ENV_VAR" value="some_value"/>
</node>
</launch>
param 태그는 launch 파일 내부에서 파라미터의 값을 설정하기 위해서 사용하며, 쉘 명령어에서 rosparam set과 유사한 역할과 기능을 수행한다.
<launch>
<param name="background_r" value="255" type="int"/>
<param name="robot_name" value="my_robot" type="string"/>
</launch>
rosparam 태그는 param 태그와 매우 유사하지만, launch 파일 내부에서 값을 세팅하는 것이 아니라 YAML 형식으로 작성된 파일에서 ROS 파라미터 서버로 파라미터를 로드하거나, 특정 파라미터를 설정하는데 사용된다.
rosparam load 명령어와 거의 같은 역할과 기능을 수행한다.
<launch>
<rosparam command="load" file="$(find_my_package)/config/params.yaml">
</launch>
group 태그에서는 노드들을 그룹화 하여, 특정 네임스페이스(namspace) 안에서 실행하거나, 공통 속성을 적용하는 데 사용한다.
<launch>
<group ns="robot1">
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
</group>
</launch>
test 태그는 ROS 테스트 프레임워크인 rostest를 통해서 테스를 실행하는데 사용한다. 주요 속성은 node와 거의 비슷하나, 실질적으로 잘 사용할 일은 없다.
arg 태그는 launch 파일에서 사용할 수 있는 매개변수(인수)를 정의한다.
<launch>
<arg name="robot_name" default="my_robot" />
<node pkg="my_package" type="my_node" name="$(arg robot_name)" />
</launch>
이제 여러 태그들을 복합적으로 가지고 있는 launch 파일의 예시를 살펴보자.
<launch>
<!--Argument 정의-->
<arg name="robot_name" default="my_robot"/>
<!--Parameter 설정-->
<param name="robot_speed" value="10" type="int"/>
<!--YAML 파일로부터 파라미터 로드-->
<rosparam command="load" file="$(find_my_package)/config/robot_params.yaml"/>
<!--원격 머신에서도 노드 실행-->
<machine name="remote_machine address="192.168.1.2" user="user_name"/>
<!--그룹 내에서 노드 실행-->
<group ns="$(arg robot_name)">
<node pkg="turtlesim" type="turtlesim_node" name="sim">
<!--토픽 remap>
<remap from="turtle/cmd_vel" to="/$(arg robot_name)/cmde_vel"/>
<!--환경 변수 설정-->
<env name="ROBOT_ENV" value="production"/>
</node>
</group>
<include file="$(find_my_package)/launch/other_launch.launch"/>
</launch>