VPN арқылы ROS 1 тақырыптары: жарияланған соңғы нүктені ұстаныңыз
ROS 1 master тіркеуі тақырып деректерін тасымалдамайды. Жарияланған түйін URI-ін оқып, сол мекенжайды маршрутталатын етіп, содан кейін жариялаушының портын рұқсат етіңіз.
Жұмыс станцияңыз түнел арқылы ROS 1 master-іне жетеді, бірақ тақырыптар тізімі әлі де бос көрінеді. Бұл үлгі жиі кездеседі, себебі master тіркеуі мен тақырып тасымалы екі бөлек әңгіме, және master арқылы тек біріншісі өтеді. Төмендегі тексеру тізімі екінші әңгімені жүргізеді: жариялаушы хабарлайтын соңғы нүкте, жазылушы жетуі тиіс мекенжай және жұпқа сөйлеуге мүмкіндік беретін рұқсат. Мұндағының бәрі тек ескі ROS 1-ге қатысты, оның Noetic қолдау терезесі 2025 жылдың мамырында аяқталды.
1-қадам: master қосылымы тақырып қосылымы емес екенін дәлелдеңіз
Ненің жұмыс істейтінін ненің істемейтінінен ажыратудан бастаңыз. Сәтті rostopic list shell-іңіз master-дің XMLRPC портына жете алатынын және master тақырыптарды білетінін дәлелдейді; ол жазылушының жариялаушыға жете алатыны туралы ештеңе айтпайды. Төмендегі үш команда бұл айырмашылықты көрнекі етеді және барлығы тек оқуға арналған.
echo "$ROS_MASTER_URI"
rostopic list
rostopic info /chatter
rostopic info шығысы жариялаушының түйін URI-ін атайды, ол жариялаушының хостындағы XMLRPC мекенжайы. Бұл мекенжайды жазылушыңыз келесі шақырады, сондықтан ол жазылушы жұмыс істейтін кез келген жерден қолжетімді болуы керек. Егер ол тек роботтың өз LAN-ында бар интерфейске сілтесе, master іздеуі сәтті аяқталады, ал деректер ешқашан жетпейді.
2-қадам: жарияланған соңғы нүктені түйіннің өзінен оқыңыз
ROS 1 өзінің жарияланған хост сәйкестігін ROS_IP немесе ROS_HOSTNAME ішінен таңдайды, егер олардың біреуі орнатылған болса, әйтпесе хосттың өзіндік атауын шешуге қайтады. Іс жүзінде іске қосылған процестің ортасын тексеріңіз, өйткені systemd бірлігі, контейнер немесе екінші терминал сынағыңыз жұмыс істеген shell-ден өзгеше мән алып жүруі мүмкін.
echo "$ROS_IP" "$ROS_HOSTNAME"
rosnode info /talker
getent hosts robot-host
Хост атауын жариялау әр серіктес сол атауды көзделген қолжетімді мекенжайға шешкенде ғана жұмыс істейді. Егер бұл атау тек роботтың өз желісінің ішінде шешілсе, түнелдің арғы жағындағы жұмыс станциясының оны пайдалануға жолы жоқ, ал DNS жұрнағын итермейтін VPN сәйкессіздікті одан әрі нашарлатады. Топология маршрутталған кезде ROS_IP-ті түнел мекенжайына қою кішірек өзгеріс. Қайсысын таңдасаңыз да, оны екі ұшына жазып қойыңыз, өйткені сәйкестік туралы келіспейтін жариялаушы мен жазылушы келіссөз жүргізіп, содан кейін қосыла алмайды.
Егер жарияланған URI ешбір серіктес маршруттай алмайтын мекенжайды пайдаланса, осында тоқтаңыз. Қате интерфейске шешілетін атауды ешқандай firewall жұмысы түзетпейді.
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 бұл салада түзетулер алмайды, сондықтан жазба — адамдар ауысқаннан кейін де жұмысын жалғастыратын бөлік.