# B.3  Navigation Servers

Navigation stack လို့ခေါ်တဲ့ Navigation server တွေမှာ action server တွေနဲ့ တည်ဆောက်ထားပါတယ်။ Planner, Controller, Smoother, Recover servers ဆိုတဲ့ action server ၄ ခုဖြစ်ပါတယ်။ အဲ့ထဲကမှ Planner နဲ့ Controller ဆိုတာက navigation stack ရဲ့ အဓိကအစိတ်အပိုင်းတွေဖြစ်ပါတယ်။ ဒီ action server တွေသည် robot environment ဖေါ်ပြချက်တွေ ကို host လည်းလုပ်ပေးသလို algorithm တစ်ခုခုသုံးပြီး တွက်ချက်မှုတွေလည်းပြုလုပ်ပါတယ်။

Planner, Smoother, Controller server တွေသည် အသုံးပြုတဲ့ algorithm ရဲ့ namespace ကိုအသုံးပြုပြီး runtime မှာ configuration ပြုလုပ်နိုင်ပါတယ်။  ဥပမာ DWB algorithm ရဲ့ FollowPath ဆိုတဲ့ ကောင်ကို သုံးတယ်ဆိုရင် သူ့မှာရှိတဲ့ parameter တွေအားလုံးသည် followPath/ ဆိုတဲ့ namespace အောက်မှာပဲရှိပါတယ်။&#x20;

တကယ်လို့ Behavior Trees ကို သုံးတယ်ဆိုရင် BT သည် သက်ဆိုင်ရာ Task ကို run နေတဲ့အချိန်မှာ action server ကို call ပြီး robot ကို pose goal ပေးပြီး သွားခိုင်းပါလိမ့်မယ်။ action server သည် algorithm တစခုခုကိုရွေးပြီး ပထမဆုံး planner ကို အလုပ်လုပ်စေပါတယ်။&#x20;

#### Planner&#x20;

Planner အလုပ်က path (or) route တစ်ခုကို ထုတ်လုပ်ပေးရမှာဖြစ်ပါတယ်။ Planner သည် global environmental အချက်အလက်များကို ရယူသလို sensor data ကိုလည်း ရယူဖို့လိုပါတယ်။ planner သည် goal အတွက် အတိုဆုံးလမ်းကြောင်း ( shortest path ) ကို တွက်နိုင်ရမှာဖြစ်သလို သွားလာခွင့်ပြုတဲ့ လမ်းကြောင်းတွေကိုလည်း တွက်ချက်နိုင်ရမှာဖြစ်ပါတယ်။ သူ့ရဲ့ အလုပ်သည် robot ရဲ့ လက်ရှိနေရာကနေ Goal ကို သွားနိုင်ဖို့ global လမ်းကြောင်းကို တွက်ချက် ရမှာဖြစ်ပါတယ်။ ဒီအတွက် အသင့်သုံး algorithm( planner ) တွေရှိပါတယ်။&#x20;

#### Controller

နောက်တစ်ခုက controller ၊ သူ့ကို ROS 1 တုန်းက local planner လို့ခေါ်ကြတယ်။ သူက planner က တွက်ထုတ်လိုက်တဲ့ global path အတိုင်း နီးနီးစပ်စပ် သွားနိုင်ဖို့ local path ကို တွက်ထုတ်ရတယ်။ အတတ်နိုင်ဆုံးတူအောင်သွားရမှာပေါ့။ အဲ့တော့ သူက robot ရဲ့ local environment အချက်အလက်တွေကို ယူရပါတယ်။ global path ကို အနီးစပ်ဆုံး follow လုပ်သွားမှာဖြစ်ပြီး အတားအဆီးတွေကိုရှောင်တာ၊ detector sensor တစ်ခုခုကိုသုံးပြီး charging station ဆီကို ပြန်တာ ၊ ဓါတ်လှေကား စီးဖို့ ဆောင်ရွက်ချက်မျိုးတွေ စတဲ့အလုပ်မျိုးတွေ interaction လုပ်ဆောင်ချက်တွေ စတာတွေကို လုပ်ဆောင်နိုင်ပါတယ်။ သူ့ရဲ့ အဓိက အလုပ်က သင့်တော်တဲ့ ပတ်လမ်းကြောင်းတိုတွေရအောင်တွက်ဖို့ပါပဲ။ သူ့အတွက်လည်း အသင့်သုံး algorithm( planner ) တွေရှိပါတယ်။ ( အခုသင်ခန်းစာတွေရဲ့ အဓိက ရည်ရွယ်ချက်က ဒီ controller algorithm တွေကို plugin တွေအနေနဲ့ ဖေါ်ပြပါ server တွေမှာ အသုံးပြုနိုင်စွမ်းရှိအောင်လေ့လာပြီး industry မှာ အသုံးချနိုင်ဖို့ဖြစ်ပါတယ်။ )

#### Recovery Server

recovery ဆိုတာကတော့ robot ဟာ ကျဥ်းထဲကျပ်ထဲရောက်သွားတဲ့အနေအထားမျိုးတွေ ကနေ ရုန်းထွက်ဖို့အတွက်ပါပဲ။ ဥပမာ rotate ကို အတိအကျမသိတော့ တဲ့ ( unknown, failure condition ..) အချိန်မျိုးတွေမှာ recovery လုပ်ဖို့ကြိုးစားပါတယ်။ ဒီအတွက် recovery server ကို သုံးပါတယ်။ သူ့မှာ clear costmap recovery ဆိုတဲ့ runtime costmap တွေကို ဖျက်ပေးတဲ့ recovery တစ်မျိုးပါရှိတယ်။&#x20;

နောက်တခုက rotate recovery ပေါ့။ သူက ကျဥ်းထဲကျပ်ထဲ နဲ့ heading ရှုပ်ထွေးမှုတွေဖြစ်ပြီး မသိနိုင်တော့တဲ့အခါ robot ကိုပတ်ချာလည်ရွေ့လျားစေပြီး recovery ဖြစ်မှာပါ။ recovery behavior သည် အခြား task တွေကို ရပ်တန့်ထားနိုင်တယ်ဆိုတာလည်း သိထားဖို့လိုပါတယ်။&#x20;

#### Smoother

ဒီမှာ smoother ဆိုတဲ့ကောင်ကတော့ plan လုပ်ထားတဲ့လမ်းကြောင်းကို ပိုကောင်းတဲ့ smooth ဖြစ်တဲ့ path အဖြစ်ထုတ်ပေးတဲ့နေရာမှာသုံးပါတယ်။ ကျတော့်အထင် ros2 မှ ပါတာထင်ရဲ့။

#### Others

နောက် Navigation 2 မှာပါတဲ့ကောင်တခုက waypoint\_following စနစ်ပါပဲ။ Destination တစ်ခုပြီးတစ်ခုသွားနိုင်အောင်ပေါ့။ ဒါပေမဲ့ကျတော်တို့ က nav2\_bt\_waypoint\_follower ဆိုတဲ့ behavior tree ကိုသုံးမှာဆိုတော့ မသုံးတော့ဘူး။ waypoint\_following သည် production grade မှာပါသုံးလို့ရတယ်လို့တော့ ရေးထားတာပဲ။&#x20;

