我们的机器人使用两种导航算法在地图中移动:全局导航(global)和局部导航(local)。这些导航算法通过代价地图来处理地图中的各种信息,导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环境的障碍信息。一个costmap进行全局规划,在整个环境做长期的规划,而另一个是用于局部规划和避障。

全局导航:

在已建立的地图上做一个远距离目标的路径规划。

局部导航:

在正在建立的地图上做近距离目标同时要实时避开障碍物的路径规划。

代价地图的参数用于配置算法的计算行为。下面进行分析:

基本参数的的配置:

在你的launch(launch文件编写http://www.cnblogs.com/zjiaxing/p/5542614.html)里,首先创建一个costmap_common_params.yaml文件,内容:

  1. obstacle_range: 2.5
    raytrace_range: 3.0
  2. footprint: [[x0, y0], [x1, y1], ... [xn, yn]]
  3. #robot_radius: ir_of_robot
  4. inflation_radius: 0.55
  5.  
  6. observation_sources: laser_scan_sensor point_cloud_sensor
  7.  
  8. laser_scan_sensor: {sensor_frame: frame_name, data_type: LaserScan, topic: topic_name, marking: true, clearing: true}
  9.  
  10. point_cloud_sensor: {sensor_frame: frame_name, data_type: PointCloud, topic: topic_name, marking: true, clearing: true}

这个文件主要用于配置基本的参数,这些参数会被用于local_costmap和global_costmap.

obstacle_range 和raytrace_range:表示传感器的最大探测距离,并在代价地图中引入探测障碍物信息。obstacle_range用于障碍物探测,例如机器人检测到一个距离小于2.5m的障碍物,就会将这个障碍物引入到代价地图中 raytrace_range用于机器人运动过程中,实时清除代价地图中的障碍物,例如该机器人将清除前面距离3m(传感器获取的数据)的障碍物。并更新可移动的自由空间数据。其实我们用激光传感器是无法感知物体的形状和大小的,但是,这个测量结果足够定位的了。

footprint:将机器人的几何参数告诉导航功能包集。这样,机器人和障碍物之间保持一个合理的距离,也就是说,例如前方有个门,要提前探知机器人是否能穿过这个门。

inflation_radius:给定机器人与障碍物之间必须要保持的最小距离。按照机器人的内切半径对障碍物进行膨胀处理。

observation_sources:设定导航包所使用的传感器。

laser_scan_sensor和point_cloud_sensor:对传感器的坐标系和数据进行配置。这个也会用于代价地图添加和清除障碍物。例如,你可以用激光雷达传感器用于在代价地图添加障碍物,再添加kinect用于导航和清除障碍物。

全局代价地图的配置:

创建一个global_costmap_params.yaml文件,内容:

  1. global_costmap:
  2. global_frame: /map
  3. robot_base_frame: base_link
  4. update_frequency: 5.0
  5. static_map: true

global_costmap和robot_base_frame:定义机器人和地图之间的坐标变换,建立全局代价地图必须使用这个变换。

update_frequency:地图更新的频率。

static_map: 是否使用一个地图或者地图服务器来初始化全局代价地图,如果不使用静态地图,这个参数为false.

局部代价地图的配置:

创建一个local_costmap_params.yaml 文件,内容:

  1. local_costmap:
  2. global_frame: odom
  3. robot_base_frame: base_link
  4. update_frequency: 5.0
  5. publish_frequency: 2.0
  6. static_map: false
  7. rolling_window: true
  8. width: 6.0
  9. height: 6.0
  10. resolution: 0.05

publish_frequency:发布信息的频率,也就是costmap可视化信息发布的频率。

rolling_window:在机器人运动过程中,代价地图始终以机器人为中心,这个在源码里是个if函数。

width、height、resolution:代价地图的的尺寸和分辨率,单位都是m.一般情况下resolution的数值与建的static map的一致。

基本局部规划器配置:

创建base_local_planner_params.yaml 文件,内容:

  1. TrajectoryPlannerROS:
  2. max_vel_x: 0.45
  3. min_vel_x: 0.1
  4. max_vel_theta: 1.0
  5. min_in_place_vel_theta: 0.4
  6.  
  7. acc_lim_theta: 3.2
  8. acc_lim_x: 2.5
  9. acc_lim_y: 2.5
  10.  
  11. holonomic_robot: false

这个配置文件设定了机器人的最大和最小速度限制值,也设定了加速度的限值。

holonomic_robot: 如果你的机器人是全向移动机器人那么此值为true,笔者的为差分型的。

为了运行导航功能包集,还需要创建个启动文件 move_base.launch ,内容:

  1. <launch>
  2. <master auto="start"/>
  3.  
  4. <!-- Run the map server -->
  5. <node name="map_server" pkg="map_server" type="map_server" args="$(find your_map_package)/your_map.pgm your_map_resolution.yaml"/>
  6.  
  7. <!--- Run AMCL -->
  8. <include file="$(find amcl)/examples/amcl_diff.launch.launch" />
  9. <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
  10. <rosparam file="$(find your_nav_package)/launch/costmap_common_params.yaml" command="load" ns="global_costmap" />
  11. <rosparam file="$(find your_nav_package)/launch/costmap_common_params.yaml" command="load" ns="local_costmap" />
  12. <rosparam file="$(find your_nav_package)/launch/local_costmap_params.yaml" command="load" />
  13. <rosparam file="$(find your_nav_package)/launch/global_costmap_params.yaml" command="load" />
  14. <rosparam file="$(find your_nav_package)/launch/base_local_planner_params.yaml" command="load" />
  15. </node>
  16. </launch>

利用自适应蒙特卡罗定位(AMCL)算法完成机器人定位,此方法是一种在2D环境下移动机器人的概率统计方法,这种方法在ROS系统中的具体实现是通过在已知地图的基础上使用粒子滤波算法跟踪机器人的位姿。如果你在rviz里不通过2D Pose Estimate 按钮设定初始位姿,则AMCL会假定你的机器人从坐标原点开始运行。这个包默认激光雷达数据,你也可以修改源码,适应如双目之类的传感器。amcl_diff.launch.launch是专用于支持差分驱动机器人平台的 https://github.com/ros-planning/navigation/tree/indigo-devel/amcl 内容如下:

  1. <launch>
  2. <node pkg="amcl" type="amcl" name="amcl" output="screen">
  3. <!-- Publish scans from best pose at a max of Hz -->
  4. <param name="odom_model_type" value="diff"/>
  5. <param name="odom_alpha5" value="0.1"/>
  6. <param name="transform_tolerance" value="0.2" />
  7. <param name="gui_publish_rate" value="10.0"/>
  8. <param name="laser_max_beams" value=""/>
  9. <param name="min_particles" value=""/>
  10. <param name="max_particles" value=""/>
  11. <param name="kld_err" value="0.05"/>
  12. <param name="kld_z" value="0.99"/>
  13. <param name="odom_alpha1" value="0.2"/>
  14. <param name="odom_alpha2" value="0.2"/>
  15. <!-- translation std dev, m -->
  16. <param name="odom_alpha3" value="0.8"/>
  17. <param name="odom_alpha4" value="0.2"/>
  18. <param name="laser_z_hit" value="0.5"/>
  19. <param name="laser_z_short" value="0.05"/>
  20. <param name="laser_z_max" value="0.05"/>
  21. <param name="laser_z_rand" value="0.5"/>
  22. <param name="laser_sigma_hit" value="0.2"/>
  23. <param name="laser_lambda_short" value="0.1"/>
  24. <param name="laser_lambda_short" value="0.1"/>
  25. <param name="laser_model_type" value="likelihood_field"/>
  26. <!-- <param name="laser_model_type" value="beam"/> -->
  27. <param name="laser_likelihood_max_dist" value="2.0"/>
  28. <param name="update_min_d" value="0.2"/>
  29. <param name="update_min_a" value="0.5"/>
  30. <param name="odom_frame_id" value="odom"/>
  31. <param name="resample_interval" value=""/>
  32. <param name="transform_tolerance" value="0.1"/>
  33. <param name="recovery_alpha_slow" value="0.0"/>
  34. <param name="recovery_alpha_fast" value="0.0"/>
  35. </node>
  36. </launch>

min_particles和max_particles:设定算法运行所允许的粒子的最小和最大数量,如果粒子数多,就算会更加精确,当然也后悔更加消耗cpu资源。

laser_model_type:配置激光雷达类型。也可以设置beam光束雷达。

laser_likelihood_max_dist:设置地图中障碍物膨胀的最大距离。

ROS导航之参数配置和自适应蒙特卡罗定位的更多相关文章

  1. ROS导航包的介绍

    博客转载自:https://blog.csdn.net/handsome_for_kill/article/details/53130707#t3 ROS导航包的应用 利用ROS Navigation ...

  2. highcharts图表史上最全的参数配置(属性+事件)

    今天这里将给大家全全展现相关的参数配置: chart.events.addSeries:添加数列到图表中. chart.events.click:整个图表的绘图区上所发生的点击事件. chart.ev ...

  3. ROS机器人导航一 : 从英雄联盟到ROS导航

    写在前面: 这是这个系列的第一篇 本系列主要从零开始深入探索ROS(机器人操作系统)的导航和规划. 这个系列的目标,是让大家了解: 1.ROS的导航是怎么实现的 2.认识ROS里各种已有的导航算法,清 ...

  4. JVM参数配置 java内存区域

    java内存区域 一些基本概念 http://www.importnew.com/18694.html https://www.cnblogs.com/wangyayun/p/6557851.html ...

  5. Ubuntu虚拟机+ROS+Android开发环境配置笔记

    Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04. 比較稳定,且支持非常多ROS ...

  6. JVM性能优化--JVM参数配置,使用JMeter简单测试配合说明参数调优

    一.JVM参数配置 1.常见参数配置 -XX:+PrintGC 每次触发GC的时候打印相关日志 -XX:+UseSerialGC 串行回收 -XX:+PrintGCDetails 更详细的GC日志 - ...

  7. ROS入门笔记(二):ROS安装与环境配置及卸载(重点)

    ROS入门笔记(二):ROS安装与环境配置及卸载(重点) [TOC] 1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 发布时间 ...

  8. QT串口助手(二):参数配置

    作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 主要实现功能 串口参数的配置:波特率.数据位.停止位.校验位 本机串口设备的查询与添加显示 串口设备的手动更新与打 ...

  9. SharePoint 2013 托管导航及相关配置 <二>

    本文的思路是使用JQuery重写SharePoint自带托管导航的样式,其实思路和脚本都非常简单,引用一下JQuery脚本,然后重写导航的样式,把脚本放到母版页中,即可.当然,使用JQuery可以做很 ...

随机推荐

  1. iOS工程中的info.plist文件的完整研究

    原地址:http://blog.sina.com.cn/s/blog_947c4a9f0100zf41.html 们建立一个工程后,会在Supporting files下面看到一个"工程名- ...

  2. [Android] SQLite数据库之增删改查基础操作

        在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Un ...

  3. windwos at 以及shutdown使用方法

    at 12:00 shutdown -r如果今天12点没过去,今天12点重启,如果今天12点已经过去,明天12点重启.每天12点重启的命令是at 12:00 /every:Monday,Tuesday ...

  4. case when then 中的条件里面加上 and or 的处理方式

    错误的方式: end 正确1: end 正确2,去掉括号: end

  5. iOS CoreData (一) 增删改查

    代码地址如下:http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系映 ...

  6. unity3d的三种平面坐标系

    unity3d有如下三种平面坐标系: 1.屏幕坐标系 2.视口坐标系viewport 3.GUI坐标系

  7. (转)解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题

    解决WinDbg调试Dump文件不同环境mscordacwks.dll版本问题   开发人员提交一个dump文件(Windows Server 2008 R2),当前调试环境Windows Serve ...

  8. 測试赛C - Eqs(哈希)

    C - Eqs Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  9. 使用NoSQL Manager for MongoDBclient连接mongodb

    1.安装NoSQL Manager for MongoDB 下载地址:http://www.mongodbmanager.com/download 2.打开client,选server-new mon ...

  10. hdoj 1288 Hat's Tea

    Hat's Tea Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...