ROS Noetic on RaspberryPi

Peloton·2023년 11월 9일
0

ROS Noetic은 ROS 1의 최신 버전이자 마지막 배포판입니다.
노에틱은 2025년 5월까지 지원할 예정입니다.

Build Step

  • Before installing ROS Noetic on your Raspberry Pi
    Noetic은 공식적으로 Buster(Debian 10)만 지원 하므로 Raspberry Pi OS가 Debianbuster인지 먼저 확인해야 합니다 .
lsb_release -sc​​

Checking OS Version

Step 1 — ROS Noetic repo 추가

ROS Debian 저장소를 OS에 추가.

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

# 확인
cat /etc/apt/sources.list.d/ros-noetic.list

Step 2 — official ROS key 추가.

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

Add KEY

Step 3 — Pull all meta info of ROS Noetic packages

sudo apt update

Pull packages

Step 4 — Install build dependencies on Raspberry Pi 4

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

Install dependancy

Step 5 — Set up ROS Noetic dependency sources/repos

  • rosdep init
sudo rosdep init
# 최신 배포판(Groovy, Hydro 등)은 더 이상 나열되어서는 안 되며 대신 rosdistro index.yaml에서 가져옵니다.
# 출력
$ cat /etc/ros/rosdep/sources.list.d/20-default.list
os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
  • rosdep update
sudo rosdep update
# 출력
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Add distro "dashing"
Add distro "eloquent"
Add distro "foxy"
Skip end-of-life distro "groovy"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Add distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/pi/.ros/rosdep/sources.cache

Step 6 — Fetch & Install ROS Noetic dependencies

폴더 생성

mkdir -p ~/work/ros_catkin_ws
cd ~/work/ros_catkin_ws

ros install generator 실행

rosinstall_generator ros_comm --rosdistro noetic --deps --wet-only --tar > noetic-ros_comm-wet.rosinstall

Install Gen

# 참고.
# desktop-full 메타 패키지를 시도했지만 지원안됨
The following unreleased packages/stacks will be ignored: desktop-full
No packages/stacks left after ignoring unreleased

# desktop 메타 패키지는 사용했지만, rviz를 컴파일하기에 메모리가 충분하지 않았음.
c++: fatal error: Killed signal terminated program cc1plus
  • 로컬로 원격저장소를 가져옴.
wstool init src noetic-ros_comm-wet.rosinstall

wstool

  • 설치
sudo rosdep install -y --from-paths src --ignore-src --rosdistro noetic -r --os=debian:buster

Install completed

Step 7 — Compiling Noetic packages on Raspberry Pi 4

계속하기 전에 Raspberry Pi의 물리적 메모리 공간이 모두 사용되었을 때 사용되는 스왑 공간을 늘리는 것이 좋습니다.
먼저 스왑을 끕니다.

sudo dphys-swapfile swapoff

그런 다음 아래 파일을 편집하여 스왑 공간을 100MB에서 1024MB(1GB)로 늘립니다. 아시다시피 100MB는 매우 작습니다.

sudo vi /etc/dphys-swapfile
# CONF_SWAPSIZE=100 -> CONF_SWAPSIZE=1024

Swap File

  • 설정
sudo dphys-swapfile setup
  • 스왑 켜기
sudo dphys-swapfile swapon
  • 스왑 상태 확인
free -m

check swap

  • 컴파일
sudo src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/noetic -j1 -DPYTHON_EXECUTABLE=/usr/bin/python3 -DSETUPTOOLS_DEB_LAYOUT=OFF
# 참고
여기서는 4개의 추가 인수를 전달합니다.

-DCMAKE_BUILD_TYPE=Release
릴리스를 사용하면 디버그 기호가 생성되지 않습니다.
--install-space /opt/ros/noetic
/opt/ros/noeticUbuntu에 Noetic을 설치하는 것처럼 모든 것이 에 설치됩니다 .
-j1
기본적으로 catkin은 컴파일 작업에 모든 코어를 사용하지만, Raspberry Pi 4에서는 메모리가 제한되어 있고 모든 컴파일 작업이 메모리를 소비하기 때문에 문제가 됩니다. 작업 수를 1로 제한하면 메모리 부족 문제가 발생할 가능성이 줄어듭니다.
-DPYTHON_EXECUTABLE=/usr/bin/python3
여기서는 Python3을 Python 실행 파일로 지정합니다. Melodic과 같은 이전 ROS 배포판과 달리 Noetic은 3개만 지원하기 때문에 이는 매우 중요합니다.

Verify Noetic installation on Raspberry Pi 4

먼저 setup.bash를 source합니다.

source /opt/ros/noetic/setup.bash

그런 다음 roscd를 통해 ros설치위치로 이동합니다.

roscd

roscd

이동 후 roscore실행

roscore
  • Released Packages 추가 설치
rosinstall_generator ros_comm ros_control joystick_drivers --rosdistro noetic --deps --wet-only --tar > noetic-custom_ros.rosinstall
rosinstall_generator compressed_image_transport --rosdistro noetic --deps --wet-only --tar > noetic-compressed_image_transport-wet.rosinstall
rosinstall_generator camera_info_manager --rosdistro noetic --deps --wet-only --tar > noetic-camera_info_manager-wet.rosinstall
rosinstall_generator dynamic_reconfigure --rosdistro noetic --deps --wet-only --tar > noetic-dynamic_reconfigure-wet.rosinstall

wstool merge -t src noetic-custom_ros.rosinstall
wstool merge -t src noetic-compressed_image_transport-wet.rosinstall
wstool merge -t src noetic-camera_info_manager-wet.rosinstall
wstool merge -t src noetic-dynamic_reconfigure-wet.rosinstall

wstool update -t src
sudo rosdep install -y --from-paths src --ignore-src --rosdistro noetic -r --os=debian:buster
sudo src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/noetic -j1 -DPYTHON_EXECUTABLE=/usr/bin/python3 -DSETUPTOOLS_DEB_LAYOUT=OFF

만약 아래와 같은 Error가 뜬다면,

Traceback (most recent call last):
  File "/usr/bin/rosinstall_generator", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3191, in <module>
    @_call_aside
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3175, in _call_aside
    f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 3204, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 583, in _build_master
    ws.require(__requires__)
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 900, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 786, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'rospkg' distribution was not found and is required by rosinstall-generator

"Step 4 — Install build dependencies on Raspberry Pi 4" 를 진행 후 다시 시도

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

References

profile
Software Engineeeeer

0개의 댓글