-
[ROS2] launch 파일 작성법ROS 2024. 3. 8. 14:38728x90
먼저 ROS1에서 Launch 파일은 XML형식의 파일로 작성을 진행하였는데,
ROS2로 넘어와서는 Python파일로 작성하게 되었다. (Python만 가능한 것은 아님!!)
*먼저 이번 포스트에서 예시로 보여드리기 위해 아래 튜토리얼 코드를 예시로 사용할 예정입니다.
GitHub - Road-Balance/gcamp_ros2_basic
Contribute to Road-Balance/gcamp_ros2_basic development by creating an account on GitHub.
github.com
먼저 실행시키는 명령어는 다음과 같다.(이전 ROS1과 크게 달라지진 않았다.)
ros2 launch <패키지명> <실행시킬 launch 파일명>
먼저 Launch 파일 문법에는 크게 다음과 같다.
1. Generate_launch_description
- roslaunch를 실행시키면, 이 이름을 가지고 찾아들어가기 때문에 launch파일에서 가장 먼저 보이는 부분이다.
2. LaunchDescription
- 이 부분에서는 말 그대로, 어떤 Node들을 실행시킬지 기술해둔 Description을 작성합니다. 다만 특정한 규칙으로 실행시킨 Node에 대한 옵션을 지정해주어야 하며, 여러 Node들의 실행이 필요할 수 있기에, 기본적으로 list의 구조를 가짐을 파악할 수 있습니다.
3. ExecuteProcess
- 프로세스 하나를 실행시킨다는 구분의 개념으로 생각하시면 된다.
- cmd : 아래 커먼트로 해당 노드를 실행 시킬 때 사용한다. "," 나눠진 부분은 스페이스바로 구분하여 명령어 작성하면 된다.
- output : Error log 등의 output이 출력되는 수단을 입력한다.
ExecuteProcess 예시
rviz_start = ExecuteProcess( cmd=["ros2", "run", "rviz2", "rviz2", "-d", rviz_config], output="screen" )
4. Node
- package**:** 실행 시킬 노드가 포함 되어있는 패키지명
- executable: 실행 시킬 노드 파일명
- parameters: 실행 시킬 Node의 매개 변수 추가
Node 예시
spawn_entity = Node( package='gazebo_ros', executable='spawn_entity.py', output='screen', arguments=['-topic', 'robot_description', '-entity', 'skidbot'], ) turtlebot_state_publisher = Node( package="robot_state_publisher", namespace=namespace, executable="robot_state_publisher", output="screen", parameters=[{"use_sim_time": False, "publish_frequency": 10.0}], remappings=remappings, arguments=[urdf], )
5. IncludeLaunchDescription
- 해당 함수를 통해 다른 패키지의 노드 실행도 가능하여 유용하다.
직접 만든 것이 아닌 다른 패키지에서 가져온 것도 활용하여 실행 할 수 있다.
# Start Gazebo server start_gazebo_server_cmd = IncludeLaunchDescription( PythonLaunchDescriptionSource(os.path.join(pkg_gazebo_ros, 'launch', 'gzserver.launch.py')), launch_arguments={'world': world_path}.items() ) #같은 패키지에 속한 런치 파일을 불러올 경우 IncludeLaunchDescription( PythonLaunchDescriptionSource( [ThisLaunchFileDir(), '/xxxxx.launch.py']), ), IncludeLaunchDescription( PythonLaunchDescriptionSource( [ThisLaunchFileDir(), '/yyyyy.launch.py']), ), #다른 패키지에 속한 런치 파일을 불러올 경우 IncludeLaunchDescription( PythonLaunchDescriptionSource( #bbbbb라는 다른 패키지의 이름을 입력해 준다 [get_package_share_directory('bbbbb'), '/launch/zzzzz.launch.py']), ),
# 직접 만든 Launch 파일일 경우)
해당 Launch파일이 사용자가 새로 직접만든 파일이라면 해당 파일이 속해있는 패키지에 CMakeList.txt 파일에 추가 해줘야한다.
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME} )
*향후 추가 작성 예정
# 참고)
1) https://velog.io/@hwang-chaewon/ROS-2040
2) https://puzzling-cashew-c4c.notion.site/ROS-2-Launch-launch-file-55c2125808ef4b64bade278852b37d6e
728x90'ROS' 카테고리의 다른 글
[Grid map] ROS2 GAZEBO -> PNG PGM PCD 생성 (0) 2024.12.11 [ROS2] OMO_R1mini gazebo (0) 2024.05.23 [우분투20.04] ROS1 + ROS2 세팅 (0) 2024.03.05 [ROS2] 3. Work Space 만들기 (0) 2024.02.03 [ROS2] 2. ROS2 Humble 설치 (0) 2024.02.01