Note: This tutorial assumes that you have completed the previous tutorials: ko/ROS/Tutorials/creating a ROS package. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
ROS Package 빌드하기
Description: 이 자습서는 패키지를 빌드하는 툴체인들을 다루고 있습니다.Tutorial Level: BEGINNER
Next Tutorial: Understanding ROS Nodes
Contents
패키지 빌드
모든 시스템 의존성이 설치되었으면, 이제 우리가 만든 패키지를 빌드할 때 입니다.
rosmake 사용하기
rosmake는 make 명령과는 조금 다른, ROS만의 특별한 마술을 수행합니다. 만약 rosmake beginner_tutorials라고 입력한다면, 이 명령어는 beginner_tutorials 패키지 뿐 아니라 의존성이 있는 모든 패키지들 까지 올바른 순서대로 빌드합니다. 우리의 패키지는 rospy, roscpp, std_msgs가 의존성 목록에 있으므로, 이 패키지들(그리고 그들의 의존성 패키지들)도 같이 rosmake명령어에 의해 빌드됩니다.
사용 예시:
rosmake [package]
아래의 내용을 입력해보세요:
$ rosmake beginner_tutorials
명령어가 끝나는 데는 약간의 시간이 필요할 것입니다. 명령어가 수행되는 동안 아래와 유사한 결과물을 보실 수 있습니다.
[ rosmake ] No package specified. Building ['beginner_tutorials'] [ rosmake ] Logging to directory [ rosmake ] /home/dbking/.ros/rosmake_output-2009-09-22-03-17-14 [ rosmake ] [ 0 of 18 Completed ] [rosmake-0] >>> genmsg_cpp >>> [ make ] [rosmake-0] <<< genmsg_cpp <<< [PASS] [ 0.39 seconds ] [ rosmake ] [ 1 of 18 Completed ] ... ... ... [ rosmake ] [ 17 of 18 Completed ] [rosmake-0] >>> beginner_tutorials >>> [ make ] [rosmake-0] <<< beginner_tutorials <<< [PASS] [ 0.79 seconds ]
Fuerte에서는 패키지 의존성이 매우 줄어들었기 떄문에 수행하는데 거의 시간이 들지 않습니다.
[ rosmake ] rosmake starting... [ rosmake ] Packages requested are: ['beginner_tutorials'] [ rosmake ] Logging to directory /home/alex/.ros/rosmake/rosmake_output-20120603-082414 [ rosmake ] Expanded args ['beginner_tutorials'] to: ['beginner_tutorials'] [rosmake-0] Starting >>> std_msgs [ make ] [rosmake-1] Starting >>> roslang [ make ] [rosmake-0] Finished <<< std_msgs ROS_NOBUILD in package std_msgs No Makefile in package std_msgs [rosmake-1] Finished <<< roslang ROS_NOBUILD in package roslang No Makefile in package roslang [rosmake-1] Starting >>> rospy [ make ] [rosmake-2] Starting >>> roscpp [ make ] [rosmake-1] Finished <<< rospy ROS_NOBUILD in package rospy No Makefile in package rospy [rosmake-2] Finished <<< roscpp ROS_NOBUILD in package roscpp No Makefile in package roscpp [rosmake-2] Starting >>> beginner_tutorials [ make ] [rosmake-2] Finished <<< beginner_tutorials [PASS] [ 1.14 seconds ] [ rosmake ] Results: [ rosmake ] Built 5 packages with 0 failures. [ rosmake ] Summary output to directory [ rosmake ] /home/alex/.ros/rosmake/rosmake_output-20120603-082414
rosmake로 복수의 패키지 빌드하기
rosmake도구를 이용해서 복수의 패키지를 한번에 빌드할 수도 있습니다.
사용예시:
rosmake [package1] [package2] [package3]
복습
지금까지 배워본 명령어들을 써 봅시다.
- rosdep = ros+dep(endencies) : 패키지 의존성을 설치하기 위한 도구
- rosmake = ros+make : ROS Package를 빌드하는 도구
Contents
패키지 빌드하기
모든 시스템 의존성이 설치되었다면 이제 새로운 패키지를 만들어 볼 차례입니다.
Note: apt또는 다른 종류의 패키지 관리자를 통해 ROS를 설치하셨으면, 모든 시스템 의존성이 설치되어 있을 것입니다.
본격적으로 시작하기 전에 환경설정 파일을 등록하는 것을 기억하시길 바랍니다. 우분투 환경에서는 아래의 예시를 참고하시면 됩니다.
$ source /opt/ros/groovy/setup.bash
catkin_make의 사용
catkin_make(en)는 catkin을 이용한 일련의 작업 과정에서 쓰이는 편리한 도구입니다. 이는 일반적으로 CMake 작업환경에서의 cmake와 make가 합쳐져 있는 도구라 생각하시면 됩니다.
사용 예시:
# In a catkin workspace $ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
CMake 작업 과정에 익숙하지 않으신 분들을 위해 부분적으로 나누어 설명을 하겠습니다.
Note: 아래의 명령어는 CMake가 일반적으로 어떻게 동작하는지 보여주기 위한 예제로, 실제로 동작하지 않을 수 있습니다.
# In a CMake project $ mkdir build $ cd build $ cmake .. $ make $ make install # (optionally)
이 과정은 각각의 CMake프로젝트에 대해 수행됩니다. 같은 작업공간 안의 catkin프로젝트는 동시에 빌드할 수 있습니다. 이 방법은 아래의 예시를 보시기 바랍니다.
# catkin 작업공간 경로에서 $ catkin_make $ catkin_make install # (optionally)
위의 명령어들은 catkin 프로젝트의 src폴더를 찾아 빌드합니다. The above commands will build any catkin projects found in the src folder. 이는 recommendations set(REP128)규칙을 따릅니다. 패키지의 소스코드가 다른 폴더 my_src에 들어있다면 catkin_make 명령은 아래와 같이 사용합니다.
Note: 이 명령은 my_src가 없으면 동작하지 않습니다.
# catkin 작업공간에서 $ catkin_make --source my_src $ catkin_make install --source my_src # (optionally)
보다 자세한 사용 방법은 이 링크를 참고하세요. catkin/commands/catkin_make
패키지 빌드하기
이전의 자습서에서 catkin workspace와 beginner_tutorials 패키지를 만들었습니다.패키지 만들기. catkin 작업공간으로 이동해서 src폴더의 내용을 확인합니다.
$ cd ~/catkin_ws/ $ ls src
beginner_tutorials/ CMakeLists.txt@
전의 자습서에서 beginner_tutorials아래에 catkin_create_pkg가 생성한 파일들을 볼 수 있을 것입니다. 우리는 이제 catkin_make를 사용해 이 패키지를 빌드할 것입니다.
$ catkin_make
cmake에서 많은 결과물을 생성하는 것을 볼 수 있습니다. 그리고 make를 합니다.
Base path: /home/user/catkin_ws Source space: /home/user/catkin_ws/src Build space: /home/user/catkin_ws/build Devel space: /home/user/catkin_ws/devel Install space: /home/user/catkin_ws/install #### #### Running command: "cmake /home/user/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/user/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/user/catkin_ws/install" in "/home/user/catkin_ws/build" #### -- The C compiler identification is GNU 4.2.1 -- The CXX compiler identification is Clang 4.0.0 -- Checking whether C compiler has -isysroot -- Checking whether C compiler has -isysroot - yes -- Checking whether C compiler supports OSX deployment target flag -- Checking whether C compiler supports OSX deployment target flag - yes -- Check for working C compiler: /usr/bin/gcc -- Check for working C compiler: /usr/bin/gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Using CATKIN_DEVEL_PREFIX: /tmp/catkin_ws/devel -- Using CMAKE_PREFIX_PATH: /opt/ros/groovy -- This workspace overlays: /opt/ros/groovy -- Found PythonInterp: /usr/bin/python (found version "2.7.1") -- Found PY_em: /usr/lib/python2.7/dist-packages/em.pyc -- Found gtest: gtests will be built -- catkin 0.5.51 -- BUILD_SHARED_LIBS is on -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ traversing packages in topological order: -- ~~ - beginner_tutorials -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- +++ add_subdirectory(beginner_tutorials) -- Configuring done -- Generating done -- Build files have been written to: /home/user/catkin_ws/build #### #### Running command: "make -j4" in "/home/user/catkin_ws/build" ####
catkin_make는 먼저 각각의 space들의 경로를 표시합니다. space에 대한 설명은 REP128에 서술되어 있고, catkin/workspaces위키에 문서화 되어 있습니다. 이 기본값들이 catkin작업공간 안에 새로운 폴더를 만든 것을 눈여겨 보시기 바랍니다. ls명령을 통해 살펴봅니다.
$ ls
build devel src
build폴더는 build space의 기본 경로입니다. 이 곳은 패키지의 빌드작업을 위해 cmake 와 make가 호출될 때 사용되는 곳입니다.devel폴더는 패키지를 시스템에 설치하기 전, 개발과정에서 쓰이는 실행파일과 라이브러리들이 저장되는 devel space의 기본 경로입니다.
이제 ROS 패키지를 빌드하는 방법을 알았습니다. 다음 자습서로 이동합니다. ROS Nodes.