1. TurtleBot3 Bringup이란?
TurtleBot3 Bringup은 터틀봇3를 ROS 2에서 사용하기 위해 필요한 기본 노드들을 실행하는 과정입니다.
Bringup을 실행하면 다음과 같은 기능들이 활성화됩니다.
- TurtleBot3 본체 노드 실행
- 모터 제어 노드 실행
- IMU 센서 데이터 발행
- LiDAR 센서 데이터 발행
- Odometry 정보 발행
- TF 정보 발행
- Battery 상태 발행
/cmd_vel기반 주행 명령 수신
2. 전체 실행 구조
TurtleBot3는 보통 다음과 같은 구조로 사용합니다.
Remote PC ← Wi-Fi Network → TurtleBot3 SBC Raspberry Pi
Remote PC에서는 SSH로 TurtleBot3의 Raspberry Pi에 접속합니다.
그리고 Raspberry Pi 내부에서 TurtleBot3 Bringup 명령을 실행합니다.
3. Remote PC에서 Raspberry Pi에 SSH 접속하기
Remote PC에서 새 터미널을 엽니다.
Ctrl + Alt + T
그다음 TurtleBot3 Raspberry Pi의 IP 주소를 이용해 SSH 접속합니다.
ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
예를 들어 Raspberry Pi의 IP 주소가 192.168.0.20이라면 다음과 같이 입력합니다.
ssh ubuntu@192.168.0.20
접속할 때 Raspberry Pi Ubuntu OS의 비밀번호를 입력합니다.
정상적으로 접속되면 터미널 프롬프트가 Remote PC가 아니라 Raspberry Pi 쪽으로 변경됩니다.


4. 설정 확인하기
마지막으로 현재 환경변수가 제대로 들어갔는지 확인합니다.
echo $ROS_DOMAIN_ID
echo $LDS_MODEL
echo $TURTLEBOT3_MODEL
예상 출력 예시는 다음과 같습니다.
30
LDS-01
burger

5. TurtleBot3 Bringup 실행하기
이제 TurtleBot3 기본 Bringup 패키지를 실행합니다.
ros2 launch turtlebot3_bringup robot.launch.py
전체 명령 흐름은 다음과 같습니다.
실행이 정상적으로 되면 터미널에 여러 노드 실행 로그가 출력됩니다.
라이다가 동작하며 OpenCR 보드의 LED는 통신 상태를 알리며 깜빡거립니다.
대표적으로 다음과 같은 로그를 볼 수 있습니다.
[INFO] [robot_state_publisher-1]: process started
[INFO] [hlds_laser_publisher-2]: process started
[INFO] [turtlebot3_ros-3]: process started
또한 TurtleBot3 노드가 정상적으로 실행되면 다음과 같은 메시지가 출력됩니다.
[INFO] [turtlebot3_node]: Init TurtleBot3 Node Main
[INFO] [DynamixelSDKWrapper]: Succeeded to open the port(/dev/ttyACM0)!
[INFO] [DynamixelSDKWrapper]: Succeeded to change the baudrate!
[INFO] [turtlebot3_node]: Start Calibration of Gyro
[INFO] [turtlebot3_node]: Calibration End
[INFO] [turtlebot3_node]: Run!
[INFO] [diff_drive_controller]: Init Odometry
[INFO] [diff_drive_controller]: Run!
여기서 중요한 부분은 다음입니다.
Succeeded to open the port(/dev/ttyACM0)!
Succeeded to change the baudrate!
Calibration End
Run!
이 로그가 출력되면 TurtleBot3 OpenCR 보드, 모터, 센서 연결이 정상적으로 인식되었다고 볼 수 있습니다.


6. ROS_DOMAIN_ID 확인하기
Remote PC와 TurtleBot3 Raspberry Pi가 서로 ROS 2 통신을 하려면 ROS_DOMAIN_ID가 같아야 합니다.
Remote PC와 Raspberry Pi 양쪽에서 다음 명령을 실행합니다.
양쪽 모두 .bashrc 파일에 해당 선언을 추가했습니다.
정상적인 선언 여부는 다음 명령으로 확인할 수 있습니다.
echo $ROS_DOMAIN_ID
출력 결과가 양쪽 모두 다음과 같아야 합니다.
100
ROS_DOMAIN_ID가 다르면 같은 네트워크에 있어도 ROS 2 토픽이 보이지 않을 수 있습니다.
7. RMW_IMPLEMENTATION 확인하기
ROS 2에서는 DDS 미들웨어를 사용합니다.
Remote PC와 TurtleBot3 Raspberry Pi의 RMW 설정도 동일해야 통신 문제가 줄어듭니다.
양쪽 터미널에서 다음 명령을 실행합니다.
echo 'export RMW_IMPLEMENTATION=rmw_fastrtps_cpp' >> ~/.bashrc
source .bashrc

확인은 다음과 같이 합니다.
echo $RMW_IMPLEMENTATION
출력 결과는 다음과 같아야 합니다.
rmw_fastrtps_cpp

Remote PC에도 동일하게 설정하였습니다.

8. ROS 2 Topic 목록 확인하기
Bringup이 정상적으로 실행된 상태에서 Remote PC의 새 터미널을 엽니다.
Remote PC에서도 동일하게 환경변수를 맞춰줍니다.
export ROS_DOMAIN_ID=30
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
그다음 토픽 목록을 확인합니다.
ros2 topic list
정상적으로 연결되면 다음과 비슷한 토픽들이 출력됩니다.
/battery_state
/cmd_vel
/imu
/joint_states
/magnetic_field
/odom
/parameter_events
/robot_description
/rosout
/scan
/sensor_state
/tf
/tf_static

여기서 주요 토픽은 다음과 같습니다.
| 토픽 이름 | 설명 |
|---|---|
/cmd_vel | TurtleBot3 주행 명령 토픽 |
/odom | Odometry 위치 추정 정보 |
/scan | LiDAR 거리 센서 데이터 |
/imu | IMU 센서 데이터 |
/battery_state | 배터리 상태 정보 |
/joint_states | 바퀴 조인트 상태 |
/tf | 좌표계 변환 정보 |
/tf_static | 고정 좌표계 변환 정보 |
9. ROS 2 Service 목록 확인하기
서비스 목록은 다음 명령으로 확인합니다.
ros2 service list
정상적으로 Bringup이 실행되면 다음과 같은 서비스들이 보입니다.
/motor_power
/reset
/sound
/turtlebot3_node/describe_parameters
/turtlebot3_node/get_parameters
/turtlebot3_node/list_parameters
/turtlebot3_node/set_parameters
/diff_drive_controller/describe_parameters
/diff_drive_controller/get_parameters
/diff_drive_controller/list_parameters
/diff_drive_controller/set_parameters

주요 서비스는 다음과 같습니다.
| 서비스 이름 | 설명 |
/motor_power | 모터 전원 제어 |
/reset | TurtleBot3 상태 리셋 |
/sound | TurtleBot3 사운드 출력 |
/turtlebot3_node/get_parameters | TurtleBot3 노드 파라미터 확인 |
/turtlebot3_node/set_parameters | TurtleBot3 노드 파라미터 설정 |
10. Bringup 정상 동작 확인 포인트
TurtleBot3 Bringup이 정상적으로 완료되었는지 확인하려면 아래 항목을 보면 됩니다.
1) OpenCR 포트 인식 확인
Succeeded to open the port(/dev/ttyACM0)!
이 메시지가 나오면 Raspberry Pi에서 OpenCR 보드를 정상적으로 인식한 것입니다.
2) Baudrate 설정 확인
Succeeded to change the baudrate!
이 메시지는 OpenCR과의 시리얼 통신 속도 설정이 정상적으로 완료되었다는 의미입니다.

3) Gyro Calibration 완료 확인
Start Calibration of Gyro
Calibration End
TurtleBot3는 Bringup 과정에서 IMU Gyro 보정을 진행합니다.

이때 로봇을 움직이지 않는 것이 좋습니다.
4) TurtleBot3 Node 실행 확인
[INFO] [turtlebot3_node]: Run!
이 메시지가 나오면 TurtleBot3 메인 노드가 정상 실행 중입니다.
5) Odometry 실행 확인
[INFO] [diff_drive_controller]: Init Odometry
[INFO] [diff_drive_controller]: Run!
이 메시지가 나오면 바퀴 기반 Odometry 계산이 시작된 상태입니다.

11. 로봇 키보드로 조작
새로운 터미널을 열고 키보드로 로봇을 움직이기 위해 teleop_keyboard를 실행합니다.
ros2 run turtlebot3_teleop teleop_keyboard
w/x/a/d 키를 이용하여 로봇을 움직여 봅니다.

12. 자주 발생하는 문제
문제 1. Remote PC에서 토픽이 보이지 않음
먼저 양쪽의 ROS_DOMAIN_ID를 확인합니다.
echo $ROS_DOMAIN_ID
Remote PC와 Raspberry Pi의 값이 같아야 합니다.
예:
30
다음으로 RMW 설정도 확인합니다.
echo $RMW_IMPLEMENTATION
양쪽 모두 다음과 같아야 합니다.
rmw_fastrtps_cpp
또한 같은 Wi-Fi 네트워크에 연결되어 있는지도 확인해야 합니다.
문제 2. /dev/ttyACM0 포트 오류 발생
Bringup 실행 중 다음과 비슷한 오류가 발생할 수 있습니다.
Failed to open the port
이 경우 다음을 확인합니다.
ls /dev/ttyACM*
OpenCR 보드가 정상적으로 연결되어 있다면 /dev/ttyACM0 또는 /dev/ttyACM1 형태로 표시됩니다.
USB 케이블 연결, OpenCR 전원, 권한 설정을 확인해야 합니다.
문제 3. LiDAR 토픽 /scan이 보이지 않음
Bringup 후 다음 명령으로 토픽을 확인합니다.
ros2 topic list
/scan이 없다면 LiDAR 노드가 정상 실행되지 않았을 수 있습니다.
이 경우 Bringup 로그에서 hlds_laser_publisher 관련 메시지를 확인합니다.
[INFO] [hlds_laser_publisher-2]: process started
LiDAR 전원, USB 연결, 패키지 설치 상태를 점검해야 합니다.
문제 4. 모델 설정을 하지 않고 Bringup 실행한 경우
TURTLEBOT3_MODEL 환경변수가 설정되지 않으면 URDF 또는 Bringup 과정에서 문제가 발생할 수 있습니다.
반드시 Bringup 실행 전에 다음 명령을 입력합니다.
export TURTLEBOT3_MODEL=burger
모델이 Waffle 또는 Waffle Pi라면 자신의 모델에 맞게 변경해야 합니다.
export TURTLEBOT3_MODEL=waffle
또는
export TURTLEBOT3_MODEL=waffle_pi
12. 전체 실행 명령 요약
Remote PC에서 Raspberry Pi에 SSH 접속합니다.
ssh ubuntu@{IP_ADDRESS_OF_RASPBERRY_PI}
TurtleBot3 SBC에서 모델을 설정합니다.
export TURTLEBOT3_MODEL=burger
Bringup을 실행합니다.
ros2 launch turtlebot3_bringup robot.launch.py
Remote PC에서 ROS 2 통신 환경을 맞춥니다.
export ROS_DOMAIN_ID=30
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
Topic 목록을 확인합니다.
ros2 topic list
Service 목록을 확인합니다.
ros2 service list