導航包設置--配置文件的編寫
- 參考創(chuàng)客智造 、[ROS機器人開發(fā)實踐]
在此之前,機器人已經能夠tf發(fā)布坐標系信息,接收來自傳感器的sensor_msgs/LaserScan或sensor_msgs/PointCloud的消息,并且使用tf和nav_msgs/Odometry發(fā)布里程消息,同時能夠將導航包輸出的cmd_vel信息發(fā)送到底層移動基座上的直流電機,進行指定方向速度的移動。
機器人實現地圖構建、定位、路徑規(guī)劃以及實時避障需要完成以下配置

依據上述配置信息完成機器人導航前的配置任務:
創(chuàng)建包
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里程計,傳感器消息流。創(chuàng)建機器人配置的啟動文件--新建my_robot_configuration.launch,包含了tf、傳感器以及里程計的啟動,是后續(xù)move_base導航的前提。
<launch>
<node pkg="sensor_node_pkg" type="sensor_node_type" name="sensor_node_name" output="screen">
<param name="sensor_param" value="param_value" />
</node>
<node pkg="odom_node_pkg" type="odom_node_type" name="odom_node" output="screen">
<param name="odom_param" value="param_value" />
</node>
<node pkg="transform_configuration_pkg" type="transform_configuration_type" name="transform_configuration_name" output="screen">
<param name="transform_configuration_param" value="param_value" />
</node>
</launch>
本教程將實現navigation導航包中代價地圖的配置,完成move_base功能包的配置。
導航包使用兩種代價地圖存儲周圍環(huán)境中的障礙物信息:一種用于全局路徑規(guī)劃(global_costmap),一種用于本地路徑規(guī)劃和實時避障(local_costmap)。兩種代價地圖都需要一些共用的或獨立的配置文件:通用配置文件、全局配置文件和本地規(guī)劃配置文件以及用于計算速度控制指令的本地規(guī)劃器配置文件。
- 通用配置 (local_costmap) & (global_costmap)
創(chuàng)建一個名為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}
- 全局規(guī)劃配置(global_costmap)
創(chuàng)建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。
- 本地規(guī)劃配置文件(local_costmap)
本地規(guī)劃配置文件用來存儲本地代價地圖的配置參數,命名為local_costmap_params.yaml,代碼如下:
local_costmap:
global_frame: odom #表示本地代價地圖需要在哪個參考系下運行,選擇odom參考系
robot_base_frame: base_link #定義為機器人的基座的坐標系作為參考
update_frequency: 5.0 #決定本地代價地圖的更新頻率
publish_frequency: 2.0 #代價地圖發(fā)布可視化信息的頻率
static_map: false #決定代價地圖是否需要根據map_server提供的地圖信息進行初始化。如果沒有使用現有的地圖或地圖服務器,將static_map參數設置為false。
rolling_window: true #參數設置為true意味著當機器人移動時,保持機器人在本地代價地圖中心。
width: 6.0
height: 6.0
resolution: 0.05 #“寬度”,“高度”和“分辨率”參數設置本地代價地圖的寬度(米),高度(米)和分辨率(米/單元格)。請注意,這個網格的分辨率與靜態(tài)地圖的分辨率不同,但大多數時候我們傾向設置為相同值。
- 本地規(guī)劃器配置/base_local_planner
base_local_planner負責把上層規(guī)劃器計算的速度指令發(fā)送給移動基座。新建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文檔