在launch文件中加载yaml的配置文件,文件中有参数的赋值,参数加载后就成为ros中的参数。
在ros节点的初始化中,使用这些配置参数。其格式为private_nh.param(“参数名称”,被赋值变量,默认值),
private_nh.param("base_global_planner", global_planner,
std::string("navfn/NavfnROS"));
private_nh.param("base_local_planner", local_planner,
std::string("base_local_planner/TrajectoryPlannerROS"));
private_nh.param("global_costmap/robot_base_frame", robot_base_frame_,
std::string("base_link"));
在launch文件中加载的有用配置文件共6个,逐个介绍如下:
该文件被global_costmap、local_costmap共同使用。
参数含义:
robot_radius: 如果机器人是圆形,则指定机器人的半径;
footprint: [[x0, y0], [x1, y1], ... [xn, yn]] ;如果机器人非圆形,则指定机器人的轮廓;
map_type: voxel 地图类型;
# 障碍物层的参数配置
obstacle_layer:
enabled: true # 使能障碍物层;
max_obstacle_height: 0.6 #考虑的最大障碍物高度;
origin_z: 0.0
z_resolution: 0.2
z_voxels: 2
unknown_threshold: 15
mark_threshold: 0
combination_method: 1
track_unknown_space: true # true 禁止全局路径规划穿越未知区域;
obstacle_range: 2.5 # 添加障碍物范围,一方面考虑激光范围,另外范围越大越耗计算资源;
raytrace_range: 3.0 # 清除障碍物范围;
publish_voxel_map: false
observation_sources: scan # 数据源;
scan:
{
frame_name: base_scan, # Scan的基坐标;
data_type: LaserScan, # scan数据类型;
topic: scan, # scan的话题名称;
inf_is_valid: true, # scan的无穷远数据是否有效;
marking: true, # 是否根据scan添加障碍物;
clearing: true, # 是否根据scan清除障碍物;
min_obstacle_height: 0.0, # scan检测到的最小有效障碍物高度;
max_obstacle_height: 0.35} # scan检测到的最大有效障碍物高度;
# for debugging only, let's you see the entire voxel grid
# 膨胀层参数配置
inflation_layer:
enabled: true # 是否使能膨胀层;
cost_scaling_factor: 5.0 #膨胀层的指数衰减速度,值越小衰减越慢(default: 10);
inflation_radius: 1.2 #最大有效膨胀半径,即安装指数衰减扩张的最大半径,计算障碍物cos函数时使用。
# 静态层参数配置
static_layer:
enabled: true # 是否使用静态层;
注解:
1、膨胀层的作用:做动态路径规划时,计算与障碍物的距离的代价值。cost_scaling_factor,表示远离障碍物时,代价值的衰减系数;inflation_radius表示膨胀层的最大考虑半径。
2、机器人轮廓:是为了防止机器人碰撞障碍物生成的序列点,在规划中代价为布尔运算,即碰撞即失效。
局部代价地图配置参数文件。
local_costmap:
global_frame: /map # odom 全局坐标系(这是用来做什么的?局部路径规划用?);
robot_base_frame: /base_footprint # 机器人基准坐标系(局部路径规划用?);
update_frequency: 3.0 #2.0 # 局部代价地图的更新频率(内部计算使用);
publish_frequency: 1.0 # 局部代价地图的发布频率 (Rviz显示使用);
static_map: false # 是否为静态地图属性,代价地图位动态,设置为否;
rolling_window: true # 是否位滚动窗口(随着机器人移动而滑动);
width: 4.0 # 宽度;
height: 4.0 # 高度(长度);
resolution: 0.05 # 栅格地图分辨率;
transform_tolerance: 1 # 0.5 订阅tf时的时间差冗余量;
plugins: # 局部代价地图使用的地图插件(顺序颠倒会影响效果)
- {name: static_layer, type: "costmap_2d::StaticLayer"} # 静态地图层
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"} # 障碍物层
- {name: inflation_layer, type: "costmap_2d::InflationLayer"} # 膨胀层
全局代价地图参数配置文件。
global_costmap:
global_frame: /map # 全局坐标系(全局路径规划用?)
robot_base_frame: /base_footprint # 机器人基准坐标系(局路径规划用?)
update_frequency: 3.0 #1 # 更新频率(内部计算用);
publish_frequency: 0.5 # 发布频率(Rviz显示用);
static_map: true # 是否位静态地图(全局地图位静态地图吗?那为什么还考虑障碍物层呢?);
transform_tolerance: 1 #0.5 订阅tf时的时间差冗余量;
plugins: # 全局代价地图使用的地图插件
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
局部路径规划参数配置文件。
TrajectoryPlannerROS: # 规划器名称?
# Robot Configuration Parameters
max_vel_x: 0.6 # x方向前进最大线速度
min_vel_x: -0.1 # x方向倒退最大线速度
max_vel_theta: 0.6 # 正向旋转最大速度
min_vel_theta: -0.6 # 反向旋转最大速度
min_in_place_vel_theta: 0.1 # 原地转向最大速度(思考:180度转向速度慢,是否因此导致?)
acc_lim_x: 0.6 # x方向的最大线加速度
acc_lim_y: 0.0
acc_lim_theta: 0.6 # 最大角加速度
# 到达目标位置的误差冗余参数
xy_goal_tolerance: 0.5 # xy平面上的直线距离误差;
yaw_goal_tolerance: 3.0 # 角度朝向误差;
latch_xy_goal_tolerance: false # 什么含义?
# 是否全向轮机器人,否则为差动轮;
holonomic_robot: false
# 动态路径规划仿真预测时间步长
sim_time: 2.0 # 预测时间;
sim_granularity: 0.05 # 细分步长(距离);
angular_sim_granularity: 0.087 # 细分转向(角度);
vx_samples: 10 # x 方向速度采样个数;
vtheta_samples: 20 # 角速度采样个数;
controller_frequency: 10 # 局部规划的跟新频率;
# 注解与思考:更新考虑因素与地图及机器人状态有关系,每一次更新后产生的最优轨迹的线速度、角速度位固定值,即一次更新仅能产生一个圆弧运动,多次更新就可以产生复杂运动曲线。
# 轨迹评分方面的参数
# (cost =
# pdist_scale * (轨迹横向偏差)
# + gdist_scale * (轨迹局部目标距离)
# + occdist_scale * (障碍物代价)
meter_scoring: false # 是否使用米作为单位.(建议使用,这样更标准,不依赖地图分辨率);
pdist_scale: 0.6 # 横向偏差权重;
gdist_scale: 0.8 # 目标距离权重;
occdist_scale: 0.1 # 障碍物代价权重 ;
heading_lookahead: 0.325 # 原地转向是前瞻距离;
heading_scoring: false # 朝向评分(需要研究其实际作用);
heading_scoring_timestep: 0.8 # 判断朝向代价的时间步长;
dwa: false # 选择使用 DWA还是 Trajectory Rollout方法;
publish_cost_grid_pc: false #是否发布代价网格图;
# 放置震荡
oscillation_reset_dist: 0.4 #移动最小距离后,震荡约束条件复位;
forward_point_distance: 0.8 # (这是什么含义?)
move_base基础配置文件。
shutdown_costmaps: false # 这是什么含义?
controller_frequency: 10.0 # 哪个模块的控制频率?
controller_patience: 15.0 #1.0 # 实时性的容错时间
planner_frequency: 1.0 # 规划频率
planner_patience: 5.0 # 规划实时性的容错时间
oscillation_timeout: 10.0 # 震荡超时报错时间
oscillation_distance: 0.2
# 局部路径规划器的选择,默认为: trajectory rollout
# base_local_planner: "dwa_local_planner/DWAPlannerROS"
# 全局路径规划器的选择,有navfn/NavfnROS、global_planner/GlobalPlanner、carrot_planner/CarrotPlanner三种;
base_global_planner: "navfn/NavfnROS"
# 恢复机制选择
recovery_behavior_enabled: true
recovery_behaviors: [{"name":"super_conservative_reset1", "type":"clear_costmap_recovery/ClearCostmapRecovery"}]
reset_distance: 5.0
全局路径规划参数配置
此文件应该没有被用到!考虑删除!
navfn/NavfnROS全局路径规划的参数配置。
NavfnROS:
visualize_potential: true # 是否发布可视化路径至Rviz;
allow_unknown: false # 是否穿越未知区域;
#需要设置 track_unknown_space: true,在 obstacle / voxel layer (in costmap_commons_param) 中,使得地图中有未知区域。
planner_window_x: 0.0 # x方向的限制(什么含义?)
planner_window_y: 0.0 # y方向的限制(什么含义?)
default_tolerance: 2.0 # 目标点的容错量,当目标点在障碍物中时,可以有一定的容错。
#值越大,搜索时间越长。(是否考虑降低呢?)