{"id":259,"date":"2023-02-28T19:16:43","date_gmt":"2023-02-28T19:16:43","guid":{"rendered":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/?page_id=259"},"modified":"2023-03-01T21:14:41","modified_gmt":"2023-03-01T21:14:41","slug":"move-base-flex-architecture","status":"publish","type":"page","link":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/move-base-flex-architecture\/","title":{"rendered":"Move Base Flex Architecture"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>What is Move Base Flex<\/strong><\/h2>\n\n\n\n<p>Move Base Flex is a navigation stack that is an extension of the Move Base navigation stack, with a lot of great features. The package allows us to easily load\/unload planners and controllers on the fly, and even run multiple planning algorithms concurrently. The code base is highly flexible and modular, which makes it perfect for our application.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/wiki.ros.org\/move_base_flex?action=AttachFile&amp;do=get&amp;target=move_base_flex.png\" alt=\"\" \/><figcaption class=\"wp-element-caption img-responsive\">Move Base Flex Architecture (Reference: move_base_flex ROS Wiki)<\/figcaption><\/figure>\n\n\n\n<p>In a nutshell, this package handles all the interactions between the planner, the controller (which is what they call their local planner) and recovery behaviors, and also provides action server for sending and keeping track of goals. These are supposed to be implemented as classes and are dynamically loaded\/unloaded in the memory using the ROS pluginlib.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What all do we need to implement<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text alignwide is-stacked-on-mobile\" style=\"grid-template-columns:48% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"277\" src=\"http:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_032-1024x277.png\" alt=\"\" class=\"wp-image-265 size-full img-responsive\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_032-1024x277.png 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_032-300x81.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_032-768x208.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_032-750x203.png 750w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_032.png 1325w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>These classes are purely abstract. We need to make our own global planner, local planner and recovery classes that inherit from these classes, and implement the pure virtual functions of these classes. <\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\"><div class=\"wp-block-media-text__content\">\n<p>In addition to this, the abstract_navigation_server is also a pure abstract class. This is the main class that runs the entire navigation stack. We need to make our own navigation server class that inherits from the abstract_navigation_server and implement the pure virtual functions of these classes.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"557\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_033.png\" alt=\"\" class=\"wp-image-266 size-full img-responsive\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_033.png 698w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_033-300x239.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-media-text alignwide is-stacked-on-mobile\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_034-1024x577.png\" alt=\"\" class=\"wp-image-268 size-full img-responsive\" srcset=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_034-1024x577.png 1024w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_034-300x169.png 300w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_034-768x433.png 768w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_034-750x422.png 750w, https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-content\/uploads\/sites\/73\/2023\/02\/Selection_034.png 1358w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p>There are abstract classes for controlling the planner, controller, and recovery execution as well, but these are not pure abstract classes, and their functions have already been implemented by move_base_flex. However, if we want to change the way our planner, controller, and recovery behaviors execute and tie in with our navigation server, we can inherit from these classes and implement those functions that we want to change.<\/p>\n<\/div><\/div>\n\n\n\n<p>After all this is done, we can write a simple node that instantiates the navigation server class we implemented, and the rest will be taken care of by the package.<\/p>\n\n\n\n<p>To know more about the blocks that have to be implemented, go to the pages below:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/move-base-flex-navigation-server\/\" data-type=\"page\" data-id=\"272\">Navigation Server Class<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/the-planner-controller-and-recovery-plugins\/\">Plugin Classes<\/a>\n<ul class=\"wp-block-list\">\n<li>Planner<\/li>\n\n\n\n<li>Controller<\/li>\n\n\n\n<li>Recovery Behavior<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Execution Classes\n<ul class=\"wp-block-list\">\n<li>Planner Execution Class<\/li>\n\n\n\n<li>Controller Execution Class<\/li>\n\n\n\n<li>Recovery Execution Class<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>You can also look at the experimental implementations of these classes. My experimental plugins just make dummy plans and give dummy velocity commands. The <a href=\"https:\/\/github.com\/MRSD-Project-GHAR\/move_base_flex\/tree\/custom_planner_experimentation\/mbf_experimental_nav\">mbf_experimental_nav<\/a> package has the implementations for the the Navigation Server Class (called ExperimentalNavigationServer) and the implementations for the experimental plugins is in the <a href=\"https:\/\/github.com\/MRSD-Project-GHAR\/move_base_flex\/tree\/custom_planner_experimentation\/mbf_experimental_core\">mbf_experimental_core<\/a> package (having ExperimentalPlanner, ExperimentalController and ExperimentalRecovery classes).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is Move Base Flex Move Base Flex is a navigation stack that is an extension of the Move Base navigation stack, with a lot of great features. The package allows us to easily load\/unload planners and controllers on the fly, and even run multiple planning algorithms concurrently. The code base is highly flexible and &#8230; <a href=\"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/move-base-flex-architecture\/\" class=\"more-link text-uppercase small\"><strong>Continue Reading<\/strong> <i class=\"fa fa-angle-double-right\" aria-hidden=\"true\"><\/i><\/a><\/p>\n","protected":false},"author":338,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-259","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/pages\/259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/users\/338"}],"replies":[{"embeddable":true,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/comments?post=259"}],"version-history":[{"count":17,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/pages\/259\/revisions"}],"predecessor-version":[{"id":344,"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/pages\/259\/revisions\/344"}],"wp:attachment":[{"href":"https:\/\/mrsdprojects.ri.cmu.edu\/2023teami\/wp-json\/wp\/v2\/media?parent=259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}