[Physical AI W2D1] 1/6 — RViz로 로봇을 눈으로 보다: 시각화 흐름·Fixed Frame·Display

2026. 6. 20. 12:33·피지컬AI

[Physical AI W2D1 · 1/6]

ros2 topic echo로 쏟아지는 숫자만 봐서는 로봇이 어디를 보는지 알 수 없다. RViz는 ROS 2의 토픽·TF·URDF를 구독해 로봇 상태와 센서 데이터를 3D로 그려준다. 그 시각화 흐름과 핵심인 Fixed Frame·Display를 개념부터 잡는다.

이 글에서 잡는 개념
왜 숫자(토픽 echo)만으로는 부족하고 시각화가 필요한가
RViz가 ROS 2에서 하는 역할 — "데이터를 구독해 3D로 그리는 도구"
RViz 화면 구성: Displays · Global Options · 3D View · Status
Fixed Frame(모든 데이터를 모으는 기준 좌표계)과 Display가 보이기 위한 5가지 조건

(Week2 Day1의 시작입니다. W1D2에서 ROS 2 노드·토픽·TF를 다뤘다면, 이제 그 데이터를 눈으로 보는 단계입니다.)


들어가며 — 숫자만으로는 로봇을 이해할 수 없다

로봇 소프트웨어 안에서 로봇의 상태는 대부분 숫자입니다. 위치는 좌표값, 방향은 회전값, LiDAR는 거리 배열, 카메라는 이미지 메시지, 이동 경로는 위치 점들의 묶음(Path)으로 표현됩니다.

 

W1D2에서 배운 대로, 이 데이터는 ROS 2의 노드·토픽·메시지로 흐릅니다 — 예를 들어 LiDAR 노드는 /scan 토픽으로 거리 데이터를, Odometry 노드는 /odom 토픽으로 추정 위치를 발행하죠.

 

그런데 터미널에서 ros2 topic echo /scan으로 숫자만 봐서는 — 로봇이 어느 방향을 보는지, 센서 점들이 로봇 주변에 어떻게 분포하는지, 좌표계가 올바르게 연결됐는지, 경로가 정상인지 직관적으로 판단하기 어렵습니다.

💡 RViz란 — ROS 2에서 발행되는 토픽·메시지·TF·URDF를 이용해 로봇 상태와 센서 데이터를 3D 공간에 그려주는 대표 시각화 도구입니다.
좌표계, 센서 위치, LiDAR 점, 카메라 영상, 이동 경로, 로봇 모델을 한 화면에서 봅니다.

중요한 점: RViz는 로봇을 움직이지 않습니다. 이미 발행되고 있는 ROS 2 데이터를 구독(Subscribe) 해서 화면에 표시할 뿐입니다.


1. RViz가 그리는 것들

RViz의 주요 역할은 다음과 같습니다.

로봇 모델 시각화        좌표계(TF) 관계 시각화
LiDAR 센서 데이터       3D 점군(PointCloud)
카메라 영상             Odometry(위치 추정)
Path(이동 경로)         Marker(사용자 정의)
TF 오류 / Fixed Frame 오류 확인

RViz가 어떤 데이터를 그리려면 세 가지 정보가 필요합니다 — 이게 RViz를 이해하는 핵심입니다.

무엇을 표시? → Topic과 Message (예: /scan, sensor_msgs/msg/LaserScan)
어디에 표시? → frame_id와 TF (그 데이터의 기준 좌표계)
어떻게 표시? → Display 설정

이 셋 중 하나라도 안 맞으면, 토픽이 정상 발행돼도 화면엔 안 나옵니다. (이게 RViz 디버깅의 출발점 — 2편에서 자세히)


2. ROS 2 데이터 흐름과 RViz

RViz는 여러 토픽을 구독하는 Subscriber입니다. 데이터 노드가 발행하면 → 토픽으로 흐르고 → RViz의 해당 Display가 그립니다.

LiDAR Node → /scan → RViz LaserScan Display
Odometry Node → /odom → RViz Odometry Display
TF Broadcaster → /tf → RViz TF Display

 

토픽·메시지 타입·Display의 대응 관계를 표로 정리하면:

발행 데이터 토픽 메시지 타입 RViz Display
LiDAR 거리 /scan sensor_msgs/msg/LaserScan LaserScan
3D 점군 /points sensor_msgs/msg/PointCloud2 PointCloud2
카메라 영상 /image sensor_msgs/msg/Image Image
위치 추정 /odom nav_msgs/msg/Odometry Odometry
이동 경로 /path nav_msgs/msg/Path Path
좌표계 변환 /tf tf2_msgs/msg/TFMessage TF
로봇 모델 /robot_description URDF 문자열 RobotModel

ROS 2 데이터가 RViz에서 시각화되는 흐름을 위에서 아래로 — 데이터 생성, Topic/Message 발행, TF 좌표계 발행, RViz2 실행, Fixed Frame 설정, Display 추가, 로봇 상태 및 센서 데이터 시각화의 7단계 세로 파이프라인

RViz는 토픽을 단순 출력하는 게 아니라 메시지 타입과 좌표계를 해석해 3D에 표시합니다.


3. RViz 화면 구성

영역 역할
Displays 패널 무엇을 표시할지 설정(TF·RobotModel·LaserScan·… Display 추가)
Global Options RViz 전체 기준 설정 — 핵심은 Fixed Frame
3D View 로봇·좌표계·센서·경로가 실제로 그려지는 중심 화면
Views 보는 시점(TopDownOrtho=위에서, Orbit=회전하며)
Tool Bar 이동·선택·목표지정(2D Pose Estimate, 2D Nav Goal 등)
Status 각 Display의 상태·오류(TF 없음, Fixed Frame 오류 등)

💡 RViz를 켜면 가장 먼저 확인할 두 가지:
① Fixed Frame이 올바른가
② Display가 올바른 Topic을 보는가. 이 둘이 안 맞으면 데이터가 발행돼도 안 보입니다.


4. Global Options와 Fixed Frame — RViz의 심장

ROS 2에서는 데이터마다 기준 좌표계가 다릅니다. LiDAR는 laser 기준, Odometry는 odom 기준, 로봇 본체는 base_link 기준으로 발행되죠.

LaserScan  → header.frame_id: laser
Odometry   → header.frame_id: odom, child_frame_id: base_link

 

RViz는 이 데이터들을 한 화면에 함께 그려야 하니, 모두 공통 기준 좌표계로 변환해야 합니다. 그 기준이 Fixed Frame입니다.

대표 Fixed Frame:

Fixed Frame 의미 언제
map 전역 지도 기준 SLAM·Navigation에서 전체 지도 기준 위치
odom 주행 추정 기준 출발 후 상대 이동 확인 (기본 시각화에서 자주 사용)
base_link 로봇 본체 기준 로봇 중심 기준 센서 위치·구조 확인

Fixed Frame을 잘못 설정하면 No transform 오류가 나고 LaserScan·Odometry·Path·RobotModel이 안 보이거나 위치가 어긋납니다.

⚠️ 흔한 함정 ① — Fixed Frame 먼저 — RViz 실습에서 데이터가 안 보이면 십중팔구 Fixed Frame부터 의심하세요. 이동 로봇 기본 시각화에선 보통 odom을 씁니다.


5. Display가 보이기 위한 5가지 조건

Display는 특정 데이터를 화면에 그리는 단위입니다. Display를 추가한다는 건 단순 화면 요소 추가가 아니라,

그 메시지 타입을 해석할 시각화 모듈을 연결하는 것입니다 — 그래서 메시지 타입과 Display가 맞아야 합니다(/scan이 LaserScan 타입이면 LaserScan Display).

Display가 정상 동작하기 위한 조건을 외워두면 RViz 오류의 90%를 잡습니다.

① 토픽이 존재해야 한다
② 메시지가 계속 발행되고 있어야 한다
③ Display 타입과 메시지 타입이 맞아야 한다
④ 메시지의 frame_id가 존재해야 한다
⑤ frame_id ↔ Fixed Frame 사이에 TF가 연결돼 있어야 한다

 

RViz 오류의 상당수는 이 다섯 중 하나가 어긋났을 때 발생합니다. 특히 ⑤ TF 연결이 자주 빠집니다(→ 2편의 TF 편에서 깊게).


1편 정리

  • RViz = ROS 2 데이터를 구독해 3D로 그리는 도구. 로봇을 움직이는 게 아님.
  • 표시의 3요소: 무엇(Topic·Message) / 어디(frame_id·TF) / 어떻게(Display).
  • 흐름: 데이터 발행 → TF 발행 → RViz → Fixed Frame 설정 → Display 추가 → 시각화.
  • Fixed Frame = 모든 데이터를 모으는 공통 기준 좌표계(보통 odom).
  • Display가 보이는 5조건: 토픽 존재 · 발행 지속 · 타입 일치 · frame_id 존재 · TF 연결.

다음 편 예고

2편에서는 RViz의 진짜 핵심인 TF(좌표계 변환) 와 주요 좌표계(map·odom·base_link·laser·camera_link), URDF/RobotModel, 그리고 센서 Display들(LaserScan·Odometry·Path·PointCloud2·Image·IMU·Marker)을 하나씩 보고, "데이터가 안 보일 때" 디버깅 원리까지 정리합니다.

📚 Week2 Day1 전체 목차 (총 6편)

  • 1/6 RViz로 로봇을 눈으로 보다 — 시각화 흐름·Fixed Frame·Display — 이번 글
  • 2/6 RViz 개념 ② — TF·좌표계·URDF·센서 Display·디버깅
  • 3/6 RViz2 실습 — GCP VM 헤드리스 GUI + Publisher + 시각화
  • 4/6 좌표계와 동차 변환 행렬 ① — 좌표계·2D 변환·동차좌표
  • 5/6 좌표계와 동차 변환 행렬 ② — 3D·TF·Quaternion·기구학
  • 6/6 좌표 변환 실습 — Python 변환 + TF Publisher + RViz
저작자표시 (새창열림)

'피지컬AI' 카테고리의 다른 글

[Physical AI W2D1] 4/6 — 좌표계와 동차 변환 행렬 ①: 좌표계·2D 변환·동차좌표  (0) 2026.06.20
[Physical AI W2D1] 2/6 — RViz 개념 ②: TF·좌표계·URDF·센서 Display·디버깅  (0) 2026.06.20
[Physical AI W1D2] 6/6 — ROS 2 패키지 빌드 마스터: Python·C++·colcon  (0) 2026.06.14
[Physical AI W1D2] 5/6 — ROS 2 서비스·액션 구현: 요청/응답과 목표/피드백  (0) 2026.06.14
[Physical AI W1D2] 4/6 — ROS 2 토픽 직접 만들기: Publisher·Subscriber  (0) 2026.06.14
'피지컬AI' 카테고리의 다른 글
  • [Physical AI W2D1] 4/6 — 좌표계와 동차 변환 행렬 ①: 좌표계·2D 변환·동차좌표
  • [Physical AI W2D1] 2/6 — RViz 개념 ②: TF·좌표계·URDF·센서 Display·디버깅
  • [Physical AI W1D2] 6/6 — ROS 2 패키지 빌드 마스터: Python·C++·colcon
  • [Physical AI W1D2] 5/6 — ROS 2 서비스·액션 구현: 요청/응답과 목표/피드백
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (342) N
      • 여러가지 (11) N
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (21)
        • 도커 (2)
        • AWS (19)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (2) N
        • 정보처리기사 (0)
        • 정보보안기사 (1)
        • 네트워크관리사 (1) N
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
      • 피지컬AI (26)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring Boot
    그리디
    ROS2
    역운동학
    FastAPI
    클라우드
    java
    AWS네트워크계층으로읽기
    완전탐색
    SAA
    Redis
    운동학
    rclpy
    피지컬ai
    EC2
    Spring WebFlux
    동차변환행렬
    docker
    자바
    celery
    취업리부트
    항해99
    moveit
    Python
    TF
    AWS
    네트워크
    WebFlux
    로봇팔
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[Physical AI W2D1] 1/6 — RViz로 로봇을 눈으로 보다: 시각화 흐름·Fixed Frame·Display
상단으로

티스토리툴바