본문으로 바로가기
728x90
반응형


ROS는 '/opt/ros/[버전이름]' 폴더에 설치됩니다. Melodic 버전을 설치했다면 ROS가 설치된 경로는 아래와 같습니다.


/opt/ros/melodic


해당 폴더 내부의 내용은 아래의 그림과 같습니다.




사용자 작업 폴더는 설치 후 테스트 전에 작성하였습니다. 내부에는 3개의 폴더가 존재합니다.

특히 src는 사용자가 개발한 패키지사 저장됩니다. 또한 다른 사용자가 개발한 패키지를 저장하여 사용할 수 있습니다.




ROS에서 파일시스템은 크게 아래와 같이 2가지 종류로 구분할 수 있습니다.



  • 패키지 : 패키지는 ROS 코드의 소프트웨어 조직 단위입니다. 각 패키지에는 라이브러리, 실행 파일, 스크립트 또는 기타 인공물이 포함될 수 있습니다.
  • 매니페스트(package.xml) : 매니페스트는 패키지에 대한 설명입니다. 패키지간 의존성을 정의하고 버전, 유지 보수 자, 라이센스 등과 같은 패키지에 대한 메타 정보를 캡처하는 역할을 합니다.


ROS 패키지에는 많은 코드가 있습니다. ls 및 cd와 같은 명령 행 도구를 사용하여 소스를 찾는것은 매우 지루할 수 있습니다. 따라서 ROS에서는 다음괴 같은 도구들을 제공합니다. 

rospack을 사용하면 패키지에 대한 정보를 얻을 수 있습니다. find 옵션은 package에 대한 경로를 리턴합니다.


rospack find [package_name]

예) rospack find roscpp



roscd는 rosbash 제품군의 일부입니다. 디렉토리cd)를 패키지 또는 스택으로 직접 변경할 수 있습니다. 예와 같은 명령어를 입력하면 roscpp 패키지 위치로 디렉토리를 이동합니다.


roscd [locationname[/subdir]]

예)roscd roscpp


roscd는 다른 ROS 도구와 마찬가지로 ROS_PACKAGE_PATH에 나열된 디렉토리 내에있는 ROS 패키지만 찾습니다. ROS_PACKAGE_PATH에 무엇이 있는지 보려면 다음 명령어를 입력하십시오.


echo $ROS_PACKAGE_PATH


ROS_PACKAGE_PATH에는 ROS 패키지가 콜론으로 구분 된 디렉토리 목록이 있어야합니다. 일반적인 ROS_PACKAGE_PATH는 다음과 같습니다.


/opt/ros/melodic/share


roscd는 패키지나 스택의 하위 디렉토리로 이동할 수도 있습니다.



roscd roscpp/cmake
pwd


pwd 결과는 /opt/ros/melodic/share/roscpp/cmake 입니다.



roscd log 명령어는 ROS가 로그 파일을 저장하는 폴더로 이동합니다. ROS 프로그램을 아직 실행하지 않았다면, 아직 존재하지 않는다는 오류가 발생합니다. 만약 ROS 프로그램을 한번이라도 실행했다면 다음 명령어를 입력하여 확인하시기 바랍니다.


roscd log




rosls는 rosbash 중의 하나로 절대 경로가 아닌 이름으로 직접 패키지에 넣을 수 있게 합니다.


rosls [locationname[/subdir]]

rosls roscpp_tutorials



일부 ROS 도구는 TAB 완성을 지원합니다.


roscd roscpp_tut<<< now push the TAB key >>>

roscd roscpp_tutorials/


이처럼 탭을 사용할때 roscpp_tutorials가 현재 roscpp_tut으로 시작하는 유일한 ROS 패키지일 경우 잘 동작합니다.



turtle로 시작하는 패키지가 여러 개 있을 경우 Tab을 입력하면 turtle로 시작하는 모든 ROS 패키지가 표시됩니다.


roscd tur<<< now push the TAB key >>>

roscd turtle



사용자가 만든 패키지가 catkin 패키지로 처리되려면 몇 가지 요구 사항을 충족해야 합니다.

패키지 내에는 catkin 호환 package.xml 파일이 있어야 합니다. package.xml 파일은 패키지에 대한 메타 정보를 제공합니다. 또한 catkin을 사용하는 CMakeLists.txt를 포함해야 합니다. catkin 메타 패키지인 경우 관련 보일러 플레이트(표준문안) CMakeLists.txt 파일이 있어야 합니다. 그리고 각 패키지는 고유한 폴더로 정의되어야 합니다. 즉, 동일한 디렉토리를 공유하는 중첩된 패키지나 여러 패키지가 존재할 수 없음을 의미합니다. 가장 간단한 패키지는 다음과 같은 구조를 가질 수 있습니다.


my_package/
  CMakeLists.txt
  package.xml


catkin 패키지로 작업할때 권장하는 방법은 catkin 작업 공간을 사용하는 것이지만 catkin 패키지는 독립적으로 빌드할 수도 있습니다.


catkin_create_pkg 스크립트를 사용하여 새 catkin 패키지를 작성하는 방법을 알아 보겠습니다. ROS 설치때 만들었던 catkin 작업 공간의 소스 공간으로 디렉토리로 먼저 변경합니다.


cd ~/catkin_ws/src




다음은 catkin_create_pkg 스크립트를 사용하여 std_msgs, roscpp 및 rospy에 의존성을 갖는 'beginner_tutorials'라는 새 패키지를 생성합니다.


catkin_create_pkg beginner_tutorials std_msgs rospy roscpp



위의 명령을 수행하면 catkin_create_pkg 스크립트에서 정의한 정보를 이용하여 beginner_tutorials 디렉토리가 만들어지고, 이 안에는 include, src 디렉토리와 package.xml과 CMakeLists.txt 파일이 생성됩니다. 



catkin_create_pkg는 아래의 형식과 같이 package_name과 의존하는 패키지 목록을 옵션에 추가해야 합니다.


catkin_create_pkg <package_name> [depend1] [depend2] [depend3]


새로운 패키지 생성이 완료되었으면 아래의 명령어로 catkin 빌드를 수행합니다.


cd ~/catkin_ws
catkin_make



catkin 빌드로 생성된 setup 파일을 실행하여 ROS 환경에 작업 공간을 추가합니다.


. ~/catkin_ws/devel/setup.bash



catkin_create_pkg을 사용하면 몇 가지 패키지 종속성이 제공됩니다. 1차 종속성은 rospack 툴로 확인할 수 있습니다.


rospack depends1 beginner_tutorials 


rospack은 catkin_create_pkg을 실행할 때 인수로 사용된 것과 동일한 리스트가 출력됩니다. 패키지에 대한 이러한 종속성은 package.xml에 저장됩니다.


roscd beginner_tutorials
cat package.xml


package.xml 파일의 내용은 아래와 같습니다.



대부분의 경우 종속성은 그 자체의 종속성이 있습니다. 예를 들어, rospy에는 다른 종속성이 있습니다.



패키지는 상당히 많은 간접 종속성을 가질 수 있습니다. 다행스럽게도 rospack은 모든 내포된 의존성을 반복적으로 확인할 수 있습니다.











728x90
반응형

'소프트웨어 > ROS' 카테고리의 다른 글

Ubuntu 16.04에서 Arduino IDE 설치  (0) 2019.01.23
ROS Serial Test  (0) 2019.01.02
ROS Kinetic Kame 설치  (0) 2018.11.10
ROS-Melodic 개발 환경 구축  (0) 2018.11.05
Ubuntu 18.04 - ROS Melodic Morenia 설치  (0) 2018.11.05