标签:
=== 我遇到的问题是 obstacle layer的刷新频率太低 ===
costmap_2d包下的所有类文档:http://docs.ros.org/hydro/api/costmap_2d/html/annotated.html
其中,值得注意滴是 costmap_2d::ObservationBuffer 这个类,这个类会被 costmap_2d::ObstacleLayer 调用,obstacle_layer.cpp(Link of source code)
其中,observation_keep_time和expected_update_rate应该是决定刷新频率的参数,其默认是0.0
但实际nav_test.py运行时,这个参数是1.0, 我用rosparam set改成0.0了也没实际效果。
I‘m trying to solve this issue....
本节介绍编程时具体如何建立上述的对象,参数配置说明,层定义等.
这 costmap_2d::Costmap2DROS 对象是一个对 costmap_2d::Costmap2D 对象的Wrapper封装器,把它的功能暴露成一个C++ ROS Wrapper . 它是在ROS的命名空间里(这里我们在下面就以~<name>开头)进行特殊的初始化。
一个创建 costmap_2d::Costmap2DROS 对象的代码例子如下:
-------------------Code:-----------------
#include <tf/transform_listener.h>
#include <costmap_2d/costmap_2d_ros.h>
...
...
tf::TransformListener tf_lsnr(ros::Duration(10));
costmap_2d::Costmap2DROS costmap_obj("my_costmap",tf);
--------------------------------------------
关于老的参数的注意事项:
很多参数都相对hydro版本以前的版本变化了,为了更大化参数配置的自由度。那些老参数的命名空间还是会work, 没有必要reconfigure你的robot. 但是,当costmap代码运行时,首先发生的是,参数们将会被从他们老的地方移除,然后放到the new locations with plugins properly added.
~<name>/footprint (geometry_msgs/Polygon)
Specification for the footprint of the robot. This replaces the previous parameter specification of the footprint.
~<name>/grid (nav_msgs/OccupancyGrid)
The values in the costmap
~<name>/grid_updates (map_msgs/OccupancyGridUpdate)
The values of the updated area of the costmap
~<name>/voxel_grid (costmap_2d/VoxelGrid)
Optionally advertised when the underlying occupancy grid uses voxels and the user requests the voxel grid be published.
costmap_2d::Costmap2DROS 对象是可以高度参数配置化的对象,参数涉及到的模块有:坐标系、tf, rate节拍, 机器人的解析,and, 地图管理。
==坐标系和tf参数==
~<name>/global_frame (string, default: "/map")
The global frame for the costmap to operate in.
定义costmap操作时,所参考的全局地图,默认是/map,String类型
~<name>/robot_base_frame (string, default: "base_link")
The name of the frame for the base link of the robot.
机器人基础坐标系
~<name>/transform_tolerance (double, default: 0.2)
Specifies the delay in transform (tf) data that is tolerable in seconds.
定义了tf数据可以容忍(tolerable)延迟到达的时间.
This parameter serves as a safeguard to losing a link in the tf tree while still allowing an amount of latency the user is comfortable with to exist in the system. For example, a transform being 0.2 seconds out-of-date may be tolerable, but a transform being
8 seconds out of date is not. If the tf transform between the coordinate frames specified by the global_frame and robot_base_frame parameters is transform_tolerance seconds older than ros::Time::now(), then the navigation stack will stop the robot.
如果一个tf变换超过了tolerance限定的时间,机器人将被停止。
==rate节拍参数==
~<name>/update_frequency (double, default: 5.0)
The frequency in Hz for the map to be updated.
地图更新速度,Hz
~<name>/publish_frequency (double, default: 0.0)
The frequency in Hz for the map to be publish display information.
地图发布到显示信息的频率
== 地图管理参数 ==
~<name>/rolling_window (bool, default: false)
Whether or not to use a rolling window version of the costmap.
是不是要用滚动窗口模式(机器人不动)来查看地图
If the static_map parameter is set to true, this parameter must be set to false. 如果static_map参数设置为1,这个参数就要设置为0
== 下面这些参数是可以被有些层重写的,名字上讲,就是the static map层 ==
~<name>/width (int, default: 10)
The width of the map in meters.
~<name>/height (int, default: 10)
The height of the map in meters.
~<name>/resolution (double, default: 0.05)
The resolution of the map in meters/cell.
~<name>/origin_x (double, default: 0.0)
The x origin of the map in the global frame in meters.
~<name>/origin_y (double, default: 0.0)
The y origin of the map in the global frame in meters.
"width," "height," 和"resolution" 设置设置costmap代价地图长(米)、高(米)和分辨率(米/格)。分辨率可以设置的与静态地图不同,但是一般情况下两者是相同的。
**以上就是costmap参数配置说明**这些参数是存放在 local_costmap_params.yaml 文件中的
(value of global_frame parameter) → (value of robot_base_frame parameter)
Usually provided by a node responsible for odometry or localization such as amcl(link).
通常都是由负责odometry或者定位的node,比如amcl node,来提供这个tr 变换。
For C++ level API documentation on the costmap_2d::Costmap2DROS class, please see the following page:Costmap2DROS C++ API
以上就是对wiki/costmap_2D官方页面的不准确翻译,纯当学习。下面我想分享一个 古-月 的博客《ROS探索总结(十九)--如何配置机器人的导航功能》中有关cost_map代价地图配置的内容:
导航功能包使用两种代价地图存储周围环境中的障碍信息,一种用于全局路径规划,一种用于本地路径规划和实时避障。两种代价地图需要使用一些共同和独立的配置文件:通用配置文件,全局规划配置文件,本地规划配置文件。以下将详细讲解这三种配置文件:
(1)通用配置文件(Common Configuration (local_costmap) &(global_costmap))
代价地图用来存储周围环境的障碍信息,其中需要注明地图关注的机器人传感器消息,以便于地图信息进行更行。针对两种代价地图通用的配置选项,创建名为costmap_common_params.yaml的配置文件:
详细解析以上配置文件的内容:
这两个参数用来设置代价地图中障碍物的相关阈值。obstacle_range参数用来设置机器人检测障碍物的最大范围,设置为2.5意为在2.5米范围内检测到的障碍信息,才会在地图中进行更新。raytrace_range参数用来设置机器人检测自由空间的最大范围,设置为3.0意为在3米范围内,机器人将根据传感器的信息,清除范围内的自由空间。
这些参数用来设置机器人在二维地图上的占用面积,如果机器人外形是圆形,则需要设置机器人的外形半径。所有参数以机器人的中心作为坐标(0,0)点。inflation_radius参数是设置障碍物的膨胀参数,也就是机器人应该与障碍物保持的最小安全距离,这里设置为0.55意为为机器人规划的路径应该与机器人保持0.55米以上的安全距离。
observation_sources参数列出了代价地图需要关注的所有传感器信息,每一个传感器信息都将在后边列出详细信息。
以激光雷达为例,sensor_frame标识传感器的参考系名称,data_type表示激光数据或者点云数据使用的消息类型,topic_name表示传感器发布的话题名称,而marking和clearing参数用来表示是否需要使用传感器的实时信息来添加或清楚代价地图中的障碍物信息。
(2)全局规划配置文件(Global Configuration (global_costmap))
全局规划配置文件用来存储用于全局代价地图的配置参数,我们使用global_costmap_params.yaml来命名,内容如下:
global_frame参数用来表示全局代价地图需要在那个参考系下运行,这里我们选择了map这个参考系。robot_base_frame参数表示代价地图可以参考的机器人本体的参考系。update_frequency参数绝地全局地图信息更新的频率,单位是Hz。static_map参数决定代价地图是否需要根据map_server提供的地图信息进行初始化,如果你不需要使用已有的地图或者map_server,最好将该参数设置为false。
(3)本地规划配置文件(Local Configuration (local_costmap))
本地规划配置文件用来存储用于本地代价地图的配置参数,命名为local_costmap_params.yaml,内容如下:
"global_frame", "robot_base_frame","update_frequency", 和 "static_map"参数的意义与全局规划配置文件中的参数相同。publish_frequency设置代价地图发布可视化信息的频率,单位是Hz。rolling_window参数是用来设置在机器人移动过程中是否需要滚动窗口,以保持机器人处于中心位置。"width," "height," 和"resolution" 设置设置代价地图长(米)、高(米)和分辨率(米/格)。分辨率可以设置的与静态地图不同,但是一般情况下两者是相同的。
ROS 进阶学习笔记(16):ROS导航1:关于Costmap_2d Package (代价地图包)
标签:
原文地址:http://blog.csdn.net/sonictl/article/details/51518492