ROS中robot_navigation中param文件夹参数配置问题
导航功能包集需要两个代价地图来保存世界中的障碍物信息。一张代价地图用于路径规划,在整个环境中创建长期的路径规划,另一个用于局部路径规划与避障。有一些参数两个地图都需要,而有一些则各不相同。因此,对于代价地图,有三个配置项: common配置项, global配置项和local配置项。
全局导航:
在已建立的地图上做一个远距离目标的路径规划。
局部导航:
在正在建立的地图上做近距离目标同时要实时避开障碍物的路径规划。
robot_navigation中param文件夹分析
基本参数配置
基本参数配置在param文件夹中costmap_common_params.yaml。内容如下:
obstacle_range: 2.5
raytrace_range: 3.0
footprint: [[x0, y0], [x1, y1], ... [xn, yn]]
#robot_radius: ir_of_robot
inflation_radius: 0.55
observation_sources: laser_scan_sensor point_cloud_sensor
laser_scan_sensor: {sensor_frame: frame_name, data_type: LaserScan, topic: topic_name, marking: true, clearing: true}
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.5米,这意味着机器人只会更新以其底盘为中心半径2.5米内的障碍信息。 “raytrace_range”参数确定的空白区域内光线追踪的范围。 设置为3.0米意味着机器人将试图根据传感器读数清除其前面3.0米远的空间。
footprint:将机器人的几何参数告诉导航功能包集。设置机器人的footprint或机器人半径(如果是圆形的)。 指定的footprint时,机器人的中心被认为是在(0.0,0.0),顺时针和逆时针规范都支持。 我们还将设置代价地图膨胀半径。膨胀半径应该设置为障碍物产生代价的最大距离。 例如,膨胀半径设定在0.55米意味着机器人所有路径与障碍物保持0.55米或更的远离(具有同样的代价)。
inflation_radius:给定机器人与障碍物之间必须要保持的最小距离。按照机器人的内切半径对障碍物进行膨胀处理。
observation_sources:参数定义了一系列传递空间信息给代价地图的传感器。每个传感器定义在下一行。
laser_scan_sensor和point_cloud_sensor: 设置“observation_sources”中提到的传感器。这个例子定义了 laser_scan_sensor。 “frame_name”参数应设置为传感器坐标帧的名称,“data_type”参数应设置为LaserScan或PointCloud,这取决于主题使用的消息,“topic_name”应该设置为发布传感器数据的主题的名称。 “marking”和“clearing”参数确定传感器是否用于向代价地图添加障碍物信息,或从代价地图清除障碍信息,或两者都有。
全局代价地图配置
全局代价地图配置在param文件夹中global_costmap_params.yaml。内容如下:
global_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 5.0
static_map: true
global_costmap和robot_base_frame:
“global_frame”参数定义了代价地图运行所在的坐标帧。在这种情况下,我们会选择/map坐标帧。 “robot_base_frame”参数定义了代价地图参考的的机器底盘的坐标帧。
update_frequency:地图更新的频率。
static_map: 是否使用一个地图或者地图服务器来初始化全局代价地图,如果不使用静态地图,这个参数为false。
局部代价地图的配置:
局部代价地图配置在param文件夹中local_costmap_params.yaml。内容如下:
local_costmap:
global_frame: odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency: 2.0
static_map: false
rolling_window: true
width: 6.0
height: 6.0
resolution: 0.05
publish_frequency:发布信息的频率,也就是costmap可视化信息发布的频率。
rolling_window:在机器人运动过程中,代价地图始终以机器人为中心,这个在源码里是个if函数。
width、height、resolution:代价地图的的尺寸和分辨率,单位都是m。一般情况下resolution的数值与建的static map的一致。
局部规划器配置:
Base_local_planner负责根据全局路径规划计算速度命令并发送给机器人基座。 我们需要根据我们的机器人规格配置一些选项使其正常启动与运行。局部规划器配置在param文件夹中base_local_planner_params.yaml。内容如下:
TrajectoryPlannerROS:
max_vel_x: 0.45
min_vel_x: 0.1
max_vel_theta: 1.0
min_in_place_vel_theta: 0.4
acc_lim_theta: 3.2
acc_lim_x: 2.5
acc_lim_y: 2.5
holonomic_robot: false
上面的第一部分参数定义机器人的速度限制。 第二部分定义了机器人的加速度的限制。
holonomic_robot: 如果你的机器人是全向移动机器人那么此值为true,笔者的为差分型的。
导航功能包集:
导航功能包集配置在param文件夹中move_base_params.yaml。内容如下:
controller_frequency: 2.0
controller_patience: 15.0
planner_frequency: 1.0
planner_patience: 5.0
conservative_reset_dist: 0.2
oscillation_timeout: 10.0
oscillation_distance: 0.2
clearing_rotation_allowed: false
蒙特卡罗定位(AMCL)算法:
局部规划器配置在param文件夹中amcl_params.yaml。内容如下:
use_map_topic: true
odom_frame_id: "odom"
base_frame_id: "base_footprint"
global_frame_id: "map"
## Publish scans from best pose at a max of 10 Hz
odom_model_type: "diff"
odom_alpha5: 0.1
gui_publish_rate: 10.0
laser_max_beams: 60
laser_max_range: 12.0
min_particles: 500
max_particles: 2000
kld_err: 0.05
kld_z: 0.99
odom_alpha1: 0.2
odom_alpha2: 0.2
## translation std dev, m
odom_alpha3: 0.2
odom_alpha4: 0.2
laser_z_hit: 0.5
aser_z_short: 0.05
laser_z_max: 0.05
laser_z_rand: 0.5
laser_sigma_hit: 0.2
laser_lambda_short: 0.1
laser_model_type: "likelihood_field" # "likelihood_field" or "beam"
laser_likelihood_max_dist: 2.0
update_min_d: 0.25
update_min_a: 0.2
resample_interval: 1
## Increase tolerance because the computer can get quite busy
transform_tolerance: 1.0
recovery_alpha_slow: 0.001
recovery_alpha_fast: 0.1
min_particles和max_particles:设定算法运行所允许的粒子的最小和最大数量,如果粒子数多,就算会更加精确,当然也后悔更加消耗cpu资源。
laser_model_type:配置激光雷达类型。也可以设置beam光束雷达。
laser_likelihood_max_dist:设置地图中障碍物膨胀的最大距离。