ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ROS2] launch 파일 작성법
    ROS 2024. 3. 8. 14:38
    728x90

     먼저 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
Designed by Tistory.