제가 사용한 방법을 알려드리겠습니다.
여러가지 패키지들을 뒤섞어서 올바른 방법은 아니지만 제대로 동작은 하는 것 같습니다.
혹시 빠지거나 잘못된 부분이 있으면 알려주세요.
설치환경
하드웨어: Odroid-x2
소프트웨어: robroyhall 님의 Ubuntu 12.11 Fullyloaded Image
Kobuki Turtlebot 을 위한 ROS 설치는 우분투 ROS Arm 버전 패키지들을 활용하며 패키지화되지 않은 OpenNI, PCL, rviz 등의 소프트웨어들은 직접 소스코드를 다운로드하여 빌드합니다. 소스코드 빌드는 catkin 을 이용한 빌드와 rosbuild 를 이용한 빌드로 나누어집니다. 빌드 과정은 총 6단계로 나누어 보았습니다. 우분투 개발환경/ROS 초기화 -> OpenNI 설치 -> 의존패키지설치 -> catkin 빌드 -> rosbuild 빌드 -> 보드설정 및 구동 입니다.
단계 1. Ubuntu 개발환경 및 ROS 초기화
SD 카드를 16GB 이상으로 준비하신 후에 ODROID-X2 보드용 우분투 이미지를 SD/eMMC 카드에 설치한 후 GParted 파티션 매니저를 사용해서 루트파일시스템의 용량을 최대한 늘려줍니다.
PCL 을 컴파일하기 위해서는 스왑공간을 1GB 이상 설정해야 합니다. 스왑 공간은 SD 카드에 스왑파티션을 만들거나 스왑파일을 등록하면 됩니다. 스왑파티션은 디스크도구를 사용하면 되고, 스왑파일은 다음과 같은 명령을 실행하면 됩니다.
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 # 1GB
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
부팅시에 스왑공간이 등록되도록 하려면 /etc/fstab 파일에 다음 항목을 추가합니다.
/swapfile swap swap defaults 0 0
스왑공간의 설치여부는 “cat /proc/swaps” 이나 “free” 명령을 실행하여 확인할 수 있습니다.
다음은 ROS 의 우분투 ARM 버전 소프트웨어를 설치합니다. 먼저 ROS 초기화 과정을 수행합니다.
(참고:
http://www.ros.org/wiki/groovy/Installation/UbuntuARM)
$ sudo sh -c 'echo "deb
http://packages.ros.org/ahendrix-mirror/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget
http://packages.ros.org/ros.key -O - | sudo apt-key add -
$ sudo apt-get update
패키지가 설치되지 않는 경우 가끔 apt-get update 를 실행하면 되는 경우가 있습니다. 사용가능한 패키지를 찾으려면 다음 명령어를 실행하세요.
$ apt-cache search ros-groovy
다음과 같은 ROS 기본 패키지를 설치합니다.
$ sudo apt-get install ros-groovy-ros ros-groovy-ros-comm ros-groovy-roscpp ros-groovy-rospy
다음으로 아래의 패키지들을 설치합니다. 하지만, 설치 도중 ros-groovy-rviz, ros-groovy-pcl, ros-groovy-pcl-ros 는 ubuntu arm 용 패키지가 없는 관계로 설치되지 않습니다. 이 패키지들을 제외하고 나머지를 설치합니다.
$ sudo apt-get install ros-groovy-geometry-msgs ros-groovy-sensor-msgs ros-groovy-nav-msgs ros-groovy-tf ros-groovy-rviz ros-groovy-nodelet ros-groovy-robot-state-publisher ros-groovy-diagnostic-msgs ros-groovy-dynamic-reconfigure ros-groovy-pcl ros-groovy-pcl-ros ros-groovy-pcl-msgs ros-groovy-diagnostics ros-groovy-image-proc ros-groovy-nodelet-core
그 외의 패키지들을 설치합니다.
# kobuki-msgs
$ sudo apt-get install ros-groovy-kobuki-msgs
# for yujin ocs (Yujin Robot's open-source control software)
$ sudo apt-get install ros-groovy-yujin-ocs
# for kobuki-ftdi-driver
$ sudo apt-get install libftdi-dev
# for kobuki-auto-docking
$ sudo apt-get install ros-groovy-actionlib
# ecl (Embedded Control Library)
$ sudo apt-get install ros-groovy-ecl-threads ros-groovy-ecl-devices ros-groovy-ecl-streams ros-groovy-ecl-mobile-robot ros-groovy-ecl-sigslots ros-groovy-ecl
# for pcl
$ sudo apt-get install libeigen3-dev ros-groovy-nodelet ros-groovy-nodelet-topic-tools ros-groovy-pluginlib ros-groovy-orocos-kdl ros-groovy-kdl-conversions ros-groovy-actionlib
단계 2. OpenNI & SensorKinect 드라이버 설치
다음으로 OpenNI 패키지와 SensorKinect 드라이버를 설치합니다. MS Kinect 장치를 위한 OpenNI 는 2가지 버전이 있습니다. OpenNI 1.x 버전과 SensorKinect 드라이버를 설치하는 것과 OpenNI2 버전과 freenect 드라이버를 설치하는 방법입니다. 하지만, 다음에 설치할 PCL 1.7 버전이 OpenNI 1.x 버전을 필요로 하므로 OpenNI 1.x 버전은 반드시 설치하여야 합니다.
먼저 다음과 같은 의존 패키지들을 설치합니다.
$ sudo apt-get install openjdk-6-jdk
$ sudo apt-get install freeglut3-dev libusb-1.0-0-dev doxygen graphviz
OpenNI 소스코드를 다운로드하고 빌드하여 설치합니다.
$ mkdir openni; cd openni
$ git clone
https://github.com/OpenNI/OpenNI.git -b unstable
(또는 git clone
https://github.com/jspricke/debian-openni )
$ cd OpenNI/Platform/Linux/CreateRedist
../Build/Common/Platform.Arm 파일을 편집하여 다음 내용을 수정합니다.
- CFLAGS += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
+ CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard
$ ./RedistMaker.Arm
$ cd ../Redist/OpenNI-Bin-Dev-Linux-Arm-v1.5.4.0
$ sudo ./install.sh
나중에 PCL 등 OpenNI 에 의존하는 패키지에서 참조할 수 있도록 다음과 같은 내용의 패키지 설정파일 libopenni.pc를 /usr/lib/pkgconfig/libopenni.pc 로 만들어 줍니다.
(또는 debian-openni 소스코드를 사용한 경우에는 $ cp debian/libopenni.pc usr/lib/pkgconfig 를 실행시켜 줍니다)
=========
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/ni
Name: OpenNI
Description: A general purpose driver for all OpenNI cameras.
Version: 1.5.4.0
Cflags: -I${includedir}
Libs: -L${libdir} -lOpenNI
===============
다음에는 SensorKinect 드라이버의 소스코드를 다운로드하고 빌드합니다.
$ cd ~/openni
$ git clone git://
github.com/avin2/SensorKinect.git$ cd SensorKinect/Platform/Linux/CreateRedist
../Build/Common/Platform.Arm 파일을 편집하여 다음 내용을 수정합니다.
- CFLAGS += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp #-mcpu=cortex-a8
+ CFLAGS += -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard
$ ./RedistMaker Arm
드라이버가 빌드되면 Redist 폴더가 만들어져 있을 겁니다. 다음과 같이 입력합니다:
$ cd ../Redist/Sensor-Bin-Linux-Arm-v5.1.2.1
$ vi Config/GlobalDefaultsKinect.ini
;UsbInterface=2
UsbInterface=1
$ sudo ./install.sh
MS Kinect 장치를 연결하고 lsusb 명령으로 장치를 확인합니다.
$ lsusb
…
Bus 001 Device 008: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 001 Device 009: ID 045e:02ad Microsoft Corp. Xbox NUI Audio
Bus 001 Device 010: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
NiViewer 와 같은 샘플 프로그램을 실행시켜 테스트합니다.
$ cd ~/openni/OpenNI/Platform/Linux/Build/Samples/NiViewer
$ make
$ cd ../../../Bin/Arm-Release
$ ./NiViewer
단계 3. 의존 패키지 설치
본격적으로 catkin 및 rosbuild 워크스페이스를 빌드하기 전에 또 의존하는 바이너리 패키지들을 설치합니다.
단계 3-1 openni_camera 및 PCL 의존 패키지 설치
openni_camera, openni_launch 패키지 설치에 필요한 의존 패키지들을 설치합니다.
# for openni-camera & openni2-camera
$ sudo apt-get install ros-groovy-cv-bridge ros-groovy-camera-info-manager
$ sudo apt-get install ros-groovy-compressed-depth-image-transport
다음 opencv 관련 패키지들도 컴퓨터비젼처리를 위해 필요한 경우 설치합니다.
sudo apt-get install libcv-dev libcv2.3 libopencv-highgui-dev libopencv-highgui2.3 libopencv-contrib-dev
다음 명령을 실행하여 PCL 설치에 필요한 cmake, eigen, boost, vtk 을 설치합니다.
$ sudo apt-get install cmake
$ sudo apt-get install libflann-dev
$ sudo apt-get install libeigen3-dev
$ sudo apt-get install libboost-all-dev
$ sudo apt-get install libvtk5-dev
libvtk5-dev 설치 시에 필요한 패키지인 libqt4-opengl-dev 설치시에 필요한 libegl1-mesa-dev 와 libgles2-mesa-dev 가 기존에 설치된 mali400-dev 패키지와 충돌하여 제대로 설치되지 않습니다.(PCL 컴파일 시에 /usr/include/KHR/khrplatform.h 와 /usr/include/GLES2/gl2.h, libEGL.so 등이 중복됨)
따라서 mali400-dev 를 먼저 제거한 후 libqt4-opengl-dev 를 설치하고 난 후에 다시 mali400-dev 를 재설치하여야 합니다. 그런데 mali400-dev 는 우분투싸이트는 2.1-12 버전만 다운로드할 수 있으므로 2.1-13 버전은 다음과 같이 설치합니다. 만약 계속 libegl1-mesa-dev와 libgles2-mesa-dev 설정과 관련된 오류 메시지가 나타나면 구글에서 문제가 되는 패키지(버전명까지 같아야 함)를 검색한 다음 deb 파일을 다운로드하여 dpkg 로 강제설치합니다.
$ mkdir ~/mali400; cd ~/mali400
$ wget
http://dn.odroid.com/MALI400_R3P2/20130208/mali400_packages.tar.gz$ tar -xvfz mali400_packages.tar.gz
$ sudo dpkg -r --purge mali400-dev
$ sudo apt-get install libqt4-opengl-dev
$ sudo dpkg -i --force-overwrite mali400-dev_2.1-13_armhf.deb
$ sudo rm -rf /usr/lib/arm-linux-gnueabihf/mesa-egl
$ sync
단계 3-2 rviz 의존 패키지 설치
다음 패키지들을 설치합니다.
$ sudo apt-get install ros-groovy-visualization-msgs ros-groovy-laser-geometry ros-groovy-python-qt-binding ros-groovy-resource-retriever libogre-dev ros-groovy-image-geometry
그리고, libassimp 3.0 버전을 설치합니다. sudo apt-get install libassimp-dev 명령을 통해 2.0 버전 패키지를 설치하면 나중에 rviz 빌드 시에 오류가 발생합니다.그러므로, 소스싸이트
http://sourceforge.net/projects/assimp/files/assimp-3.0 로부터 소스코드를 다운로드하여 직접 빌드합니다.
$ mkdir ~/assimp; cd ~/assimp
$ unzip assimp--3.0.1270-source-only.zip
$ cd assimp--3.0.1270-source-only ; mkdir build; cd build
$ cmake ..; make -j1
$ sudo make install
단계 3-3 rqt_robot_plugins 의존 패키지 설치
$ sudo apt-get install ros-groovy-tf2-ros ros-groovy-rqt-common-plugins
단계 4. catkin 워크스페이스 빌드
(참고:
http://www.ros.org/wiki/kobuki/Tutorials/Installation )
catkin 워크스페이스를 생성하고 관련 패키지들을 빌드합니다. 빌드하는 패키지들은 roscpp, tf, kobuki, openni_camera/openni_launch (터틀봇 구동을 위해서는 필요없음), image_pipeline, pcl, pcl-ros, rviz 등입니다.
특히, 여기서는 roscpp 와 tf 패키지를 이미 설치하였음에도 다시 빌드해야 합니다. 그 이유는 ARM CPU의 alignment 문제(올바른 패치가 7월 중순에 적용되었음) 때문에 ROS 통신 Serialization 기능을 사용하는 libroscpp.so libtf.so 등을 갱신하여 터틀봇을 위해 실행되는 robot_state_publisher 와 robot_pose_ekf 등과 같은 프로그램이 제대로 통신을 하도록 하기 위해서입니다.
$ sudo apt-get install python-wstool
# Create a workspace directory tree somewhere in you file system
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
# Clone catkin repository
$ git clone
https://github.com/ros/catkin.git$ cp catkin/cmake/toplevel.cmake CMakeLists.txt
$ wstool init
$ wstool set ros_comm --git -v groovy-devel
https://github.com/ros/ros_comm.git$ wstool set geometry --git -v groovy-devel
https://github.com/ros/geometry.git$ wstool set kobuki --git -v groovy-devel
https://github.com/yujinrobot/kobuki.git$ wstool set openni_camera --git
https://github.com/ros-drivers/openni_camera.git$ wstool set openni_launch --git
https://github.com/ros-drivers/openni_launch.git$ wstool set image_pipeline --git -v groovy-devel
https://github.com/ros-perception/image_pipeline.git$ wstool set rqt_robot_plugins --git -v groovy-devel
https://github.com/ros-visualization/rqt_robot_plugins.git$ wstool set ineractive_markers --git -v groovy-devel
https://github.com/ros-visualization/interactive_markers.git$ wstool set rviz --git -v groovy-devel
https://github.com/ros-visualization/rviz.git$ wstool set perception_pcl --git -v groovy-unstable-devel
https://github.com/ros-perception/perception_pcl.git또, 나중에 rosbuild 빌드 시에 필요로 하는 flann 라이브러리 패키지 때문에 .rosinstall 파일에 다음 내용을 추가합니다.
=========================
- tar: {local-name: flann, uri: '
https://github.com/ros-gbp/flann-release/archive/release/flann/1.7.1.tar.gz',
version: flann-release-release-flann-1.7.1}
=========================
$ wstool update
$ cd ..
$ source /opt/ros/groovy/setup.bash
이제 다음과 같은 명령을 실행하여 catkin 워크스페이스 내의 모든 패키지들을 빌드합니다. PCL 이 포함되어 있어 빌드 시간이 한나절은 족히 걸립니다. (시스템의 ROS 개발환경과 통합하고 싶으면, 다음 명령에 --install-space /opt/ros/groovy 옵션을 추가해 줍니다.)
$ catkin_make_isolated --install
PCL 1.7 버전의 패키지 리소스 디렉토리와 관련 파일을 만들어 줍니다.
# for PCL 1.7
$ cd install_isolated/share
$ cp -r pcl-1.7 pcl
$ cd pcl; mkdir cmake; mv * cmake
$ cp ../../../src/pcl/package.xml .
#~/catkin_ws/install_isolated/lib/pkgconfig/pcl.pc 파일을 만듭니다.
===============
prefix=/home/linaro/catkin_ws/install_isolated
libdir=${prefix}/lib
includedir=${prefix}/include/pcl-1.7
Name: pcl
Description: Description of pcl
Version: 1.7.0
Cflags: -I${includedir}
Libs: -L${libdir}
Requires:
=========================
단계 5. Rosbuild Stacks 빌드
먼저 다음 명령을 실행합니다.
$ source ~/catkin_ws/install_isolated/setup.bash
$ rosrun kobuki_ftdi create_udev_rules
다음 의존 패키지들을 설치합니다.
# for turtlebot
$ sudo apt-get install ros-groovy-zeroconf-avahi ros-groovy-multimaster-experimental ros-groovy-depthimage-to-laserscan
# for kobuki_desktop/kobuki_qtestsuite
$ sudo apt-get install pyqt4-dev-tools
# for turtlebot_apps/turtlebot_calibration
$ sudo apt-get install ros-groovy-python-orocos-kdl
# for turtlebot_apps/turtlebot_teleop
$ sudo apt-get install ros-groovy-joy
# for navigation/map-server
$ sudo apt-get install libsdl-image1.2-dev
# for turtlebot_apps/turtlebot_core_apps
$ sudo apt-get install ros-groovy-map-store ros-groovy-compressed-image-transport
# for navigation/robot_pose_ekf
$ sudo apt-get install ros-groovy-bfl
다음 명령을 실행하여 rosbuild 워크스페이스를 만듭니다.
$ mkdir ~/rosbuild_ws
$ rosws init ~/rosbuild_ws ~/catkin_ws/install_isolated
$ cd ~/rosbuild_ws
$ rosws merge
http://packages.ros.org/web/rosinstall/generate/dry/raw/groovy/desktop$ rosws merge
https://raw.github.com/turtlebot/turtlebot/master/turtlebot.rosinstall.rosinstall 파일을 수정하여 kobuki_desktop, turtlebot, turtlebot_apps, turtlebot_viz 항목들의 master 버전을 groovy 로 바꿉니다. 그런 다음 다음 명령을 실행하여 소스코드를 다운로드합니다.
$ rosws update
turtlebot_apps/software/pano/pano_core/CMakeFiles.txt 파일에서 18번째 줄을 다음과 같이 수정합니다.
- set(ROS_COMPILE_FLAGS ${ROS_COMPILE_FLAGS} "-msse4.2 -Wall")
+ #set(ROS_COMPILE_FLAGS ${ROS_COMPILE_FLAGS} "-msse4.2 -Wall")
gazebo 와 관련된 패키지들을 설치하지 않기 위해 다음 명령을 실행합니다.
$ mkdir uninstalled
$ mv kobuki_desktop/kobuki_gazebo uninstalled
$ mv kobuki_desktop/kobuki_gazebo_plugins uninstalled
다음과 같은 명령을 실행하여 관련된 패키지들을 빌드합니다.
$ source setup.bash
$ sudo rosdep init
$ rosdep update
$ rosmake robot_model_visualization navigation kobuki_desktop turtlebot turtlebot_apps turtlebot_viz
기본적인 설치가 모두 끝났습니다.
기존의 turtlebot 설치방법대로 시간동기화를 합니다.
[time synchronization]
$ sudo apt-get install chrony
$ sudo ntpdate
ntp.ubuntu.com.bashrc 파일에 다음 문장을 추가한 다음 리부팅합니다.
source /opt/ros/groovy/setup.bash
source /home/linaro/catkin_ws/install_isolated/setup.bash
source /home/linaro/rosbuild_ws/setup.bash
export ROS_MASTER_URI=http://<IP of turtlebot>:11311
export ROS_HOSTNAME=<IP of turtlebot>
export ROS_IP=<IP of turtlebot>
네트워크 설정을 한 후 관련된 프로그램들을 실행시켜 봅니다.
$ rosrun kobuki_ftdi create_udev_rules
ODROID-X2 임베디드보드는 배터리가 없으므로 minimal_launch 실행 시에 laptop_battery.py 실행하는 부분을 제거합니다. 다음과 같이 ~/rosbuild_ws/turtlebot/turtlebot_bringup/launch/minimal.launch 파일을 수정합니다.
…
+ <!--
<include file="$(find turtlebot_bringup)/launch/includes/_netbook.launch">
<arg name="battery" value="$(arg battery)" />
</include>
+ -->
...
[How to launch turtlebot]
roslaunch turtlebot_bringup minimal.launch
[How to launch dashboard]
rqt -s kubuki_dashboard
roslaunch turtlebot_dashboard turtlebot_dashboard.launch
[How to launch 3d sensor]
roslaunch turtlebot_bringup 3dsensor.launch
[How to launch rviz]
roslaunch turtlebot_rviz_launchers view_robot.launch
[How to launch keyboard teleoperation]
roslaunch turtlebot_teleop keyboard_teleop.launch
참고문헌
ROS 소스 설치,
http://www.ros.org/wiki/groovy/Installation/Sourcehttp://www.ros.org/wiki/groovy/Installation/UbuntuARMhttp://www.ros.org/wiki/kobuki/Tutorials/Installationhttp://yujinrobot.github.io/kobuki/doxygen/enInstallationLinuxGuide.htmlhttp://answers.ros.org/question/62979/how-do-i-use-pcl-17-with-groovy/http://www.ros.org/wiki/groovy/Installation/Raspbian/Sourcehttp://www.ros.org/wiki/groovy/Installation/PandaBoard/Source2013년 8월 5일 월요일 오후 4시 22분 27초 UTC+9, hee sung kim 님의 말: