基於[基於SLAM系統建圖模擬,完成定位模擬],詳見之前的部落格
參考連結
環境配置
ubuntu 18.04
成果圖
結構樹請參考下圖
STEP1: move_base節點的呼叫
新建 mycar_ws/src/nav_demo/launch/nav05_path.launch
<launch>
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
<rosparam file="$(find nav_demo)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find nav_demo)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />
<rosparam file="$(find nav_demo)/param/local_costmap_params.yaml" command="load" />
<rosparam file="$(find nav_demo)/param/global_costmap_params.yaml" command="load" />
<rosparam file="$(find nav_demo)/param/base_local_planner_params.yaml" command="load" />
</node>
</launch>
STEP2: 配置檔案
新建 param 資料夾
新建 mycar_ws/src/nav_demo/param/costmap_common_params.yaml
#機器人幾何參,如果機器人是圓形,設定 robot_radius,如果是其他形狀設定 footprint
robot_radius: 0.12 #圓形
# footprint: [[-0.12, -0.12], [-0.12, 0.12], [0.12, 0.12], [0.12, -0.12]] #其他形狀
obstacle_range: 3.0 # 用於障礙物探測,比如: 值為 3.0,意味著檢測到距離小於 3 米的障礙物時,就會引入代價地圖
raytrace_range: 3.5 # 用於清除障礙物,比如:值為 3.5,意味著清除代價地圖中 3.5 米以外的障礙物
#膨脹半徑,擴充套件在碰撞區域以外的代價區域,使得機器人規劃路徑避開障礙物
inflation_radius: 0.2
#代價比例係數,越大則代價值越小
cost_scaling_factor: 3.0
#地圖型別
map_type: costmap
#導航包所需要的感測器
observation_sources: scan
#對感測器的座標系和資料進行配置。這個也會用於代價地圖新增和清除障礙物。例如,你可以用鐳射雷達感測器用於在代價地圖新增障礙物,再新增kinect用於導航和清除障礙物。
scan: {sensor_frame: my_laser, data_type: LaserScan, topic: scan, marking: true, clearing: true}
新建 mycar_ws/src/nav_demo/param/local_costmap_params.yaml
local_costmap:
global_frame: odom #里程計座標系
robot_base_frame: base_link #機器人座標系
update_frequency: 10.0 #代價地圖更新頻率
publish_frequency: 10.0 #代價地圖的釋出頻率
transform_tolerance: 0.5 #等待座標變換髮布資訊的超時時間
static_map: false #不需要靜態地圖,可以提升導航效果
rolling_window: true #是否使用動態視窗,預設為false,在靜態的全域性地圖中,地圖不會變化
width: 3 # 區域性地圖寬度 單位是 m
height: 3 # 區域性地圖高度 單位是 m
resolution: 0.05 # 區域性地圖解析度 單位是 m,一般與靜態地圖解析度保持一致
新建 mycar_ws/src/nav_demo/param/global_costmap_params.yaml
global_costmap:
global_frame: map #地圖座標系
robot_base_frame: base_link #機器人座標系
# 以此實現座標變換
update_frequency: 1.0 #代價地圖更新頻率
publish_frequency: 1.0 #代價地圖的釋出頻率
transform_tolerance: 0.5 #等待座標變換髮布資訊的超時時間
static_map: true # 是否使用一個地圖或者地圖伺服器來初始化全域性代價地圖,如果不使用靜態地圖,這個引數為false.
新建 mycar_ws/src/nav_demo/param/base_local_planner_params.yaml
TrajectoryPlannerROS:
# Robot Configuration Parameters
max_vel_x: 0.5 # X 方向最大速度
min_vel_x: 0.1 # X 方向最小速速
max_vel_theta: 1.0 #
min_vel_theta: -1.0
min_in_place_vel_theta: 1.0
acc_lim_x: 1.0 # X 加速限制
acc_lim_y: 0.0 # Y 加速限制
acc_lim_theta: 0.6 # 角速度加速限制
# Goal Tolerance Parameters,目標公差
xy_goal_tolerance: 0.10
yaw_goal_tolerance: 0.05
# Differential-drive robot configuration
# 是否是全向移動機器人
holonomic_robot: false
# Forward Simulation Parameters,前進模擬引數
sim_time: 0.8
vx_samples: 18
vtheta_samples: 20
sim_granularity: 0.05
STEP3: launch 檔案整合
新建 mycar_ws/src/nav_demo/launch/nav06_test.launch
<!-- 整合導航相關的 launch 檔案 -->
<launch>
<!-- 地圖服務 -->
<include file="$(find nav_demo)/launch/nav03_map_server.launch" />
<!-- 啟動AMCL節點 -->
<include file="$(find nav_demo)/launch/nav04_amcl.launch" />
<!-- 執行move_base節點 -->
<include file="$(find nav_demo)/launch/nav05_path.launch" />
<!-- 執行rviz -->
<node pkg="joint_state_publisher" name="joint_state_publisher" type="joint_state_publisher" />
<node pkg="robot_state_publisher" name="robot_state_publisher" type="robot_state_publisher" />
<node pkg="rviz" type="rviz" name="rviz" />
</launch>
STEP4: 測試執行(準備工作)
編譯+啟動 gazebo 模擬環境
source ./devel/setup.bash
roslaunch mycar environment.launch
啟動導航相關的 launch 檔案
source ./devel/setup.bash
roslaunch nav_demo nav06_test.launch