ROS全局路径

1、Global Planner

ROS的global planner是基于global_costmap上(产生一个初始的静态地图),更新频率基于update_frequency参数,全局是产生一个较长的路径让机器人从起点(或当前位置)到终点。一个基于网格的算法可以通过A*或者Dijkstra算法来获得一个无碰撞的最短路径,这些算法都在global_planner包里。ROS也提供另外一个global_planner叫做carrot_planner。当前的global_planner应用主要是用于圆形底座那个,当前的global_planner没有考虑机器人的动力学约束和加速度约束。即只能用于完整约束模型。

2Relaxed A*教程

        RA*是一个线性时间版本的A*,主要用来解决大范围的网格地图,它主要通过解决最优或者临近最优通过一个小范围,比传统A*算法时间要少好多。传统A*的代价函数g(n)这个节点要算很多次,而RA*的g(n)近似的表示最短的path从起点cell到结点n。

 

3、步骤

(1)写planner的类函数;(2)部署它作为一个插件(plugin);

 

3.1、写类函数

 

    global_planner必须附带在nav_core这个包里,nav_core::BaseGlobalPlanner,从哪里继承过来,写一个新的全局planner,RAstar_ros.h。

 

现在来解释下头文件的意义。

这些是ROS一些必要的头文件。

 

costmap_2d::Costmap2D类将作为planner的输入地图,这个地图将被planner自动加入到一个插件,即我们不需要通过订阅来获取代价图。

定义命名空间为这个类,RAstar_palnner::RAstarPlannerROS,定义它从nav_core::BaseGlobalPlanner继承。

 

 

planner初始化。

初始化costmap,这个地图将被用于planner。

初始化BaseGlobalPlanner。

RA*初始化应用。

这个函数是最终的规划,它储存向量std::vector<geometry_msgs::PoseStamped>&plan,这个方式将自动通过插件(plugin)发布到ROS的topic里。

这是RAstar_ros.cpp

把它注册为一个插件(plugin)。

这是个必要的库。

对与makePlan函数,起始点和目标点将从坐标系的x,y转换到地图中的cell。(即在一个50x50的地图中,在地图编号中是这样编号的,在第一行50个cell从左到右依次为1,2,3,4...50,第二行第一个为51,依次下去,这就是栅格地图的cell编号)。最后地图将cell转换为x,y通过函数(plan.push_back(pose))。这个得到的路径将通过ROS topic nav_msgs/Path。

 

在CMakelists.txt中添加。

这让class RAstar_planner::RAstarPlannerROS注册为move_base一个插件,nav_core::BaseGlobalPlanner。

修改在relaxed_astar_planner_plugin.xml

查看插件是否注册成功。

成功注册如上。

修改turtlebot文件。

最后就是测试。

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值