VPN üzərindən ROS 2: Kəşf məlumat yolu deyil
Kəşfin həmyaşıdları tapması yükün çatdığını sübut etmir. DDS-i dəyişməzdən və ya marşrutlaşdırıcı əlavə etməzdən əvvəl RMW-ni, elan edilmiş son nöqtələri və bir iş yükünü yoxlayın.
VPN-in əks uclarında olan iki ROS 2 qovşağı bir-birinin mövzularını saya bilər və yenə də bir dənə mesaj çatdıra bilməz. Kəşf və istifadəçi məlumatları ayrı yollara malik ayrı mübadilələrdir və kəşf serveri yükü ötürmür. Birini yoxlayıb digərini fərz etmək komandaların tunel sadəcə məlumatı heç vaxt daşımadığı halda ara proqramı dəyişməsi ilə nəticələnir. Aşağıdakı runbook hər hansı dəyişiklikdən əvvəl iki nəticəni ayırır.
Kəşf serveri əslində nə daşıyır
Fast DDS-də Discovery Server son nöqtələr haqqında məlumat yayır: kim nəşr edir, kim abunə olur və hər biri hansı QoS gözləyir. Həmyaşıdlar bir-birini bildikdən sonra istifadəçi məlumatları həmin serverdən deyil, birbaşa onların arasında gedir. Serverə çatmaq təqdimatlar brokerinin cavab verdiyini sübut edir, başqa heç nəyi deyil. Marşrutlaşdırılmış VPN hələ də həmyaşıdların elan etdiyi ünvanlar arasında hər iki istiqamətdə işlək yol tələb edir.
Bu fərq qismən nasazlıqları da izah edir: mövcud həmyaşıdlar məlumat mübadiləsini davam etdirir, yeni kəşf isə işləməyi dayandırır. Bunları iki ayrı araşdırma kimi qəbul edin.
Qovşaqların həqiqətən istifadə etdiyi RMW-ni oxuyun
ROS 2 müxtəlif ara proqramlar yükləyə bilər və shellinizdə ixrac edilən dəyişən başqa yerdə başladılan proseslərə çatmır. Terminal tarixçənizdən deyil, işləyən sistemdən soruşun.
printenv RMW_IMPLEMENTATION
ros2 doctor --report | head -n 20Təyin edilməmiş dəyişən adətən quraşdırılmış defoltu bildirir və bu, eyni təcrübədəki maşınlar arasında fərqlənə bilər. Hesabat həmçinin istifadə olunan distribusiyanın və ara proqramın adını çəkir, ona görə tunelin hər iki tərəfində onları müqayisə edin, uyğun olduqlarını fərz etməzdən əvvəl. ROS əmr sətri demonu vəziyyəti keşləyir, ona görə mühiti dəyişdikdən sonra onu yenidən başladın və köhnə konfiqurasiya üçün köhnəlmiş demonun cavab verməsinə imkan verməyin. Sessiya açıqkən hər iki hostun distribusiyasını və RMW-ni test qeydlərinə yazın.
Kəşfi və məlumatı iki nəticə kimi yoxlayın
Zərərsiz bir mövzu seçin və təqdimatı çatdırmadan ayrıca ölçün. info əmri son nöqtələri və QoS-u sadalayır, echo isə bir mesajın həqiqətən keçididən keçib-keçmədiyini sübut edir.
ros2 topic info /chatter --verbose
ros2 topic echo /chatter --onceinfo çıxışında son nöqtələrin görünməsi kəşf nəticəsidir. Mesajın abunəçiyə çatması nəqliyyat nəticəsidir və yalnız ikincisi tətbiqin ehtiyac duyduğu yolu sınaqdan keçirir. Kəşf işləyib echo vaxt aşımına uğradıqda, kəşf xidmətini deyil, elan edilmiş ünvanları və geri dönüş marşrutunu yoxlayın. Hər iki əmri hər hostdan işlədin, çünki asimmetrik VPN marşrutu çox vaxt özünü yalnız bir tərəfdən göstərir.
Hər dəfə bir asılılığı dəyişin
Məlumat yolu uğursuz olduqda, ara proqramı, kəşf rejimini və mesaj ölçüsünü eyni sessiyada dəyişməkdən çəkinin, çünki sonradan heç bir nəticəni ona aid etmək mümkün olmayacaq. Zenoh RMW qanuni alternativdir, lakin onun marşrutlaşdırıcısı tuneldən əlçatan olmalı olan başqa bir asılılığa çevrilir.
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
ros2 run rmw_zenoh_cpp rmw_zenohdBu RMW altında marşrutlaşdırıcı defolt Jazzy quruluşunda kəşfi daşıyır və orada multicast kəşf söndürülüb, ona görə asılılıq başqa ara proqramdan götürülmüş fərziyyədə deyil, qeydlərinizdə yer almalıdır. Bir parametri dəyişərkən iş yükünü sabit saxlayın, sonra echo testini təkrarlayın və istiqaməti, mesaj sürətini və keçid şərtlərini qeyd edin. Müqayisəni iki dəfə aparın ki, real yaxşılaşmanı təsadüfi yenidən qoşulmadan ayırasınız. Əgər dəyişiklik kəşfi yaxşılaşdırır, çatdırma isə eyni qalırsa, siz məlumat yolunu deyil, təqdimat xidmətini köçürmüsünüz.