Topic, Service and Actionlib
အရင္ post မွေတာ့ ROS ရဲ႕ အေျခခံ idea ျဖစ္တဲ့ topics ေတြအေၾကာင္းကို examples ေတြနဲ႕ တကြရွင္းျပေပးခဲ့ပါတယ္။ ဒီ post မွာေတာ့ services နဲ႕ actionlib ေတြ အေၾကာင္းကို ရွင္းျပေပးပါမယ္။ topics ေတြက one way communication ျဖစ္ပါတယ္။ one way communication ျဖစ္တဲ့အတြက္ topic တစ္ခုကို node တစ္ခုကေန publish လုပ္ျပီး node တစ္ခုကေန subscribe လုပ္ပါတယ္။ subscribe လုပ္ေနတဲ့ node က ၄င္း topic ကို publish ျပန္လုပ္လို႕ မရပါဘူး။ ဒါေၾကာင့္သူ႕ကို one way communication လို႕ေခၚပါတယ္။ topic ေတြကိုေတာ့ sensors ေတြရဲ႕ data ေတြကို ရယူတဲ့ေနရာမွာ အသံုးျပဳပါတယ္။services နဲ႕ actionlib ကေတာ့ two ways communication ျဖစ္ပါတယ္။ သူ႕မွာေတာ့ server side နဲ႕ client side ဆုိျပီး ရွိပါတယ္။ services နဲ႕ actionlib ရဲ႕ အသံုးေတြကိုေတာ့ ေအာက္ပါ examples ေလးနဲ႕ ၾကည့္ရေအာင္..
ကြ်န္ေတာ္တို႕ရဲ႕ mobile robot ဟာ အမွတ္ (A)ကေန အမွတ္ (B)ကို သြားဖို႕အတြက္ task တစ္ခုကို ေပးလိုက္တယ္ဆိုပါေတာ့။ ကြ်န္ေတာ္တို႕ဟာ အမွတ္ (B) ေရာက္တယ္ မေရာက္ဘူးဆိုတဲ့ informations ကို အျမဲသိေနဖို႕လိုအပ္ပါတယ္။ client side ကေနျပီးေတာ့ အမွတ္ (B) ကို ေရာက္မေရာက္ဆိုတာကို actiolib ကို အသံုးျပဳျပီး အျမဲစစ္ေဆးေနပါလိမ့္မယ္။ ဒီမွာ services ကို အသံုးမျပဳဘူးလားလို႕ေမးစရာရွိလာပါတယ္။ actionlib မွာ တစ္ခုပိုတာကေတာ့ သူက target ကို ေရာက္တာနဲ႕ ေရာက္ျပီဆိုတဲ့တဲ့ goal state ကိုျပန္ေပးပါတယ္။ တကယ္လို႕ မေရာက္ေသးရင္လည္း မေရာက္ေသးဘူးဆိုတဲ့ လက္ရွိအေျခအေနကိုလည္း ျပန္ေပးေနပါတယ္။ သို႕အတြက္. client ကေနျပီးေတာ့ robot ရဲ႕ လက္ရွိအေျခအေနကိုေရာ goal state ကို ေရာက္မေရာက္ဆိုတာကိုေရာ အခ်ိန္နဲ႕တေျပးညီ သိရွိေနပါတယ္။ goal state ကို ေရာက္ျပီဆုိတာေသခ်ာတာနဲ႕ တျခားတာဝန္ကုိ ထမ္းေဆာင္ပါလိမ့္မယ္။ အမွတ္ (A)ကေန အမွတ္ (B)ကို သြားတဲ့ေနရာမွာ မေရာက္ခင္ robot ရဲ႕ Battery ကုန္သြားခဲ့ရင္ robot က Battery အားသြင္းမယ့္ေနရာကို အလိုလိုသြားျပီး အားသြင္းပါမယ္။ အားသြားျပီးလို႕ အားျပည့္တာနဲ႕ နဂိုလမ္းေၾကာင္းအတိုင္း ျပန္သြားပါလိမ့္မယ္။ သို႕အတြက္ေၾကာင့္ servies ကို အသံုးျပဳျပီး စကၠန္႕သံုးဆယ္ေလာက္တစ္ခါမွာ ဘတၳရီကုန္မကုန္လွမ္းေမးေနပါမယ္။ ဘတၳရီကုန္ေနျပီဆိုတဲ့ response ရတာနဲ႕ အားသြင္းတဲ့ function ကို ထမ္းေဆာင္ပါမယ္။ အားျပည့္ျပီဆိုတဲ့ response ျပန္ရျပီဆိုတာနဲ႕ သူ႕နဂိုလမ္းေၾကာင္းကို ျပန္သြားပါလိမ့္မယ္။ အမွတ္ (A)ကေန အမွတ္ (B)ကေန သြားေနတဲ့အခ်ိန္အတြင္းမွာဘဲ camera node, sensors node, ေတြက topic ေတြကို အသံုးျပဳျပီး robot ဆီကေန data ေတြက အျမဲ publish လုပ္ေပးေနပါလိမ့္မယ္။
ဒါကေတာ့ topics, services, နဲ႕ actionlib တို႕ရဲ႕ အသံုးျပဳပံုကို example ေလးနဲ႕ ရွင္းျပထားတာျဖစ္ပါတယ္။ ေနာက္ပို႕ေတြမွာေတာ့ ကိုယ္ပိုင္ messages, services နဲ႕ actionlib ေတြကို ဘယ္လိုဖန္တီးျပီး အသံုးျပဳတယ္ဆိုတာကို examples ေတြနဲ႕တကြ ရွင္းျပသြားပါမယ္။