1. 전체 구조 이해하기
TurtleBot3 원격 제어 구조는 다음과 같습니다.
[Remote PC]
- ROS 2 설치
- RViz2 실행
- Teleoperation 실행
- Topic 확인
- SSH 접속
Wi-Fi / LAN
[TurtleBot3 SBC]
- Raspberry Pi 또는 SBC
- TurtleBot3 bringup 실행
- 센서, 모터, OpenCR, LDS, IMU 데이터 publish
중요한 점은 RViz2를 TurtleBot3 내부 SBC에서 실행하는 것이 아니라 Remote PC에서 실행한다는 것입니다.
TurtleBot3 SBC는 로봇의 센서와 모터를 구동하고, PC는 그 데이터를 받아서 시각화하거나 명령을 보내는 역할을 합니다.
2. 준비 조건
작업 전에 아래 조건을 먼저 확인해야 합니다.
필수 조건
1. TurtleBot3와 Remote PC가 같은 네트워크에 연결되어 있어야 합니다.
2. Remote PC에 ROS 2가 설치되어 있어야 합니다.
3. TurtleBot3 SBC에도 ROS 2와 TurtleBot3 패키지가 설치되어 있어야 합니다.
4. TurtleBot3 SBC의 IP 주소를 알고 있어야 합니다.
5. Remote PC와 TurtleBot3 SBC의 ROS_DOMAIN_ID가 같아야 합니다.
6. Remote PC와 TurtleBot3 SBC의 RMW_IMPLEMENTATION이 같아야 합니다.
보통 실습에서는 TurtleBot3와 PC를 같은 Wi-Fi 공유기에 연결합니다.
공유기가 multicast를 막고 있으면 ROS 2 topic discovery가 제대로 되지 않을 수 있습니다. 이 경우 PC에서 topic list가 보이지 않거나 RViz2에서 LaserScan, TF, Odometry가 표시되지 않습니다.
3. TurtleBot3 SBC IP 주소 확인
TurtleBot3에 모니터와 키보드를 연결할 수 있다면 SBC 터미널에서 다음 명령어로 IP를 확인합니다.
ifconfig
예를 들어 아래와 같은 IP가 나온다고 가정하겠습니다.
wlan0: 192.168.200.27
이 IP 주소는 Remote PC에서 SSH 접속할 때 사용합니다.
4. Remote PC에서 TurtleBot3에 SSH 접속하기
Remote PC에서 터미널을 열고 다음 명령어를 입력합니다.
ssh sjyong@192.168.200.27
여기서 192.168.0.23은 자신의 TurtleBot3 SBC IP 주소로 바꿔야 합니다.
ssh ubuntu@{TURTLEBOT3_SBC_IP}
비밀번호를 입력하면 TurtleBot3 SBC에 원격 접속됩니다.
정상적으로 접속되면 터미널 프롬프트가 Remote PC가 아니라 TurtleBot3 SBC 쪽으로 바뀝니다.
예시:
sjyong@hsrobot:~$
이제 이 터미널에서 실행하는 명령은 TurtleBot3 내부 SBC에서 실행됩니다.


5. ROS 2 네트워크 설정 확인
ROS 2에서는 같은 네트워크에 있다고 해서 무조건 통신이 되는 것이 아닙니다.
Remote PC와 TurtleBot3 SBC의 아래 값이 같아야 합니다.
ROS_DOMAIN_ID
RMW_IMPLEMENTATION
이전 실습과정을 진행할 경우 위의 설정은 모두 완료했습니다.
Remote PC에서 설정
Remote PC 터미널에서 다음을 입력합니다.
export ROS_DOMAIN_ID=100
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
TurtleBot3 SBC에서 설정
SSH로 접속한 TurtleBot3 SBC 터미널에서도 똑같이 입력합니다.
export ROS_DOMAIN_ID=100
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
두 장비의 값이 다르면 ROS 2 topic이 서로 보이지 않습니다.
이 부분이 제일 많이 틀리는 구간입니다.
양쪽 PC 모두에서 아래의 명령을 실행하여 현재 설정
상태를 확인합니다.
echo $ROS_DOMAIN_ID
echo $LDS_MODEL
echo $TURTLEBOT3_MODEL


설정이 모두 일치함을 확인했습니다.
6. 매번 입력하지 않도록 .bashrc에 등록하기
터미널을 새로 열 때마다 export 명령을 다시 입력하는 것은 귀찮습니다.
그래서 Remote PC와 TurtleBot3 SBC 양쪽 모두 .bashrc에 등록하는 것이 좋습니다.
Remote PC
echo 'export ROS_DOMAIN_ID=100' >> ~/.bashrc
echo 'export RMW_IMPLEMENTATION=rmw_fastrtps_cpp' >> ~/.bashrc
source ~/.bashrc
TurtleBot3 SBC
SSH 접속 상태에서 다음을 입력합니다.
echo 'export ROS_DOMAIN_ID=100' >> ~/.bashrc
echo 'export RMW_IMPLEMENTATION=rmw_fastrtps_cpp' >> ~/.bashrc
source ~/.bashrc
설정 확인:
echo $ROS_DOMAIN_ID
echo $RMW_IMPLEMENTATION
정상이라면 다음처럼 출력됩니다.
100
rmw_fastrtps_cpp
7. TurtleBot3 모델명 설정하기
TurtleBot3는 모델에 따라 URDF, 센서 구성, 파라미터가 다릅니다.
따라서 bringup 전에 모델명을 반드시 설정해야 합니다.
사용 가능한 대표 모델명은 다음과 같습니다.
burger
waffle
waffle_pi
예를 들어 TurtleBot3 Burger라면 TurtleBot3 SBC에서 다음을 입력합니다.
export TURTLEBOT3_MODEL=burger
Waffle Pi라면 다음처럼 입력합니다.
export TURTLEBOT3_MODEL=waffle_pi
매번 입력하지 않으려면 TurtleBot3 SBC의 .bashrc에 추가합니다.
echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
source ~/.bashrc
자신의 모델이 Waffle Pi라면 burger 대신 waffle_pi를 넣으면 됩니다.
위의 결과에서 확인했듯이 설정이 정상적으로 완료되었습니다. 로봇은 burger를 사용합니다.
8. TurtleBot3 Bringup 실행하기
이제 TurtleBot3 SBC에서 bringup을 실행합니다.
반드시 SSH로 접속한 TurtleBot3 SBC 터미널에서 실행해야 합니다.
ros2 launch turtlebot3_bringup robot.launch.py
정상적으로 실행되면 다음과 비슷한 로그가 출력됩니다.
[INFO] [robot_state_publisher]: process started
[INFO] [hlds_laser_publisher]: process started
[INFO] [turtlebot3_node]: process started
[INFO] [turtlebot3_node]: Init TurtleBot3 Node Main
[INFO] [diff_drive_controller]: Init Odometry
[INFO] [diff_drive_controller]: Run!
이 상태에서는 터미널을 닫으면 안 됩니다.
bringup 터미널은 계속 켜둬야 TurtleBot3의 센서, 모터, TF, odom, scan topic이 publish됩니다.
9. Remote PC에서 Topic 확인하기
이제 Remote PC에서 새 터미널을 열고 topic이 보이는지 확인합니다.
ros2 topic list
정상적으로 연결되었다면 다음과 같은 topic이 보입니다.
/battery_state
/cmd_vel
/imu
/joint_states
/odom
/robot_description
/scan
/sensor_state
/tf
/tf_static
특히 아래 topic이 보이면 기본 연결은 성공한 것입니다.
/scan
/odom
/tf
/tf_static
/cmd_vel
만약 topic이 보이지 않는다면 아래 항목을 먼저 확인해야 합니다.
1. TurtleBot3와 PC가 같은 Wi-Fi에 연결되어 있는가?
2. ROS_DOMAIN_ID가 양쪽 모두 같은가?
3. RMW_IMPLEMENTATION이 양쪽 모두 같은가?
4. TurtleBot3 bringup이 실행 중인가?
5. 공유기에서 multicast가 차단되어 있지 않은가?
6. 방화벽이 ROS 2 DDS 통신을 막고 있지 않은가?
Ubuntu 방화벽을 사용 중이라면 테스트 목적으로 잠시 비활성화해서 확인할 수 있습니다.
sudo ufw status
sudo ufw disable
실제 운영 환경에서는 보안 정책에 맞게 포트를 허용하는 방식으로 관리하는 것이 좋습니다.
10. Remote PC에서 RViz2 실행하기
TurtleBot3 bringup이 실행된 상태에서 Remote PC의 새 터미널을 엽니다.
이미 .bashrc에 로봇의 모델명을 등록한 경우 아래의 고정을 생략합니다.
먼저 Remote PC에도 TurtleBot3 모델명을 설정합니다.
export TURTLEBOT3_MODEL=burger
Waffle Pi라면 다음처럼 설정합니다.
export TURTLEBOT3_MODEL=waffle_pi
그 다음 RViz2 launch 파일을 실행합니다.
ros2 launch turtlebot3_bringup rviz2.launch.py
정상적으로 실행되면 RViz2 창이 열리고 TurtleBot3 모델, TF, LaserScan 데이터가 표시됩니다.

11. RViz2에서 확인해야 할 항목
RViz2가 실행되면 왼쪽 Displays 패널에서 다음 항목을 확인합니다.
RobotModel
TF
LaserScan
Odometry

Fixed Frame 확인
RViz2 상단 또는 왼쪽 Global Options에서 Fixed Frame을 확인합니다.
일반적으로 다음 중 하나를 사용합니다.
odom
base_link
base_footprint
map
TurtleBot3 bringup 직후에는 보통 odom을 사용하면 됩니다.
만약 Fixed Frame 오류가 나오면 /tf와 /tf_static topic이 제대로 들어오는지 확인해야 합니다.
ros2 topic echo /tf
ros2 topic echo /tf_static
LaserScan 확인
LDS 또는 LiDAR가 정상이라면 RViz2에서 주변 장애물이 점 또는 선 형태로 표시됩니다.
LaserScan이 보이지 않으면 /scan topic을 확인합니다.
ros2 topic echo /scan --once

데이터가 계속 출력되면 센서 topic은 정상입니다.
RViz2에서만 보이지 않는다면 LaserScan display의 Topic 설정이 /scan인지 확인합니다.
12. Remote PC에서 TurtleBot3 키보드 조종하기
RViz2로 상태 확인이 끝났다면 Remote PC에서 TurtleBot3를 키보드로 조종할 수 있습니다.
Remote PC에서 새 터미널을 열고 다음을 실행합니다.
ros2 run turtlebot3_teleop teleop_keyboard
실행하면 다음과 같은 조작 안내가 나옵니다.
Control Your TurtleBot3
Moving around
w
a s d
x
w/x : increase/decrease linear velocity
a/d : increase/decrease angular velocity
space key, s : force stop
CTRL-C to quit
조작 키는 다음과 같습니다.
w : 직진 속도 증가
x : 직진 속도 감소 또는 후진 방향
a : 회전 속도 증가, 좌회전 방향
d : 회전 속도 증가, 우회전 방향
s : 정지
space : 강제 정지
Ctrl + C : 종료
테이블 위에서 테스트할 때는 절대 빠르게 움직이면 안 됩니다.
로봇이 떨어질 수 있으므로 바닥에서 충분한 공간을 확보하고 테스트하는 것이 안전합니다.
로봇을 움직이면서 rviz2의 로봇 모델의 바퀴 TF와 각종 프레임이 정상적으로 이동하는지를 확인합니다.
13. Topic 확인
먼저 rqt_graph를 실행합니다.

다음은 rqt_graph를 종료하고 rqt를 실행한 후 pulgins -> Topics -> Topic Monitor를 선택합니다.

보고 싶은 토픽을 클릭하고 실시간으로 발행되는 데이터를 볼 수 있습니다. /battery_state 토픽을 보면 현재 배터리의 전압 값을 확인할 수 있습니다.

/odom 토픽의 발행주기도 확인이 가능합니다.

14. 전체 실행 순서 요약
전체 흐름은 다음 순서대로 진행하면 됩니다.
1단계: TurtleBot3 SBC에 SSH 접속
Remote PC에서 실행:
ssh ubuntu@{TURTLEBOT3_SBC_IP}
2단계: TurtleBot3 SBC에서 환경변수 설정
TurtleBot3 SBC에서 실행 또는 설정 확인:
export ROS_DOMAIN_ID=30
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export TURTLEBOT3_MODEL=burger
echo $ROS_DOMAIN_ID
echo $LDS_MODEL
echo $TURTLEBOT3_MODEL
3단계: TurtleBot3 SBC에서 bringup 실행
TurtleBot3 SBC에서 실행:
ros2 launch turtlebot3_bringup robot.launch.py
4단계: Remote PC에서 topic 확인
Remote PC에서 실행:
ros2 topic list
5단계: Remote PC에서 RViz2 실행
Remote PC에서 실행:
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_bringup rviz2.launch.py
6단계: Remote PC에서 키보드 조종
Remote PC에서 실행:
ros2 run turtlebot3_teleop teleop_keyboard