ROS学习——移动机器人导航仿真(三)

三、amcl定位与move_base路径规划

前言:前面的一章已经创建好导航所需的地图,现在实现自主导航

1、amcl是什么

ROS Navigation-----amcl简介.

2、move_base是什么

ROS move_base介绍.

3、amcl_move_base.launch编写

<?xml version="1.0"?>

<launch>

  <!-- Run the map server -->
  <node name="map_server" pkg="map_server" type="map_server" args="$(find slam_sim_demo)/map.yaml"/>  #加载地图
  <include file="$(find amcl)/examples/amcl_diff.launch" > #支持差分驱动机器人平台
  </include>

  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <param name="controller_frequency" value="5.0"/> #根据自己电脑cpu运行能力设置控制频率
    <param name="controller_patiente" value="5.0"/>
    <rosparam file="$(find slam_sim_demo)/launch/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find slam_sim_demo)/launch/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find slam_sim_demo)/launch/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find slam_sim_demo)/launch/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find slam_sim_demo)/launch/base_local_planner_params.yaml" command="load" />
  </node>

</launch>

4、编写move_base的四个参数设置文件

(1)、costmap_common_params.yaml

obstacle_range: 4.0  
raytrace_range: 3.0
footprint: [[-0.15, -0.15], [0.15, -0.15], [0.15, 0.15], [0.15,-0.15]] 

inflation_radius: 0.3  

transform_tolerance: 0.1 

observation_sources: scan
scan:
     data_type: LaserScan
     topic: /scan
     marking: true
     clearing: true

map_type: costmap

1、“obstacle_range” 参数确定最大范围传感器读数,这将导致障碍物被放入代价地图中。在这里,我们把它设置在4米,这意味着机器人只会更新其地图包含距离移动基座4米以内的障碍物的信息。
2、“raytrace_range”参数确定了用于清除指定范围外的空间。将其设置为3.0米,这意味着机器人将尝试清除3米外的空间,在代价地图中清除3米外的障碍物。
3、“footprint”参数为四方或三角机器人4点或3点坐标,如四方机器人以中心为原点来确定一个矩形代表占地面积,圆形机器人则设置机器人半径“robot_radius”参数。
4、“inflation_radius”参数为膨胀半径,即设定为在代价地图中与障碍物保持安全的最大距离。例如,将膨胀半径设定为0.3米,意味着机器人针对相同的障碍物获取的所有路径都保持距离障碍物0.3米或更远。如果你的机器人不能很好地通过窄门或其它狭窄的地方,则稍微减小这个值,相反地,如果机器人不断地撞到东西,则尝试增大这个值。
5、“transform_tolerance”参数为允许误差。
6、“observe_sources”传感器源参数定义把信息传递给代价地图的传感器列表,以空格分隔每个传感器,每个传感器分别定义。
7、“marking”和“clearing”参数确定传感器是否向代价地图添加障碍物信息或从代价地图中清除障碍物信息,或者同时都做。

(2)、global_costmap_params.yaml(全局代价地图配置)

global_costmap:
  global_frame: /map
  robot_base_frame: /base_link
  update_frequency: 3.0
  publish_frequency: 2.0
  static_map: true
  transform_tolerance: 0.5

1、“global_frame”参数定义了代价地图应该运行的坐标系,在这种情况下,我们将选择/map坐标系。对于全局代价地图,我们用map框架来作为global框架。
2、“robot_base_frame”参数定义了代价地图应该为机器人的基座的坐标系。这个通常不是base_link就是base_footprint。对于turtlebot应设为base_footprint。
3、“update_frequency”参数决定了代价地图更新的频率(以Hz为单位)。根据传感器数据,全局地图更新的频率,这个数值越大,你的计算机的CPU负担会越重,特别对于全局地图,通常设定一个相对较小、在1.0到5.0之间的值。
4、“publish_frequency”参数确定代价地图发布可视化信息的速率(以Hz为单位)
5、static_map”参数确定是否由map_server提供的地图服务来进行代价地图的初始化。如果您没有使用现有的地图或地图服务器,请将static_map参数设置为false。当本地地图需要根据传感器数据动态更新的时候,我们通常会把这个参数设为false。

(3)、local_costmap_params.yaml(本地代价地图配置)

local_costmap:
  global_frame: odom
  robot_base_frame: base_link
  update_frequency: 3.0
  publish_frequency: 2.0
  static_map: false
  rolling_window: true
  width: 3.5
  height: 3.5
  resolution: 0.025
  transform_tolerance: 0.5

1、“global_frame”,“robot_base_frame”,“update_frequency”,“publish_frequency”和“static_map”参数与上述“全局代价地图配置”部分中描述的相同。
2、“rolling_window”参数设置为true意味着当机器人移动时,保持机器人在本地代价地图中心。
3、“width”,“height”和“resolution”参数设置本地代价地图(滑动地图)的宽度(米),高度(米)和分辨率(米/单元格)。请注意,这个网格的分辨率与静态地图的分辨率不同,但大多数时候我们倾向设置为相同值。

(4)、base_local_planner_params.yaml(基本本地规划器配置)

TrajectoryPlannerROS:    

   meter_scoring: true
   holonomic_robot: false

   max_vel_x: 0.4
   min_vel_x: 0.1
   max_vel_y: 0.0  # zero for a differential drive robot
   min_vel_y: 0.0
   max_vel_theta: 6.0
   min_vel_theta: -6.0
   min_in_place_vel_theta: 0.5
   escape_vel: -0.5

   acc_lim_x: 0.1
   acc_lim_y: 0.0  # zero for a differential drive robot
   acc_lim_theta: 2.0

   yaw_goal_tolerance: 0.1 # about 6 degrees  
   xy_goal_tolerance: 0.1  # 5 cm

1、”meter_scoring“参数设定gdist_scale和pdist_scale参数是否应假定目标距离和路径距离以米或单元为单位表示。 默认情况下为单元格。
2、”holonomic_robot“参数设定是否为全向机器人
3、”escape_vel“参数为逃生时用于驾驶的速度,以米/秒为单位。 请注意,该值必须为负值,机器人才能真正反转。 正向速度会导致机器人在尝试逃脱时向前移动。
4、“min_in_place_vel_theta”参数为在以弧度/秒为单位执行就地旋转时,允许基座的最小旋转速度
5、”yaw_goal_tolerance“与”xy_goal_tolerance“为目标公差参数

5、启动整个工程

1、启动机器人模型gazebo显示文件

roslaunch slam_sim_demo gazebo.launch

2、启动rviz显示文件并添加观察属性

roslaunch slam_sim_demo view_robot.launch

3、启动amcl_move_bace.launch

roslaunch slam_sim_demo amcl_move_bace.launch

ROS学习——移动机器人导航仿真(三)_第1张图片
通过rviz上的2D Nav Goal在地图上进行定点导航

6、导航时遇到问题分析

1、可以通过观察速度话题来确定小车是否最终到达目标位置且停下
2、当观察到速度话题的线速度与角速度为0但是小车未到达目标位置时,可能是因为小车碰撞墙壁导致amcl_move_base.launch运行错误,将其关闭重启,在定一个新的目标位置可恢复正常。
3、小车易翻车,以及走不动可以通过改变机器人模型的质量参数和轮子的扭矩参数来改善这一状况。
4、小车在目标点附近反反复复移动尝试完全重合目标点时,可以通过改变误差容许参数和最大速度等参数来改善。
5、小车易撞墙,可以通过加大膨胀半径参数来改善

7、参考

【ROS】移动机器人导航仿真(3).
ROS:move_base导航包参数设置.
ROS Navigation-----base_local_planner简介.
ROS move_base介绍.
ROS Navigation-----amcl简介.

你可能感兴趣的:(ROS)