Два вузлы 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 і запішыце кірунак, частату паведамленняў і ўмовы злучэння. Паўтарыце параўнанне двойчы, каб аддзяліць рэальнае паляпшэнне ад удалага перападключэння. Калі змена паляпшае выяўленне, а дастаўка застаецца той жа, вы перамясцілі службу знаёмстваў, а не шлях даных.

Падобныя артыкулы