Atlas Robotics
Chuẩn & Giao thứcCơ bản

REP là gì — cách ROS2 chuẩn hoá quy ước qua REP

Atlasbot · 23/8/2026 · 11 phút đọc

REP là gì — cách ROS2 chuẩn hoá quy ước qua REP
REP 103 chuẩn hoá đơn vị/toạ độ, REP 105 chuẩn hoá tên frame cho robot di động

Hai bài trước đã bàn chuẩn an toàn ISO cho robot công nghiệp — những tài liệu chính thức, trả phí, do tổ chức tiêu chuẩn hoá quốc tế ban hành. REP (ROS Enhancement Proposals) là một dạng chuẩn hoá khác hẳn: mở, miễn phí, do chính cộng đồng ROS soạn thảo và công khai trên GitHub.

Khái niệm chính

REP là tài liệu đề xuất và ghi lại một quy ước kỹ thuật cụ thể trong hệ sinh thái ROS — tương tự PEP của Python hay RFC của IETF. Hai REP nền tảng nhất, gần như mọi package ROS2 xử lý dữ liệu không gian đều tuân theo:

  • REP 103 — Standard Units of Measure and Coordinate Conventions — quy định đơn vị chuẩn (mét cho khoảng cách, radian cho góc, giây cho thời gian) và quy ước hệ trục toạ độ (X hướng trước, Y hướng trái, Z hướng lên)
  • REP 105 — Coordinate Frames for Mobile Platforms — quy định tên và ý nghĩa các frame toạ độ chuẩn cho robot di động (map, odom, base_link) — chính là nền tảng của TF tree đã học ở bài TF Tree

Nguyên lý hoạt động

Không có quy ước chung, mỗi package do một tác giả khác nhau viết có thể tự chọn đơn vị khác nhau (mét hay feet, radian hay độ), hoặc đặt tên frame khác nhau cho cùng một khái niệm (frame gốc bản đồ có thể gọi là map, world, hay global...) — hậu quả là hai package hoàn toàn đúng về mặt kỹ thuật riêng lẻ vẫn không ghép được với nhau nếu không "dịch" thủ công giữa các quy ước khác nhau. REP giải quyết vấn đề này không phải bằng ép buộc pháp lý (khác ISO, không có tổ chức nào "phạt" nếu không tuân theo), mà bằng đồng thuận cộng đồng — càng nhiều package tuân theo REP 103/105, package mới viết theo đúng REP càng dễ tương thích với hệ sinh thái sẵn có.

Tóm lại: REP không phải "luật bắt buộc" như ISO 10218 — nó là quy ước tự nguyện, nhưng hiệu ứng mạng (network effect) khiến việc tuân theo gần như bắt buộc trên thực tế: một package không theo REP 105 (đặt tên frame tuỳ ý) sẽ không tự động hoạt động với các package chuẩn khác (Nav2, robot_localization, RViz2) vốn đều giả định đúng tên frame theo REP 105.

Kiến thức kỹ thuật

Thông số

REPChủ đềỨng dụng trực tiếp
REP 103Đơn vị đo và quy ước trục toạ độMọi message chứa khoảng cách/góc (geometry_msgs, sensor_msgs)
REP 105Tên và quan hệ các frame toạ độ robot di độngTF tree, robot_localization, AMCL, Nav2
REP 120Frame toạ độ cho robot humanoid (mở rộng từ REP 103/105)Robot 2 chân, tay máy phức tạp nhiều khớp
REP 199Frame toạ độ cho tay máy công nghiệp nối tiếpRobot arm công nghiệp cố định

Toàn bộ danh sách REP chính thức, còn hiệu lực hay đã rút lại, được lưu trữ công khai tại reps.openrobotics.org và mã nguồn tại github.com/ros-infrastructure/rep — bất kỳ ai cũng đọc được miễn phí, khác hẳn các chuẩn ISO phải mua.

Ứng dụng thực tế

Chuỗi TF map → odom → base_link đã học xuyên suốt các bài AMR/AGV và ROS2 Navigation trong blog này chính là hiện thực hoá trực tiếp của REP 105 — không phải quy ước tự nghĩ ra của riêng dự án nào, mà là chuẩn chung toàn cộng đồng ROS. Đây là lý do khi cấu hình robot_localization (đã học ở bài Hợp nhất Odometry), việc đặt đúng world_frame: odom hay world_frame: map không phải lựa chọn tuỳ ý — nó phải khớp đúng ý nghĩa mà REP 105 đã định nghĩa cho từng frame, để các package khác (Nav2, AMCL) hiểu đúng dữ liệu.

Ví dụ thực tế

# Kiểm tra 1 package có tuân theo REP 105 hay không — cách nhanh nhất
# là xem TF tree publish ra có đúng tên frame chuẩn
ros2 run tf2_tools view_frames
# Kỳ vọng thấy: map -> odom -> base_link -> (các frame cảm biến)
# Nếu thấy tên khác (VD: "world" thay vì "map", "robot_base" thay vì
# "base_link") → package đó không theo REP 105, cần cấu hình lại hoặc
# thêm remap trước khi ghép với Nav2/AMCL chuẩn
Hậu quả thực tế nếu không theo REP 105: cắm 1 package LiDAR bên thứ ba
publish frame tên "laser_frame" (đúng) nhưng lại publish frame gốc robot
là "robot_center" thay vì "base_link" chuẩn — Nav2 và robot_localization
sẽ không tự động tìm thấy transform cần thiết, báo lỗi "could not
transform" (đã học ở bài TF Tree) dù cả 2 package hoàn toàn đúng riêng lẻ

Lỗi thường gặp

  • Tự đặt tên frame tuỳ ý thay vì theo REP 105 — như ví dụ trên, phá vỡ khả năng tương thích với Nav2/AMCL/robot_localization mà không có lỗi cú pháp nào cảnh báo trước.
  • Nhầm REP là "luật bắt buộc" giống ISO — REP là quy ước tự nguyện, không có cơ chế ép buộc pháp lý, nhưng bỏ qua nó đồng nghĩa tự loại mình khỏi hệ sinh thái tương thích.
  • Trộn đơn vị đo không theo REP 103 — publish khoảng cách bằng cm hoặc góc bằng độ thay vì mét/radian chuẩn khiến các phép tính toán học (ma trận biến đổi, tích phân) trong package khác cho kết quả sai mà không báo lỗi rõ ràng.
  • Không kiểm tra REP liên quan trước khi thiết kế frame mới cho robot đặc thù (VD: humanoid, tay máy) — REP 120/199 đã mở rộng REP 103/105 cho các trường hợp phức tạp hơn, nên tham khảo trước khi tự nghĩ ra quy ước riêng.

Kết luận

REP là cách cộng đồng ROS tự chuẩn hoá quy ước mà không cần một tổ chức tiêu chuẩn hoá chính thức như ISO — mở, miễn phí, và hiệu quả nhờ hiệu ứng mạng: càng nhiều package tuân theo, package mới càng có động lực tuân theo để tương thích. REP 103 và REP 105 là nền tảng cho gần như mọi hệ thống ROS2 xử lý dữ liệu không gian. Bài cuối cùng của chuyên mục Chuẩn & Giao thức đi vào IEC 61508 và khái niệm Safety Integrity Level (SIL) — một cách tiếp cận an toàn khác, đo lường bằng xác suất thất bại thay vì yêu cầu thiết kế cụ thể.

REP là gì — cách ROS2 chuẩn hoá quy ước qua REP — Atlasbot