라즈베리파이4B를 사용한 TurtleBot3 세팅

강민우·2023년 3월 25일
0

0. 개요

이번에 대학원 수업 로봇 OS를 들으며 TurtleBot3 Burger를 사용할 연구비로 살 기회가 생겼다.

TurtleBot3는 친절하게도 Official emanual이 제공되지만, 우분투 및 각종 라이브러리의 버전업이 되어서인지 이를 그대로 따라해도 여러 에러들이 존재했다.

따라서 이번 기회에 TurtleBot3에 ROS, ROS2를 설치하고 이를 정리하는 포스팅을 진행한다.

TurtleBot3 emanual : TurtleBot3 emanual Link


1. Remote PC 세팅

설치에 앞서서, ROS 버전이 무엇인지에 따라 설치해야 하는(권장하는) OS도 달라진다. TurtleBot3ROS 1ROS 2 모두 지원하고 있으니 필요에 따라 버전을 선택할 수 있다.

Remote PC의 OS는 개인적으로 보유한 베어본PC에 설치했다. 이 PC는 자체적으로 와이파이 모듈이 존재하기에, 추후에 있을 무선 네트워크 세팅에서 이점이 있을까 하여 이것으로 세팅했다.

ROS를 제어하기 위해서는 같은 네트워크 안에 있어야 하는데, 이를 충족할 수 있다면 Virtual Box를 사용하여 Ubuntu를 가상환경으로 만들어도 좋고 PC의 듀얼부팅 등을 이용하여 만들어도 좋을 것 같다.

참고로 나는 앞으로 있을 프로젝트의 확장성과 지원을 위하여 ROS 2 Foxy를 선택했다.
물론 ROS 1 Noetic 버전도 TurtleBot3에서 동작한다.

1.1 ROS 1 기반 PC 세팅

ROS 1 기반
OS : Ubuntu 20.04 LTS
ROS : ROS1 Noetic Ninjemys

ROS 1의 Kinetic, Melodic 버전도 존재하지만, 선택하지 않았다.
이유는 아래에서 자세히 후술하겠지만, 라즈베리파이 4 B 에 해당 버전들을 올릴 때 정상적으로 OS를 설치할 수 없었기 때문이다.

그런 이유로 나는 RemotePC 세팅보다 TurtleBot3의 ROS 설치를 먼저 하기를 권장한다. SD카드에 이미지 파일의 쓰기 에러가 발생할 때도 많고, 하드웨어에 따라 해당 이미지가 호환이 되지 않을 가능성도 많기 때문이다. 내가 가진 라즈베리파이4B에는 ROS 1 Noetic, ROS 2 Foxy 버전이 정상적으로 설치되었다.

개요에 작성한 TurtleBot3의 emanual 링크를 클릭하면 아래와 같은 웹페이지로 접속된다.
Noetic을 클릭하고 좌측의 3. Quick Start Guide -> 3.1. PC Setup을 클릭하면 ROS 1 Noetic Ninjemys 버전 설치 가이드를 볼 수 있다.

1.2 ROS 2 기반 PC 세팅

ROS 2 기반
OS : Ubuntu 20.04 LTS
ROS : ROS2 Foxy Fitzroy

ROS 2 에는 Dashing, Foxy 버전이 존재한다. Foxy가 최근에 나온 조금 더 업그레이드 버전이며 이를 선택하여 설치하였다. Dashing은 설치 시도를 해보지 않았는데, 이유는 지금까지 공부하던 ROS2 버전이 Foxy이기도 했고, 이미 ROS 1 Noetic을 설치하기 위해 Ubuntu 20.04버전을 설치했기 때문에, 이와 호환되는 Foxy로 선택했다.

1.3 Ubuntu 설치

emanual 가이드에 따라 Ubuntu 20.04를 다운로드하는 링크로 이동하여 ubuntu-20.04.6-desktop-amd64.iso 또는 ubuntu-20.04.6-live-server-amd64.iso를 받는다. 이는 GUI 사용 버전인지, Server용으로 DOS만 출력하는 버전인지에 따라 나뉜다. 나는 GUI도 쓸 일이 있겠지 싶어 desktop버전을 설치했다.

iso파일을 USB에 굽기 위하여 Rufus 프로그램을 사용했으며, 우분투 설치의 자세한 방법을 적지는 않겠다.
Rufus Download Link

1.4 Remote PC에 ROS 설치

여기서부터는 베어본PC(RemotePC)에 putty를 이용한 ssh 원격 접속으로 작업을 진행했다.
베어본 PC에 와이파이를 연결하고, 해당 공유기에 DHCP, 포트포워드 설정을 진행하여 원격 접속이 가능하게 하였다.

emanual대로 쭉 진행했는데 에러없이 모두 설치되었다.

1.4.1 Install ROS 2 on Remote PC

ros2 foxy를 설치하는 과정이다. 다른 과정보다 상당히 오래 걸린다.

$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros2_foxy.sh
$ sudo chmod 755 ./install_ros2_foxy.sh
$ bash ./install_ros2_foxy.sh

1.4.2 Install Dependent ROS 2 Packages

$ sudo apt-get install ros-foxy-gazebo-*
Install Cartographer
$ sudo apt install ros-foxy-cartographer
$ sudo apt install ros-foxy-cartographer-ros
Install Navigation2
$ sudo apt install ros-foxy-navigation2
$ sudo apt install ros-foxy-nav2-bringup

1.4.3 Install TurtleBot3 Packages

$ source ~/.bashrc
$ sudo apt install ros-foxy-dynamixel-sdk
$ sudo apt install ros-foxy-turtlebot3-msgs
$ sudo apt install ros-foxy-turtlebot3

1.4.4 Environment Configuration

$ echo 'export ROS_DOMAIN_ID=30 #TURTLEBOT3' >> ~/.bashrc
$ source ~/.bashrc

ROS_DOMAIN은 RemotePC와 TurtleBot3이 동일해야 한다. 또한 같은 네트워크에 다른 ROS 시스템이 존재하면 혼선이 일어나므로, 상황에 맞게 달리 해야한다.


2. TurtleBot3 - raspberry4B

Remote PC 세팅을 끝내고, 이제는 TurtleBot3에 들어있는 라즈베리파이4B를 세팅해야한다.
이 또한 Turtlebot3 emanual을 참고하였다.

2.1 Raspberry4B - ROS2 Foxy 이미지 설치

Turtlebot3 emanual에서 Raspberry Pi 4B ROS2 Foxy image와, Raspberry Pi Imager를 받아준다.

이후 SD카드를 컴퓨터에 연결한 후 Raspberry Pi Imager를 사용하여 SD카드에 이미지를 설치하면 된다. 아래 사진처럼 운영체제 선택 부분에 사용자 정의 사용 탭을 클릭한 후 다운받은 이미지를 선택하면 된다.

이미지를 설치하는 과정에서 많은 에러를 볼 수 있었는데, ROS 1 Kinetic, Melodic은 설치가 되지 않았다. 설치하는 과정에서 SD카드 쓰기 에러가 발생하거나, 운영체제 부팅 후 에러가 발생한다.

해당 에러는 커널 및 소프트웨어의 노후화로 인하여 발생한다고 하는데, 아마 하드웨어가 업그레이드되면서 이와 호환이 잘 되지 않는 것 같다.
Ubuntu error : "This board requires newer software"

참고로 ROS 1 Noetic image도 설치에 성공했다. 처음 한두번은 SD카드 쓰기 에러가 발생했지만, 세번째즈음에 설치에 성공했고 정상 부팅되었다.

2.2 Raspberry 4B - Network Setting

miniHDMI로 모니터와 연결하고 부팅하면 로그인 화면이 뜬다. 아래 계정으로 접속 가능하다.

Ubuntu Login
id : ubuntu
pw : turtlebot

emanual에서는 sd카드 경로에 들어가서 와이파이 정보를 수정하도록 안내하고 있지만, 윈도우 환경에서 SD카드 내부에 진입하는 방법이 잘 되지 않아 Ubuntu 내부에서 네트워크 정보를 변경하였다.

$ sudo vi /etc/netplan/50-cloud-init.yaml


녹색으로 표시된 글자를 WIFI SSID, Password로 바꾼 후 저장, 재부팅하면 라즈베리파이가 부팅된 직후 스스로 네트워크에 연결된다.

2.3 ROS DOMAIN ID 설정

위에서의 Remote PC에 설정한 아이디와 동일하게 ID를 세팅하여 bashrc에 저장한다.

$ echo "export ROS_DOMAIN_ID=30" #TURTLEBOT3 >> ~/.bashrc
$ source ~/.bashrc

2.4 360 Laser Distance Sensor : LDS-02 설치

TurtleBot3 패키지는 360도 레이저 측정기인 LDS-O2가 제공된다. 해당 패키지 또한 설치한다.

$ sudo apt update
$ sudo apt install libudev-dev
$ cd ~/turtlebot3_ws/src
$ git clone -b ros2-devel https://github.com/ROBOTIS-GIT/ld08_driver.git
$ cd ~/turtlebot3_ws/src/turtlebot3 && git pull
$ rm -r turtlebot3_cartographer turtlebot3_navigation2
$ cd ~/turtlebot3_ws && colcon build --symlink-install

여기서, $ sudo apt update적용 시 에러가 발생할 수 있다.
error : Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 5572

해당 에러는 캐시 lock을 모두 지우고 다시 update를 진행하면 해결된다.

$sudo rm /var/lib/apt/lists/lock
$sudo rm /var/cache/apt/archives/lock
$sudo rm /var/lib/dpkg/lock*

$sudo dpkg --configure -a
$sudo apt update

이후 LDS-01인지, LDS-02인지를 선택하여 아래 export 부분에 적용하면 된다.

$ echo 'export LDS_MODEL=LDS-02' >> ~/.bashrc
$ source ~/.bashrc

3. OpenCR Setup

이것의 세팅 또한 emanual의 3.3. OpenCR Setup에서 확인할 수 있다. 해당 작업은 라즈베리파이와 OpenCR 보드가 microUSB Cable로 연결되어 있어야 적용할 수 있다.

$ sudo dpkg --add-architecture armhf
$ sudo apt update
$ sudo apt install libc6:armhf

$ export OPENCR_PORT=/dev/ttyACM0
$ export OPENCR_MODEL=burger
$ rm -rf ./opencr_update.tar.bz2

$ wget https://github.com/ROBOTIS-GIT/OpenCR-Binaries/raw/master/turtlebot3/ROS2/latest/opencr_update.tar.bz2
$ tar -xvf ./opencr_update.tar.bz2

$ cd ~/opencr_update
$ ./update.sh $OPENCR_PORT $OPENCR_MODEL.opencr

해당 설치가 정상적으로 끝나면 OpenCR에서 뾰로롱 소리가 출력된다


번외 : ssh 세팅

해당 포스팅은 RemotePC 및 TurtleBot3 모두 우분투를 설치한 후 아래와 같은 방법으로 SSH를 구성한 후 원격 접속했다. 나중에 따로 정리예정...

공유기 ssh 연결 세팅

공유기 iptime 관리자페이지 접속 (192.168.0.1)
NAT/라우터관리 -> 포트포워드 설정 -> turtlebot3가 연결한 ip, 오픈할 포트 ##번(tcp) 내부, 외부 열기
네트워크 관리 - DHCP 서버 설정 - 사용중인 ip 주소 정보에서 turtlebot3의 주소, mac 등록

Ubuntu에 ssh 설치

$ sudo apt install openssh-server

ssh port 변경 및 재시작

$ sudo vi /etc/ssh/sshd_config
수정 : Port 22 -> Port #####

$ systemctl restart sshd
$ systemctl restart ssh

ssh 상태 확인 -> running 상태 뜨면 OK
$ sudo systemctl status ssh

linux에서 ssh 연결

$ ssh -p <port> username@ip_address

profile
어제보다 성장한 오늘

1개의 댓글

comment-user-thumbnail
2023년 12월 21일

저도 따라서 wasd로 터틀봇3 움직이게는 해보았는데
생각해보니 ssh로 원격에서 로그인해서 결국 로컬로 움직인거 같은데
실제적 ros2 리모트 제어하는 방식은 아닌거 같은데 맞나요

답글 달기