1.总体框架

          goal

global planner-------global_costmap<——map server

amcl

local planner---------local_costmap<——sensor

          control

2.模块分析

1.amcl是一种机器人在2D中移动的概率定位系统。 它实现了自适应(或KLD采样)蒙特卡罗定位方法(如Dieter Fox所述),该方法使用粒子滤波器来针对已知地图跟踪机器人的位姿。

2.base_local_planner使用Trajectory Rollout and Dynamic Window approaches来做平面上运动的机器人局部导航,控制器基于给定的路径规划和costmap生成速度命令后发送给移动基座。

3.carrot_planner试图找到适当的位置来使机器人跟随。

  • 规划器获取用户指定的目标位置,检查用户指定的位置是否在障碍区中。

  • 如果用户指定的位置在障碍区中,规划器就会在机器人与指定位置的已规划路径中寻找一个在障碍区外的可行的目标位置,然后再将此目标位置发送给局部规划器或者控制器

4.clear_costmap_recovery为导航堆栈提供了一种恢复行为,其尝试通过将导航堆栈使用的代价地图恢复到给定区域外的静态地图来清除空间。

5.costmap_2d提供了一种2D代价地图的实现方案,该方案从实际环境中获取传感器数据,构建数据的2D或3D占用栅格(取决于是否使用基于体素的实现),以及基于占用栅格和用户定义膨胀半径的2D代价地图的膨胀代价。

  • costmap_2d-staticmap静态地图主要包含来自外部源的不变数据。
  • costmap_2d-inflation为代价地图的代价值定义5个与机器人有关的标记:致命的("Lethal" cost)、内切("Inscribed" cost)、可能外切("Possibly circumscribed" cost )、自由空间("Freespace" )、未知("Unknown")

6.dwa_local_planner使用DWA(Dynamic Window Approach)算法实现了平面上移动机器人局部导航功能。(和base_local_planner什么关系?)

7.fake_localization用来替代定位系统,并且提供了amcl定位算法ROS API的子集。

8.global_planner为导航实现了一种快速,内插值的全局路径规划器, 继承了nav_core包中nav_core::BaseGlobalPlanner接口,该实现相比navfn使用更加灵活。

9.map_server提供了一个map_server ROS 节点, 该节点通过ROS 服务器方式提供地图数据。提供了map_saver命令行utility, 使用该工具可将动态创建的地图保存成文件。

10.move_base将全局路径和局部路径规划程序链接在一起,以完成其全局导航任务;维护两个costmaps,一个用于全局路径规划器,一个用于局部路径规划器

move_base_msgs 能够保留move_base包的操作描述和相关消息

11.move_slow_and_clear是一种简单的修复机制,用来清除代价地图中信息并且限制机器人移动速度。(是一种简单的修复机制,用来清除代价地图中信息并且限制机器人移动速度。)

12.nav_core包含了导航功能包的关键接口。主要是:全局路径规划器、局部路径规划器、修复机制接口

13.navfn快速内插值的导航功能,用于为移动基座创建路径规划。

  • 假设机器人为圆形并利用代价地图来进行操作,以从栅格的起点到终点找到代价最小的路径规划;
  • 使用Dijkstra算法;
  • 在move_base中被作为全局路径规划器插件使用。

14.navigation——定义cmakelist

15.rotate_recovery给导航功能包提供了rotate_recovery::RotateRecovery修复机制,它尝试让机器人执行360度旋转来完成清理导航功能包里的代价地图的空间。

16.voxel_grid实现里高效的3D voxel grid(标记,自由或未知)

问题:

1.dwa_local_planner和base local planner有何区别?

2.fake_localization和amcl有何区别?

Ros学习——Movebase源码解读的更多相关文章

  1. Ros学习——movebase源码解读之amcl

    1.amcl的cmakelists.txt文件 add_executable(amcl  src/amcl_node.cpp) target_link_libraries(amcl amcl_sens ...

  2. etcd学习(6)-etcd实现raft源码解读

    etcd中raft实现源码解读 前言 raft实现 看下etcd中的raftexample newRaftNode startRaft serveChannels 领导者选举 启动并初始化node节点 ...

  3. Spark学习之路 (十六)SparkCore的源码解读(二)spark-submit提交脚本

    一.概述 上一篇主要是介绍了spark启动的一些脚本,这篇主要分析一下Spark源码中提交任务脚本的处理逻辑,从spark-submit一步步深入进去看看任务提交的整体流程,首先看一下整体的流程概要图 ...

  4. SDWebImage源码解读 之 NSData+ImageContentType

    第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...

  5. SDWebImage源码解读之SDWebImageCache(下)

    第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...

  6. AFNetworking 3.0 源码解读 总结(干货)(上)

    养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...

  7. AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking

    我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...

  8. AFNetworking 3.0 源码解读(三)之 AFURLRequestSerialization

    这篇就讲到了跟请求相关的类了 关于AFNetworking 3.0 源码解读 的文章篇幅都会很长,因为不仅仅要把代码进行详细的的解释,还会大概讲解和代码相关的知识点. 上半篇: URI编码的知识 关于 ...

  9. AFNetworking 3.0 源码解读 总结

    终于写完了 AFNetworking 的源码解读.这一过程耗时数天.当我回过头又重头到尾的读了一篇,又有所收获.不禁让我想起了当初上学时的种种情景.我们应该对知识进行反复的记忆和理解.下边是我总结的 ...

随机推荐

  1. 1G1核1M选择 Centos 32位 还是 Centos 64位?

    前几天有个疑惑,现有一台云主机是 1G1核1M使用 Centos 64位会不有点浪费. 还专门发信息询问老大 Karson,老大说现 FastAdmin 都是三个1,也是 64 位的. 看 FastA ...

  2. Spring整合JavaMail

    1.添加jar包 #此处省略spring基础相关jar包描述,以下是发送邮件相关jar包 <dependency> <groupId>org.springframework&l ...

  3. windows10 vs2015编译 带nginx-rtmp-module 模块的32位nginx

    1 下载必要软件  从 http://xhmikosr.1f0.de/tools/msys/下载msys:http://xhmikosr.1f0.de/tools/msys/MSYS_MinGW-w6 ...

  4. jq form表单自动赋值

    (function ($) { $.fn.extend({ initForm: function (options) { //默认参数 var defaults = { formdata: " ...

  5. 定位SDK返回时间问题

    关于怎么使用定位SDK ,这里不做介绍,可以去看api:http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0 ...

  6. Go - 常量与运算符

    常量的定义 1. 常量的值在编译的时候就已经确定.所以,在定义的时候就必须赋值 2. 使用 const 关键字来声明常量.赋值形式与变量类似: // 标准定义 const PI int = 3.14 ...

  7. 浅谈PHP面向对象编程(六、自动加载及魔术方法)

    6.0 自动加载及魔术方法  6.1 自动加载 在PHP开发过程中,如果希望从外部引入一个class.通常会使用incluae和requre方法把定义这个class的文件包含进来.但是,在大型的开发项 ...

  8. maven release plugin插件

    1.打包版本区别 SNAPSHOT 快照版本(开发阶段,不稳定,容易出现bug)RELEASE 正式版本(外部依赖使用阶段,稳定,很少出现bug)Tag :标记每次代码提交的版本(比较稳定,类似分支) ...

  9. python socket打造一个定位工具

    前言: 刚刚学习socket,打算后期得学习 怎么写exploit. 原理: 其实很简单,客户端写个爬虫.然后将获取到的IP放入高德地图 在通过socket发送.利用ngrok达到能外网搞事. 准备: ...

  10. 1.Linux下生成密钥

    1.Linux下生成密钥 ssh-keygen的命令手册,通过”man ssh-keygen“命令: 通过命令”ssh-keygen -t rsa“ 生成之后会在用户的根目录生成一个 “.ssh”的文 ...