导航包设置--配置文件的编写
- 参考创客智造 、[ROS机器人开发实践]
在此之前,机器人已经能够tf发布坐标系信息,接收来自传感器的sensor_msgs/LaserScan
或sensor_msgs/PointCloud
的消息,并且使用tf
和nav_msgs/Odometry
发布里程消息,同时能够将导航包输出的cmd_vel
信息发送到底层移动基座上的直流电机,进行指定方向速度的移动。
机器人实现地图构建、定位、路径规划以及实时避障需要完成以下配置
依据上述配置信息完成机器人导航前的配置任务:
创建包
catkin_create_pkg my_robot_name_2dnav move_base my_tf_configuration_dep my_odom_configuration_dep my_sensor_configuration_dep
依赖包里包含了move_base,tf,odom里程计,传感器消息流。创建机器人配置的启动文件--新建my_robot_configuration.launch,包含了tf、传感器以及里程计的启动,是后续move_base导航的前提。
本教程将实现navigation导航包中代价地图的配置,完成move_base
功能包的配置。
导航包使用两种代价地图存储周围环境中的障碍物信息:一种用于全局路径规划(global_costmap),一种用于本地路径规划和实时避障(local_costmap)。两种代价地图都需要一些共用的或独立的配置文件:通用配置文件、全局配置文件和本地规划配置文件以及用于计算速度控制指令的本地规划器配置文件。
- 通用配置 (local_costmap) & (global_costmap)
创建一个名为costmap_common_params.yaml的文件,如下所示,并填写:
obstacle_range: 2.5 #机器人只会更新其地图包含距离移动基座2.5米以内的障碍物的信息
raytrace_range: 3.0 #机器人将尝试清除3米外的空间
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}
#marking和clearing表示是否需要用传感器的实时信息来添加或清除代价地图中的障碍物信息。
比如,设置代价地图只接受激光雷达的消息,则设置为:
observation_sources: scan
scan: {sensor_frame: base_laser, data_type: LaserScan, topic: /scan, marking: true, clearing: true}
- 全局规划配置(global_costmap)
创建global_costmap_params.yaml文件,代码如下:
global_costmap:
global_frame: /map #表示全局代价地图需要在哪个参考系下运行,选择map参考系
robot_base_frame: base_link #定义为机器人的基座的坐标系作为参考
update_frequency: 5.0 #决定全局地图的更新频率
static_map: true #决定代价地图是否需要根据map_server提供的地图信息进行初始化。如果没有使用现有的地图或地图服务器,将static_map参数设置为false。
- 本地规划配置文件(local_costmap)
本地规划配置文件用来存储本地代价地图的配置参数,命名为local_costmap_params.yaml,代码如下:
local_costmap:
global_frame: odom #表示本地代价地图需要在哪个参考系下运行,选择odom参考系
robot_base_frame: base_link #定义为机器人的基座的坐标系作为参考
update_frequency: 5.0 #决定本地代价地图的更新频率
publish_frequency: 2.0 #代价地图发布可视化信息的频率
static_map: false #决定代价地图是否需要根据map_server提供的地图信息进行初始化。如果没有使用现有的地图或地图服务器,将static_map参数设置为false。
rolling_window: true #参数设置为true意味着当机器人移动时,保持机器人在本地代价地图中心。
width: 6.0
height: 6.0
resolution: 0.05 #“宽度”,“高度”和“分辨率”参数设置本地代价地图的宽度(米),高度(米)和分辨率(米/单元格)。请注意,这个网格的分辨率与静态地图的分辨率不同,但大多数时候我们倾向设置为相同值。
- 本地规划器配置/base_local_planner
base_local_planner负责把上层规划器计算的速度指令发送给移动基座。新建base_local_planner_params.yaml文件,代码如下:
TrajectoryPlannerROS: #TrajectoryPlanner的基本配置选项
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: true
有关各种配置现选项的文档,参阅base_local_planner文档