반응형

다음은 Raspberry Pi의 최신 배포 버전인 Raspbian Stretch 에 ROS Kinetic을 설치하는 방법을 정리한 것이다. 

Raspbian을 설치하고 기본으로 설정된 apt-get을 통해 Binary설치를 하려고 하면 구버전의 Ros 패키지가 설치되어 최신 버전으로 업데이트가 불가능하다.

Catkin 패키지를 설치하려고 해도 여러가지 의존성 문제가 발생하므로 좀 번거롭더라도 소스에서 빌드하는것이 추천된다.

 

주요 내용은 다음 페이지를 참조하였다.

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

 

1. 들어가기 앞서

 

라즈비안을 설치하면 기본 스왑이 100MB로 설정되어 있다. ROS빌드 도중 스왑 부족으로 중단될 수 있으므로 이것을 1024MB까지 늘려주는 작업이 필요하다.

/etc/dphys-swapfile 파일을 에디터로 열고 

CONF_SWAPSIZE= 의 값을 1024로 변경한다.

재부팅 후

 $ free -m 을 실행하면 다음과 같이 Swap이 증가되어 있음을 확인할 수 있다.

              total        used        free      shared  buff/cache   available

Mem:            927          89         565           1         271         780

Swap:          1023          57         966

 

2. ROS Repository설정하기

먼저 apt key 를 업데이트 리스트에 저장해야 하는데 dirmngr 패키지가 필요하므로 apt-get으로 설치한다.

$ sudo apt-get install dirmngr

이제 Repository 에 ROS Package리스트를 추가한다.

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

$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

 

$ sudo apt-get update

$ sudo apt-get upgrade
 
 

$ sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

 

$ sudo rosdep init

$ rosdep update
 
3. 설치하기
3.1 Catkin Workspace 만들기
$ mkdir -p ~/ros_catkin_ws
$ cd ~/ros_catkin_ws
 
추천하는 방식대로 ROS-Comm을 설치한다.
$ rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
$ wstool init src kinetic-ros_comm-wet.rosinstall
 
3.2 의존성 해결
$ mkdir -p ~/ros_catkin_ws/external_src

$ cd external_src/

$ wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip

$ unzip assimp-3.1.1_no_test_models.zip

$ cd assimp-3.1.1/

$ cmake .

$ make

$ sudo make install

 

3.3 Rosdep으로 의존성 해결

$ cd ~/ros_catkin_ws

$ rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:stretch

 
3.4 Catkin Workspace 빌드하기
 

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic

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

여기까지 진행하면 /opt/ros/kinetic/bin 에 실행파일이 생성되어 ROS를 실행시킬 수 있다.

$ ros + <TAB>키를 치면 다음과 같이 나타난다.

rosawesome                    roslaunch-complete

rosbag                        roslaunch-deps

rosboost-cfg                  roslaunch-logs

roscat                        roslocate

roscd                         rosls

rosclean                      rosmake

rosco                         rosmaster

rosconsole                    rosmsg

roscore                       rosmsg-proto

roscp                         rosnode

roscreate-pkg                 rospack

rosd                          rosparam

rosdep                        rospd

rosdep-source                 rospython

rosdistro_build_cache         rosrun

rosdistro_freeze_source       rosservice

rosdistro_migrate_to_rep_141  rossrv

rosdistro_migrate_to_rep_143  rosstack

rosdistro_reformat            rostest

rosed                         rostopic

rosgraph                      rosunit

rosinstall                    rosversion

rosinstall_generator          rosws

roslaunch                     roswtf

 

4. Workspace 업데이트하기

 

$ cd ~/ros_catkin_ws

$ rosinstall_generator ros_comm ros_control joystick_drivers --rosdistro kinetic --deps --wet-only --tar > kinetic-custom_ros.rosinstall

아무 응답이 없는것처럼 보이지만 잠시 기다리면 된다.

 

이제 wstool을 이용하여 workspace 를 업데이트한다.

$ wstool merge -t src kinetic-custom_ros.rosinstall

$ wstool update -t src

 

Workspace를 업데이트한 다음에는 rosdep을 실행하여 새로운 의존성 항목들을 설치할 수 있다.

Raspbian Stretch 인 경우 다음을 수행한다.

$ rosdep install --from-paths src --ignore-src --rosdistro kinetic -y -r --os=debian:stretch

 

마지막으로 workspace가 업데이트되고 모든 의존성이 해결되면 workspace를 리빌드 한다.

$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic

반응형
반응형

요즘 인기있는 Raspberry Pi 혹은 ODROID같은 임베디드 리눅스 타겟을 플랫폼으로 개발을 하는 경우 일반적으로 타겟에 모니터와 마우스, 키보드 따위를 연결하고 개발용 IDE를 설치하여 개발하게 된다. 최소한으로 VI만 가지고도 잘 개발하는 분들도 있지만 패키지 관리나 협업 등을 하려면 아무래도 이클립스 혹은 QT같은 IDE를 활용하는것이 편하다. 하지만 한정된 리소스로 인해 타겟에 모든걸 설치해서 개발하는건 꽤나 번거로운 작업이다. 특히 여러개의 기기를 동시에 테스트해야 하는경우에는 더욱 그러하다.

분명히 로컬 머신에서는 잘 동작하던 프로그램이 타겟에 올리면 안되는 경우가 많은데 대부분 로컬 머신의 아키텍쳐(대부분 인텔 x64)와 타겟의 아키텍쳐(ARM 32bit 혹은 ARM 64bit)가 다른데서 기인한다.


Jetson 보드 역시 암 기반CPU에 큐다 코어를 박아넣은 형태이기 때문에 마찬가지 문제가 발생한다. 다행히 엔비디아의 개발자들도 이러한 문제를 인식했는지 원격(Remote) 시스템에서 타겟의 프로그램을 개발할 수 있는 플랫폼을 만들어 놓았다. 이것은 비록 젯슨 보드가 로컬 머신의 아키텍쳐와 다르더라도 CUDA라고 하는 엔비디아 자체의 인터페이스를 제공하고 있기 때문인데 바로 이 CUDA Toolkit을 통해 여러 플랫폼에서 개발할 수 있는 환경을 구축해 놓았다.

자세한 소개는 여기에 있다. 

https://devblogs.nvidia.com/parallelforall/remote-application-development-nvidia-nsight-eclipse-edition/



Nsight Eclipse Edition은 이러한 원격 개발 모드: 크로스 컴파일과 "프로젝트 연동"모드를 제공한다. x86 호스트 시스템에서 ARM을 위한 크로스 컴파일을 하기 위해서는 모든 ARM 라이브러리들이 호스트 시스템에 존재하면서 어플리케이션이 마치 ARM 위에서 돌아가는 것처럼 꾸며야 한다. 


아래 과정은 젯슨 보드에 Jetpack 을 설치하는 과정에서 자동으로 수행하기 때문에 Jetpack을 설치했다면 바로 nSight을 실행하면 된다.

CUDA 툴킷 설정

큐다 툴킷은 Tx2 혹은 Tx1을 설치하는 과정에서 자동으로 설치된다. 

만약 다른 PC에서 설치만 하고 별도로 설치하는 경우는 CUDA Installation Guide. 를 따라서 하면 된다.

큐다에서 지원하는 크로스 컴파일 환경은 다음과 같다.

  • x86_64: 64-bit x86 CPU architecture;
  • armhf: 32-bit ARM CPU architecture, as found on Jetson TK1;
  • aarch64: 64-bit ARM CPU architecture, found on Jetson TX1 and TX2 and certain Android systems;
  • ppc64le: 64-bit little-endian IBM POWER8 architecture

1. armhf, arm64(aarch64) 혹은 ppc64le의 크로스컴파일 환경을 허용하기 위해 다음을 수행한다.

# For Jetson TX1/TX2: 
$ sudo dpkg --add-architecture arm64
$ sudo apt-get update

# For Jetson TK1: $ sudo dpkg --add-architecture arm64
$ sudo dpkg --add-architecture armhf
$ sudo apt-get update

2. dpkg를 실행하여 repo 메타 데이터를 설치하고 업데이트

Jetson tx1/tx2는 CUDA 8을 사용

$ sudo dpkg -i cuda-repo-ubuntu1404-8-0-local-ga2_8.0.61-1_amd64.deb

$ sudo apt-get update

다음을 수행하여 Cuda 툴킷을 설치한다. 이 글을 작성하는 현재 버전 9.0까지 나와있으나 Jetson보드는 8까지만 지원한다. 


$ sudo apt-get install cuda-toolkit-8.0

Nsight 프로젝트 만들기
이제 nsight 개발 IDE를 실행하여 원격 프로그래밍 환경을 만들어보자.


새로운 프로젝트를 만든다. 일단 간단한 프로그램을 작성하기 위해 C++프로젝트를 선택한다.


프로젝트 이름을 선택하고 툴체인으로 CUDA Toolkit 8.0을 선택한다.

    


프로젝트에 src라는 소스 폴더를 추가하고 여기에 main.cpp 소스파일을 추가한다.


    



main.cpp파일에 다음 코드를 추가하여 빌드해본다.

#include <iostream>

#include <stdio.h>


int main(void)

{

printf("Hello World!\n");

return 0;

}


정상적으로 빌드 되면 성공이다.

이제 로컬 머신에서 빌드한 프로젝트를 타겟에 연결한다.

Project -> Properties 패널에서 Target Systems 를 선택하면 새로운 타겟을 추가할 수 있다.

기존에 추가한적이 있다면 자동으로 설정되어 있는데 만약 아무것도 없으면 Manage.. 를 눌러 직접 추가한다.

여기에서는 타겟에 할당된 IP가 10.0.0.102 로 되어있다.



프로젝트 Path가 타겟의 폴더로 선택된다. CPU 아키텍쳐가 AArch64로 설정된 것을 볼 수 있다. 이것은 젯슨 보드에 설치된 리눅스 버전을 따른다. 

만약 32비트 버전을 설치하였을 경우 ARM 으로 설정하면 된다.


이제 빌드 설정을 타겟으로 설정한다. 

상단 메뉴에서 Project --> Build Configrations --> Set Active 에서 앞서 설정한 타겟을 선택한다.



이제 빌드하면 로컬이 아닌 타겟에서 빌드가 이루어진다.
혹시 오류가 발생하는 경우 빌드를 Clean 하고 다시 빌드해본다.
그러면 타겟의 프로젝트 폴더 아래 Debug 폴더에 실행파일이 생성된 것을 확인할 수 있다.

타겟 TX2 보드에 만들어진 실행파일


타겟 보드에서 실행한 결과




반응형
반응형

Synergy 라는 키보드 마우스 프로그램을 사용하기 위해 프로그램을 설치했는데 

라즈베리에서는 자동실행 프로그램이 없어서 수동으로 실행해주어야 했다.

다음은 부팅후 자동으로 Synergy를 실행하는 방법을 메모한 것이다.

synergy는 apt-get 명령어로 설치할 수 있다.

처음에는 /etc/rc.local 을 수정해서 실행해보려고 했지만 synergy는 X-window환경에서 구동되는 프로그램이므로

소용이 없다. 따라서 X-window를 구동하는 스크립트를 수정해주어야 한다.

 

터미널을 열고 아래 파일을 수정한다. 여기서는 gedit 를 사용했다.

$ sudo gedit ~/.config/lxsession/LXDE-pi/autostart

 
끝부분에 다음을 추가한다.
@sh /usr/bin/synergy
#~/bin/shell
killall synergyc
/usr/bin/synergy --name raspberrypi 10.0.0.1

 

 

이렇게 변경한다음 저장 후 재부팅하면 성공.

 

반응형

+ Recent posts