[ROS] ROS의 파일 시스템

HY K·2024년 8월 7일
0

ROS1

목록 보기
4/34

이번에는 ROS의 파일 시스템에 대해서 알아보도록 하자.
참고한 링크는 다음과 같다.
https://cafe.naver.com/openrt/2500
https://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem

<목차>
1. 파일 시스템의 정의
2. ROS 파일 시스템
3. ROS 설치 폴더
4. 사용자 작업 폴더
5. ROS 파일 시스템 관련 기능, 명령어

1. 파일 시스템의 정의

먼저 파일 시스템이 무엇인지부터 짚고 넘어가자.

💡 파일: 주기억장치 혹은 디스크처럼 하드웨어 저장공간에 저장되는 데이터 집합을 의미한다

💡 파일 시스템: 저장 장치 내에서 데이터를 읽고 쓰기 위해 미리 정한 약속이다. 즉, 파일에 대해서 저장 및 검색, 데이터 보호, 공유, 백업 등 다양한 기능을 제공하는 시스템을 의미한다. 운영 체제가 데이터를 디스크에 어떻게 저장하고 검색하는지도 관여하며, 데이터를 파일과 디렉토리로 조직화 하고 디스크에 어떻게 배치할지도 결정한다.

이러한 파일 시스템은 리눅스 커널의 중요한 요소 중 하나이다.

2. ROS 파일 시스템

이제 리눅스의 파일 시스템의 정의를 알게 되었으니, ROS 파일 시스템에 대해서 살펴보자. ROS 파일 시스템은 ROS 설치 폴더 사용자 작업 폴더 로 구분된다.

💡 ROS 설치 폴더 : ROS를 설치하게 되면 /opt/ 폴더에 /ros 폴더가 생성되고, 그 안에 roscore를 포함한 핵심 유틸리티 및 rqt, rviz, 로봇 관련 라이브러리, 시뮬레이션, 네비게이션 등이 설치된다.

💡 사용자 작업 폴더 : 사용자가 원하는 곳에 폴더를 생성 가능하며, 통상적으로 ROS 작업 폴더인 ~/catkin_ws/에 설치한다.

3. ROS 설치 폴더

1) 설치 경로

"/opt/ros/{ros-distro}"에 설치된다.

2) 파일 구성

bin, etc, include, lib, share 폴더 + 환경 설정 파일들로 다양하게 구성되어 있다.

💡 세부적으로 살펴보도록 하자

  • /bin: 실행 가능한 바이너리 파일
  • /etc: ROS 및 catkin 관련 설정 파일
  • /include: 헤더 파일
  • /lib: 라이브러리 파일
  • /share: ROS 패키지
  • env.*: 환경설정 파일
  • setup.*: 환경설정 파일

4. 사용자 작업 폴더

사용자 작업 폴더는 사용자가 원하는 곳에 생성한 폴더를 의미하며, 통상적으로 리눅스/ROS 워크스페이스인 ~/catkin_ws의 하위 디렉토리로 생성한다.

catkin_ws 폴더는 "build", "devel", "src" 폴더로 구성되어 있다.

💡 세부적으로 살펴보도록 하자

  • /build: catkin 빌드 시스템의 빌드 환경 파일
  • /devel: catkin 빌드 시스템에 의해 빌드된 msg, srv 헤더 파일 및 사용자 패키지 라이브러리 및 실행 파일
  • /src: 사용자 패키지

통상적으로 이 src 폴더 하위에 사용자 패키지를 사용하게 된다.
사용자 패키지는 통상적으로 다음 폴더들로 구성되게 된다.

💡 세부적으로 살펴보면 다음과 같다.

  • /include: 헤더파일
  • /launch: roslaunch에 사용되는 스크립트
  • /node, /script: rospy용 스크립트
  • /msg: 메시지 파일
  • /src: 소스코드 파일
  • /srv: 서비스 파일
  • CMakeLists.txt: 빌드 설정 파일
  • package.xml: 패키지 설정 파일

5. ROS 파일 시스템 관련 기능, 명령어

1) rospack

https://docs.ros.org/en/independent/api/rospkg/html/rospack.html
rospack은 ROS 패키지 관리 도구(package management tool)로써, dpkg의 일부, pkg-config의 일부라고 할 수있다. 주요 기능은 ROS 패키지의 정보 및 내용을 출력하는 것이다.

대표적인 rospack 사용의 옵션은 다음과 같다.

  • rospack find: 패키지의 절대 경로 반환
  • rospack depends: 패키지의 모든 의존성 목록 반환
  • rospack depend-on: 주어진 패키지에 의존하는 패키지 목록을 반환
  • rospack export: 패키지 빌드 및 linking에 필요한 flag를 반환
$ rospack <command> [options] [package]

  Allowed commands:
    help [subcommand]
    cflags-only-I     [--deps-only] [package]
    cflags-only-other [--deps-only] [package]
    depends           [package] (alias: deps)
    depends-indent    [package] (alias: deps-indent)
    depends-manifests [package] (alias: deps-manifests)
    depends-msgsrv    [package] (alias: deps-msgsrv)
    depends-on        [package]
    depends-on1       [package]
    depends-why --target=<target> [package] (alias: deps-why)
    depends1          [package] (alias: deps1)
    export [--deps-only] --lang=<lang> --attrib=<attrib> [package]
    find [package]
    langs
    libs-only-L     [--deps-only] [package]
    libs-only-l     [--deps-only] [package]
    libs-only-other [--deps-only] [package]
    list
    list-duplicates
    list-names
    plugins --attrib=<attrib> [--top=<toppkg>] [package]
    profile [--length=<length>] [--zombie-only]
    rosdep  [package] (alias: rosdeps)
    rosdep0 [package] (alias: rosdeps0)
    vcs  [package]
    vcs0 [package]
  Extra options:
    -q     Quiets error reports.

더 자세한 내용은 링크를 참조하도록 하자.

2) roscd

roscd는 rosbash의 일종으로, 특정 디렉토리에서 다른 디렉토리에 있는 패키지나 스택에 다이렉트로 가고 싶을 때 사용한다.

💡 rosbash
rosbash 패키지는 bash 함수 및 tab키를 통한 자동완성 기능을 지원하는, 편리성을 위해 작성된 패키지이다.
우리가 예를 들어서

source /opt/ros/noetic/setup.bash

이런 코드를 입력하는 것도 다 rosbash를 source하기 위함이다.

roscd의 사용법은 다음과 같다.

$ roscd <package-or-stack>[/subdir]
예를 들어서
$ roscd roscdpp

그리고 나서 현재 내 위치를 $ pwd 명령어를 통해서 알 수 있다.

$ roscd log

이렇게 한번에 log 폴더로 이동하는 등 유용하게 사용할 수 있다.

3) rosls

rosls 역시 roscd와 마찬가지로 rosbash의 일부이다. roscd와 마찬가지로, 절대경로를 사용하지 않더라도 바로 내가 원하는 패키지나 스택에 대해서 ls 명령어를 적용 가능하다.

$ rosls <package-or-stack>[/subdir]
profile
로봇, 드론, SLAM, 제어 공학 초보

0개의 댓글