쓰레기 개발자

Turtlebot4로 SLAM + 로컬에서 시각화(Rviz) 본문

인턴

Turtlebot4로 SLAM + 로컬에서 시각화(Rviz)

공덕동 불닭주먹 2025. 1. 26. 21:16
회사의 Turtlebot4에는 라즈베리파이4와 Create3가 있다. 하지만 라즈베리파이4의 성능이 좋지 않아서 SLAM과 Turtlebot4 관련된 로봇 구동 노드들은 라즈베리파이4에서, Rviz 같은 시각화 툴과 Gazebo 같은 시뮬레이션은 로컬에서 진행하고자 한다.
우선 라즈베리파이와 내 로컬 노트북(LG그램) 기준으로 스펙을 비교하여 보면,
 
라즈베리파이4
LG 그램
CPU
브로드컴 BCM2711, 쿼드코어 Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz
인텔® Evo™ 플랫폼 13세대 인텔® 코어™ i5-1340P 프로세서 @ 1.9GHz (최대 4.6GHz)
RAM
4GB LPDDR4-3200
16GB LPDDR5-6000
GPU
VideoCore VI
인텔® Iris® Xe Graphics
위와 같다. 따라서 Rviz를 라즈베리파이에서 launch 해보면
에러가 뜨면서 돌아가지 않는다.
이를 해결하기 위해 Docker에서 Galactic 환경을 실행하여 시각화를 진행하였다.
참고로 로컬은 Ubuntu 24.04 LTS + ROS2 Jazzy이고, Turtlebot4는 Ubuntu 20.04 LTS + ROS2 Galactic이다.
 
1. ROS2 Galactic 공식 Docker 이미지 사용
다음 명령어로 docker 이미지를 다운받고 실행한다.
docker run -it --net=host ros:galactic

 

 

 

 

2. GUI 실행을 위한 설정

로컬에서 X11 접근 권한을 허용해줘야 한다. 로컬에서 다음 명령어를 실행한다.
xhost +local:root
이제 Docker 컨테이너에서 다음 코드를 입력하여 환경 변수를 설정해준다.
export DISPLAY=:0
export XDG_RUNTIME_DIR=/tmp
export QT_X11_NO_MITSHM=1
그 후에 도커에서 rviz2를 입력했을때 실행되면 GUI 실행은 성공이다.

 

 

3. ROS2 네트워크 설정
로컬과 Turtlebot4가 연결할 수 있게 하려면 둘의 IP 주소부터 확인해야한다.
Turtlebot4에서 다음 명령어로 IP 주소를 확인한다.
hostname -I
출력 결과에 IP 주소가 두개가 뜨는데 turtlebot4는 두번째 주소, 로컬은 첫번째 주소를 사용하면 된다. 만약 Turtlebot4의 LCD가 고장나지 않았다면 LCD 좌측 상단에 IP가 뜨는데 그걸 사용하면 된다.
그 후에 Turtlebot4에서 ROS2 Galactic 네트워크가 broadcast 되도록 설정해줘야한다. 다음과 코드를 입력한다.
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export ROS_IP=<터틀봇 IP>
export ROS_HOSTNAME=<터틀봇 IP>
ROS_DOMAIN과 RWM_IMPLEMENTATION은 로컬 브라우저 주소창에 <터틀봇 IP>:8080을 치게 되면 와이파이에 연결된 Create3 페이지가 나오게 되는데, Application-Configuration에 들어가면 나오고, ROS_IP와 ROS_HOSTNAME은 터틀봇 IP를 입력하면 된다.
이제 이 설정을 .bashrc에 추가하여 라즈베리파이가 실행될때마다 ROS 네트워크를 broadcast 하도록 설정해준다. 다음 명령어를 입력하면 된다.
echo "export ROS_DOMAIN_ID=0" >> ~/.bashrc
echo "export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp" >> ~/.bashrc
echo "export ROS_IP=<터틀봇 IP>" >> ~/.bashrc
echo "export ROS_HOSTNAME=<터틀봇 IP>" >> ~/.bashrc
source ~/.bashrc
이 네트워크 설정을 <터틀봇 IP>를 <로컬 PC IP>로만 바꾸고 나머지는 동일하게 docker에서 설정해준다.
이제 docker와 turtlebot4 터미널에서 각각 ros2 topic list를 입력해서 나오는 토픽들이 일치하면 성공이다.
반응형