1. RViz2란?
RViz2는 ROS 2에서 사용하는 대표적인 3D 시각화 도구입니다.
모바일 로봇을 개발할 때 RViz2는 단순히 예쁜 화면을 보여주는 도구가 아닙니다. 실제 개발 현장에서는 다음과 같은 용도로 자주 사용합니다.
- 로봇의 위치 확인
- 센서 데이터 확인
- LiDAR 스캔 데이터 확인
- TF 좌표계 확인
- Odometry 확인
- 주행 방향 확인
- 로봇 모델 확인
- 토픽 데이터가 정상적으로 나오는지 확인
- 좌표계가 꼬였는지 디버깅
즉, RViz2는 모바일 로봇 개발에서 눈 역할을 합니다.
터미널에서 토픽 값을 숫자로 보는 것도 중요하지만, 로봇의 위치, 방향, 센서 데이터를 공간적으로 확인하려면 RViz2가 거의 필수입니다.
2. TurtleBot3 실행 준비
먼저 TurtleBot3 모델을 설정합니다.
예를 들어 Burger 모델을 사용하는 경우 다음 명령을 실행합니다.
export TURTLEBOT3_MODEL=burger
매번 입력하기 귀찮다면 ~/.bashrc에 추가합니다.
echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
source ~/.bashrc
사용 가능한 TurtleBot3 모델은 보통 다음과 같습니다.
burger
waffle
waffle_pi
3. TurtleBot3 시뮬레이션 실행
Gazebo 시뮬레이션 환경에서 TurtleBot3를 실행합니다.
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
실행 후 Gazebo 창에 TurtleBot3가 보이면 정상입니다.
다른 터미널에서 현재 ROS 2 토픽 목록을 확인합니다.
ros2 topic list
대표적으로 다음과 같은 토픽이 보일 수 있습니다.
/cmd_vel
/imu
/joint_states
/odom
/robot_description
/scan
/tf
/tf_static
이번 강의에서 RViz로 주로 확인할 토픽은 다음입니다.
| /scan | LiDAR 거리 데이터 |
| /odom | 로봇의 오도메트리 위치 정보 |
| /tf | 실시간 좌표 변환 정보 |
| /tf_static | 고정 좌표 변환 정보 |
| /joint_states | 바퀴 조인트 상태 |
| /robot_description | 로봇 모델 정보 |
| /cmd_vel | 로봇 속도 명령 |
4. RViz2 실행
새 터미널을 열고 다음을 실행합니다.
export TURTLEBOT3_MODEL=burger
rviz2
RViz2가 실행되면 빈 화면 또는 기본 Grid 화면이 나타납니다.

5. RViz2 기본 화면 구성
RViz2 화면은 크게 다음 영역으로 구성됩니다.
| Displays | 시각화할 항목을 추가하고 설정하는 영역 |
| 3D View | 로봇, 센서, 좌표계가 표시되는 공간 |
| Views | 카메라 시점 설정 |
| Time | ROS 시간 관련 정보 |
| Tool Bar | 이동, 선택, 목표 위치 지정 등 도구 |
6. Fixed Frame 설정
RViz2에서 가장 먼저 해야 할 일은 Fixed Frame 설정입니다.
왼쪽 Displays 패널에서 Global Options를 찾습니다.
Global Options
└── Fixed Frame
여기에 다음 중 하나를 입력합니다.
odom

또는 환경에 따라 다음을 사용할 수 있습니다.
base_link
모바일 로봇에서는 보통 odom을 Fixed Frame으로 설정하는 경우가 많습니다.
Fixed Frame이란?
Fixed Frame은 RViz가 기준으로 삼는 좌표계입니다.
예를 들어 Fixed Frame을 odom으로 설정하면 RViz는 로봇과 센서 데이터를 odom 좌표계를 기준으로 표시합니다.
Fixed Frame이 잘못 설정되면 다음 문제가 발생합니다.
- LaserScan이 보이지 않음
- RobotModel이 보이지 않음
- TF 에러 발생
- 화면 왼쪽 아래에 빨간색 Error 표시
- No transform 에러 발생
RViz에서 데이터가 안 보이면 가장 먼저 Fixed Frame을 확인해야 합니다.
7. Grid 표시 확인
기본적으로 RViz에는 Grid가 표시됩니다.
Grid는 바닥면 역할을 합니다.
Displays → Grid
Grid는 실제 토픽 데이터는 아니지만, 로봇의 위치와 방향을 파악하는 기준이 됩니다.

Grid 설정에서 다음 값을 확인할 수 있습니다.
| Plane Cell Count | 격자 개수 |
| Cell Size | 격자 한 칸 크기 |
| Reference Frame | Grid 기준 좌표계 |
모바일 로봇 강의에서는 Grid가 보이면 RViz 화면 기준을 잡기 쉽습니다.
8. TF 표시하기
RViz에서 가장 중요한 기능 중 하나는 TF 확인입니다.
왼쪽 아래의 Add 버튼을 누릅니다.
Add → By display type → TF

또는 검색창에 TF를 입력하고 추가합니다.
추가하면 로봇의 좌표계들이 화살표 형태로 표시됩니다.
대표적인 TurtleBot3 TF 구조는 다음과 같습니다.
odom
└── base_footprint
└── base_link
├── base_scan
├── wheel_left_link
└── wheel_right_link
환경에 따라 약간 다를 수 있습니다.

주요 Frame 설명
| odom | 오도메트리 기준 좌표계 |
| base_footprint | 로봇의 바닥 중심 좌표계 |
| base_link | 로봇 본체 중심 좌표계 |
| base_scan | LiDAR 센서 좌표계 |
| wheel_left_link | 왼쪽 바퀴 좌표계 |
| wheel_right_link | 오른쪽 바퀴 좌표계 |

TF가 정상적으로 보이면 로봇의 좌표계 연결이 정상이라는 뜻입니다.
모바일 로봇에서 TF가 틀어지면 센서 데이터, 주행, 위치 추정이 전부 이상해질 수 있습니다.
9. LaserScan 표시하기
TurtleBot3에서 가장 많이 확인하는 센서 토픽은 LiDAR 데이터입니다.
LiDAR 토픽은 보통 다음 이름을 사용합니다.
/scan
RViz에서 LaserScan을 추가합니다.
Add → By topic → /scan → LaserScan
또는
Add → By display type → LaserScan

추가 후 Topic을 /scan으로 설정합니다.
정상적으로 설정되면 로봇 주변에 점 또는 선 형태로 LiDAR 데이터가 표시됩니다.

1) LaserScan 주요 설정
| Topic | /scan |
| Style | Points, Flat Squares 등 |
| Size | 점 크기 |
| Color Transformer | 거리 또는 강도 기반 색상 |
| Decay Time | 데이터가 화면에 남아 있는 시간 |
강의에서는 먼저 Style을 Points로 설정하는 것이 좋습니다.
Style: Points
Size: 0.03
2) /scan 토픽 확인
터미널에서 다음 명령으로 LaserScan 데이터를 확인할 수 있습니다.
ros2 topic echo /scan
출력 예시는 다음과 비슷합니다.
header:
frame_id: base_scan
angle_min: 0.0
angle_max: 6.28
angle_increment: 0.017
range_min: 0.12
range_max: 3.5
ranges:
- 1.2
- 1.3
- inf
...

여기서 중요한 값은 다음입니다.
| frame_id | LiDAR 데이터가 측정된 좌표계 |
| angle_min | 스캔 시작 각도 |
| angle_max | 스캔 끝 각도 |
| range_min | 최소 측정 거리 |
| range_max | 최대 측정 거리 |
| ranges | 각 방향의 거리값 배열 |
RViz에서 /scan이 보이지 않으면 보통 다음 문제입니다.
- Fixed Frame이 잘못됨
- /scan 토픽이 나오지 않음
- base_scan과 odom 사이 TF가 없음
- 시뮬레이션 시간이 맞지 않음
- RViz의 Topic 설정이 잘못됨
10. Odometry 표시하기
Odometry는 로봇이 자신이 얼마나 이동했다고 추정하는 정보입니다.
TurtleBot3에서는 보통 다음 토픽을 사용합니다.
/odom
RViz에서 Odometry를 추가합니다.
Add → By topic → /odom → Odometry


위의 그림처럼 큰 노란 타원은 TurtleBot3 로봇 모델이 아니라 Odometry 표시의 Pose Covariance 시각화입니다.
즉 RViz가 /odom 메시지를 받아서 “로봇 위치 추정의 불확실성 영역”을 타원으로 그린 것입니다.
covariance 값이 크거나 RViz 설정에서 covariance 표시가 켜져 있으면, 화면에 큰 타원/원반처럼 보입니다.
Covariance의 체크박스의 선택을 해제하시면 노란 원이 사라집니다.

정상적으로 추가되면 로봇의 이동 방향과 자세를 화살표 형태로 볼 수 있습니다.
/odom 토픽 확인
터미널에서 다음 명령을 실행합니다.
ros2 topic echo /odom
출력에는 다음 정보가 포함됩니다.
pose:
pose:
position:
x:
y:
z:
orientation:
x:
y:
z:
w:
twist:
twist:
linear:
x:
angular:
z:

중요한 값은 다음입니다.
| pose.pose.position.x | x 방향 위치 |
| pose.pose.position.y | y 방향 위치 |
| pose.pose.orientation | 로봇 방향 |
| twist.twist.linear.x | 전진 속도 |
| twist.twist.angular.z | 회전 속도 |
모바일 로봇에서는 /odom이 매우 중요합니다.
단, Odometry는 바퀴 회전량 등을 기반으로 추정하기 때문에 실제 위치와 오차가 누적될 수 있습니다.
11. RobotModel 표시하기
TurtleBot3 모델을 RViz에 표시해 보겠습니다.
Add → By display type → RobotModel
RobotModel을 추가하면 RViz에 TurtleBot3의 3D 모델이 표시됩니다.

RobotModel은 보통 /robot_description 토픽 또는 파라미터를 사용합니다.
Description Tpoic을 /robot_descritopn으로 선택하시면 로봇의 화면에 출력됩니다.


확인 명령:
ros2 topic echo /robot_description
또는 너무 길게 나오므로 다음처럼 토픽 존재 여부만 확인해도 됩니다.
ros2 topic list | grep robot_description
RobotModel이 보이지 않는 경우 다음을 확인합니다.
ros2 topic list | grep joint_states
ros2 topic list | grep robot_description
그리고 RViz의 Fixed Frame이 odom 또는 base_link로 제대로 설정되어 있는지 확인합니다.
12. 로봇 움직이면서 RViz 확인하기
새 터미널을 열고 키보드 조종 노드를 실행합니다.
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboard
키보드로 TurtleBot3를 움직입니다.
w : 전진
x : 후진
a : 좌회전
d : 우회전
s : 정지

RViz에서 다음 변화를 확인합니다.
- RobotModel이 이동하는지
- TF가 같이 움직이는지
- /scan 데이터가 로봇 기준으로 변하는지
- /odom 화살표가 이동 방향을 나타내는지
- Grid 기준으로 로봇 위치가 바뀌는지
13. Topic 확인 실습
RViz는 시각화 도구이고, 터미널 명령은 데이터 확인 도구입니다.
둘을 같이 써야 제대로 디버깅할 수 있습니다.
1) 전체 토픽 목록 확인
ros2 topic list
2) 토픽 타입 확인
ros2 topic type /scan
예상 결과:
sensor_msgs/msg/LaserScan
ros2 topic type /odom
예상 결과:
nav_msgs/msg/Odometry
3) 토픽 주기 확인
ros2 topic hz /scan
ros2 topic hz /odom
4) 토픽 대역폭 확인
ros2 topic bw /scan
5) 토픽 내용 확인
ros2 topic echo /scan
ros2 topic echo /odom
14. RViz에서 Marker 개념 소개
Marker는 사용자가 직접 만든 정보를 RViz에 시각화할 때 사용합니다.
예를 들면 다음과 같은 것을 표시할 수 있습니다.
- 목표 지점
- 경로
- 장애물 위치
- 로봇 진행 방향
- 디버깅용 화살표
- 위험 구역
- 관심 지점
Marker는 보통 다음 메시지를 사용합니다.
visualization_msgs/msg/Marker
visualization_msgs/msg/MarkerArray
이번 강의에서는 기존 패키지가 있다고 했으므로, C++ 패키지인 my_cpp_packages에서 간단한 Marker Publisher를 만들 수 있습니다.
15. Python 패키지에서 Marker Publisher 예제
예제 파일:
~/ros2_study/src/my_first_packages/my_first_packages/simple_marker_node.py
소스 코드 :
import rclpy
from rclpy.node import Node
from rclpy.duration import Duration
from visualization_msgs.msg import Marker
class SimpleMarkerNode(Node):
def __init__(self):
super().__init__('simple_marker_node')
self.marker_pub = self.create_publisher(
Marker,
'robot_marker',
10
)
self.timer = self.create_timer(
0.5,
self.publish_marker
)
def publish_marker(self):
marker = Marker()
marker.header.frame_id = 'odom'
marker.header.stamp = self.get_clock().now().to_msg()
marker.ns = 'basic_shapes'
marker.id = 0
marker.type = Marker.ARROW
marker.action = Marker.ADD
marker.pose.position.x = 1.0
marker.pose.position.y = 0.0
marker.pose.position.z = 0.2
marker.pose.orientation.x = 0.0
marker.pose.orientation.y = 0.0
marker.pose.orientation.z = 0.0
marker.pose.orientation.w = 1.0
marker.scale.x = 0.8
marker.scale.y = 0.1
marker.scale.z = 0.1
marker.color.r = 1.0
marker.color.g = 0.2
marker.color.b = 0.2
marker.color.a = 1.0
marker.lifetime = Duration(seconds=0.0).to_msg()
self.marker_pub.publish(marker)
def main(args=None):
rclpy.init(args=args)
node = SimpleMarkerNode()
try:
rclpy.spin(node)
except KeyboardInterrupt:
pass
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
16. setup.py 수정
my_first_packages/setup.py에 실행 노드를 등록합니다.
import os
import glob
from setuptools import find_packages, setup
package_name = 'my_first_package'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
(
'share/ament_index/resource_index/packages',
['resource/' + package_name]
),
(
'share/' + package_name,
['package.xml']
),
(
'share/' + package_name + '/launch',
glob.glob(os.path.join('launch', '*.launch.py'))
),
(
'share/' + package_name + '/config',
glob.glob(os.path.join('config', '*.yaml'))
),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='sjyong',
maintainer_email='sjyong@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
extras_require={
'test': [
'pytest',
],
},
entry_points={
'console_scripts': [
'my_first_node = my_first_package.my_first_node:main',
'my_subscriber = my_first_package.my_subscriber:main',
'my_publisher = my_first_package.my_publisher:main',
'turtle_cmd_and_pose = my_first_package.turtle_cmd_and_pose:main',
'my_service_server = my_first_package.my_service_server:main',
'dist_turtle_action_server = my_first_package.dist_turtle_action_server:main',
'dist_turtle_action_client_cancel = my_first_package.dist_turtle_action_client_cancel:main',
'my_multi_thread = my_first_package.my_multi_thread:main',
'cmd_vel_publisher = my_first_package.cmd_vel_publisher:main',
'camera_node = my_first_package.camera_node:main',
'simple_marker_node = my_first_package.simple_marker_node:main',
],
},
)
17. package.xml 수정
my_python_packages/package.xml에 다음 의존성을 추가합니다.
<depend>rclpy</depend>
<depend>visualization_msgs</depend>
Python 패키지라면 export 부분은 다음처럼 되어 있어야 합니다.
<export>
<build_type>ament_python</build_type>
</export>
전체 예시는 다음과 같습니다.
<?xml version="1.0"?>
<package format="3">
<name>my_python_packages</name>
<version>0.0.0</version>
<description>ROS 2 Python marker publisher example</description>
<maintainer email="user@example.com">user</maintainer>
<license>Apache-2.0</license>
<depend>rclpy</depend>
<depend>visualization_msgs</depend>
<test_depend>ament_copyright</test_depend>
<test_depend>ament_flake8</test_depend>
<test_depend>ament_pep257</test_depend>
<test_depend>python3-pytest</test_depend>
<export>
<build_type>ament_python</build_type>
</export>
</package>
주의할 점은 C++의 ament_cmake가 아니라 Python 패키지이므로 반드시 다음이어야 합니다.
<build_type>ament_python</build_type>
18. 빌드 및 실행
cd ~/ros2_study
colcon build --packages-select my_python_packages
source install/setup.bash
ros2 run my_first_packages simple_marker_node

1) 새 터미널에서 토픽을 확인합니다.
source ~/ros2_study/install/setup.bash
ros2 topic list | grep robot_marker
결과:
/robot_marker
2) 토픽 타입 확인:
ros2 topic type /robot_marker
결과:
visualization_msgs/msg/Marker

3) RViz2에서 확인
RViz2 실행:
rviz2
설정:
Fixed Frame: odom
Add → By topic → /robot_marker
또는:
Add → Marker
Topic → /robot_marker

정상 동작하면 odom 좌표계 기준으로 빨간색 화살표 마커가 표시됩니다.

만약 화살표가 보이지 않으면 Fixed Frame을 odom으로 설정하시면 됩니다.
이 실습을 통해 다음과 같은 것을 확인할 수 있습니다.
- RViz는 기본 토픽만 보는 도구가 아니다.
- 사용자가 만든 디버깅 정보도 표시할 수 있다.
- 모바일 로봇의 목표점, 방향, 장애물, 경로를 직접 시각화할 수 있다.
- RViz는 로봇 개발자의 디버깅 화면이다.
19. RViz 저장 파일 만들기
RViz에서 설정한 Display 구성을 저장할 수 있습니다.
메뉴에서 다음을 선택합니다.
File → Save Config As
예를 들어 다음 경로에 저장합니다.
cd ~/ros2_study/src/my_first_package
mkdir rviz
~/ros2_study/src/my_first_package/rviz/turtlebot3_basic.rviz
폴더가 없다면 생성합니다.
mkdir -p ~/ros2_study/src/my_first_package/rviz


저장 후 다음처럼 RViz를 실행할 수 있습니다.
rviz2 -d ~/ros2_study/src/my_first_package/rviz/turtlebot3_basic.rviz


테스트용으로 미리 RViz 설정 파일을 만들어 두는 것이 좋습니다.
추천 Display 구성은 다음입니다.
Global Options
└── Fixed Frame: odom
Displays
├── Grid
├── TF
├── RobotModel
├── LaserScan /scan
├── Odometry /odom
└── Marker /robot_marker
RViz를 매번 수동으로 실행하는 것보다 Launch 파일에 포함시키는 것이 좋습니다.
python 패키지인 my_first_package에 launch 폴더가 이미 만들어져 있습니다.
lauch 폴더가 없을 경우 아래의 명령어로 만드시기 바랍니다.
mkdir -p ~/ros2_study/src/my_first_package/launch
예제 파일:
~/ros2_study/src/my_first_package/launch/rviz_basic.launch.py

from launch import LaunchDescription
from launch_ros.actions import Node
from launch.substitutions import PathJoinSubstitution
from launch_ros.substitutions import FindPackageShare
def generate_launch_description():
rviz_config = PathJoinSubstitution([
FindPackageShare('my_first_package'),
'rviz',
'turtlebot3_basic.rviz'
])
return LaunchDescription([
Node(
package='rviz2',
executable='rviz2',
name='rviz2',
arguments=['-d', rviz_config],
output='screen'
)
])
Python 패키지에서는 CMakeLists.txt가 아니라 **setup.py**에 launch와 rviz 폴더 설치 설정을 추가합니다.
(
'share/' + package_name + '/rviz',
glob.glob(os.path.join('rviz', '*.rviz'))
),

빌드합니다.
cd ~/ros2_study
colcon build --packages-select my_first_package
source install/setup.bash
실행합니다.
ros2 launch my_first_package rviz_basic.launch.py
이제 강의에서는 복잡한 RViz 설정을 매번 반복하지 않고, launch 파일 하나로 RViz 환경을 불러올 수 있습니다.


21. 실습 순서 정리
강의 실습은 다음 순서로 진행하면 좋습니다.
1단계: TurtleBot3 실행
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
2단계: 토픽 목록 확인
ros2 topic list
3단계: RViz2 실행
rviz2
4단계: Fixed Frame 설정
Fixed Frame: odom
5단계: Display 추가
Grid
TF
RobotModel
LaserScan
Odometry
Marker
6단계: 로봇 조종
ros2 run turtlebot3_teleop teleop_keyboard
7단계: 토픽 상태 확인
ros2 topic hz /scan
ros2 topic hz /odom
ros2 topic echo /odom
8단계: RViz 설정 저장
File → Save Config As
9단계: Launch 파일로 RViz 실행
ros2 launch my_cpp_packages rviz_basic.launch.py
1) RViz는 데이터를 만들지 않는다
RViz는 토픽을 발행하는 도구가 아닙니다.
기본적으로 RViz는 이미 발행되고 있는 ROS 2 데이터를 구독해서 보여줍니다.
즉, /scan이 발행되지 않으면 RViz에서도 LaserScan이 보이지 않습니다.
ros2 topic list
ros2 topic echo /scan
이 명령으로 먼저 데이터가 나오는지 확인해야 합니다.
2) Fixed Frame이 틀리면 거의 다 안 보인다
RViz 문제의 상당수는 Fixed Frame 문제입니다.
특히 다음 에러가 자주 나옵니다.
No transform from [base_scan] to [map]
No transform from [base_link] to [odom]
Fixed Frame [map] does not exist
이런 경우에는 현재 존재하는 TF를 확인해야 합니다.
ros2 run tf2_tools view_frames
또는 RViz에서 TF Display를 추가해서 확인합니다.
3) Topic과 Frame은 다르다
/scan은 토픽 이름입니다.
base_scan은 Frame 이름입니다.
예를 들어 /scan 메시지 안에는 다음과 같은 정보가 들어 있습니다.
header:
frame_id: base_scan
즉, /scan 토픽의 데이터는 base_scan 좌표계 기준으로 측정된 데이터입니다.
RViz는 이 데이터를 Fixed Frame으로 변환해서 화면에 표시합니다.
4) TF가 연결되어야 시각화가 된다
RViz가 /scan을 화면에 표시하려면 다음 변환이 가능해야 합니다.
odom → base_footprint → base_link → base_scan
이 연결이 끊기면 /scan 데이터가 있어도 RViz에 보이지 않습니다.
그래서 모바일 로봇에서는 TF 구조가 매우 중요합니다.
5) RViz는 디버깅 도구다
RViz는 단순 시각화 도구가 아니라 디버깅 도구입니다.
예를 들어 로봇이 이상하게 움직인다면 다음을 확인할 수 있습니다.
| 로봇 모델이 안 보임 | RobotModel, TF, robot_description |
| LiDAR가 안 보임 | LaserScan Topic, Fixed Frame, TF |
| 로봇 위치가 튐 | Odometry, TF |
| 센서 방향이 반대임 | base_scan Frame 방향 |
| 목표점이 이상함 | Marker Frame 설정 |
| 로봇이 회전 방향을 잘못 인식 | base_link 방향, odom orientation |
실제 로봇 개발에서는 RViz를 켜지 않고 디버깅하는 것이 더 어렵습니다.
23. 자주 발생하는 문제와 해결 방법
문제 1. RViz에 아무것도 보이지 않는다
확인:
ros2 topic list
ros2 run tf2_ros tf2_echo odom base_link
해결:
- Fixed Frame을 odom으로 변경
- TurtleBot3 시뮬레이션이 실행 중인지 확인
- source install/setup.bash 확인
- TURTLEBOT3_MODEL 설정 확인
문제 2. LaserScan이 안 보인다
확인:
ros2 topic list | grep scan
ros2 topic echo /scan
ros2 topic type /scan
예상 타입:
sensor_msgs/msg/LaserScan
해결:
- RViz LaserScan Topic을 /scan으로 설정
- Fixed Frame을 odom으로 설정
- TF에서 base_scan이 존재하는지 확인
문제 3. RobotModel이 안 보인다
확인:
ros2 topic list | grep robot_description
ros2 topic list | grep joint_states
해결:
- RobotModel Display 추가
- Fixed Frame 확인
- TurtleBot3 모델 설정 확인
export TURTLEBOT3_MODEL=burger
문제 4. No transform 에러가 발생한다
예시:
No transform from [base_scan] to [odom]
확인:
ros2 run tf2_ros tf2_echo odom base_scan
해결:
- TurtleBot3 bringup 또는 Gazebo launch가 정상 실행 중인지 확인
- /tf, /tf_static 토픽 확인
ros2 topic list | grep tf
문제 5. Marker가 안 보인다
확인:
ros2 topic list | grep robot_marker
ros2 topic echo /robot_marker
해결:
- Marker의 header.frame_id가 RViz Fixed Frame과 연결되는지 확인
- color.a 값이 0이 아닌지 확인
- scale 값이 너무 작지 않은지 확인
- RViz Marker Topic이 /robot_marker인지 확인
Marker에서 자주 하는 실수는 다음입니다.
marker.color.a = 0.0;
이렇게 하면 Marker는 발행되지만 투명해서 보이지 않습니다.
반드시 다음처럼 설정해야 합니다.
marker.color.a = 1.0;
'강좌 > ROS2' 카테고리의 다른 글
| ROS 2 C++ 서비스 프로그래밍 이해하기 (0) | 2026.05.15 |
|---|---|
| ROS 2 C++ 토픽 통신 기초: 센서 데이터를 보내고 받는 퍼블리셔와 서브스크라이버 만들기 (0) | 2026.05.15 |
| ROS 2 Humble에서 TurtleBot3 시뮬레이션 (0) | 2026.05.12 |
| ROS2 launch 작성 (0) | 2026.05.10 |
| 소스에서 파라미터 사용하기 (0) | 2026.05.10 |