调参作为智能车比赛中最为耗时和痛苦的事情,在网上浏览了许多人的调参经验的博客却发现大家分享的内容对新手并不太友好,所以作为一枚小白打算记录一下此次参加智能车比赛中调参遇到的问题以及经验所得,不仅希望能帮助到更多人,让他们少走弯路,节省时间。同时也是对自己这段经历的一次总结回顾。
一、调参准备工作
在正式开始调参之前我们需要做足充分的准备,如:知晓每个yaml文件里每个参数的意义(尤其的重要!!!!!希望各位莫要偷懒,老老实实地将各个参数的意思在文件中注释出来),知晓膨胀区域等基础概念。
好了,准备工作完成到位后,我们要开始调参了。面对如此多的文件和参数我们到底应该从哪处着手呢?先从调配出一份合适的全局路径规划开始!于是我们需要将目光放在costmap_common_param.yaml ,global_costmap_params.yaml ,global_planner_params.yaml这三份文件上。
costmap_common_param.yaml
该文件是move_base 在全局路径规划与本地路径规划时调用的通用参数,包括:机器人的尺寸、距离障碍物的安全距离、传感器信息等。
#这个文件主要用于配置基本的参数,这些参数会被用于local_costmap和global_costmap http://wiki.ros.org/navigation/Tutorials/RobotSetup
#定义了将要向costmap传递信息的传感器列表,设定导航包所使用的传感器发布的话题,同时作为以下的命名空间
observation_sources: scan
#topic表示传感器发布的话题名称,而marking和clearing参数用来表示是否需要使用传感器的实时信息来添加或清除代价地图中的障碍物信息
scan: {data_type: LaserScan, topic: /scan, marking: true, clearing: true}
#将障碍物插入代价地图的最大范围/米,检测到一个距离小于2.5m的障碍物,就会将这个障碍物引入到代价地图中
obstacle_range: 2.5
#从地图中扫描出障碍物的最大范围/米,实时观察3m范围内代价地图中的障碍物
raytrace_range: 3
#代价比例系数,越大则代价值越小
cost_scaling_factor: 36.0
#将机器人的几何参数告诉导航功能包集,footprint表示多边形面积,robot_radius表示圆形
#footprint: [[0.1, 0.15], [-0.1, 0.15], [-0.1, -0.15], [0.1, -0.15]]
robot_radius: 0.01
#等待坐标变换发布信息的超时时间
transform_tolerance: 2
#膨胀半径,扩展在碰撞区域以外的代价区域,给定机器人与障碍物之间必须要保持的最小距离0.25
inflation_radius: 0.25
#代价地图精度,即每个网格的尺寸
resolution: 0.01
map_type: costmap
其中的代价比例系数以及膨胀半径是否合适都会对后续的导航产生巨大的影响和干扰。
global_costmap_param.yaml
该文件用于全局代价地图参数设置
#Description:
# 全局代价地图参数配置文件,各参数的意义如下:
global_costmap:
global_frame: map #地图坐标系
robot_base_frame: base_link #机器人坐标系
#膨胀半径,扩展在碰撞区域以外的代价区域,使得机器人规划路径避开障碍物
#inflation_radius: 19.25
#代价比例系数,越大则代价值越小
#cost_scaling_factor: 29.5 #20.5
update_frequency: 1.8 #代价地图更新频率
publish_frequency: 0.5 #代价地图的发布频率
transform_tolerance: 10 #等待坐标变换发布信息的超时时间
static_map: false # 是否使用一个地图或者地图服务器来初始化全局代价地图,如果不使用静态地图,这个参数为false.
plugins:
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
调参利器rqt
rosrun rqt_reconfigure rqt_reconfigure
它可以帮助我们进行动态调参,尤其是在我们需要调节出一份合适的膨胀半径以及一份合适的路径规划时,它的帮助是巨大的,能帮助我们节省不少不必要的时间去重启rviz等一系列反复的动作。强烈推荐!!!!!!!!!!!!当然在开始使用rqt调参之前我们需要让小车不在地图上乱跑,乖乖地呆在起点,让我们可以自由舒适地调节出合适的全局路径。这时我们就需要使用到launch文件标签之remap,在move_base节点的调用launch文件中将我们的速度话题换个名称从而让move_base无法订阅到我们的cmd_vel的速度话题,从而让小车没有速度输出,安静地呆在原地。