TurtleBot3 조립

  1. 참고 사이트

TurltleBot3 e-manual 제공 사이트 : https://emanual.robotis.com/docs/en/platform/turtlebot3/overview/

조립서 : http://emanual.robotis.com/docs/en/platform/turtlebot3/hardware_setup/#assembly-manual

OpenCR e-manual : https://emanual.robotis.com/docs/en/parts/controller/opencr10/

opencr pin map은 아래와 같습니다.

2. 박스 개봉

박스를 열면 내부에 어뎁터와 소형 박스 4개가 들어 있습니다.

1번 박스를 개봉합니다.

2번 박스를 개봉합니다.

3번 박스를 개봉합니다.

4번 박스를 개봉합니다.

전원 어뎁터가 들어 있는 박스입니다.

추가 구매한 부품입니다.

배터리와 충전기입니다.

각종 연결 구조물입니다.

OpenCR 보드입니다.

바퀴 구동축에 사용되는 다이나믹 셀 2개입니다.

보드의 TTL 커넥터에 다이나믹셀 2개를 연결할 수 있습니다.

어뎁터를 연결하고 USB 커넥터를 연결한 상태입니다.

Raspberry Pi 4 보드입니다.

OpenCR의 보드에 USV 케이블을 연결하며 보드에 전원이 인가됩니다.

모터를 제어할 경우에는 USB 전원으로 구동이 불가능하며 모터의 정상동작을 위해서는 어뎁터를 연결해야 합니다.

3. 다이나믹셀 모터 구동 테스트

VirtualBox의 설정에서 USB3.0 컨트롤러를 선택합니다.

OpenCR 보드를 PC에 연결하고 Ubuntu를 실행합니다.

OpenCR의 USB를 가상머신인 Ubuntu에 연결합니다.

터미널을 연결하고 아래의 /dev/ 에서 USB 장치 연결을 확인합니다.

사용자를 dialout 그룹에 추가합니다.

sudo usermod -aG dialout $USER

설정완료 후 재부팅합니다.

OpenCR firmware 업로드에 필요한 환경설정과 패키지를 업데이트 합니다.

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

OpenCR Port와 TurtleBot3 Mode을 정의합니다.

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

OpenCR 펌웨어 설치용 파일을 다운로드하고 압축을 해제합니다.

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

OpenCR firmware를 업로드 합니다.

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

Firmware가 정상적으로 업로드 될 경우 부저소리가 출력됩니다.

USB 케이블을 제거하고 어뎁터를 연결한후 전원 스위치를 켜면 역시 부저 음악소리가 출력됩니다.

OpenCR 보드에 모터를 연결하고 버튼 PUSH SW1/SW2를 몇 초간 누르면 모터가 구동합니다.

PUSH SW1를 몇 초간 누르면 로봇이 30cm 전진합니다.

PUSH SW2를 몇 초간 누르면 로봇이 제자리에서 180도 회전합니다.

4. LD03 LiDar 동작 테스트

라이다 모듈 세트입니다.

커넥터를 연결한 상태입니다. micro USB를 사용하여 PC에 연결가능 합니다.

PC에 USB 케이블을 연결합니다. 장치 관리자에서 com port 인식을 확인합니다.

가상머신을 실행하고 USB 설정에서 CP210x를 선택합니다.

LDS03 Lidar용 workspace를 만들고 디바이스 패키지를 다운로드 합니다.

mkdir -p ~/lds03_ws/src
cd ~/lds03_ws/src
git clone -b humble <https://github.com/ROBOTIS-GIT/coin_d4_driver.git>

의존성을 체크하여 필요한 패키지를 설치합니다. 컴파일을 수행합니다.

cd ~/lds03_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install

작업공간을 활성화 하고 사용자를 dialout 그룹에 추가합니다.

/dev/ttyUSB0를 /dev/tb3_lidar로 심볼릭 링크를 추가합니다.

source ~/lds03_ws/install/setup.bash
sudo usermod -aG dialout $USER
sudo ln -sf /dev/ttyUSB0 /dev/tb3_lidar

LDS03 노드를 실행합니다.

ros2 launch coin_d4_driver single_lidar_node.launch.py

새로운 터미널을 실행하고 /scan 토픽을 확인합니다.

source ~/lds03_ws/install/setup.bash
ros2 topic list
ros2 topic echo /scan --once

새로운 터미널에서 rviz2를 실행하고 LaserScan 토픽을 추가합니다.

scan 데이터가 출력죄지 않으면 Topic→Reliability Policy에서 Bsest Effort를 선택합니다. 색은 단색으로 수정합니다.

라이다 데이터가 정상적으로 잘 발행되고 있습니다.

5. Raspberry Pi 4에 Ubuntu 22.04 설치

아래의 사이트에 접속하여 Raspberry Pi Imager를 다운로드 받습니다.

https://www.raspberrypi.com/software

microSD 카드 리더기에 microSD 카드를 장착하고 PC에 연결합니다.

다운로드 받은 imager_2.0.7.exe 파일을 실행하여 Raspberry Pi Imager를 설치합니다.

라즈베리 파이 이미저 v2.0.7을 실행합니다. 먼저 라즈베리 파이 장치를 선택합니다.

다음은 운영체제를 선택합니다. Other general-purpose OS를 선택하고

Ubuntu를 선택합니다.

그리고 Ubuntu Server 22.04.5 LST(64-bit)를 선택합니다.

저장장치는 SDXC Card 1192.2GByte를 선택합니다.

저장장치는 SDXC Card 1192.2GByte를 선택합니다.

호스트 이름을 입력합니다.

사용자 지역인 서울을 선택합니다.

사용자 이름과 비번을 입력합니다.

WiFi를 선택하고 비번을 입력합니다.

ssh 사용자를 지정합니다. ssh 사용을 선택하고 비밀번호 인증 사용을 선택합니다.

요약 정보를 출력하면 “기록” 버튼을 클릭합니다.

데이터 삭제 경고창이 출력됩니다. “이해합니다. 삭제하고 기룩”을 선택합니다.

기록을 시작합니다.

카드 리더기를 PC에서 분리하고 micor SD 카드를 빼냅니다.

micro SD 카드를 Raspberry Pi 4에 꽂습니다. Wifi를 설정하였기 때문에 별도의 LAN 케입블 연결은 필요가 없습니다.

HDMI 케이블이 있으면 모니터에 연결합니다. 아래의 그림과 같이 보드는 왼쪽에서 첫번째 micro HDMI 커넥터에 연결합니다.

키보드와 마우스도 연결하여 초기 부팅시 로그인을 수행합니다. 초기 부팅시에는 시간이 좀 걸릴 수 있습니다.

부팅을 완료하고 로그인을 정상적으로 수행한 경우 바로 업데이트를 진행합니다.

sudo apt update
sudo apt upgrade -y
sudo reboot

재부팅후 시간대를 한국 시간으로 재설정합니다.

sudo timedatectl set-timezone Asia/Seoul
timedatectl

6. TurtleBot3 조립

1) 1번 레이어 조립

팔레트 어셈블리를 연결합니다.

볼트와 너트는 상하 방향을 자유롭게 결정하여 조립합니다.

2) 2번 레이어 조립

팔레트를 연결합니다.

볼트와 너트를 체결합니다.

3) 3번 레이어 조립

팔레트를 연결합니다.

볼트와 너트를 체결합니다.

4) 4번 레이어 조립

팔레트를 연결합니다.

볼트와 너트를 체결합니다.

4개 레이어를 모두 조립했습니다.

1번 레이어를 작업하고 나머지 레이어는 박스에 잘 보관합니다.

7. Ball Caster 부착

조립한 1번 레이어와 볼 캐스터, 볼트 2x6mm 볼트를 준비합니다.

볼 캐스터 부품을 포장지에서 꺼내 조립합니다.

볼 캐스터는 팔레트 상단 중앙에 배치합니다.

4개의 PH_T2x6mm 스크루 볼트로 고정합니다.

먼저 대각선으로 볼트 2개를 고정합니다.

나머지 2개의 볼트도 고정합니다. 마지막 조일 때 약간의 힘을 가하여 고정합니다. 너무 무리한 힘을 가할 경우 플라스틱 팔레트가 파손될 수 있으니 주의해야 합니다.

볼 캐스터 조립을 완료한 모습입니다.

8. 1번 레이어 서포터 고정

서포터 고정에 필요한 부품글입니다.

4개의 PH_M3x35mm 서포트 4개와 PM_M3x8mm 볼트 4개를 사용합니다.

서포터 4개를 모두 고정했습니다.

드라이버와 함께 제공하는 조립용 간이 렌치/너트 홀더인듯한 플라스틱 기구물을 사용해 봤습니다.

9. 바퀴 조립

비닐봉지에는 있는 바퀴2개와 타이어 2개, 스티커 2개가 들어 있습니다.

바퀴 휠을 잡고 타이어 한쪽부터 천천히 조립합니다. 무리한 힘을 가해서 타이어가 손상되지 않도록 주의합니다.

2개의 바퀴를 모두 조립했습니다.

10. 모터 축에 바퀴 조립

2개의 바퀴와 2개의 모터, 고정용 볼트입니다.

먼저 바퀴 한개를 조립합니다.

나머지 한 개의 바퀴도 조립합니다.

11. 리튬 폴리머 배터리 고정부품 부착

필요한 부품들입니다.

배터리 탈부착 입구 부터 고정물을 장착합니다.

앞쪽의 고정용 부품을 부착합니다.

나머지 하나도 고정합니다.

왼쪽 배터리 고정용 부품을 부착합니다.

오른쪽 배터리 고정용 부품을 부착합니다.

임시로 배터리를 장착해 봤습니다.

12. 1번 레이어에 모터 부착

필요한 부품들입니다.

바퀴 부착시 볼 캐스터가 후방이며 전방을 기준으로 왼쪽이 1번 모터, 오른쪽에 2번 모터를 부착해야 합니다. 볼트는 뒷면에서 체결해야 하기 때문에 위치가 잘못되지 않도록 주의합니다. 모터 ID는 머터 아래쪽에 스티커로 부착되어 있습니다.

1번모터부터 연결합니다. 대각선 방향의 볼트를 고정합니다.

나머지 볼트도 조립합니다.

나머지 바퀴도 조립합니다.

OpenCR 보드에 연결하는 커넥터를 다이나믹셀 커넥터에 연결합니다.

OpenCR 보드를 임시로 올려 보았습니다.

13. 2번 레이어에 서포터와 PCB 서포터 고정

필요한 부품들입니다.

2번 레이어 서포터 고정용 부품들입니다.

서포터를 모두 고정했습니다.

PCB 서포터 고정용 부품들입니다.

필요한 부품들만 선택합니다.

PCB 서포터의 상단에 볼트를 끼워 넣습니다.

순서대로 PCB 서포터를 고정합니다.

파워 케이블 연장선을 배치합니다.

1번 레이어 위에 올려 놓고 모터 제어신호 선 2개를 레이어 홀에 배치합니다.

14. 2번 레이어에 OpenCR 보드 고정

고정용 부품입니다.

보드에 고정용 리버를 먼저 고정합니다.

OpenCR 보드를 PCB 서포터에 고정합니다.

모터 케이블을 연결하고 OpenCR 보드의 전원 커넥터를 연결했습니다.

이 상태에서 전원을 켜고 PUSH SW1과 SW2를 길게 눌러 직진 이동과 회전을 테스트 할 수 있습니다.

15. 1번 레이어와 2번 레이어 결합

필요한 볼트부품입니다.

볼트 4개를 고정했습니다.

16. 3번 레이어 작업

필요한 부품들입니다.

5개 서포트를 모두 고정했습니다.

17. Raspberry Pi 보드에 방열판 부착

보드와 전원선, 방열판 부품들입니다

방열패드 3개를 보드 부품 위에 장착합니다.

방열팬 모듈을 분해했습니다.

방열판 모듈 사이에 보드를 끼워 넣고 임시로 조립한 모습입니다.

라즈베리 파이 보드와 연결하는 케이블과 전원선, USB2LDS 모듈입니다.

방열판의 전원은 그림과 같이 4, 6번 핀에 VV, GND를 연결합니다.

18. USB2LDS 설치

USB 케이블과 고정핀입니다.

USB2LDS 모듈에 리벳을 끼웁니다.

3번 레이어 팔레트에 모듈을 고정합니다.

케이블의 VCC를 분리하여 새로운 커넥터를 연결합니다. 방열판 전원 연결 때문에 커넥터 작업이 진행되어야 합니다.

라즈베리 파이 전원선은 2번 핀에 VCC를 연결하고 GND 커넥터는 9번, 10번 핀에 연결합니다.

3번 레이어 결합 예상 모양입니다.

19. Ubuntu 구동 테스트

micro SD 카드를 라즈베리 파이 모듈에 장착합니다.

모니터 케이블을 준비합니다.

라즈베리 파이 보드의 전원은 터틀봇3의 OpenCR 보드에서 연결하고 OpenCR 보드는 어뎁터를 연결합니다.

Ubuntu 부팅을 시작합니다.

방열판을 제거하고 라즈베리 파이 보드에 전원과 HDMI를 연결하고 키보드와 마우스 동글도 연결했습니다.

micro HDMI 커넥터는 왼쪽에 있는 것을 사용합니다.

처음 부팅시에는 로그인 후에도 설치를 계속합니다.

재부팅 후에 다시 로그인한 화면입니다.

20. Raspberry Pi Camera 동작 확인

라즈베리 파이용 카메라와 고정용 브라켓입니다.

Raspberry Pi 4의 카메라 포트는 micro HDMI 우측에 있는 긴 CSI 커넥터 입니다. 케이블 연결시 파란색 보강면이 USB/ LAN 포트 방향으로 향하게 연결합니다.

부팅 후 SSH로 접속합니다. 접속 후 아래의 명령어를 수행하여 Ubuntu 설치 환경과 아키텍처를 확인합니다.

uname -a
lsb_release -a

먼저 비디오 장치가 생성되었는지 확인합니다.

ls /dev/video*

위의 결과를 보면 정상적으로 설치되었습니다.

v4l2-utils를 설치합니다.

sudo apt update
sudo apt install -y v4l-utils
v4l2-ctl --list-devices

카메라 장치가 정상적으로 설치되었습니다.

libcamera-tools를 설치합니다.

sudo apt update
sudo apt install -y libcamera-tools v4l-utils

설치 완료 후 재부팅을 실행합니다.

v4l2 명령어로 카메라 지원 정보를 확인할 수 있습니다.

v4l2-ctl --device=/dev/video0 --all
v4l2-ctl --device=/dev/video0 --list-formats-ext

아래의 명령을 실행하고 프레임 카운트가 정상적으로 증가하는지 확인합니다.

v4l2-ctl -d /dev/video0 \
--set-fmt-video=width=3280,height=2464,pixelformat=RG10 \
--stream-mmap --stream-count=10

raw 파일로 저장합니다. 명령어 실행 후 파일이 정상적으로 생성되었는지 확인합니다.

v4l2-ctl -d /dev/video0 \
--set-fmt-video=width=3280,height=2464,pixelformat=RG10 \
--stream-mmap \
--stream-count=1 \
--stream-to=frame.raw

파일이 정상적으로 생성됩니다.

21. 카메라 고정 브라켓 조립

카메라 모듈과 고정 브라켓입니다. 카메라에는 CSSI용 케이블이 연결되어 있습니다.

임시로 브라켓 연결 상태를 확인했습니다.

조립에 필요한 부품들입니다.

브라켓 안쪽으로 케이블이 통과하도록 배치합니다.

볼트에 고무링을 끼우고 브라켓에 고정합니다. 아래 그림은 4개 모두 볼트를 조인 상태입니다.

방열판의 flat 케이블용 구멍에 케이블을 먼저 끼웁니다.

케이블을 라즈베리 보드의 CSI 커넥터에 연결합니다. 방열판 모듈을 연결한 상태에서 커넥터 고정을 해야 하기 때문에 단선이나 커넥터 파손에 주의해야 합니다.

방열판 덮개까지 조립한 상태입니다.

3번 레이어를 결합한 모습입니다.

22. 4번 레이어 조립

4번 레이어 조립에 필요한 부품들입니다.

PCB 서포터에 볼트를 끼웁니다.

PCB 서포터 3개를 먼조 고정합니다. 방법은 OpenCR 고정과 동일합니다. PCB 서포터 고정이 완료되면 라이다 밑에 스페이서를 넣고 16mm 볼트로 고정합니다. 아래 그림은 3부분 모두 고정한 상태입니다.

라이다의 위치는 PCB 서포터를 움직여 조정합니다. 라이다가 로봇의 정중아에 위치하도록 조정한 후에 아래에서 볼트를 고정합니다. 커넥터는 아래로 배치합니다.

라즈베리 보드 방열판의 구조 때문에 로봇의 몸체에 부착이 불가능합니다. 따라서 3번 레이어에 PCB 고정용 서포터를 사용할 수 없는 상황에서 방열판 모듈 바닥에 양면 테이프를 사용합니다. 라즈베리 파이 보드는 마직막 조립 단계에서 붙이도록 합니다.

4번 레이어 상단에 카메라 고정 브라켓을 부착합니다. 먼저 그림처럼 앞의 2개 볼트를 체결합니다.

볼트 4개를 모두 고정했습니다.

아래쪽에서 본 모습입니다.

4번 레이어를 로봇에 얹은 모습니다.

4번 레이어를 고정하기 위해 위치를 조정했습니다.

6개의 볼트를 모두 고정했습니다.

바퀴에 스티커도 부착합니다.

23. 조립 완료

아래의 그림은 로봇 조립을 완료한 모습들입니다.

24. 조립 완료 후 부품들 처리

조립에 사용되지 않은 부품들은 박스에 잘 정리해서 추후 보수를 위해서 잘 보관합니다.

제품 구매시 동봉된 micro SD 16GB도 박스에 정리하여 반납합니다.

배터리 충전기는 사용해야 하기 때문에 조별로 보관하시기 바랍니다.

각종 볼트와 너트, 조립 부품들은 추후 유지보수를 위해서 잘 보관합니다.

25. 라즈베리 파이 보드 설정 계속

온라인 매뉴얼 참조 : https://emanual.robotis.com/docs/en/platform/turtlebot3/sbc_setup/#sbc-setup

1) 자동 업데이트 비활성화

터틀봇3 같은 로봇 시스템에서는 예기치 않은 자동 업데이트가 오히려 방해가 될 수 있습니다.

예를 들어 패키지 빌드 중간에 시스템 업데이트가 걸리거나, 부팅 직후 apt 관련 프로세스가 점유되면 설치 작업이 꼬일 수 있습니다. 그래서 자동 업데이트를 꺼두는 것이 안정적입니다.

아래 파일을 엽니다.

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

내용을 아래처럼 수정합니다.

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

저장 후 종료합니다.

Ctrl + S
Ctrl + X

2) 부팅 시 네트워크 대기 시간 줄이기

라즈베리파이가 부팅될 때 네트워크가 바로 연결되지 않으면 systemd-networkd-wait-online.service 때문에 부팅이 지연될 수 있습니다.

로봇은 전원을 넣고 빠르게 올라오는 것이 중요하므로 해당 서비스를 mask 처리합니다.

sudo systemctl mask systemd-networkd-wait-online.service

여기서 mask는 단순 disable보다 강한 비활성화입니다.
서비스가 자동으로 실행되지 않도록 막는 설정입니다.

3) 절전과 최대절전 비활성화

로봇이 동작 중인데 SBC가 절전 상태로 들어가면 통신이 끊기거나 ROS 노드가 멈출 수 있습니다.

다음 명령으로 sleep, suspend, hibernate 관련 타깃을 비활성화합니다.

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

터틀봇3처럼 계속 켜진 상태로 동작해야 하는 로봇에서는 사실상 필수 설정에 가깝습니다.

4) 라즈베리파이 재부팅

여기까지 설정했다면 재부팅합니다.

sudo reboot

재부팅 후 Wi-Fi가 정상 연결되었는지 확인합니다.

ip addr

또는 net-tools를 설치해서 ifconfig를 사용할 수도 있습니다.

sudo apt update
sudo apt install net-tools
ifconfig

wlan0 항목에 IP 주소가 보이면 Wi-Fi 연결이 된 것입니다.

5) Remote PC에서 SSH 접속하기

라즈베리파이의 IP 주소를 확인했다면 Remote PC에서 SSH로 접속할 수 있습니다.

Remote PC 터미널에서 아래 명령을 실행합니다.

ssh ubuntu@라즈베리파이_IP주소

예를 들어 라즈베리파이 IP가 192.168.0.25라면 다음처럼 입력합니다.

ssh ubuntu@192.168.200.27

처음 접속할 때는 fingerprint 확인 메시지가 나올 수 있습니다.
yes를 입력하고, Ubuntu 설치 과정에서 설정한 비밀번호를 입력하면 접속됩니다.

이후 작업은 라즈베리파이에 직접 키보드로 입력해도 되고, SSH 접속 상태에서 진행해도 됩니다.

6) ROS 2 Humble 설치

참조 사이트 : Ubuntu 22.04에서 ROS2 설치

TurtleBot3 공식 문서에서는 ROS 2 Humble Hawksbill 설치 시 ROS-Base(Bare Bones) 설치를 권장합니다.

먼저 기본 패키지를 업데이트합니다.

sudo apt update
sudo apt upgrade -y

locale 설정을 진행합니다.

sudo apt install locales -y
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

Universe 저장소를 활성화합니다.

sudo apt install software-properties-common -y
sudo add-apt-repository universe

ROS 2 apt 저장소 설정에 필요한 패키지를 설치합니다.

sudo apt update
sudo apt install curl gnupg lsb-release -y

ROS 2 GPG key를 추가합니다.

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg

ROS 2 저장소를 추가합니다.

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | \
sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

패키지 목록을 다시 업데이트합니다.

sudo apt update

ROS 2 Humble ROS-Desktop를 설치합니다. 설치에 조금은 긴 시간이 필요합니다.

sudo apt install ros-humble-desktop -y

ROS 2 환경을 .bashrc에 등록합니다.

echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc
source ~/.bashrc

설치 확인은 아래 명령으로 할 수 있습니다.

ros2 --help

또는 ROS 2 명령이 정상적으로 동작하는지 확인합니다.

ros2 topic list

아직 실행 중인 ROS 노드가 없다면 토픽이 거의 없거나 /parameter_events, /rosout 정도만 보일 수 있습니다.


명령 자체가 실행되면 ROS 2 환경 설정은 된 것입니다. 재부팅을 실행합니다.

7) TurtleBot3 패키지 설치 및 빌드

이제 TurtleBot3에 필요한 ROS 패키지를 설치하고 워크스페이스를 빌드합니다.

먼저 필요한 패키지를 설치합니다.

sudo apt install python3-argcomplete python3-colcon-common-extensions libboost-system-dev build-essential -y
sudo apt install ros-humble-hls-lfcd-lds-driver -y
sudo apt install ros-humble-turtlebot3-msgs -y
sudo apt install ros-humble-dynamixel-sdk -y
sudo apt install ros-humble-xacro -y
sudo apt install libudev-dev -y

TurtleBot3 워크스페이스를 만듭니다.

mkdir -p ~/turtlebot3_ws/src
cd ~/turtlebot3_ws/src

공식 TurtleBot3 패키지를 clone 합니다.

git clone -b humble https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone -b humble https://github.com/ROBOTIS-GIT/ld08_driver.git
git clone -b humble https://github.com/ROBOTIS-GIT/coin_d4_driver

SBC에서는 SLAM이나 Navigation2 전체 패키지를 빌드하지 않는 구성이 일반적입니다.
공식 문서에서도 SBC 빌드 부담을 줄이기 위해 turtlebot3_cartographer, turtlebot3_navigation2를 제거합니다. 이 강의에서는 유지하기로 합니다. 아래의 명령은 실행하지 않습니다.

cd ~/turtlebot3_ws/src/turtlebot3
rm -r turtlebot3_cartographer turtlebot3_navigation2

워크스페이스 루트로 이동합니다.

cd ~/turtlebot3_ws/

ROS 2 Humble 환경을 다시 적용합니다.

source /opt/ros/humble/setup.bash

빌드를 진행합니다.

colcon build --symlink-install --parallel-workers 1

여기서 --parallel-workers 1 옵션은 빌드를 한 번에 하나씩 진행하게 해서 메모리 사용량을 줄입니다.
라즈베리파이에서는 빠른 빌드보다 안정적인 빌드가 더 중요합니다.

빌드가 완료되면 TurtleBot3 워크스페이스 환경을 .bashrc에 등록합니다.

echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
source ~/.bashrc

8) OpenCR USB 포트 권한 설정

TurtleBot3는 SBC와 OpenCR 보드가 USB로 연결됩니다.
ROS 2 노드가 OpenCR 장치에 접근하려면 udev rule 설정이 필요합니다.

99-turtlebot3-cdc.rules 파일의 내용은 아래와 같습니다. 이 파일을 /etc/udev/rules.d/에 복사하고 리부팅하면 파일에서 지정한 심볼릭 링크가 생성됩니다. 이 이름은 USB 장치가 바뀌어도 자동으로 연결되어 변하지 않는 고정 장치 이름이 됩니다.

아래 명령을 실행합니다.

sudo cp `ros2 pkg prefix turtlebot3_bringup`/share/turtlebot3_bringup/script/99-turtlebot3-cdc.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

설정 후 OpenCR USB를 다시 연결하거나 시스템을 재부팅하면 장치 권한이 적용됩니다.

재부팅 후 아래의 명령어를 실행하여 USB 장치의 이름이 정상적으로 등록되었는지를 확인합니다.

cd /dev
ls -al

9) ROS_DOMAIN_ID 설정

ROS 2는 DDS 통신을 사용합니다.
같은 네트워크 안에서 Remote PC와 TurtleBot3가 서로 통신하려면 ROS_DOMAIN_ID가 같아야 합니다.

TurtleBot3의 기본 권장 ID는 30입니다.

팀별로 서로 다른 ID를 사용해야 합니다. 각 팀은 30 대신에 자기 팀의 ID를 입력하시기 바랍니다.

SBC에서 다음 명령을 입력합니다.

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

Remote PC에서도 같은 값을 설정해야 합니다.

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

주의할 점이 있습니다.
같은 공간에서 여러 명이 ROS 2 로봇을 사용한다면 ROS_DOMAIN_ID가 겹치면 안 됩니다.

예를 들어 같은 실습실에서 모든 사람이 30을 사용하면 서로의 토픽이 섞일 수 있습니다.
혼자 쓰는 환경이면 30을 써도 괜찮지만, 여러 대를 동시에 운용한다면 로봇마다 ID를 다르게 잡는 것이 좋습니다.

예시는 다음과 같습니다.

TurtleBot3 A: ROS_DOMAIN_ID=30
TurtleBot3 B: ROS_DOMAIN_ID=31
TurtleBot3 C: ROS_DOMAIN_ID=32

10) LDS 모델 설정

사용하는 LDS 센서 모델에 따라 환경변수를 설정합니다.

LDS-01을 사용하는 경우:

echo 'export LDS_MODEL=LDS-01' >> ~/.bashrc

LDS-02를 사용하는 경우:

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

LDS-03을 사용하는 경우:

echo 'export LDS_MODEL=LDS-03' >> ~/.bashrc

지금 사용하는 Turtlebot3는 최신버전으로 LDS03 라이다를 사용합니다. 설정 후 적용합니다.

source ~/.bashrc

자신의 터틀봇3에 장착된 LDS 모델을 확인한 뒤 하나만 설정하면 됩니다.

11) ROS_LOCALHOST_ONLY 변수 설정

기본적으로 ROS2는 로컬 네트워크 전체에서 통신이 가능하지만 특정 상황에서는 ROS2 통신을 localhost로만 제한할 수 있습니다. 이 설정은 여러 로봇이나 컴퓨터가 같은 네트워크에서 혼란을 일으키지 않도록 방지할 수 있다.

ROS2 통신을 localhost로 제한하려면 다음 명령어를 실행합니다.

export ROS_LOCALHOST_ONLY=1

.bashrc에 추가하려면 아래의 명령어를 입력합니다.

echo "export ROS_LOCALHOST_ONLY=1" >> ~/.bashrc

11) 로봇 모델 설정

TurtleBot3 모델은 대표적으로 다음과 같습니다.

burger
waffle
waffle_pi

이 글에서는 TurtleBot3 Burger 모델을 기준으로 진행합니다.

이미 모델은 설정했습니다. 만약 설정이 도지 않았으면 Raspberry Pi SSH 터미널에서 다음 명령을 입력합니다.

echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
source .bashrc

현재 터미널에 모델 설정이 제대로 들어갔는지 확인하려면 다음 명령을 사용할 수 있습니다.

echo $TURTLEBOT3_MODEL

출력 결과가 아래와 같으면 정상입니다.

burger

12) 설정 확인

마지막으로 현재 환경변수가 제대로 들어갔는지 확인합니다.

echo $ROS_DOMAIN_ID
echo $LDS_MODEL
echo $TURTLEBOT3_MODEL

예상 출력 예시는 다음과 같습니다.

30
LDS-01
burger

ROS 2 패키지가 정상적으로 보이는지도 확인합니다.

ros2 pkg list | grep turtlebot3

turtlebot3_bringup, turtlebot3_msgs 같은 패키지가 보이면 빌드와 환경 설정이 정상적으로 적용된 것입니다.

Leave a Comment