আপনার ওয়ার্কস্টেশন টানেলের ওপর দিয়ে ROS 1 master-এ পৌঁছায়, তবুও টপিকের তালিকা খালি দেখায়। এই ধরনটি সাধারণ, কারণ master রেজিস্ট্রেশন আর টপিক পরিবহন দুটি আলাদা কথোপকথন, এবং কেবল প্রথমটি master-এর মধ্য দিয়ে যায়। নিচের চেকলিস্ট দ্বিতীয় কথোপকথনটি দেখায়: পাবলিশার যে এন্ডপয়েন্ট ঘোষণা করে, সাবস্ক্রাইবার যে ঠিকানায় পৌঁছাতে হবে, এবং যে অনুমতি দুটিকে কথা বলতে দেয়। এখানে সবকিছু শুধু পুরোনো ROS 1-এর জন্য, যার Noetic সহায়তার সময়কাল 2025 সালের মে মাসে শেষ হয়েছে।

ধাপ 1: প্রমাণ করুন যে master সংযোগ টপিক সংযোগ নয়

কী কাজ করে আর কী করে না, তা আলাদা করে শুরু করুন। সফল rostopic list প্রমাণ করে যে আপনার শেল 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 ইউনিট, একটি কনটেইনার বা দ্বিতীয় টার্মিনাল আপনার পরীক্ষা যেখানে কাজ করেছিল সেই শেলের চেয়ে ভিন্ন মান বহন করতে পারে।

echo "$ROS_IP" "$ROS_HOSTNAME"
rosnode info /talker
getent hosts robot-host

হোস্টনাম ঘোষণা কেবল তখনই কাজ করে যখন প্রতিটি পিয়ার সেই নামটি অভীষ্ট পৌঁছানোযোগ্য ঠিকানায় রিজলভ করে। যদি সেই নাম কেবল রোবটের নিজের নেটওয়ার্কের ভেতরে রিজলভ হয়, তবে টানেলের অপর পাশের ওয়ার্কস্টেশনের তা ব্যবহারের কোনো উপায় নেই, আর কোনো DNS সাফিক্স পুশ না করা VPN সেই অমিলকে আরও খারাপ করে। টপোলজি রাউটেড হলে 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 ইন্টারফেস রোবটের Ethernet সেগমেন্ট না বাড়িয়েই এই IP কথোপকথনগুলো বহন করে, যা সাধারণত দূরবর্তী অপারেটর চায়। স্ট্যাকের কিছু যদি এর বদলে ব্রডকাস্ট বা multicast-এর ওপর নির্ভর করে, তবে সেই প্রয়োজনটি আলাদাভাবে মূল্যায়ন করতে হবে; একটি টুল মেটাতে টানেলকে TAP-এ বদলালে প্রতিটি অংশগ্রহণকারীর জন্য নেটওয়ার্ক প্রশস্ত হয়।

রুট বা ফেরার পথ না থাকলে এখানেই থামুন। যে পাবলিশার নিজের হোস্টে উত্তর দেয় কিন্তু ওয়ার্কস্টেশন থেকে পৌঁছানো যায় না, তার রাউটিং সমস্যা, ROS সমস্যা নয়।

ধাপ 4: পিয়ার কথোপকথন অনুমোদন করুন এবং একটি টপিক দেখুন

দরকষাকষি করা কথোপকথনের যতটুকু পোর্ট দরকার কেবল ততটুকু খুলুন, এবং প্রতিটি নিয়ম ঘোষিত অংশগ্রহণকারীদের মধ্যে সীমাবদ্ধ করুন। master-এর লিসেনার টপিক পেলোডের রিলে নয়, তাই কেবল তাকে অনুমোদন করলে পাবলিশারের এন্ডপয়েন্ট বন্ধই থাকে। ROS লিসেনারগুলোকে পাবলিক ইন্টারনেটে উন্মুক্ত না করে প্রাইভেট VPN সীমানায় রাখুন।

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

সত্যিকার পাবলিশার থেকে সত্যিকার সাবস্ক্রাইবারে একটি নিরীহ টপিক দেখুন এবং ঘোষিত এন্ডপয়েন্ট ও উত্তরের পথ দুটোই নিশ্চিত করুন। একটি বার্তা প্রমাণ করে পথটি কাজ করে; স্থির হার প্রমাণ করে এটি খোলা থাকে। অ্যাকচুয়েটর নিয়ন্ত্রণ ও নিরাপত্তা পরীক্ষা এই কেবল-নেটওয়ার্ক পরীক্ষার বাইরে রাখুন, কারণ কাজ করা টপিক কাজ করা রোবটের সনদ নয়। আপনি যে ROS সংস্করণ ও এন্ডপয়েন্ট জোড়া দেখেছেন তা লিখে রাখুন, যাতে পরের ব্যক্তি টপোলজি পরিবর্তনকে রিগ্রেশন থেকে আলাদা করতে পারেন।

চেকলিস্ট সম্পূর্ণ হয় যখন ঘোষিত URI সাবস্ক্রাইবার থেকে পৌঁছানোযোগ্য, দরকষাকষি করা পোর্ট কেবল ওই পিয়ারের জন্য খোলা, একটি ঘোষিত টপিক প্রবাহিত, এবং দুই হোস্টের পরিবেশ মান লিখিত থাকে। পুরোনো ROS 1 এই ক্ষেত্রে আর সংশোধন পাবে না, তাই রেকর্ডটাই সেই অংশ যা মানুষ বদলানোর পরেও কাজ করতে থাকে।

সম্পর্কিত নিবন্ধ