Θέματα ROS 1 μέσω VPN: ακολουθήστε το διαφημιζόμενο τελικό σημείο
Η εγγραφή master του ROS 1 δεν μεταφέρει δεδομένα θεμάτων. Διαβάστε το διαφημιζόμενο URI του κόμβου, κάντε αυτή τη διεύθυνση δρομολογήσιμη και μετά επιτρέψτε τη θύρα του εκδότη.
Ο σταθμός εργασίας σας φτάνει στον master του ROS 1 μέσω της σήραγγας και εξακολουθεί να δείχνει άδεια λίστα θεμάτων. Αυτό το μοτίβο είναι συνηθισμένο επειδή η εγγραφή στον master και η μεταφορά θεμάτων είναι δύο διαφορετικές συνομιλίες, και μόνο η πρώτη περνά από τον master. Η λίστα ελέγχου παρακάτω περπατά τη δεύτερη συνομιλία: το τελικό σημείο που διαφημίζει ένας εκδότης, τη διεύθυνση που πρέπει να μπορεί να φτάσει ένας συνδρομητής και την άδεια που επιτρέπει στο ζεύγος να μιλήσει. Όλα εδώ αφορούν μόνο το παλιό ROS 1, του οποίου το παράθυρο υποστήριξης Noetic έληξε τον Μάιο του 2025.
Βήμα 1: αποδείξτε ότι η σύνδεση με τον master δεν είναι η σύνδεση με το θέμα
Ξεκινήστε χωρίζοντας αυτό που λειτουργεί από αυτό που δεν λειτουργεί. Ένα επιτυχημένο rostopic list αποδεικνύει ότι το κέλυφός σας φτάνει στη θύρα XMLRPC του master και ότι ο master γνωρίζει θέματα· δεν λέει τίποτα για το αν ένας συνδρομητής μπορεί να φτάσει στον εκδότη. Οι τρεις εντολές παρακάτω κάνουν τη διάκριση ορατή, και όλες είναι μόνο για ανάγνωση.
echo "$ROS_MASTER_URI"
rostopic list
rostopic info /chatter
Η έξοδος του rostopic info ονομάζει το URI κόμβου του εκδότη, που είναι μια διεύθυνση XMLRPC στον κεντρικό υπολογιστή του εκδότη. Αυτή η διεύθυνση είναι εκείνη που θα καλέσει στη συνέχεια ο συνδρομητής σας, οπότε πρέπει να είναι προσβάσιμη από όπου κι αν εκτελείται ο συνδρομητής. Αν δείχνει σε μια διεπαφή που υπάρχει μόνο στο δικό του LAN του ρομπότ, η αναζήτηση στον master πετυχαίνει και τα δεδομένα δεν φτάνουν ποτέ.
Βήμα 2: διαβάστε το διαφημιζόμενο τελικό σημείο από τον ίδιο τον κόμβο
Το ROS 1 επιλέγει τη διαφημιζόμενη ταυτότητα κεντρικού υπολογιστή από το ROS_IP ή το ROS_HOSTNAME όταν ένα από αυτά έχει οριστεί, και διαφορετικά επιστρέφει στην επίλυση ονομάτων του ίδιου του κεντρικού υπολογιστή. Εξετάστε το περιβάλλον της διεργασίας που ξεκίνησε πραγματικά, γιατί μια μονάδα systemd, ένα κοντέινερ ή ένα δεύτερο τερματικό μπορεί να φέρει διαφορετική τιμή από το κέλυφος όπου λειτούργησε η δοκιμή σας.
echo "$ROS_IP" "$ROS_HOSTNAME"
rosnode info /talker
getent hosts robot-host
Η διαφήμιση ονόματος κεντρικού υπολογιστή λειτουργεί μόνο αν κάθε ομότιμος επιλύει αυτό το όνομα στη σκοπούμενη προσβάσιμη διεύθυνση. Αν αυτό το όνομα επιλύεται μόνο μέσα στο δικό του δίκτυο του ρομπότ, ένας σταθμός εργασίας στην άλλη πλευρά της σήραγγας δεν έχει τρόπο να το χρησιμοποιήσει, και ένα VPN που δεν προωθεί κανένα επίθεμα DNS κάνει την αναντιστοιχία χειρότερη. Η ρύθμιση του ROS_IP στη διεύθυνση της σήραγγας είναι η μικρότερη αλλαγή όταν η τοπολογία είναι δρομολογημένη. Όποιο κι αν επιλέξετε, καταγράψτε το για τα δύο άκρα, γιατί ένας εκδότης και ένας συνδρομητής που διαφωνούν για την ταυτότητα θα διαπραγματευτούν και μετά δεν θα μπορέσουν να συνδεθούν.
Σταματήστε εδώ αν το διαφημιζόμενο URI χρησιμοποιεί διεύθυνση στην οποία κανένας ομότιμος δεν μπορεί να δρομολογήσει. Καμία ποσότητα δουλειάς στο τείχος προστασίας δεν θα διορθώσει ένα όνομα που επιλύεται στη λάθος διεπαφή.
Βήμα 3: κάντε τη διαφημιζόμενη διεύθυνση επιλύσιμη και δρομολογημένη
Με το URI στο χέρι, δοκιμάστε την προσβασιμότητα από τον κεντρικό υπολογιστή του συνδρομητή και όχι από το ρομπότ. Η θύρα TCPROS επιλέγεται κατά τη διαπραγμάτευση, οπότε η χρήσιμη πρώιμη δοκιμή είναι η θύρα XMLRPC και η χρήσιμη μεταγενέστερη δοκιμή είναι ο εγκατεστημένος υποδοχέας. Μια διαδρομή που υπάρχει μόνο προς μία κατεύθυνση είναι συνηθισμένη αστοχία σε δρομολογημένα VPN, και η διαδρομή επιστροφής μετράει όσο και η διαδρομή προς τα εμπρός.
ip route get 10.70.0.2
nc -vz 10.70.0.2 33911
ss -tnp dst 10.70.0.2
Μια δρομολογημένη διεπαφή TUN μεταφέρει αυτές τις συνομιλίες IP χωρίς να επεκτείνει το τμήμα Ethernet του ρομπότ, που είναι συνήθως αυτό που θέλει ένας απομακρυσμένος χειριστής. Αν κάτι στη στοίβα εξαρτάται αντ’ αυτού από broadcast ή multicast, αυτή η απαίτηση πρέπει να αξιολογηθεί χωριστά· η μετατροπή της σήραγγας σε TAP για να ικανοποιηθεί ένα εργαλείο διευρύνει το δίκτυο για κάθε συμμετέχοντα.
Σταματήστε εδώ αν λείπει η διαδρομή ή η διαδρομή επιστροφής. Ένας εκδότης που απαντά στον δικό του κεντρικό υπολογιστή αλλά δεν είναι προσβάσιμος από τον σταθμό εργασίας έχει πρόβλημα δρομολόγησης, όχι πρόβλημα ROS.
Βήμα 4: επιτρέψτε τη συνομιλία των ομοτίμων και παρακολουθήστε ένα θέμα
Ανοίξτε μόνο τις θύρες που χρειάζεται η διαπραγματευμένη συνομιλία και περιορίστε κάθε κανόνα στους δηλωμένους συμμετέχοντες. Ο ακροατής του master δεν είναι αναμεταδότης για το ωφέλιμο φορτίο των θεμάτων, οπότε η άδεια μόνο σε αυτόν αφήνει το τελικό σημείο του εκδότη κλειστό. Κρατήστε τους ακροατές του ROS στο όριο του ιδιωτικού VPN αντί να τους εκθέτετε στο δημόσιο διαδίκτυο.
rostopic hz /chatter
rostopic echo -n1 /chatter
rosnode ping /talker
Παρακολουθήστε ένα ακίνδυνο θέμα από τον πραγματικό εκδότη στον πραγματικό συνδρομητή και επιβεβαιώστε και το διαφημιζόμενο τελικό σημείο και τη διαδρομή απάντησης. Ένα μόνο μήνυμα αποδεικνύει ότι η διαδρομή λειτουργεί· ένας σταθερός ρυθμός αποδεικνύει ότι μένει ανοιχτή. Κρατήστε τον έλεγχο των ενεργοποιητών και τους ελέγχους ασφαλείας έξω από αυτή τη δοκιμή που αφορά μόνο το δίκτυο, γιατί ένα θέμα που λειτουργεί δεν πιστοποιεί ένα ρομπότ που λειτουργεί. Καταγράψτε την έκδοση του ROS και το ζεύγος τελικών σημείων που παρατηρήσατε, ώστε ο επόμενος άνθρωπος να ξεχωρίζει μια αλλαγή τοπολογίας από μια παλινδρόμηση.
Η λίστα ελέγχου ολοκληρώνεται όταν το διαφημιζόμενο URI είναι προσβάσιμο από τον συνδρομητή, η διαπραγματευμένη θύρα είναι ανοιχτή μόνο για αυτόν τον ομότιμο, ένα δηλωμένο θέμα ρέει και οι τιμές περιβάλλοντος είναι γραμμένες για τους δύο κεντρικούς υπολογιστές. Το παλιό ROS 1 δεν θα λάβει διορθώσεις σε αυτόν τον τομέα, οπότε η καταγραφή είναι το μέρος που συνεχίζει να λειτουργεί αφού αλλάξουν οι άνθρωποι.