เวิร์กสเตชันของคุณเข้าถึง 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 ของหุ่นยนต์ ซึ่งโดยปกติเป็นสิ่งที่ผู้ควบคุมระยะไกลต้องการ หากมีบางอย่างในสแตกพึ่งพาการกระจายสัญญาณหรือ multicast แทน ข้อกำหนดนั้นต้องประเมินแยกต่างหาก การเปลี่ยนอุโมงค์เป็น TAP เพื่อตอบสนองเครื่องมือเพียงอย่างเดียวจะขยายเครือข่ายให้ผู้เข้าร่วมทุกคน

หยุดตรงนี้หากเส้นทางหรือเส้นทางขากลับหายไป ผู้เผยแพร่ที่ตอบบนโฮสต์ของตัวเองแต่เข้าถึงไม่ได้จากเวิร์กสเตชันมีปัญหาเรื่องการกำหนดเส้นทาง ไม่ใช่ปัญหา ROS

ขั้นที่ 4: อนุญาตบทสนทนาระหว่างเพียร์และเฝ้าดูหัวข้อหนึ่ง

เปิดเฉพาะพอร์ตที่บทสนทนาที่เจรจากันต้องการ และจำกัดแต่ละกฎไว้ที่ผู้เข้าร่วมที่ประกาศไว้เท่านั้น ตัวรับฟังของ master ไม่ใช่ตัวส่งต่อเพย์โหลดของหัวข้อ ดังนั้นการอนุญาตเฉพาะตัวรับฟังนั้นทำให้จุดปลายทางของผู้เผยแพร่ยังปิดอยู่ แยกตัวรับฟังของ ROS ไว้ที่ชายแดนของ VPN ส่วนตัวแทนที่จะเปิดเผยต่ออินเทอร์เน็ตสาธารณะ

rostopic hz /chatter
rostopic echo -n1 /chatter
rosnode ping /talker

เฝ้าดูหัวข้อที่ไม่เป็นอันตรายหนึ่งหัวข้อจากผู้เผยแพร่จริงไปยังผู้บอกรับจริง และยืนยันทั้งจุดปลายทางที่ประกาศและเส้นทางตอบกลับ ข้อความเดียวพิสูจน์ว่าเส้นทางทำงานได้ อัตราที่สม่ำเสมอพิสูจน์ว่าเส้นทางยังเปิดอยู่ แยกการควบคุมแอคชูเอเตอร์และการตรวจสอบความปลอดภัยออกจากการทดสอบที่เกี่ยวกับเครือข่ายเท่านั้นนี้ เพราะหัวข้อที่ทำงานไม่ได้ยืนยันว่าหุ่นยนต์ทำงานได้ บันทึกเวอร์ชัน ROS และคู่จุดปลายทางที่คุณสังเกตเห็น เพื่อให้คนถัดไปแยกความแตกต่างระหว่างการเปลี่ยนโครงสร้างเครือข่ายกับการถดถอยได้

เช็กลิสต์เสร็จสมบูรณ์เมื่อ URI ที่ประกาศเข้าถึงได้จากผู้บอกรับ พอร์ตที่เจรจากันเปิดเฉพาะเพียร์นั้น หัวข้อที่ประกาศหนึ่งหัวข้อไหลเวียน และค่าสภาพแวดล้อมถูกบันทึกไว้สำหรับทั้งสองโฮสต์ ROS 1 รุ่นเก่าจะไม่ได้รับการแก้ไขในส่วนนี้ ดังนั้นบันทึกคือส่วนที่จะยังทำงานต่อไปหลังจากคนเปลี่ยน

บทความที่เกี่ยวข้อง