파일시스템 개념의 간략한 소개
Packages: 패키지는 ROS 코드의 소프트웨어 구조 단위입니다. 각각의 패키지는 라이브러리, 실행파일, 스크립트 등을 담고 있습니다.
Manifest (package.xml): 매니패스트는 패키지에 대한 설명을 기록한 것입니다. 이것은 패키지간의 의존성과 패키지의 버전, 관리자, 라이센스 등의 메타 정보를 관리하는 데 쓰입니다.
참고: rosbuild를 사용하시던 사용자들은 스택의 개념이 사라진 것에 당황하셨을 지도 모릅니다. catkin에서는 보다 나은 패키지 배포를 위해 stack의 개념을 없앴습니다. catkin에서는 metapackages(en)을 정의해서 한 개의 VCS 저장소에 복수의 유사한 패키지를 모아 관리할 수 있습니다.
파일시스템 도구
ROS에서 코드는 여러 패키지에 산재되어 있습니다. ls나 cd와 같은 명령어 만으로 이들을 찾아다니는 일은 매우 짜증스러운 일이 아닐 수 없습니다. 이를 위해 ROS에서는 몇 가지 도구를 제공합니다.
rospack 사용하기
rospack 은 패키지의 정보를 제공하는 도구입니다. 이 자습서에서는 패키지의 경로를 반환해 주는 find옵션만을 다루게 됩니다.
사용 방법:
# rospack find [package_name]
예시:
$ rospack find roscpp
결과:
YOUR_INSTALL_PATH/share/roscpp
우분투 리눅스에서 apt를 통해 ROS를 설치하신 분들이라면 정확히 아래와 같은 결과를 보여줄 것입니다.
/opt/ros/groovy/share/roscpp
roscd 사용하기
roscd는 rosbash 도구모음의 일부입니다. 이 도구는 패키지의 이름만으로 cd 처럼 폴더를 이동할 수 있습니다
사용 방법:
# roscd [locationname[/subdir]]
예시:
$ roscd roscpp
roscpp 패키지가 있는 폴더로 제대로 변경되었는가를 확인하기 위해 유닉스 명령어 pwd를 사용해 봅시다.
$ pwd
아래와 비슷한 결과가 출력된다면 성공입니다.
YOUR_INSTALL_PATH/share/roscpp
YOUR_INSTALL_PATH/share/roscpp이 자습서의 초반에 소개한 rospack find 의 결과와 일치한다는 사실도 알아두시면 좋겠습니다.
다른 ROS 도구들과 마찬가지로 roscd는 $ROS_PACKAGE_PATH에 등록된 경로 안에 있는 ROS 패키지 만을 검색합니다. $ROS_PACKAGE_PATH의 값은 아래의 명령으로 확인할 수 있습니다.
$ echo $ROS_PACKAGE_PATH
$ROS_PACKAGE_PATH를 수정하지 않은 경우의 결과는 아래와 같습니다.
YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks
다른 환경변수와 비슷하게 $ROS_PACKAGE_PATH도 ':'을 이용해 복수의 경로를 추가할 수 있습니다.
하위 폴더
또한 roscd 는 패키지나 스택 안의 하위 폴더로 이동하는 데 쓰일 수 있습니다.
아래의 명령을 실행 해 보세요.
$ roscd roscpp/cmake $ pwd
아래의 결과가 출력되면 정상입니다.
YOUR_INSTALL_PATH/share/roscpp/cmake
roscd log
roscd log는 ROS의 로그파일이 저장되는 폴더로 이동하는 명령입니다. 만약 한번도 ROS프로그램을 실행해 본 적이 없다면 폴더를 찾을 수 없다는 경고가 발생합니다.
한번 이상 ROS 프로그램을 실행해 보신 경우 아래의 명령을 수행해 보시길 바랍니다.
$ roscd log
rosls 사용하기
rosls는 rosbash 도구모음의 일부입니다. 이것은 사용자가 지정한 패키지나 스택, 또는 일반적인 경로에 대해 바로 ls를 실행하는 것과 같은 결과를 보여줍니다.
사용 방법:
$ rosls [locationname[/subdir]]
예시:
$ rosls roscpp_tutorials
결과:
bin cmake manifest.xml srv
Tab 자동완성
패키지의 정확한 이름을 일일히 입력하는 것은 매우 귀찮은 일입니다. 이전의 자습서에서 roscpp_tutorials를 일일히 입력하던 것을 떠올려 보시길 바랍니다. 다행스럽게도 ROS의 도구들은 TAB 자동완성을 지원합니다.
사용예시:
$ roscd roscpp_tut<<< now push the TAB key >>>
TAB키를 누르고 나면 나머지가 자동으로 완성됨을 보실 수 있을 것입니다.
$ roscd roscpp_tutorials/
사실 이 결과는 roscpp_tutorials가 roscpp_tut로 시작하는 유일한 ROS 패키지였기 때문에 바로 자동완성이 작동한 것입니다.
한번 아래의 예제로 다시 시험해 보세요.
$ roscd tur<<< now push the TAB key >>>
TAB키를 누르면 자동으로 글자가 입력되는데, 이는 특정한 패키지를 가리키고 있는 것이 아닙니다.
$ roscd turtle
이 경우는 ROS상에 turtle로 시작하는 다양한 패키지가 있어 발생하는데, TAB키를 한번 더 눌러보면 turtle로 시작하는 모든 패키지의 목록을 얻을 수 있습니다.
turtle_actionlib/ turtlesim/ turtle_tf/
그렇지만 명령줄에는 아직 아래와 같이 표시되고 있을 것입니다.
$ roscd turtle
이제 turtle의 뒤에 s를 입력하고 TAB을 눌러봅니다.
$ roscd turtles<<< now push the TAB key >>>
turtles로 시작하는 패키지는 하나밖에 없기 때문에 아래와 같은 결과가 출력됩니다.
$ roscd turtlesim/
복습
여러분들은 이제 ROS 도구들이 어떤 규칙을 가지고 이름지어 졌는지 감을 잡으셨으리라 생각합니다.
- rospack = ros + pack(age)
- roscd = ros + cd
- rosls = ros + ls
이러한 명명 규칙은 많은 ROS 도구들에서 비슷하게 적용됩니다.