Cerulion: runtime robot ROS 2 viết bằng Rust, ghi và phát lại lỗi

Phần mềm13 tháng 11, 2026·4 phút đọc

Cerulion là runtime robot tương thích ROS 2 viết bằng Rust, dùng bộ nhớ chia sẻ để giảm độ trễ giữa các tiến trình và cho phép ghi lại rồi phát lại chính xác để tái hiện lỗi. Dự án nhắm giải quyết bài toán debug các hệ thống robot đa tiến trình, vốn rất khó tái hiện khi có sự cố trên phần cứng thực.

Cerulion: runtime robot ROS 2 viết bằng Rust, ghi và phát lại lỗi

Giấy phép AGPL-3.0-onlyGiấy phép AGPL-3.0-only

Cerulion vừa được giới thiệu trên Hacker News: một runtime (môi trường thực thi) cho robot, tương thích ROS 2, viết bằng Rust. Điểm nhấn là khả năng ghi lại toàn bộ dữ liệu và tiến trình thực thi rồi phát lại chính xác để tái hiện lỗi, đồng thời giảm mạnh độ trễ giao tiếp giữa các tiến trình mà không phải hy sinh việc tách tiến trình.

Dự án do Lakshay Sharma và Raveen Kariyawasam phát triển, thuộc Cerulion Inc. (công ty trong chương trình YC S24). Phiên bản hiện tại là 2.0.0.

Vấn đề mà Cerulion nhắm tới

Theo chia sẻ của tác giả, trong thời gian làm nghiên cứu tiến sĩ tại MIT về tự hành trên địa hình, nhóm thường xuyên gặp độ trễ giữa các tiến trình (IPC) khi chạy ROS với 2 lidar và 6 camera. Cơ chế "loan message" (mượn vùng nhớ) của ROS đòi hỏi kiểu dữ liệu POD, khiến các kiểu chuẩn như Image hay PointCloud2 không dùng được.

Giải pháp quen thuộc là gộp các luồng nóng vào một tiến trình duy nhất — chạy được nhưng rất khó debug. Các lỗi kiểu "heisenbug" (lỗi biến mất khi quan sát) xuất hiện mà không có cách tái hiện thứ tự gọi callback hay thứ tự xen kẽ giữa các luồng.

Cuối cùng, dữ liệu quý từ những lần chạy lỗi trên robot rất khó dùng lại hiệu quả nếu không có khả năng tái hiện tất định (deterministic reproducibility).

Cách Cerulion giải quyết

Cerulion ghi lại cả nội dung message lẫn dấu vết bộ lập lịch (scheduler trace) và các lần đọc đầu vào vào file MCAP chuẩn. Lệnh cerulion bag play --resim all --verify sẽ chạy lại mã của node theo đúng lịch đã ghi và so sánh từng byte:

  • Exit 0: khớp hoàn toàn
  • Exit 1: chỉ ra topic/frame đầu tiên lệch
  • Exit 6: lịch thực thi lệch
  • Tùy chọn --report cho kết quả dạng máy đọc được để tích hợp vào CI

Quy trình cài đặt và kiểm chứng với CerulionQuy trình cài đặt và kiểm chứng với Cerulion

Về hiệu năng, trên một máy desktop Linux x86-64 (Intel Core Ultra 9 285K, 24 nhân, bật ghi dữ liệu, tải danh nghĩa 100 Hz, đo ngày 16/09/2026), vòng truyền 1 MiB đạt trung vị 4,08 µs (p99 là 7,38 µs), so với 10.952 µs trên ROS 2 Jazzy mặc định — nhanh hơn khoảng 2.700 lần. Theo tác giả, p50 và p99 giữ mức phẳng từ 64 B đến 16 MiB.

Tương thích ROS 2 mà không cần sửa mã

Lớp rmw_cerulion hỗ trợ các bản ROS 2 Foxy, Humble, Jazzy và Lyrical, cho phép chạy node và file launch ROS 2 không chỉnh sửa trong cùng đồ thị với node Cerulion gốc. Cơ chế LD_PRELOAD cấp vùng nhớ mượn qua std::vector/std::string.

Lệnh cerulion ros2 run/launch chạy workspace ROS 2 hiện có mà không cần cấu hình thêm, còn cerulion ros2 attach gắn vào robot ROS 2 đang hoạt động để nối các topic của nó.

Các tính năng chính

  • Lập lịch theo đồ thị phụ thuộc: node chạy theo cấp phụ thuộc, kích hoạt theo chu kỳ/dữ liệu/đồng bộ/sự kiện, có deadline I/O, backpressure và tự động profiling.
  • Flashback: "dashcam" cho robot, giữ khoảng 30 giây log và nội dung message gần nhất trong bộ nhớ, tự lưu khi tiến trình chết hoặc topic bị treo.
  • Kết nối từ xa: đăng nhập cùng một tài khoản trên robot và máy tính là tự tìm thấy nhau, không cần địa chỉ IP. Dùng Iroh để xuyên NAT hoặc relay qua WAN, mDNS trong LAN, truyền bằng QUIC.
  • Bộ công cụ cho coding agent (MCP): cerulion doctor chẩn đoán lỗi build/runtime và gợi ý cách sửa; Hindsight là MCP đang ở giai đoạn early access cho phép agent phân tích các bản ghi bag.

Nền tảng và giấy phép

Cerulion chạy trên Linux (x86_64/ARM64, glibc 2.31+, Ubuntu 20.04 trở lên), macOS (Intel và Apple Silicon) và Android (JNI). CLI cần một tài khoản miễn phí để ghép nối thiết bị. Dự án theo giấy phép AGPL-3.0-only, có bản thương mại; một số crate phía client dùng MIT hoặc Apache-2.0.

Góc nhìn

Với các nhóm kỹ sư robot ở Việt Nam, giá trị thực tế lớn nhất nằm ở khả năng biến một lần chạy lỗi trên robot thành ca kiểm thử hồi quy (regression test) dùng lại được. Thay vì cố tái hiện lỗi bằng tay, có thể đưa bản ghi vào CI và để mỗi lần thay đổi mã phải đối chiếu với hành vi đã ghi. Đây là điều mà các dự án dùng ROS 2 hiện nay thường thiếu.

Việc tương thích ngược với ROS 2 và chạy được với node, file launch có sẵn nghĩa là không cần viết lại toàn bộ hệ thống để thử nghiệm. Tuy nhiên, cần lưu ý các con số hiệu năng chỉ đo trên một máy duy nhất — tác giả cũng nói rõ đây không phải bảo đảm chung, nên cần đo lại trên chính phần cứng và cấu hình của mình trước khi đưa vào sử dụng.

Nguồn: github.com · Quy trình biên tập

Chia sẻ:FacebookX