ROS 2 праз VPN: выяўленне — не шлях даных
Тое, што выяўленне знаходзіць суседзяў, не даказвае дастаўку карысных даных. Праверце RMW, абвешчаныя канчатковыя пункты і адну нагрузку, перш чым мяняць DDS або дадаваць маршрутызатар.
Два вузлы ROS 2 на процілеглых канцах VPN могуць пералічваць тэмы адно аднаго і ўсё ж не даставіць ніводнага паведамлення. Выяўленне і карыстальніцкія даныя — гэта асобныя абмены з асобнымі шляхамі, а сервер выяўлення не перадае карысную нагрузку. Праверыць адно і выказаць здагадку пра другое — так каманды мяняюць прамежкавае ПЗ, калі тунель проста ніколі не перавозіў даныя. Інструкцыя ніжэй раздзяляе два вынікі, перш чым нешта мяняць.
Што насамрэч пераносіць сервер выяўлення
У Fast DDS Discovery Server распаўсюджвае звесткі пра канчатковыя пункты: хто публікуе, хто падпісваецца і якога QoS чакае кожны. Калі суседзі даведаліся адно пра аднаго, карыстальніцкія даныя ідуць непасрэдна паміж імі, а не праз гэты сервер. Дасягненне сервера даказвае толькі тое, што пасярэднік знаёмстваў адказвае. Маршрутызаванаму VPN па-ранейшаму патрэбны працоўны шлях у абодвух напрамках паміж адрасамі, якія абвяшчаюць суседзі.
Гэтае адрозненне таксама тлумачыць частковыя збоі, калі існыя суседзі працягваюць абмен данымі, а новае выяўленне перастае працаваць. Разглядайце іх як два асобныя расследаванні.
Чытайце RMW, які вузлы насамрэч выкарыстоўваюць
ROS 2 можа загружаць рознае прамежкавае ПЗ, і зменная, экспартаваная ў вашай абалонцы, не даходзіць да працэсаў, запушчаных у іншым месцы. Пытайцеся ў працуючай сістэмы, а не ў гісторыі тэрмінала.
printenv RMW_IMPLEMENTATION
ros2 doctor --report | head -n 20Нявызначаная зменная звычайна азначае ўсталяванае значэнне па змаўчанні, якое можа адрознівацца паміж машынамі ў адным эксперыменце. Справаздача таксама называе дыстрыбутыў і прамежкавае ПЗ, таму параўнайце іх з абодвух бакоў тунеля, перш чым меркаваць, што яны супадаюць. Дэман каманднага радка ROS кэшуе стан, таму перазапусціце яго пасля змены асяроддзя, а не дазваляйце састарэламу дэману адказваць за старую канфігурацыю. Запішыце дыстрыбутыў і RMW абодвух хастоў у нататкі тэсту, пакуль сеанс адкрыты.
Праверце выяўленне і даныя як два вынікі
Выберыце бясшкодную тэму і вымерайце знаёмства асобна ад дастаўкі. Каманда info пералічвае канчатковыя пункты і QoS, а echo даказвае, ці сапраўды адно паведамленне перасякае злучэнне.
ros2 topic info /chatter --verbose
ros2 topic echo /chatter --onceЗ'яўленне канчатковых пунктаў у вывадзе info — гэта вынік выяўлення. Прыбыццё паведамлення да падпісчыка — гэта вынік транспарту, і толькі другі правярае шлях, патрэбны праграме. Калі выяўленне працуе, а echo сканчаецца тайм-аўтам, даследуйце абвешчаныя адрасы і зваротны маршрут, а не службу выяўлення. Запускайце абедзве каманды з кожнага хаста, бо асіметрычны маршрут VPN часта выяўляе сябе толькі з аднаго боку.
Мяняйце адну залежнасць за раз
Калі шлях даных не працуе, пазбягайце змены прамежкавага ПЗ, рэжыму выяўлення і памеру паведамлення ў адным сеансе, бо пасля ніводзін вынік нельга будзе аднесці да прычыны. Zenoh RMW — законная альтэрнатыва, але яго маршрутызатар становіцца яшчэ адной залежнасцю, даступнай праз тунель.
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
ros2 run rmw_zenoh_cpp rmw_zenohdПад гэтым RMW маршрутызатар пераносіць выяўленне ў стандартнай схеме Jazzy, і шматвяшчальнае выяўленне там адключана, таму гэтая залежнасць належыць да вашых нататак, а не да здагадкі, запазычанай у іншага прамежкавага ПЗ. Трымайце нагрузку нязменнай, пакуль змяняеце адну наладу, затым паўтарыце тэст echo і запішыце кірунак, частату паведамленняў і ўмовы злучэння. Паўтарыце параўнанне двойчы, каб аддзяліць рэальнае паляпшэнне ад удалага перападключэння. Калі змена паляпшае выяўленне, а дастаўка застаецца той жа, вы перамясцілі службу знаёмстваў, а не шлях даных.