머신러닝

본문 바로가기
사이트 내 전체검색


머신러닝
머신러닝

4. Catkin - ROS의 빌드 시스템

페이지 정보

작성자 관리자 댓글 0건 조회 2,116회 작성일 21-01-14 16:16

본문

4. Catkin - ROS의 빌드 시스템

ROS 의 빌드 시스템은 기본적으로 CMakeCross Platform Make 를 활용하고 있습니다. 

ROS패키지 폴더를 확인하면 ‘CMakeLists.txt’ 라는 파일에 빌드 환경이 작성되어 있고 이를 통해 빌드를 진행하는 형태입니다. 

이를 ROS 에서는 캐킨 catkin 이라고 부릅니다. 

캐킨 빌드 시스템은 CMake 와 완전하게 동일하지는 않고 ROS 에 특화되어 약간 수정되어 있습니다.

캐킨 빌드 시스템은 ROS 와 관련된 패키지 빌드, 관리, 패키지간의 의존 관계등을 쉽게 사용할 수 있는 기능을 제공합니다. 

물론 캐킨 빌드 시스템을 이용하지 않고 rosbuild 를 통한 빌드도 가능합니다. 

다만 rosbuild 는 ROS 의 초창기 사용되던 빌드 시스템이고 현재 남아 있는 이유는 이전 버전과의 호환성을위해서 남겨져 있기 때문입니다.


catkin_make 실행시 필요한 패키지 설치


root@holdings:~# apt-get install qt4-dev-tools libqt4-dev 


ROS melodic 환경 설정 bash shell 실행 


root@holdings:/home# su - jklee

jklee@holdings:~$ source /opt/ros/melodic/setup.bash


작업 디렉토리 생성 및 초기화 


jklee@holdings:~$ mkdir -p ~/catkin_ws/src     ->  작업 디렉토리 생성

jklee@holdings:~$ cd ~/catkin_ws/src/

jklee@holdings:~/catkin_ws/src$ catkin_init_workspace    ->  catkin 작업 디렉토리 초기화

Creating symlink "/home/jklee/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"


컴파일 하기 


jklee@holdings:~/catkin_ws/src$ cd ~/catkin_ws/

jklee@holdings:~/catkin_ws$ catkin_make       ->  build 명령어 

Base path: /home/jklee/catkin_ws

Source space: /home/jklee/catkin_ws/src

Build space: /home/jklee/catkin_ws/build

Devel space: /home/jklee/catkin_ws/devel

Install space: /home/jklee/catkin_ws/install

####

#### Running command: "cmake /home/jklee/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/jklee/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/jklee/catkin_ws/install -G Unix Makefiles" in "/home/jklee/catkin_ws/build"

####

-- The C compiler identification is GNU 7.4.0

-- The CXX compiler identification is GNU 7.4.0

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Detecting C compile features

-- Detecting C compile features - 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

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- Using CATKIN_DEVEL_PREFIX: /home/jklee/catkin_ws/devel

-- Using CMAKE_PREFIX_PATH: /opt/ros/melodic

-- This workspace overlays: /opt/ros/melodic

-- Found PythonInterp: /usr/bin/python2 (found suitable version "2.7.17", minimum required is "2")

-- Using PYTHON_EXECUTABLE: /usr/bin/python2

-- Using Debian Python package layout

-- Using empy: /usr/bin/empy

-- Using CATKIN_ENABLE_TESTING: ON

-- Call enable_testing()

-- Using CATKIN_TEST_RESULTS_DIR: /home/jklee/catkin_ws/build/test_results

-- Found gtest sources under '/usr/src/googletest': gtests will be built

-- Found gmock sources under '/usr/src/googletest': gmock will be built

-- Found PythonInterp: /usr/bin/python2 (found version "2.7.17")

-- Looking for pthread.h

-- Looking for pthread.h - found

-- Looking for pthread_create

-- Looking for pthread_create - not found

-- Looking for pthread_create in pthreads

-- Looking for pthread_create in pthreads - not found

-- Looking for pthread_create in pthread

-- Looking for pthread_create in pthread - found

-- Found Threads: TRUE

-- Using Python nosetests: /usr/bin/nosetests-2.7

-- catkin 0.7.28

-- BUILD_SHARED_LIBS is on

-- BUILD_SHARED_LIBS is on

-- Configuring done

-- Generating done

-- Build files have been written to: /home/jklee/catkin_ws/build

####

#### Running command: "make -j4 -l4" in "/home/jklee/catkin_ws/build"

####


ls 명령어를 통해 build 결과 파일들이 생성된 것을 확인하실 수 있습니다. 


~/catkin_ws 경로 내에 build, devel, src 세 가지 폴더가 있는 것을 확인 가능합니다.


jklee@holdings:~/catkin_ws$ ls

build  devel  src


다음은 build 폴더 내의 파일들입니다. 


jklee@holdings:~/catkin_ws$ ls build/ 

atomic_configure  catkin_make.cache    CTestConfiguration.ini  Makefile

catkin            CMakeCache.txt       CTestCustom.cmake       test_results

catkin_generated  CMakeFiles           CTestTestfile.cmake

CATKIN_IGNORE     cmake_install.cmake  gtest

jklee@holdings:~/catkin_ws$



Catkin 명령어와 관련된 bash shell 실행은 아래와 같습니다. 


jklee@holdings:~$ source ~/catkin_ws/devel/setup.bash


source 명령어는 bash shell을 실행시키는 기능을 합니다. 

다음으로는 .bashrc를 수정하여 source 명령어가 터미널을 켤 때마다 자동적으로 실행되도록 설정하고, master 주소와 hostname  설정을 해 보겠습니다. 


jklee@holdings:~$ vi ~/.bashrc

# 하단에 아래 내용을 추가합니다.

source /opt/ros/melodic/setup.bash     # ROS 설정이 포함된 bash shell이  실행되도록 합니다.

source ~/catkin_ws/devel/setup.bash   # catkin 명령어 관련 bash shell이 실행되도록 합니다.


export ROS_MASTER_URI=http://localhost:11311   # master 주소를 설정합니다. ip를 입력해도 됩니다.

export ROS_HOSTNAME=localhost # host ip를 입력합니다. Master와 host robot이 다른 경우엔 각각의 ip를, 같은 경우엔 master와 같은 ip를 입력합니다.


jklee@holdings:~$ source .bashrc

jklee@holdings:~$ env |grep ROS

ROS_ETC_DIR=/opt/ros/melodic/etc/ros

ROS_ROOT=/opt/ros/melodic/share/ros

ROS_MASTER_URI=http://localhost:11311

ROS_VERSION=1

ROS_PYTHON_VERSION=2

ROS_PACKAGE_PATH=/home/jklee/catkin_ws/src:/opt/ros/melodic/share

ROSLISP_PACKAGE_DIRECTORIES=/home/jklee/catkin_ws/devel/share/common-lisp

ROS_HOSTNAME=localhost

ROS_DISTRO=melodic



여기까지 기본적인 환경 설정을 마쳤습니다. 

이번에는 ROS를 설치할 때 같이 포함된 테스트용 패키지를 이용해 node를 구동해 보고, 노드간 message 통신이 어떻게 이루어지는지 확인해 보도록 하겠습니다. 

먼저 노드를 실행하기에 앞서 master를 구동시켜야합니다.

jklee@holdings:~$ roscore
... logging to /home/jklee/.ros/log/ae4f275a-5638-11eb-be2e-000000000001/roslaunch-holdings-25146.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://localhost:35923/
ros_comm version 1.14.7


SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.7

NODES

auto-starting new master
process[master]: started with pid [25159]

setting /run_id to ae4f275a-5638-11eb-be2e-000000000001
process[rosout-1]: started with pid [25173]
started core service [/rosout]
 
roscore는 ctrl+c 키를 이용해 terminate시킬 수 있습니다. 

다음 강좌로 넘어가도 됩니다. 
아래는 스킵해도 됩니다.

---------------------------------------------------------------

ROS master를 구동시킨 다음에는 새 터미널을 연 뒤, 아래 명령어를 입력합니다.

turtlesim package의 turtlesim_node 노드 실행합니다.

jklee@holdings:~$ rosrun turtlesim turtlesim_node
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-jklee'
qt.qpa.screen: QXcbConnection: Could not connect to display
Could not connect to any X display.

 
실행 결과는 X윈도우에서 실행해야 합니다.
NoMachine이나 Vnc Server를 설치하여 GUI로 접속할 수 있다.

NoMachine으로 접속하기

AutoCar에는 soda툴이 설치되어 NoMachine을 이용하면 바로 접속할 수 있다. 

2.PNG


3.PNG




Tiger VNC Server 설치 

root@holdings:~# sudo apt-get install tigervnc-standalone-server tigervnc-xorg-extension

비밀번호 설정 

root@holdings:~# vncpasswd


xstartup 작성
  "~/.vnc/xstartup" 파일을 열어 아래와 같이 작성한다.

root@holdings:~# vi ~/.vnc/xstartup
#!/bin/sh
# Start Gnome 3 Desktop
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &


서버 실행

vncserver -localhost no

-localhost 옵션에 no를 주지 않으면 default 설정에 의해 localhost 에 의한 접근만 허용됩니다.
따라서 외부 접속을 허용하려면 해당 옵션을 주어야 합니다.

잘 수행되고 있는지는 "vncserver -list" 명령으로 확인할 수 있습니다.
 
접속 확인


RealVNC의 Stand-alone 실행 파일로 테스트해보시면 됩니다.
해당 vncviewer는 기업에서 사용할 경우 유료입니다. 유의하시기 바랍니다.



-----------------------------------------------------------

rosrun은 노드를 실행시킬 때 사용하는 명령어입니다. 
터미널 창을 통해서 노드명이 /turtlesim인 노드가 생성되었고, 거북이가 어디 좌표에 새로 나타났는지 확인이 가능합니다. 
거북이 종류는 지금까지 release된 ROS 버전 중에서 하나가 랜덤으로 나옵니다. 
이번에는 생성된 거북이를 움직일 수 있는 turtle_teleop_key 노드를 실행시켜 보겠습니다.



$ rosrun turtlesim turtle_teleop_key       -> turtlesim package의 turtle_teleop_key 노드 실행


거북이를 움직이려면 turtle_teleop_key 노드가 실행되고 있는 터미널이 활성화된 상태에서 방향 키를 누르시면 됩니다. 
지금까지 실행시킨 노드들은 노드간 관계를 도식화하여 나타내는 또 다른 노드를 실행시켜 확인이 가능합니다.



$ rosrun rqt_graph rqt_graph

rqt_graph 노드는 실행되고 있는 노드들의 이름과 그들의 메시지 통신 관계를 보여줍니다. 
위 스크린샷에서는 /teleop_turtle과 /turtlesim이라는 이름을 가진 두 개의 노드가 실행되고 있으며, 화살표의 방향을 통해 메시지가 /turtlesim 쪽으로 전달되는 것을 확인할 수 있습니다. 
/turtle1/cmd_vel은 화살표에 해당되는 메시지가 가지는 topic입니다.
 

패키지 설정 파일

package.xml 은 ROS 의 패키지의 필수 구성파일입니다. 
해당 패키지의 정보를 담은 파일로 패키지의 명칭, 라이선스, 의존성 패키지, 패키지에 대한 설명 등의 정보들이 포함되어 있습니다. 
파일 확장자에서도 알 수 있듯이 xml 의 문법을 따릅니다.
package.xml 파일에 담겨있는 구문에 대한 설명은 다음과 같습니다.

• <package> : ROS 의 패키지 설정 부분
• <name> : 패키지의 명칭, 사용자 임의로 언제든지 변경 가능
• <version> : 패키지의 버전
• <description> : 패키지 설명
• <maintainer> : 패키지의 관리자 또는 생성자
• <license> : 패키지 라이선스
• <author> : 패키지 개발에 참여한 개발자
• <buildtool_depend> : 활용하는 빌드 시스템, 현재는 catkin
• <build_depend> : 패키지 빌드시 참조하는 패키지
• <exec_depend> : 패키지 실행시 참조하는 패키지

빌드 설정 파일

package.xml 이 패키지관련 정보가 포함된 필수 파일이라면 CMakeLists.txt 파일은 캐킨 빌드시스템을 이용하여 패키지를 빌드할 경우 꼭 필요한 필수 파일입니다. 
이 파일에는 실행 파일 생성여부, 링크 생성, 의존성 패키지 빌드등의 정보를 담고 있습니다. 
기본으로 생성되는 CMakeLists.txt 파일에서 참고해야할 내용들을 정리해 보면 다음과 같습니다.

• cmake_minimum_required() : 시스템에 설치된 cmake 의 최소 버전, 명시된 버전보다 상위버전이 설치되어 있어야 한다.
• project() : 패키지의 명칭, package.xml 에 명시된 이름과 다르다면 빌드시 에러가 발생
• find_package() : 캐킨 빌드시 요구되는 패키지, 명시된 패키지가 시스템에 포함되어 있지 않다면 에러가 발생
• catkin_python_setup() : rospy 를 활용할 때 사용하는 옵션, setup.py 를 호출
• add_message_files() : 메시지 파일 추가, 현재 패키지 폴더의 msg 폴더 안의 파일을 참조
• add_service_files() : 서비스 파일 추가, 현재 패키지 폴더의 srv 폴더 안의 파일을 참조
• add_action_files(): 액션 파일 추가, 현재 패키지 폴더의 action 폴더 안의 파일을 참조
• generate_messages() : 의존 메시지 설정
• generate_dynamic_reconfigure_options() : dynamic_reconfigure 사용할 때 참조하는 설정파일, 현재 패키지 폴더의 cfg 폴더 안의 파일을 참조
• catkin_package() : 캐킨 빌드 옵션, INCLUDE_DIRS 는 패키지 내부 폴더인 include 폴더 내부의 헤더파일을 참조, LIBRARIES 는 설정한 패키지의 라이브러리를 사용, CATKIN_DEPENDS 는 의존 패키지를 기술, DEPENDS 는 시스템 의존 패키지를 기술
• include_directories() : 헤더파일 참조 폴더 지정, ${catkin_INCLUDE_DIRS} 는 현재 폴더의 include, 패키지 외부의 헤더파일을 참조 가능

댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.