ROS Noetic은 ROS 1의 최신 버전이자 마지막 배포판입니다.
노에틱은 2025년 5월까지 지원할 예정입니다.
lsb_release -sc
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
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt-get install -y python-rosdep python-rosinstall-generator python3-wstool python3-vcstools python-rosinstall build-essential cmake
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
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
폴더 생성
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
# 참고.
# 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
sudo rosdep install -y --from-paths src --ignore-src --rosdistro noetic -r --os=debian:buster
계속하기 전에 Raspberry Pi의 물리적 메모리 공간이 모두 사용되었을 때 사용되는 스왑 공간을 늘리는 것이 좋습니다.
먼저 스왑을 끕니다.
sudo dphys-swapfile swapoff
그런 다음 아래 파일을 편집하여 스왑 공간을 100MB에서 1024MB(1GB)로 늘립니다. 아시다시피 100MB는 매우 작습니다.
sudo vi /etc/dphys-swapfile
# CONF_SWAPSIZE=100 -> CONF_SWAPSIZE=1024
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
free -m
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개만 지원하기 때문에 이는 매우 중요합니다.
먼저 setup.bash를 source합니다.
source /opt/ros/noetic/setup.bash
그런 다음 roscd를 통해 ros설치위치로 이동합니다.
roscd
이동 후 roscore실행
roscore
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