본문 바로가기

쓰기

조회 수 15400
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 이번에는 직접 ROS를 설치하고 간단한 node 구동 테스트를 해 보도록 하겠습니다. ROS는 약 1년 주기로 새로운 버전이 올라오며 2015년 6월 기준 최신 버전은 9번째 release인 Jade Turtle입니다. 하지만 8번째 release인 Indigo Igloo가 지원 기간이 더 길고 안정성이 높으므로 이를 설치하도록 하겠습니다.


1-boxturtle.jpg 2-Cturtle.jpg 3-diamondback.jpg


4-electricemys.jpg5-fuerte.jpg 6-groovygalapagos.jpg


7-hydromedusa.jpg 8-indigoigloo.png


9-jadetutle.jpg


지금까지 배포된 ROS release.

1st - Box Turtle

2nd - C Turtle

3rd - Diamondback

4th - Electric Emys

5th - Fuerte

6th - Groovy Galapagos

7th - Hydro Medusa

8th - Indigo Igloo

9th - Jade Turtle


 ROS는 공식적으로 Ubuntu 위에서 구동됩니다. Ubuntu(우분투)는 리눅스 계열의 OS입니다. Indigo Igloo는 Ubuntu 14.04.2 버전에서 동작하도록 되어 있습니다. 여기서는 우분투의 설치에 관한 것은 다루지 않고, 그것이 설치되었다는 가정 하에 ROS를 설치하는 법을 알려드리겠습니다. 우분투의 설치 방법은 인터넷에 널리 나와 있으니 그런 것들을 참고하시면 될 것 같습니다. 저 같은 경우에는 Windows 7과 Ubuntu 14.04.2를 동시에 설치해서 부팅할 때 OS를 선택해서 부팅하도록 하고 있습니다.


 먼저 우분투에서 터미널을 실행시킵니다. $ 표시가 있을 때 명령어를 입력시킬 수 있습니다. ~ 표시는 기본 경로인 (home/사용자명/)을 나타냅니다.


`terminal.jpg

터미널 실행


1. Ubuntu repositories 설정

 우분투는 커맨드 입력을 통해 프로그램을 간편하게 설치할 수 있는 repositories 기능을 가지고 있습니다. 스마트폰에서 앱을 간단하게 설치할 수 있는 것과 유사합니다. 우분투의 소프트웨어들은 유지 지원 여부, 라이선스 등에 따라 main, restricted, universe, multiverse 등으로 분류됩니다. ROS를 설치하기 위해서 이들을 설치할 수 있도록 허용 설정하는 작업이 필요합니다. 영문판 우분투 기준으로 main menu의 system -> administration -> software sources 설정 메뉴에서 downloadable from the Internet 하위의 main, restricted, universe, multiverse 항목에 각각에 체크해 주시면 됩니다.


2. sources.list 설정

 PC가 packages.ros.org로부터 ROS 관련 소프트웨어를 받을 수 있도록 설정합니다. 터미널에 아래 명령어를 입력합니다. 입력해야 하는 명령어는 구분하기 쉽도록 앞에 $를 붙였으며 실제로 입력하실 때에는 앞쪽의 $를 제외한 부분만 입력하셔야 합니다.

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

3. Key 설정

 다운로드 받는 패키지가 신뢰할 수 있다는 것을 확인하기 위해 key값을 설정해 줍니다.

$ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116


4. Debian package index 업데이트

$ sudo apt-get update


5. 추가 의존성 파일 설치

 우분투 14.04.2버전에서 의존성 문제가 발생하는 경우가 있으므로 아래 패키지를 설치합니다.

$ sudo apt-get install xserver-xorg-dev-lts-utopic mesa-common-dev-lts-utopic libxatracker-dev-lts-utopic libopenvg1-mesa-dev-lts-utopic libgles2-mesa-dev-lts-utopic libgles1-mesa-dev-lts-utopic libgl1-mesa-dev-lts-utopic libgbm-dev-lts-utopic libegl1-mesa-dev-lts-utopic

$ sudo apt-get install libgl1-mesa-dev-lts-utopic


6. ROS 설치

$ sudo apt-get install ros-indigo-desktop-full


7. rosdep 초기화

 rosdep은 ROS 구동에 필요한 요소들을 쉽게 설치할 수 있도록 합니다. rosdep 초기화를 위하여 아래 명령어를 입력합니다.

$ sudo rosdep init

$ rosdep update


8. rosinstall 설치

 rosinstall은 ROS 관련 source tree나 패키지를 다운로드할 때 사용하는 도구입니다.

$ sudo apt-get install python-rosinstall


 여기까지가 기본적인 ROS 관련 파일 설치 과정입니다. 이번에는 개발 디렉토리 설정 같은 환경 설정 방법을 설명드리겠습니다. 먼저 들어가기 앞서 관련 용어들을 간단히 정리해 보았습니다.


Catkin: ROS의 빌드 시스템

gedit: 우분투에서 사용되는 GUI 기반 text editor. Windows의 메모장이나 워드패드를 생각하시면 됩니다.

Shell: 사용자가 OS의 기능(service)을 직접 실행할 수 있도록 해 주는 interface. Command-line 형식을 이용하는 것도 있고 GUI를 이용하는 것도 있습니다.

Bash: 우분투를 포함하는 Unix 계열 OS에서 사용하는 command-line interpreter. 또한 scripting language입니다. Scripting language는 일반적으로 흔히 접할 수 있는 C언어 같은 programming language, 즉 source를 build한 뒤 실행시키는 개념과 달리 하나 하나의 command를 직접 입력시켜 원하는 기능을 수행하는 형태의 언어입니다. Bash는 그러한 scripting language의 한 종류입니다.

Dot file: 리눅스에서 현재 경로 내의 폴더와 파일을 볼 수 있는 ls 명령어로 볼 수 없는 숨겨진 파일입니다. 주로 user configuration(사용자가 지정하는 설정)을 저장할 때 사용합니다.

.bashrc: Dot file의 한 종류이며 bash가 interactive shell(user input에 의해 script가 실행되는 shell mode)로 실행될 때 먼저 자동적으로 실행됩니다. 여기에 관련 설정을 넣어 두면 새 터미널을 열 때마다 그 명령이 수행됩니다. 파일 위치는 ~/ 경로에 있습니다.


환경 설정

1. ROS Indigo 환경 설정 bash shell 실행

$ source /opt/ros/indigo/setup.bash


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

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

$ cd ~/catkin_ws/src              ->  source 디렉토리로 이동

$ catkin_init_workspace        ->  catkin 작업 디렉토리 초기화


3. 컴파일 하기

$ cd ~/catkin_ws/      ->  build를 하기 위해 catkin_ws 경로로 이동

$ catkin_make           ->  build 명령어


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


`1.jpg

~/catkin_ws 경로 내에 build, devel, src 세 가지 폴더가 있는 것을 확인 가능합니다. 우측은 build 폴더 내의 파일들입니다.


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

$ source ~/catkin_ws/devel/setup.bash


 이쯤 되면 아시겠지만 source 명령어는 bash shell을 실행시키는 기능을 합니다. 다음으로는 .bashrc를 수정하여 source 명령어가 터미널을 켤 때마다 자동적으로 실행되도록 설정하고, master 주소와 hostname 및 alias 설정을 해 보겠습니다. Alias는 C언어의 #define과 비슷한 기능을 하는데 긴 명령어를 짧은 줄임말로 사용할 수 있도록 해 줍니다.


$ gedit ~/.bashrc          ->  .bashrc를 gedit으로 열어 수정


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


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

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


export ROS_MASTER_URI=http://XXX.XXX.XXX.XXX:11311        -> master 주소를 설정합니다. XXX.XXX.XXX.XXX에 ip를 입력합니다.

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


alias cw='cd ~/catkin_ws'                                      ->  cw 명령어는 catkin workspace 디렉토리로 이동합니다.

alias cs='cd ~/catkin_ws/src'                                 ->  cs 명령어는 catkin workspace의 source 디렉토리로 이동합니다.

alias cm='cd ~/catkin_ws && catkin_make'          ->  cm 명령어는 catkin workspace로 이동한 뒤 ROS 패키지를 build합니다.


 ROS의 설정 내용은 $ export | grep ROS 명령어를 통해 확인하실 수 있습니다.


 여기까지 기본적인 환경 설정을 마쳤습니다. 이번에는 ROS를 설치할 때 같이 포함된 테스트용 패키지를 이용해 node를 구동해 보고, 노드간 message 통신이 어떻게 이루어지는지 확인해 보도록 하겠습니다. 먼저 노드를 실행하기에 앞서 master를 구동시켜야합니다.


$ roscore


`2.jpg

roscore 명령어를 통해 ROS master를 구동시킨 모습


 roscore는 ctrl+c 키를 이용해 terminate시킬 수 있습니다. 위 스크린샷에서도 끝에 흰색 네모가 있는 것을 통해 명령어를 입력 받을 수 없는 상태라는 것을 확인할 수 있습니다. ROS master를 구동시킨 다음에는 새 터미널을 연 뒤, 아래 명령어를 입력합니다.


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


`3.jpg

turtlesim_node 노드가 실행된 모습


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


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


`4.jpg

turtle_teleop_key 노드가 실행되어 키보드 입력에 따라 거북이가 움직인 모습


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


$ rosrun rqt_graph rqt_graph


`5.jpg

rqt_graph 노드가 실행된 모습


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


 지금까지 ROS를 우분투에 설치한 뒤 환경 설정과 간단한 테스트를 진행해 보았습니다. 다음 번에는 ROS를 이용해 하위 제어기에 간단한 명령을 내리고, 이를 통해 하위 제어기가 하드웨어를 직접 구동하도록 만들어 볼 계획입니다.


  1. ROS(Robot Operating System) 개념과 활용 - 11. rosserial 알아보기

    ROS가 적용되는 시스템에선 연산을 위한 상위 제어기와 하드웨어 제어를 위한 하위 제어기가 각각의 역할을 수행하는 경우가 많습니다. 상위 제어기는 보통 PC나 OBC(One Board Computer)를 사용하게 되는데, 하위 제어기와 통신할 때 가장 흔하게 사용되는 ...
    Date2016.03.28 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views7539
    Read More
  2. ROS(Robot Operating System) 개념과 활용 - 10. CMakeLists.txt 파헤치기

    CMakeLists.txt는 빌드 설정에 관련된 매우 중요한 파일이지만 주석의 압박과 익숙하지 않은 사용법 때문에 매번 대충 작성했던 경험이 있습니다. 관련 가이드를 찾아 보니 생각보다 간단한 규칙으로 되어 있어서 다른 내용을 진행하기 전에 미리 짚고 넘어가...
    Date2016.03.05 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views8436
    Read More
  3. ROS(Robot Operating System) 개념과 활용 - 9. Dynamic reconfigure를 이용한 실시간 node parameter 업데이트

    오랜만의 ROS 강좌 업데이트입니다. 거의 반년 전 쯤에 해 보았던 내용이지만 이런 저런 바쁜 일들에 밀려 이제서야 업데이트를 하게 되었습니다. 본 코너인 ROS 개념과 활용에서는 나머지 기본적인 내용들을 다루고 최종적으로 간단한 제어 예제까지 수행할 ...
    Date2016.02.24 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views3852
    Read More
  4. ROS(Robot Operating System) 개념과 활용 - 8. roslaunch 사용과 launch 파일 작성하기

    저번에 USB 카메라를 이용하면서 usb_cam-test.launch 파일을 실행시켜 보았습니다. usb_cam-test.launch 파일을 실행시키면 USB 카메라와 직접적으로 상호작용하는 '/usb_cam' 노드와 '/usb_cam/image_raw' 토픽을 받아 화면에 출력하는 '/image_view' 노드...
    Date2015.08.13 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views17572
    Read More
  5. ROS(Robot Operating System) 개념과 활용 - 7. USB 카메라 사용하기

    ROS는 여러 가지 이미지 관련 패키지를 제공하고 있습니다. 특히 OpenCV 연동 기능을 제공하기 때문에 다양한 영상 처리 알고리즘을 적용할 수 있다는 장점이 있습니다. 이미지와 영상을 얻기 위해서는 이미지를 얻는 센서가 필요한데, ROS가 주로 PC나 SBC ...
    Date2015.08.09 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views6775
    Read More
  6. ROS(Robot Operating System) 개념과 활용 - 6. rqt를 이용한 데이터 모니터링

    ROS는 로봇으로부터 얻을 수 있는 데이터를 쉽게 확인하고 관리할 수 있도록 rqt라고 하는 모니터링 도구를 제공합니다. rqt는 GUI 개발에 쓰이는 Qt framework 기반의 ROS software framework입니다. rqt는 우리가 지금까지 노드간 관계를 확인할 때 써 오던...
    Date2015.08.08 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views7049
    Read More
  7. ROS(Robot Operating System) 개념과 활용 - 5. 바닥부터 node 작성하기

    지금까지는 기존에 있던 패키지 노드를 수정하여 사용해 왔습니다. 이번에는 노드를 아예 처음부터 새로 작성하는 법에 대해 알아보겠습니다. 또한 노드 내부에서 사용되는 ROS의 기본 구조에 대해서도 간략히 짚고 넘어가도록 하겠습니다. 노드 작성법을 간...
    Date2015.07.26 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views33231
    Read More
  8. ROS(Robot Operating System) 개념과 활용 - 4. ROS node를 이용하여 direct serial 통신하기

    ROS 노드들은 TCP/IP 프로토콜의 메시지 통신을 기반으로 데이터를 주고 받습니다. 하지만 대다수의 센서들과 MCU의 통신은 일반적인 serial 프로토콜을 이용해 통신을 하는 경우가 많습니다. 여러 용도로 편리하게 사용되는 UART 통신 또한 그러한 방식입니...
    Date2015.07.07 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views10403
    Read More
  9. ROS(Robot Operating System) 개념과 활용 - 3. ROS 개발 환경 구축과 간단한 node 구동 테스트

    이번에는 직접 ROS를 설치하고 간단한 node 구동 테스트를 해 보도록 하겠습니다. ROS는 약 1년 주기로 새로운 버전이 올라오며 2015년 6월 기준 최신 버전은 9번째 release인 Jade Turtle입니다. 하지만 8번째 release인 Indigo Igloo가 지원 기간이 더 길고...
    Date2015.06.26 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views15400
    Read More
  10. ROS(Robot Operating System) 개념과 활용 - 2. ROS의 동작 구조와 적용 사례

    오랜만의 업데이트입니다. 한 몇 주 정도는 짬짬이 틈을 내어 몇 가지 주요한 진행 사항들을 올릴 수 있을 것 같네요. 매번 느끼지만 뭔가를 하는 것 보다 그것을 정리해서 홈페이지에 올리는 것이 훨씬 많은 노동력을 필요로 하는 것 같습니다. 이번에는 ROS...
    Date2015.06.08 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views10730
    Read More
  11. ROS(Robot Operating System) 개념과 활용 - 1. ROS 개요

    연구실에서 로봇 관련 과제를 하는 김에 ROS를 배워서 적용해 보려고 합니다. ROS는 로봇 제어를 위한 일종의 오픈소스 소프트웨어 플랫폼입니다. 저는 개인적으로 low level programming을 선호해 왔습니다. 레지스터와 메모리를 직접 제어하고 라이브러리의...
    Date2015.04.13 CategoryROS(Robot Operating System) 개념과 활용 By박정현 Views15325
    Read More
Board Pagination Prev 1 Next
/ 1