본문 바로가기

Jetson/Jetson ROS

[Jetson ROS] 3. ROS package

 이전 글에서 언급했듯 ROS 내 catkin workspace에는 package라는 구성요소들이 존재하며 package내 node들이 작동한다. 

 

 이번 글에서는 package를 생성하는 법을 소개하고 패키지의 기본적인 구성을 보이며, 필자가 기존에 사용해봤던 코드(Python기반) 의 일부를 발췌해 node간 통신이 어떤식으로 구현되는지를 보여주고자 한다.

 

 package의 생성은 catkin_ws내 src폴더에서 진행하며 생성 코드는 catkin_create_pkg이며 코드 위에 패키지의 이름과 의존요소들을 있는대로 집어넣으면 된다.

 

cs
catkin_create_pkg [패키지 이름] [source1] [source2] [source3] ...
cm

 

 참고로 cs cm은 6번 글에서 적용시킨 단축 커멘드로 각각 src 폴더 진입, catkin_ws폴더 진입 후 catkin_make이다.

 

 의존요소들은 패키지를 생성한 이후에도 추가 및 삭제가 가능하지만 생성할 땐 한번만 언급해줘도 쉽게 적용이 되기에 처음에 최대한 적용시켜 두는것을 추천한다. (추가하는 방법은 좀 아래에서 설명하겠다.)

 

 이렇게 패키지를 생성하면 패키지 내에 소스코드 및 스크립트 등을 지정할 수 있는 폴더가 생성된다. 이부분은 사용하려는 프로젝트나 사용자의 연구 방향성 등에 따라 달라질 것이기에 자세한 설명은 패스 하고, 중요한 것은 CMakeLists.txtPackage.xml이다.

 

 이 두 파일은 package내 주요한 요소들에 빌드, 종속성, 프로젝트의 기본 정보 등 다양한 내용이 들어가있다. 

 우선 CMakeLists.txt는 빌드에 필요한 종속패키지 및 해당 패키지의 위치 등이 담겨있는 파일로, 자세한 설명을 알고싶다면 다음의 링크를 www.tuwlab.com/ece/27260 읽어 보는 것을 추천한다. 어짜피 ROS에서는 이를 자동으로 생성해주며 catkin_make를 통해 대부분의 정보는 자동으로 업데이트 되기에 깊이 알 필요는 거의 없을 것이다. 

 

 

 

 

우선 오른쪽을 보면 필자가 과거 사용했던 패키지의 CMakeLists.txt 파일의 일부이다. 종속성으로 msgpkg, roscpp, rospy, std_msgs가 생성 된것을 확인 할 수 있다. 사실 이러한 종속성의 내용만 추가되어 있다면 대부분의 경우 작동에는 문제가 없을 것이기에 초기 패키지 생성 부분에서 오타가 있었는지, 혹은 후에 추가된 패키지가 누락되었는지 정도를 확인하면 될 것이다.

 

 

 

 

 

 다음은 Package.xml 파일이다. 이부분은 위와는 달리 종속 패키지를 추가하거나 사용하지 않는 종속 패키지를 제거하는 등 꽤나 자주 변경하게 되는 파일이다. 

 위의 내용을 보면 프로젝트의 이름, 버전 등 부터 설명, 작업자의 이름 및 연락처, 프로젝트의 설명 링크 등 프로젝트를 설명해 줄 수 있는 일종의 readme 파일에 들어갈 법한 내용들을 적도록 되어있다. 물론 이는 프로그램의 필수적인 요소는 아니지만, 프로젝트의 공개 혹은 협업등의 과정에서 사용하기 좋은 요소들이다. 

 

 

 

 

 

 

 사실 중요한 부분은 이부분인데 프로젝트를 진행하다보면 다양한 종속 패키지를 사용하게 되며 이는 중간에 빈번하게 변경 될수 있다. 이에 대한 내용은 오른쪽 파트에 생성되는데, 오른쪽의 <build_depend>, <build_export_depend>, <exec_depend>항목에 사용하고자 하는 패키지 이름을 제거하거나 추가하는 것으로 이를 해결할 수 있다.