ros Navigation DWA学习
参考博客
ROS 源码阅读——局部路径规划之DWAPlannerROS分析
dwa_planner_ros.cpp中的computeVelocityCommands()函数是计算最后的速度指令的。在函数中,首先得到机器人位置,然后得到全局路径映射后的局部路径,然后由dp_.updatePlanAndLocalCosts()更新打分,然后判断是否到达目标附近,是的话调用停止的函数发布速度,否则调用dwaComputeVelocityCommands计算速度。
dp_.updatePlanAndLocalCosts()函数更新打分应该是更新局部路径产生的路径点那些内容。
在dwaComouteVelocityCommands函数中,主要的是findBestPath()函数。
findBestPath()函数在dwa_planner.cpp文件中定义。
首先利用generator_.initialise()产生轨迹。该函数为base_local_planner功能包中的simpleTrajectorygenerator.cpp中的类。
generator_.initialise(pos,vel,goal,&limits,vsamples_);result_traj_.cost_ = -7;
然后就是findBestTrajectory()函数
std::vector<base_local_planner::Trajectory> all_explored;
scored_sampling_planner_.findBestTrajectory(result_traj_, &all_explored);
该函数在base_local_planner功能包中的simpleScoredSamplingPlanner.cpp中定义.。
首先进行打分项的prepare。打分项那部分,每个都是critics,这个在dwa_planner.cpp中构造函数中会把不同的costfunction压入。分别是
// see constructor body for explanationsbase_local_planner::SimpleTrajectoryGenerator generator_;base_local_planner::OscillationCostFunction oscillation_costs_;base_local_planner::ObstacleCostFunction obstacle_costs_;base_local_planner::MapGridCostFunction path_costs_;base_local_planner::MapGridCostFunction goal_costs_;base_local_planner::MapGridCostFunction goal_front_costs_;base_local_planner::MapGridCostFunction alignment_costs_;base_local_planner::TwirlingCostFunction twirling_costs_;
打分项prepare后,就是simple_scored_sampling_planner中的scoreTrajectory函数,而在其中,cost计算如下
double cost = score_function_p->scoreTrajectory(traj);
这一部分在base_local_planner功能包中的Trajectory_cost_function.h中声明,是一个虚函数,其定义根据之前score_function_p的不同,即critics中类型的不同,分别到不同的costfunction中。
以obstacle_cost_function为例。
其cost为f_cost和cost的最大值,f_cost计算如下:
double f_cost = footprintCost(px, py, pth,scale, footprint_spec_,costmap_, world_model_);
footprintCost在obstacle_cost_function.cpp中。
其计算如下:
double footprint_cost = world_model->footprintCost(x, y, th, footprint_spec);
world_model.h文件中footprintCost函数也是虚函数,因为用的是costmap,所以为costmap_model.cpp的footprintCost函数。
在其中会返回足迹点之间线段上所有的点中的最大代价,或者求和。
点的代价参考博客 costmap_2D包的理解
应该是就不包含距离障碍的代价,就是碰撞或不碰撞。
ros Navigation DWA学习相关推荐
- 【硬核】 ROS Navigation 局部路径规划常见算法
简介 最近,作者参加了关于RMUS 高校 SimReal挑战赛,首次接触到了机器人导航领域,这里记录一下这段时间的收货.sim2real的全称是simulation to reality,是强化学 ...
- ROS运动规划学习六---dwa_local_planner
文章目录 前言 一.dwa_local_planner结构 二.setPlan.initialize.isGoalReached 三.computeVelocityCommands() 总结 前言 在 ...
- ROS Navigation插件注册自定义导航避障算法
前言 最近开组会的时候,导师催促我寻找创新点,着实让我头疼.因为说实话,我真的不想找什么创新点,我只想学习一些招聘简历上的技能类的东西,比如熟悉A*.Dijkstra和DWA导航避障算法,熟悉ROS, ...
- 理解ROS Navigation Stack,看完这篇你就知道啦!
前言 ROS Navigation Stack是ROS提供的一个二维的导航功能包集合,通过输入里程计.传感器信息和目标位姿,输出控制机器人到达目标状态的安全速度指令.ROS Navigation St ...
- ROS Navigation Stack安装
ROS Navigation Stack安装 Navigation导航包是做导航几乎都要用的,大家可以先去ROS Wiki上学习下 我们先Git下对应版本的软件包,我是Kinetic的,所以是Kine ...
- ROS Navigation Tuning Guide(导航调试指南)
ROS Navigation Tuning Guide 导航调试指南 准备工作 距离传感器 里程计 定位 速度与加速度的设置 获得最大速度 获得最大加速度 设置最小值 XY方向的速度 Global P ...
- ROS运动规划学习三---move_base
文章目录 前言 一.move_base工程结构 二.move_base简要分析 1.MoveBase类的声明---move_base.h 2.MoveBase类的实现---move_base.cpp ...
- ROS与Arduino学习(三)订阅与发布
ROS与Arduino学习(三)订阅与发布 Tutorial Level:HelloWorld Next Tutorial:用ROS的Cmake编译程序 本节介绍如何在arduino中发布与订阅消息. ...
- ROS与Arduino学习(六)Logging日志
ROS与Arduino学习(六)Logging日志 Tutorial Level:客户端与服务器 Next Tutorial:小案例节点通信 本节较为简单告诉大家如何向系统发布日志信息. T ...
最新文章
- javax.crypto.BadPaddingException: Given final block not properly padded解决方案
- ios UIWebView 播放优酷土豆视频
- Spring 组cxf宣布webservice
- Pytorch:使用Alexnet网络实现CIFAR10分类
- maven中pom文件解析
- java语音开源_号外!号外!百度语音开源库更新了
- onDraw什么时候被调用?
- Java 代码性能优化总结
- Qt signal slot 实现机制
- ssis 数据转换_SSIS数据类型:高级编辑器的更改与数据转换的转换
- HTML的注释与JavaScript注释及快捷键
- 北大软微计算机技术硕士复试,【高分学长带你飞】北大软微408学长超详经验贴...
- office2010专业版
- magento 开发 -- 入门深入理解第五章 – Magento资源配置
- Vue项目中如何解决error: failed to push some refs to ‘xxx(远程库)‘ git push失败的解决方案
- 由NPLM到Word2vec
- 查询大全,肯定有你需要的!
- 用html写树干的形状,HTML5使用纯CSS3构建的树枝和树叶
- 华硕主板设置完成通电开机,接上Wi-Fi智能插座,通电开机无效的原因???
- 面试官:请讲一讲IO流核心模块与基本原理是什么?
热门文章
- linux probe函数调用,Linux驱动中probe函数何时被调用?
- win7 64位光驱不读盘
- 利用Sublime实现Evernote高亮代码的尝试
- JSP学习笔记(五)文件上传
- 怎么修改jar游戏的分辨率
- java打包后的图片文件在哪,java程序打包jar文件自带图片
- 【java程序员理解HTTP】【1】HTTP相关知识
- Android笔记:invalidate()和postInvalidate() 的区别及使用
- 安科瑞电力监控系统在耐世特汽车系统(苏州)有限公司项目中的设计与应用
- androidentity什么用_Android greenDao schema entity使用详解