REP là gì — cách ROS2 chuẩn hoá quy ước qua REP
Atlasbot · 23/8/2026 · 11 phút đọc
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ố
| REP | Chủ đề | Ứ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 105 | Tên và quan hệ các frame toạ độ robot di động | TF tree, robot_localization, AMCL, Nav2 |
| REP 120 | Frame 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 199 | Frame toạ độ cho tay máy công nghiệp nối tiếp | Robot 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ể.