2015년 8월 15일 토요일

TK1 기반 ROS, 센서, 무선 및 배터리 설치

라즈베리파이 기반 ROS를 설치하고, roscore와 turtlesim 실행까지 성공하였으나, 그 이후, camera, openni 등은 unmet 의존성 문제로 실패하였다. 아마, 우분투 버전 14.02.4 LTS에서 해결되지 않은 몇몇 패키지의 문제들로 추측된다. 다만, 라즈베리파이에서 자이로 센서와 같이 대용량 데이터 처리를 할 필요가 없는 센서 관련 패키지 등은 큰 문제 없이 실행되었다.

본인은 3차원 포인트 클라우드를 센싱하고 처리할 수 있는 보드가 필요했으므로, 라즈베리파이는 간단한 센서 처리(IMU같은)에만 사용하였다. 3차원 포인트 클라우드를 취득 및 처리하려면, openni와 PCL 라이브러리를 설치해야 한다. 이 라이브러리를 사용하려면, 라즈베리파이에서 예전 안정된 우분투 버전에서 다시 삽질을 하거나, 꼬인 패키지 의존성을 풀거나, 라즈베리파이 같이 열악한 보드가 아닌 베어본 pc에서 제대로 설치해 보는 것이다.

베어본 PC이면서 개발에 적합한 소형 보드는 오드로이드, TK1이 대표적이다.

만약 병렬 데이터 처리가 필요하다면, 단연 TK1을 사용하는 것이 좋다.
여기서는 Jetson TK1에서 ROS를 설치해 본다. 장비 스펙은 다음 링크를 참고한다.

1. 시작
TK1을 이용해 다음과 같은 짓을 할 수 있다 (이리 잘 된다면야).


TK1의 디스크 용량은 16G로 그리 크지 않다.
$ df -h

TK1 상세 재원은 다음과 같다.

Jetson Specs

Nvidia Jetson TK1

Processor
2.32GHz ARM quad-core Cortex-A15

DRAM
2GB DDR3L 933MHz EMC x16 using 64-bit data width

Video out
HDMI

Flash
16GB fast eMMC 4.51

Mini PCIe
Addon wifi module, firewire IEEE 1394, etc.

Serial
a full-size DB9 serial port

Power
12V DC barrel power jack and a 4-pin PC IDE power connector


2. 설치
설치 방법은 아래 레퍼런스를 따른다.
관련 설치 동영상은 다음과 같다. 이 영상은 installROS.sh 배치파일을 사용하는 데, ros-indigo-ros-base 패키지를 설치한다. shell은 './[shell 배치파일명]' 혹은 'sudo sh [shell 배치파일명]' 을 실행하면 된다. 만약, rqt, RViz 등을 설치하고자 한다면, ros-indigo-desktop-full 패키지를 설치하면 된다.


기본적인 ROS 패키지를 설치한 후에, 새로운 터미널을 열고, Catkin workspace를 설치한다. 만약, 앞의 설치 shell 배치 환경에 정의된, ROS 경로 설정이 반영되지 않으면, Catkin workspace 초기화 명령이 실행되지 않으니, 주의하길 바란다. 설치 동영상은 다음과 같다. 관련 레퍼런스는 ros wiki를 참고한다.


ROS 패키지 경로 환경 변수를 확인할려면, 다음 명령을 실행해 본다.
$ echo $ROS_PACKAGE_PATH

3. ROS 환경 설정
다음과 같이 bashrc 파일에 ROS 환경을 설정한다.
$ gedit ~/.bashrc

ifconfig를 통해, ip를 얻고, 이 값을 ROS_HOSTNAME, ROS_MASTER_URI에 설정한다. 환경 설정 관련 내용은 이전 ROS 설정관련 글을 참고하라.

개발환경도 설치한다.
$ sudo apt-get install qtcreator

4. ROS 테스트
이제 제대로 설치되었는 지 테스트해 보자.
$ roscore
...
started core service [/rosout]

제대로 서비스가 실행되면, 설치에 성공한 것이다.

설치 가능한 패키지가 어떤것이 있는 지 확인해 보자.
$ apt-cache search ros-indigo

대략 1634패키지가 설치 가능하다.

이 중에 tutlesim을 설치해 본다.
$ sudo apt-get install ros-indigo-turtlesim

turtlesim을 실행해 본다.
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key

rqt_graph를 설치해 실행해 본다.
$ sudo apt-get install rqt_graph
$ rosrun rqt_graph rqt_graph

그럼 다음과 같은 노드 간 토픽 그래프를 확인할 수 있다.




이제 rviz 삽질 미션이다.
$ sudo apt-get install ros-indigo-rqt*

그대로 실행하면, segment fault 에러가 출력된다. 이 문제는 ros wiki에 보고된 것으로, ~/.bashrc 파일에 다음과 같이 GTK_IM_MODULE을 unset 하도록 한다.

unset GTK_IM_MODULE

재부팅한 후, rviz를 실행해 본다.
$ rosrun rviz rviz

그래도 같은 segmentation fault가 출력된다. 구글링 삽질을 해보니, robot_model 패키지에서 문제가 발생하고 있다고 wiki에 보고되고 있다. git에서 다운받아 catkin으로 재설치해 보았다. 그래도 또 발생한다.

다시 rviz를 1.11.7에서 1.11.6으로 다운그래이드(Downgrading)하면 된다는 wiki 발견하고 시도해 보았다. 특정 버전 설치는 다음과 같다.

$ sudo apt-get purge ros-indigo-rviz*
$ sudo apt-get install package=version
1.11.6 버전 패키지를 찾을 수 없다는 에러가 발생한다. 참고로, 잘되는 rviz는 GLSL 4.4가 아닌 1.3이 사용되고 있다.

다시 1.11.7 버전을 재설치한다. 그리고, 실행해 보니, XML과 관련된 다른 에러가 발생한다.
rviz_backdrop 패키지이다. sudo apt-get purge로 삭제한 후 다시 실행해 본다. 그래도, segmentation fault가 발생한다. 대략 2시간 정도의 삽질이 아깝지만, 일단, rviz는 과감히 포기한다.

rviz를 제외하고는 순조롭게 설치가 진행된다. rviz를 제외하고는 대략 2시간 정도 걸렸다. 라즈베리파이 삽질은 [우분투 | 라즈비안] + [ROS Desktop | ROS comm] + [32G | 16G] + [WiFi] 를 거의 일주일동안 밤을 새며 작업을 하였으나, 결국 camera,  openni ros 패키지 등을 설치하기 어려웠다.

5. 센서 설치 및 실행
1. uvc_camera 설치
usb 카메라를 꼽아 본 후 lsusb로 카메라가 인식되는지 확인한다. 인식되면 해당 카메라가 리스트된다. 참고로 /dev 폴더에 video0 드라이버가 열릴것이다.

그후, uvc_camera를 설치해 본다.
$ sudo apt-get install ros-indigo-uvc-camera
$ sudo apt-get install ros-indigo-image-*
$ sudo apt-get install ros-indigo-rqt-image-view

$ roscore
$ rosrun uvc_camera uvc_camera_node

$ rostopic list

$ rosrun image_view image_view image:=/image_raw

이 결과로, 다음과 같이 카메라 이미지가 제대로 취득되는 것을 확인할 수 있다.


2. openni2 설치
이제 기쁜 마음으로 openni2를 설치해 보자. 사용할 RGB-D 센서는 Xtion이다.
$ sudo apt-get install ros-indigo-openni2-camera ros-indigo-openni2-launch

잘 설치된다^^. 이제 실행해 본다.
$ roscore
$ roslaunch openni2_launch openni2.launch

이제, rviz로 확인해 볼 단계이다. rviz가 현재 TK1에 제대로 설치되지 않았으니, 인터넷으로 연결된 ROS master PC에서 확인해 본다. 이를 위해, TK1 우분투의 ~/.bashrc 의 MASTER URI 주소를 master PC IP주소로 설정해야 한다. 이 과정은 이전 글의 내용과 동일하다. 실행 순서는 다음과 같다.

1) TK1의 roscore, roslaunch를 실행 취소한다.
2) TK1의 ~/.bashrc 에서 ROS_MASTER_URI 주소를 MASTER PC의 IP주소로 설정하고 저장한다.
3) MASTER PC에서 다음 명령을 실행한다.
$ roscore
4) TK1에서 다음 명령을 실행한다.
$ roslaunch openni2_launch openni2.launch
...
process[camera_base_link3-13]: started with pid [21355]
...
4) MASTER PC에서 rviz를 실행한다.
$ rviz
[Global options] -> [Fixed Frame] -> 'camera_depth_frame'
RViz의 [Add]버튼 클릭 -> [PointCloud2] 선택
[PointCloud2] 노드 속성값에서 [Color Transform]을 'AxisColor' 로 설정

그럼 다음과 같이 포인트 클라우드가 보여진다. RViz의 거리 측정 명령을 사용하면, 점 간 거리를 알 수 있다.

5) MASTER PC
$ rqt_image_view
/camera/depth/image
/camera/ir/image

TK1 + Asus XTion


Master PC

만약 잘 안된다면, 다음 사이트를 참고해, 드라이버 등을 설치한다. 참고로, 본인의 경우에는 TK1에 별도로 XTion 드라이버를 설치하지 않아도 실행이 잘 되었었다.
아래는 Asus XTion PRO Live 사이트의 요약 내용이다.
$ sudo apt-get install -y g++ git python libusb-1.0-0-dev libudev-dev freeglut3-dev doxygen graphviz openjdk-6-jdk
$ mkdir ~/devel
$ cd  ~/devel
$ git clone https://github.com/occipital/OpenNI2.git
$ cd OpenNI2
$ find . -iname platform.arm
$ gedit ./ThirdParty/PSCommon/BuildSystem/Platform.Arm
Find:
CFLAGS += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard
Replace with:
CFLAGS += -march=armv7-a -mtune=cortex-a15 -mfpu=neon-vfpv4 -mfloat-abi=hard

$ gedit ThirdParty/PSCommon/BuildSystem/CommonCppMakefile
Search the line
[Line 97] LDFLAGS += -Wl,-rpath ./ 
and the line
[Line 98] OUTPUT_COMMAND = $(CXX) -o $(OUTPUT_FILE) $(OBJ_FILES) $(LDFLAGS) 
Add the code between the two lines:
LDFLAGS += -Wl,-rpath ./
ifneq (“$(OSTYPE)”,”Darwin”)

    LDFLAGS += -lpthread

endif
OUTPUT_COMMAND = $(CXX) -o $(OUTPUT_FILE) $(OBJ_FILES) $(LDFLAGS)
    $ gedit Makefile
    core_samples: $(CORE_SAMPLES)
    PLATFORM=Arm make
    GLUT_SUPPORTED=1 make tools -j4

    $ cd ~/devel/OpenNI2/Bin/Arm-Release
    $ ./SimpleRead
    $ ./NiViewer




    3. WiFi 설치
    WiFi 설치는 다음 사이트를 참고한다. 

    이 사이트에서 권장하는 WiFi 제품은 다음과 같다.





    4. 배터리 설치
    배터리 설치와 관련된 부분은 다음 링크와 영상을 참고한다. 




    사용되는 배터리의 크기는 다음과 같다. 
    13.97 cm x 5.08 cm x 2.54 cm (5.5 x 2 x 1 inch)

    5. 결론
    TK1은 레퍼런스가 워낙 잘 되어 있고, 보드에 필요한 라이브러리의 호환성이 좋아, 큰 문제 없이 모든 라이브러리 패키지 설치 작업을 몇 시간만에 마칠 수 있었다. 삽질했었던 RViz도 지금은 잘 실행된다. 
    매우 강력한 병렬 프로세싱이 지원되는 보드이므로, 강력한 수치 연산이 필요한 응용에 사용 가능하다. 가격은 아마존에서 현재 192달러에 판매되고 있다. 이 정도 성능에 가격이라면, 비싼 편이 아니다. 



    레퍼런스




    댓글 2개:

    1. 안녕하세요?
      NIVIA TK1에 ROS 를 설치하려고 하는데,
      다음 사이트를 찾게 되었는데, 아래의 사이트가 맞나요?

      http://wiki.ros.org/NvidiaJetsonTK1

      http://wiki.ros.org/indigo/Installation/UbuntuARM

      답글삭제
      답글
      1. 네. http://wiki.ros.org/NvidiaJetsonTK1 맞습니다.

        http://jetsonhacks.com/2015/05/27/robot-operating-system-ros-on-nvidia-jetson-tk1/

        에 관련 동영상이 있더군요. 도움이 됩니다.

        삭제