Tnote

ROS, launch 파일(.xml) 본문

ROS

ROS, launch 파일(.xml)

jfl 2022. 2. 20. 22:26

launch 파일이란?

- 여러개의 노드를 한번에 실행 시킬 수 있는 파일

- 한 패키지의 launch 디렉토리에 존재함. (ex, .py 들은 src에 저장되는 거 처럼 .launch들은 launch에 저장)

- rosmater 실행 안해도 된다. (roscore)

 

launch 파일 실행 : roslaunch 패키지명 launch파일명; ex. roslaunch test_ws hector_mapping.launch

 

 

태그 : xml 을 구성하는 기본 단위, 어떤 설정이 붙은 키워드 같은 것으로 생각

(변수를 설정하고 싶으면 변수 설정과 관련된 태그를 사용해서 변수를 정의, 노드를 실행하고 싶으면 노드관련 태그를 사용해서 실행.... 와 같은 느낌)

* 태크는 반드시 열었으면 닫아줘야한다. />

@launch 태그 종류

  <launch> : launch 시작과 끝

  <node> : 노드 실행

  <include> : launch 실행, 다른 패키지에 있어도 가능

  <param> : 파라미터 설정

  <rosparam> : 매개변수를 로드 및 덤프(node에 종속해서 사용)

  <arg> : launch 파일 내 변수 설정

  <env> : 환경 변수 설정 (경로, IP ..)

...

 

@ launch 태그 상세

* 옵션 설정 안할꺼면 (추가 옵션) 빼고 그냥 /> 하면 된다.

* 옵션인 만큼 필요할 때만 쓰면되고, 무조건 넣어야 하는 부분만 기재함

<launch> 태그

  launch 파일의 시작과 끝을 나타내는 태그로 launch 파일을 구성하기 위한 양식으로 생각

  <launch> ~ </launch>

 

<node> 태그

  <node pkg="패키지명" type="실행할 노드명" name="실행 될 때 노드의 이름" (추가 옵션) />

    output="screen" : launch 파일 실행한 터미널에 출력하는 설정

    args="a" : 해당 노드에 a라는 인자를 전달하는 설정

 

<rosparam> 태그

  서버에서 매개변수를 로드 or 덤프하기 위해 YAML 파일을 사용할 수 있도록 한다.

  매개변수를 제거하는데 사용할 수도 있다.

  아래는 사용예시이다.

  <node ~>

      <rosparam ~ />

  </node>

* node를 단일로 쓸 때에는 <node ~ /> 으로 했다면,

종속시키기 위해서 <node ~> ~ </node> 로 할 것 (즉, 닫지말 것)

<include> 태그

  <include file="실행할 launch파일명(경로까지)" (추가 옵션) />

  다른 launch 파일(XML)을 가져올 수 있다.

 

<param> 태그

  <param name="파라미터명" value="파라미터 값" (추가옵션)/>

* 사실 param 태크는 ros wiki 찾아보면 나오지만, 값도 선택사항인데,

안넣으면 binfile, textfile, command를 대신 필수로 넣어줘야 하므로 우리는 값을 쓰기 때문에 일단 넣음.

 

+ param를 전역으로 설정할 때에는 아래 2번째 줄 형식으로 하면된다. 그러나, param를 지역으로 설정할 때에는 해당 종속시키고픈 node 끝에 /를 닫지말고 3번째 줄과 같이 param를 다 쓰고 node 닫는 태그를 사용할 것.

<arg> 태그

  <arg name="변수 이름" (추가옵션)/>

    default="기본값"

    value="넣고싶은 값", (단 default와 value는 같이 쓸 수 없다.)

    doc="변수 설명", 터미널에 --ros-args 하면 설명이 뜬다 help처럼

 

+주석 : <!-- 내용 --> // 주석안에 -- 쓰면 오류나므로 조심할 것.

 

@ xml 예시

1
2
3
4
5
6
7
8
9
<launch>    
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" />
 
    <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
    <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
    <param name="robot_description" command="$(find xacro)/xacro $(find ta_lab6)/urdf/racecar_2.xacro"/>
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find wecar)/rviz/gmapping_slam.rviz"/>
</launch>

cs

흐름 정리

slam_gmapping 실행 > joint_state_publisher 실행 > robot_state_publisher 실행 > 파라미터 정의 > rviz 실행

 

코드 설명

1 launch 파일 시작

2 node 실행 ("gmapping" 패키지의 "slam_gmapping" 노드를 "slam_gmapping" 이름으로 실행) // 4, 5도 같은 양상

6 파라미터 정의 ("robot_description" 매개변수에  "$(find ... .xacro"의 출력이 string 형태로 파라미터 저장)

7 2번과 동일하지만, "rviz" 노드에 "-d $(find we.....rviz" 인자 전달 옵션 추가

8 launch 파일 종료

 

[ xacro 파일 ]

일단 명령어를 기존보다 쉽게 작성한 파일이라고 정도 알고있을 것. (현재 우리가 가진 xacro 파일을 열어보면 수많은 파라미터 값들이 xacro:: 형태로 저장되 있는걸 볼 수 있음)

 

+22.03.01 추가

syntax error로 '<',  '/>', ',' 과 같은 기호의 문제라고 한다.

해당 XML launch 파일을 보니 태그의 모든 속성을 공백이 아닌 ,로 연결했다. (주의)