이번 실습에서는 ROS 2의 Launch 프로그래밍을 학습했다. Python으로 Launch 파일을 작성하고, 여러 노드를 한 번에 실행하면서 파라미터 파일을 적용하는 과정을 실습했다.
ROS 2의 Launch는 여러 개의 노드를 한 번에 실행하거나 노드의 이름, 네임스페이스, 파라미터 파일 등의 실행 옵션을 설정할 수 있다. 이번 실습에서는 Python으로 Launch 파일을 작성했다. ROS 실습 자료
이번 실습에서는 기존에 사용했던 argument와 calculator 노드를 하나의 Launch 파일에서 실행하도록 구성했다.
Launch 파일은 다음 경로에 있는 arithmetic.launch.py를 사용했다.
~/robot_ws/src/ros2-seminar-examples/topic_service_action_rclpy_example/launch/arithmetic.launch.py
파일의 기본 구조는 generate_launch_description() 함수를 사용하고, LaunchConfiguration으로 파라미터 파일의 경로를 설정한다.
def generate_launch_description():
param_dir = LaunchConfiguration(
'param_dir',
default=os.path.join(
get_package_share_directory(
'topic_service_action_rclpy_example'),
'param',
'arithmetic_config.yaml'))
여기서 param_dir은 다음 YAML 파일을 가리킨다.
topic_service_action_rclpy_example/param/arithmetic_config.yaml
Launch 파일에서는 Node를 사용해 실행할 노드를 지정한다.
Node(
package='topic_service_action_rclpy_example',
executable='argument',
name='argument',
parameters=[param_dir],
output='screen'),
Node(
package='topic_service_action_rclpy_example',
executable='calculator',
name='calculator',
parameters=[param_dir],
output='screen'),
따라서 Launch 파일 하나를 실행하면 argument와 calculator가 함께 실행된다.
또한 두 노드에 동일한 arithmetic_config.yaml 파라미터 파일을 적용하도록 설정했다.
Python 패키지에서는 setup.py의 data_files에 Launch 파일과 YAML 파일을 등록해야 한다.
(share_dir + '/launch',
glob.glob(os.path.join('launch', '*.launch.py'))),
(share_dir + '/param',
glob.glob(os.path.join('param', '*.yaml'))),
이를 통해 launch 디렉터리의 .launch.py 파일과 param 디렉터리의 YAML 파일을 패키지 설치 과정에 포함시킬 수 있다.
Launch 파일을 패키지에서 사용할 수 있도록 패키지를 다시 빌드했다.
cd ~/robot_ws
colcon build --symlink-install \
--packages-select topic_service_action_rclpy_example
빌드가 정상적으로 완료된 후 ROS 2 환경을 다시 적용했다.
source ~/robot_ws/install/setup.zsh
이제 ros2 launch 명령어를 이용해 Launch 파일을 실행했다.
ros2 launch topic_service_action_rclpy_example arithmetic.launch.py
Launch 파일을 실행하면 argument와 calculator 노드가 함께 실행되며, 설정된 파라미터 파일도 적용된다.
이번 실습에서는 Python으로 작성된 ROS 2 Launch 파일을 이용해 여러 노드를 한 번에 실행하는 방법을 확인했다.
특히 LaunchConfiguration을 이용해 파라미터 파일을 지정하고, Node를 이용해 argument와 calculator를 실행하는 과정을 직접 실습했다.
또한 setup.py에 Launch 파일과 YAML 파일을 등록한 후 패키지를 빌드하고 ros2 launch 명령으로 정상적으로 실행되는 것을 확인했다.
이번 실습을 통해 ROS 2에서 여러 노드를 각각 ros2 run으로 실행하는 대신 Launch 파일을 사용해 여러 노드와 파라미터 설정을 한 번에 관리하고 실행하는 방법을 익혔다.