Chủ đề ROS 1 qua VPN: theo đúng điểm cuối được công bố
Đăng ký master của ROS 1 không mang dữ liệu chủ đề. Hãy đọc URI nút được công bố, làm cho địa chỉ đó có thể định tuyến, rồi cho phép cổng của nhà xuất bản.
Máy trạm của bạn tới được master của ROS 1 qua đường hầm mà danh sách chủ đề vẫn trống. Mẫu này thường gặp vì đăng ký master và vận chuyển chủ đề là hai cuộc trò chuyện khác nhau, và chỉ cuộc thứ nhất đi qua master. Danh sách kiểm tra dưới đây đi qua cuộc trò chuyện thứ hai: điểm cuối mà nhà xuất bản công bố, địa chỉ mà người đăng ký phải tới được, và quyền cho phép cặp đôi nói chuyện. Mọi thứ ở đây chỉ áp dụng cho ROS 1 cũ, mà cửa sổ hỗ trợ Noetic đã kết thúc vào tháng Năm năm 2025.
Bước 1: chứng minh kết nối master không phải kết nối chủ đề
Hãy bắt đầu bằng việc tách cái gì hoạt động khỏi cái gì không. Một rostopic list thành công chứng minh shell của bạn tới được cổng XMLRPC của master và master biết các chủ đề; nó không nói gì về việc người đăng ký có tới được nhà xuất bản hay không. Ba lệnh dưới đây làm cho sự khác biệt đó hiện rõ, và tất cả đều chỉ để đọc.
echo "$ROS_MASTER_URI"
rostopic list
rostopic info /chatter
Đầu ra của rostopic info nêu URI nút của nhà xuất bản, đó là một địa chỉ XMLRPC trên máy chủ của nhà xuất bản. Đó chính là địa chỉ mà người đăng ký của bạn sẽ gọi tiếp theo, nên nó phải tới được từ bất cứ đâu người đăng ký chạy. Nếu nó trỏ tới một giao diện chỉ tồn tại trên LAN của chính robot, việc tìm kiếm master thành công và dữ liệu không bao giờ tới.
Bước 2: đọc điểm cuối được công bố từ chính nút
ROS 1 chọn danh tính máy chủ được công bố từ ROS_IP hoặc ROS_HOSTNAME khi một trong hai được đặt, và ngược lại quay về phân giải tên của chính máy chủ. Hãy kiểm tra môi trường của tiến trình thực sự được khởi chạy, vì một unit systemd, một container hoặc một terminal thứ hai có thể mang giá trị khác với shell nơi bài kiểm tra của bạn đã chạy.
echo "$ROS_IP" "$ROS_HOSTNAME"
rosnode info /talker
getent hosts robot-host
Việc công bố tên máy chủ chỉ hoạt động nếu mọi đối tác phân giải tên đó thành địa chỉ tới được như mong muốn. Nếu tên đó chỉ phân giải được bên trong mạng của chính robot, máy trạm ở phía bên kia đường hầm không có cách nào dùng nó, và một VPN không đẩy hậu tố DNS nào sẽ làm sự lệch nhau tệ hơn. Khi cấu trúc mạng đã được định tuyến, đặt ROS_IP thành địa chỉ đường hầm là thay đổi nhỏ hơn. Dù bạn chọn gì, hãy ghi lại cho cả hai đầu, vì nhà xuất bản và người đăng ký không thống nhất về danh tính sẽ thương lượng rồi không kết nối được.
Dừng ở đây nếu URI được công bố dùng địa chỉ mà không đối tác nào định tuyến tới được. Không có công việc tường lửa nào sửa được một tên phân giải thành giao diện sai.
Bước 3: làm cho địa chỉ được công bố phân giải được và được định tuyến
Có URI trong tay, hãy kiểm tra khả năng tới được từ máy chủ của người đăng ký thay vì từ robot. Cổng TCPROS được chọn trong quá trình thương lượng, nên bài kiểm tra sớm hữu ích là cổng XMLRPC và bài kiểm tra muộn hữu ích là socket đã thiết lập. Một tuyến chỉ tồn tại theo một chiều là lỗi thường gặp trên VPN định tuyến, và đường về quan trọng không kém đường đi.
ip route get 10.70.0.2
nc -vz 10.70.0.2 33911
ss -tnp dst 10.70.0.2
Giao diện TUN được định tuyến mang những cuộc trò chuyện IP này mà không mở rộng phân đoạn Ethernet của robot, điều mà một người vận hành từ xa thường muốn. Nếu thứ gì đó trong ngăn xếp lại phụ thuộc vào quảng bá hoặc multicast, yêu cầu đó phải được đánh giá riêng; việc chuyển đường hầm sang TAP để thỏa mãn một công cụ sẽ mở rộng mạng cho mọi người tham gia.
Dừng ở đây nếu thiếu tuyến hoặc đường về. Một nhà xuất bản trả lời trên máy chủ của chính nó nhưng không tới được từ máy trạm có vấn đề định tuyến, không phải vấn đề ROS.
Bước 4: cho phép cuộc trò chuyện giữa các đối tác và quan sát một chủ đề
Chỉ mở những cổng mà cuộc trò chuyện đã thương lượng cần, và giới hạn mỗi quy tắc cho những người tham gia đã công bố. Trình lắng nghe của master không phải trạm chuyển tiếp cho tải trọng chủ đề, nên chỉ cho phép nó sẽ để điểm cuối của nhà xuất bản đóng. Giữ các trình lắng nghe ROS ở ranh giới VPN riêng tư thay vì phơi chúng ra internet công cộng.
rostopic hz /chatter
rostopic echo -n1 /chatter
rosnode ping /talker
Quan sát một chủ đề vô hại từ nhà xuất bản thật tới người đăng ký thật và xác nhận cả điểm cuối được công bố lẫn đường phản hồi. Một thông điệp chứng minh đường đi hoạt động; một tốc độ ổn định chứng minh nó vẫn mở. Giữ việc điều khiển cơ cấu chấp hành và các kiểm tra an toàn ra ngoài bài kiểm tra chỉ về mạng này, vì một chủ đề hoạt động không chứng nhận một robot hoạt động. Ghi lại phiên bản ROS và cặp điểm cuối bạn đã quan sát, để người tiếp theo có thể phân biệt thay đổi cấu trúc mạng với thoái triển.
Danh sách kiểm tra hoàn tất khi URI được công bố tới được từ người đăng ký, cổng đã thương lượng chỉ mở cho đối tác đó, một chủ đề đã công bố đang chảy, và các giá trị môi trường được ghi cho cả hai máy chủ. ROS 1 cũ sẽ không nhận bản sửa nào trong lĩnh vực này, nên bản ghi là phần tiếp tục hoạt động sau khi con người thay đổi.