移動機器人運動規劃及運動模擬

zylyehuo發表於2023-05-15

部落格地址:https://www.cnblogs.com/zylyehuo/

基於[基於SLAM系統建圖模擬,完成定位模擬],詳見之前的部落格

基於SLAM系統建圖模擬,完成定位模擬 - zylyehuo - 部落格園

參考連結

Autolabor-ROS機器人入門課程《ROS理論與實踐》

環境配置

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

配置並儲存 rviz 設定

RobotModel

Map

PoseArray

LaserScan

Odometry

儲存配置

STEP5: 測試執行

相關文章