2015년 8월 3일 월요일

라즈베리파이 우분투 14.04 기반 ROS Desktop 설치 요약

아두이노, 라즈베리파이(RPi)와 같은 저렴한 보드에서 가져온 센서 데이터를 ROS의 특정 노드에서 전달 받거나, 특정 노드에서 제어 명령을 이런 보드에 전달하고 싶을 때가 있다. 이와 관련된 내용을 요약한다. 이 내용은 오로카에서 활동중이신 GroundZero님, ubuntu wiki (Raspbeery Pi에 Ubuntu 14.04 LTS 설치) 및 ROS wiki(Ubuntu ARM install of ROS Indigo) 사이트 글을 참고로하였다.

RPi + ROS에 대한 소개는 다음 슬라이드를 참고한다.



참고 - 실제 설치해 보니, 위 레퍼런스대로 해도 문제가 발생하는 경우가 꽤 있다. 이중 몇몇 부분은 다시 재설치해야 해서, 하루 종일 밤새며 3번 설치해야 했다. 각 단계에서 주의할 부분이 있으면 표시했으니 참고하길 바란다. 만약 각 패키지들을 설치하다가 에러가 발생하면, sudo apt-get upgrade 로 업그레이드한 후 다시 설치한다. 불필요하다면, 삽질을 피하기 위해서는 rviz와 같은 desktop버전을 설치하지 않는다.

1. 라즈베리파이2에 우분투 14.04 LTS 설치

1. 우분투 이미지 쓰기

아래 링크에서 우분투 이미지를 다운로드하여, win32diskimager를 이용하여, SD 메모리 카드에 이미지를 쓴다. 단, SD 메모리 카드는 최소 8기가 이상이어야 한다.
그리고, 라즈베리파이에 SD 메모리카드를 넣고, 부팅한다.
기본 계정과 패스워드는 ubuntu, ubuntu 이다. 패스워드 수정은 "sudo passwrd root" 명령을 이용한다.

이후, 로케일 등을 제대로 설정하고, 우분투를 최신 버전으로 업데이트한다.

$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

$ sudo ntpdate time.kriss.re.kr

2. 파일 시스템 설정

SD 메모리카드에 할당되지 않은 디스크 공간을 사용하기 위해서, 다음 명령을 이용해 파티션을 재설정한다.

$ sudo fdisk /dev/mmcblk0

fdisk 화면에서 두 번째 파티션을 삭제하기 위해, "d", "2"를 입력한다. 그리고, 파티션을 확장하기 위해 차례대로, "n", "p", "2", 엔터, 엔터, "w"를 입력한다.

다음과 같이 명령어를 입력한다.

$ sudo reboot

$ sudo resize2fs /dev/mmcblk0p2

$ sudo apt-get install dphys-swapfile

3. 네트워크 설정

WiFi 동글을 가지고 있다면, 다음과 같은 패키지를 설치한다.

$ sudo apt-get install linux-firmware

$ sudo apt-get install wireless-tools wpasupplicant

4. GUI 데스크탑 설치

다음 명령어를 입력해 GUI 데스크탑을 설치한다.

$ sudo apt-get install lubuntu-desktop

$ sudo apt-get install openssh-server

$ sudo apt-get install ssh

$ sudo apt-get install xserver-xorg-video-fbturbo

그리고, xorg.conf를 다음과 같이 수정하고, 업데이트한다.

$ sudo nano /etc/X11/xorg.conf

Section "Device"
    Identifier "Raspberry Pi FBDEV"
    Driver "fbturbo"
    Option "fbdev" "/dev/fb0"
    Option "SwapbuffersWait" "true"
EndSection

$ sudo apt-get update
$ sudo apt-get upgrade

VideoCore 패키지를 설치한다.

$ sudo apt-get install libraspberrypi-bin libraspberrypi-dev

이 패키지의 컴파일을 위해, 적절한 위치의 폴더 링크를 생성한다. 그리고 설치한다.

$ sudo ln -s /usr /opt/vc

$ sudo apt-get install libraspberrypi-bin-nonfree

빌드 도구를 설치한다.

$ sudo apt-get install build-essential -y

만약 시리얼 콘솔을 설정하려면 다음과 같이 /boot/cmdline.txt 를 수정한다. 다만, 이 부부분은 잘못 수정하면 우분투 부팅이 되지 않는 경우가 있다. 주의해서 수정하고, 작업전에 백업을 만들어 두도록 한다. 만약, 부팅이 안되는 경우, 다른 PC에서 본 메모리 카드를 삽입하고, cmdline.txt파일을 원본으로 되돌린다.

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootwait

그리고 /etc/init/ttyAMA0.conf 파일에 아래와 같이 내용을 추가한다.

start on stopped rc or RUNLEVEL=[12345]
stop on runlevel [!12345]

respawn
exec /sbin/getty -L 115200 ttyAMA0 vt102

다 설치하였으면 재부팅한다.

$ sudo reboot

2. ROS Indigo 설치

1. Locale 설정

ROS 도구가 요청하는 시스템 Locale 정보를 위해, 이를 설정한다.

sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX

2. Sources.list 설정

이 설정은 Trusty armhf (14.04)용이다.

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

3. Key 설정


wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -

4. 설치

데비안 패키지 최신 버전으로 업데이트한다.

sudo apt-get update

ROS-base를 설치한다.

sudo apt-get install ros-indigo-ros-base

기타 패키지를 설치한다.

sudo apt-get install ros-indigo-PACKAGE

예를 들어, 아래와 같이 설치한다. 다만, 이 부분에서 unmet dependencies 에러가 나는 경우가 있다. libqt4-opengl-dev에서 발생하나, 아직 정확한 원인을 찾지는 못하였다.

sudo apt-get install ros-indigo-navigation

참고로, 설치 가능한  패키지는 다음 명령으로 확인 가능하다.

apt-cache search ros-indigo

설치 패키지 용량은 ROS-base가 407MB, 전체 설치 용량은 572MB이다.

5. rosdep 초기화

ROS를 사용하기 전에, rosdep 를 초기화한다. rosdep 는 컴파일 시 핵심 컴포넌트 실행에 요구되는 소스 의존성을 고려해, 패키지 설치를 쉽게할 수 있도록 도와준다.

sudo apt-get install python-rosdep
sudo rosdep init
rosdep update

6. ROS 환경 설정

ROS 환경변수를 터미널이 열릴때마다 자동적으로 적용되도록 설정한다.

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

7. rosinstall 설치

rosinstall은 ROS 패키지의 수많은 소스 트리를 쉽게 다운로드할 수 있도록 한다.

sudo apt-get install python-rosinstall

8. OS 이름 확인

/etc/lsb-release 에 있는 OS이름이 다음과 같은지 확인해 본다.

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04"

9. catkin 작업공간 설정

catkin 작업공간을 아래 명령으로 설정한다.
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws

catkin 메이크를 테스트해본다.
catkin_make

catkin 빌드환경을 다음 명령어로 설정한다.
source ~/catkin_ws/devel/setup.bash
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

마지막으로 roscore를 실행해 본다. 정상으로 실행된다.

10. 튜토리얼 실행

다음 링크에는 다양한 ROS 튜토리얼이 있다. 한번 실행해 본다.

ROS conference 모습

후기 1

모든 작업을 마치면, roscore가 잘 돌아간다. 모두 설치하면, roscore등 핵심적인 실행파일은 정상적으로 동작한다. ros를 라즈베리파이에서 설치하다보면, 밤새는 일은 다반사라, 머리가 새하얗게 되는 듯한 느낌이다.

헐~ 


이런 삽질에서도 git, opengl을 사용하는 qt와 같은 패키지들은 제대로 설치가 안된다. opengl은 그렇다 쳐도, git이 안되다니, 정말 황당할 뿐이다. 전체 패키지를 모두 설치/재설치하느라 밤 11시 부터 현재 새벽 5시까지 설치했었는데 말이다. 최종적으로 libgles2-mesa-dev unmet dependencies 문제가 발생한다. 이 문제는 원본 레퍼런스의 패키지 버전들과 현재 시점에서 설치되는 패키지 버전간 불일치로 추측된다.

이와 관련해, 구글링을 오랜 시간에 걸쳐 해 보았으나, 다들 비슷한 문제를 질문하고 있으며, 명확한 해결책은 아직 발견하지 못하였다. 다른 일들도 많은 데, 이런 삽질에 시간이 가고 있다니...


후기 2

이런 문제가 골치아파, 라즈베리안을 기반으로 설치하고 싶다면, 아래 링크를 참고하라. 본인은 이 레퍼런스를 기반으로 다시 ROS를 재설치하고 있다. 현재 새벽 6시인데, 아직은 잘 설치되고 있다. 잘 되면, 다시 글을 정리해 업로드하도록 하겠다. 제길...

레퍼런스


댓글 6개:

  1. 안녕하세요. 제가 라즈베리파이2에다가 ubuntu14.04를 받으려고 보고 했다만 설치가 안되서... 도와주실수 있으신지요?

    답글삭제
    답글
    1. 음.. 무엇이 잘 안되시나요? 우분투로 설치하신다면, rviz같은 gui제외한 기본 패키지만 설치하면 큰 문제가 없었습니다만..

      삭제
    2. 작성자가 댓글을 삭제했습니다.

      삭제
    3. 아래 링크를 천천히 따라서 해 보세요..

      http://thumbdown.blog.me/220381836794

      그리고, 참고로 말씀드리자면, RPi에서 무거운 rviz같은 것 실행시키기 어려워요. 어차피 센서나 액추에이터 신호 전송용이면, 라즈비안 OS에서 ROS 설치하는 것을 권장합니다.

      http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Indigo%20on%20Raspberry%20Pi

      삭제
    4. 좋은 답변 감사드림니다.

      삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제