导航功能包使用两种代价地图存储周围环境中的障碍信息:
一种用于全局路径规划(global_costmap),一种用于本地路径规划和实时避障(local_costmap)。
两种代价地图需要使用一些共用的或独立的配置文件:通用配置文件、全局规划配置文件和本地规划配置文件。
1.通用配置文件(Common Configuration, local_costmap & global_costmap)
代价地图用来存储周围环境的障碍信息,其中需要声明地图关注的机器人传感器消息,以便于地图信息的更新
costmap_common_params.yaml
obstacle_range: 2.5
raytrace_range: 3.0
robot_radius: 0.165
inflation_radius: 0.1
max_obstacle_height: 0.6
min_obstacle_height: 0.0
observation_sources: scan
scan: {data_type: LaserScan, topic: /scan, marking: true, clearing: true, expected_update_rate: 0}
详细参数
obstacle_range: 2.5
raytrace_range: 3.0
这两个参数用来设置代价地图中障碍物的相关阈值。
obstacle_range参数用来设置机器人检测障碍物的最大范围,若设置为2.5,则表示在2.5m范围内检测到的障碍信息才会在地图中进行更新。raytrace_range参数用来设置机器人检测自由空间的最大范围,若设置为3.0,则表示在3m范围内,机器人将根据传感器的信息清除范围内的自由空间。
robot_radius: 0.165
inflation_radius: 0.1
footprint参数用来设置机器人在二维地图上的占用面积,参数以机器人的中心作为坐标原点。
如果机器人外形是圆形,则需要设置机器人的外形半径robot_radius。
inflation_radius参数用来设置障碍物的膨胀参数,也就是机器人应该与障碍物保持的最小安全距离,这里设置为0.1,表示为机器人规划的路径应该与障碍物保持0.1m以上的安全距离。
max_obstacle_height: 0.6
min_obstacle_height: 0.0
这两个参数用来描述障碍物的最大高度和最小高度。
observation_sources: scan
scan: {data_type: LaserScan, topic: /scan, marking: true, clearing: true, expected_update_rate: 0}
observation_sources参数列出了代价地图需要关注的所有传感器信息,每个传感器信息都会在后面列出详细内容。
以激光雷达为例,sensor_frame表示传感器的参考系名称,data_type表示激光数据或者点云数据使用的消息类型
topic_name表示传感器发布的话题名称,而marking和clearing参数用来表示是否需要使用传感器的实时信息来添加或清除代价地图中的障碍物信息。
2.全局规划配置文件(Global Configuration, global_costmap)
全局规划配置文件用于存储配置全局代价地图的参数
global_costmap_params.yaml
global_costmap:
global_frame: /map
robot_base_frame: /base_footprint
update_frequency: 1.0
publish_frequency: 0
static_map: true
rolling_window: false
resolution: 0.01
transform_tolerance: 1.0
map_type: costmap
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
local_costmap:
global_frame: /odom
robot_base_frame: /base_footprint
update_frequency: 3.0
publish_frequency: 1.0
static_map: false
rolling_window: true
width: 6.0
height: 6.0
resolution: 0.01
transform_tolerance: 1.0
map_type: costmap
global_frame、robot_base_frame、update_frequency和static_map参数的意义与全局规划配置文件中的参数相同。publish_frequency参数用于设置代价地图发布可视化信息的频率,单位是Hz。
rolling_window参数用来设置在机器人移动过程中是否需要滚动窗口,以保持机器人处于中心位置。
width、height和resolution参数用于设置代价地图的长(米)、高(米)和分辨率(米/格)。虽然分辨率设置的与静态地图的不同,但是一般情况下两者是相同的。
4. 本地规划器配置
本地规划器base_local_planner的主要作用是,根据规划的全局路径计算发布给机器人的速度控制指令。
该规划器要根据机器人的规格配置相关参数
base_local_planner_params.yaml
controller_frequency: 3.0
recovery_behavior_enabled: false
clearing_rotation_allowed: false
TrajectoryPlannerROS:
max_vel_x: 0.3
min_vel_x: 0.05
max_vel_y: 0.0 # zero for a differential drive robot
min_vel_y: 0.0
min_in_place_vel_theta: 0.5
escape_vel: -0.1
acc_lim_x: 2.5
acc_lim_y: 0.0 # zero for a differential drive robot
acc_lim_theta: 3.2
holonomic_robot: false
yaw_goal_tolerance: 0.1 # about 6 degrees
xy_goal_tolerance: 0.1 # 10 cm
latch_xy_goal_tolerance: false
pdist_scale: 0.9
gdist_scale: 0.6
meter_scoring: true
heading_lookahead: 0.325
heading_scoring: false
heading_scoring_timestep: 0.8
occdist_scale: 0.1
oscillation_reset_dist: 0.05
publish_cost_grid_pc: false
prune_plan: true
sim_time: 1.0
sim_granularity: 0.025
angular_sim_granularity: 0.025
vx_samples: 8
vy_samples: 0 # zero for a differential drive robot
vtheta_samples: 20
dwa: true
simple_attractor: false