회사에서 어쩌다 보니 LiDAR 프로젝트 담당자가 되어버려 ROS 공부를 시작하게되었다. ^^;
외에도 할 일이 많기 때문에, 프로젝트에서 필요한 ROS 개념만 먼저 공부하고 기록해둘 생각이다.
roslaunch
는 SSH를 통해 로컬 및 원격으로 여러 ROS 노드를 쉽게 launching 할 수 있는 도구이며 Parameter Server 에 매개 변수를 설정할 수 있습니다. 또한 이미 사망한 프로세스를 자동으로 재시작하는 옵션이 포함되어 있다.
roslaunch
는 설정할 매개 변수와 실행할 노드 및 실행할 시스템을 지정하는 하나 이상의 XML 구성 파일(.launch 확장자인)을 가져온다.
roslaunch 패키지에는 roslaunch.launch/XML 형식을 읽는 roslaunch tool이 포함되어 있고, 이러한 파일을 사용하는 데 도움이 되는 다양한 지원 tool 도 포함되어 있다.
roslaunch 는 실행되어야 하는 node 들, setting 되어야 하는 parameters, ROS nodes 모음 실행을 위한 attributes 를 설명하는 XML 파일을 사용한다.
roscore는 "core" ROS 시스템을 시작하기 위한 rosaunch tool의 전문화이다.
--wait 인수가 제공되지 않은 경우, Roslaunch는 실행 중이 아님을 감지하면 자동으로 Roscore를 시작한다.
참고: race condition 때문에 로스코어의 1톤 인스턴스를 보장하는 데 로스코어를 사용하면 안 됩니다.
Ref. SIG for roslaunch
roslaunch_add_file_check
CMake macro 는 launch files 의 arguments, dependencies, packages, nodes 누락과 같은 일반적인 에러를 확인하는데 사용된다.
The following is how you would check all *, launch files in a package's "launch" directory:
find_package(catkin REQUIRED COMPONENTS roslaunch)
roslaunch_add_file_check(launch)
roslaunch_add_file_check
takes only one directory at a time.The check runs during tests. So something like following is cleaner.
if (CATKIN_ENABLE_TESTING)
find_package (roslaunch REQUIRED)
roslaunch_add_file_check(launch)
endif()
위 예시와 같이 find_package
에서 roslaunch
를 찾아야하기 때문에, package.xml
에 종속성(dependency) 을 명시적으로 추가하는 것이 좋다.
following:
<build_depend>roslaunch</build_depend>
macro 는 single diretory 또는 file argument 를 허용한다. 기본적으로, catkin 생성 Makefile 에 테스트 대상을 추가한다.
package가 test를 위한 dependency를 정의할 경우(e.g. test_depend) "USE_TEST_DEPENDENCIES" 를 roslaunch_add_file_check 에 전달한다. 이는 test 중에 발생하는 이러한 이슈를 피하게 한다.
ROS 의 launch 파일을 사용하면 ROS-master 를 포함하여 여러 개의 ROS node 를 동시에 시작할 수 있다
launch 파일을 통해 여러가지 노드 또는 설정 값을 한 번에 수정해 ROS 를 운용할 수 있다
XML 형식으로 작성하며 아래와 같은 약속된 구조가 존재한다.
1. launch 파일의 가장 기본 구조 :
<launch> ~~ </launch>
2. 운영하고자 하는 노드 실행 :<node pkg="패키지명" type="실행시킬노드명" name="실행되는 동안의 노드이름(정할 수 있음)" output="screen"> ~~ </node>
->pkg
: ros package 이름
->type
: 현재 운용하고자 하는 노드의 형태 / 보통은 노드를 작성할 때 해당 노드 타입의 파일을 작성
ex) 노드 명 pkg_publsher 인 경우 pkg_publisher_node 와 같은 노드 타입을 작성
->name
: 해당 노드의 이름을 제시
->output
: "screen" 은 모든 노드의 출력이 한 터미널에서 표시되도록 함
3.rosparam
의 경우 ros 네트워크 상에서 주고 받는 변수 값들에 대하여 정의 또는 수정하도록 사용할 수 있음
<!-- example -->
<launch>
<arg name="" default=""/>
<rosparam command="" file=""/>
<node pkg="" type="" name"" output="screen"/>
<!--
...
-->
</launch>
pkg directory 에 launch directory 를 생성
diretory 하위에 파일명.launch 파일을 생성
launch 파일 구조에 맞추어 작성
$ roslaunch [package-name] [launch-file-name.launch]
Reference