ROS Navigation相关

ROS Navigation

  • 建图
  • 定位
  • 导航
    • 地图
    • 全局规划
    • 局部规划
      • TrajectoryPlannerROS
      • DWAPlannerROS
    • move_base

建图

定位

导航

地图

全局规划

关于全局规划,默认插件有两个可选项,globle_planner

局部规划

在ROS中经常使用的局部规划器,有base_local_plannerdwa_local_planner,两者之间有什么区别,引用ROS answers中一个回答。如果简单来看,两者属并列关系,其实就是选择使用TrajectoryPlannerROS还是DWAPlannerROS,下边插件的引入应该是再熟悉不过了,注意看前缀,一个是dwa_local_planner/DWAPlannerROS,另一个是base_local_planner/TrajectoryPlannerROS所以是两个完全没有主从关系的,其中base_local_planner也是包含dwa选项的,不过通常还是使用独立的DWA模块。

  <arg name="base_local_planner" default="dwa_local_planner/DWAPlannerROS"/>
  <arg name="base_local_planner" default="base_local_planner/TrajectoryPlannerROS"/>

TrajectoryPlannerROS

关于两个规划器,DWAPlanner相对来说是更加细致,参数更多,也更加敏感,所以也相对更加难调,TrajectoryPlanner我会在什么时候用呢,有项目急着交,DWA又跑不出好的效果,换上立马就能跑,但是很多细节还是不够理想,推荐还是使用DWA,接下来会对DWA的参数介绍,以及一些实际调试过程中总结的经验。

DWAPlannerROS

目前只针对差动结构的移动机器人进行总结,全向轮可类比经验,接下来有点干~

  1. 参数表:
    熟记都有哪些参数可调。
  acc_lim_x: 1.5                #x方向的加速度极限,单位为 meters/sec^2 (double, default: 2.5)
  acc_lim_y: 2.5                #                                  (double, default: 2.5)
  acc_lim_th: 2.4               #角加速度极限,单位为 radians/sec^2 (double, default: 3.2)

#The velocity when robot is moving in a straight line
  max_vel_trans: 0.35           #机器人最大平移速度的绝对值 (double, default: 0.55)
  min_vel_trans: 0.01           #                       (double, default: 0.1)
  max_vel_theta: 0.8            #最大角速度的绝对值,单位为 rad/s (double, default: 1.0)
  min_vel_theta: 0.15           #                             (double, default: 0.4)

#Robot Configuration Parameters
  max_vel_x: 0.35               #机器人在x方向的速度极限,单位为 meters/sec^2 (double, default: 0.55)
  min_vel_x: -0.05               #                                        (double, default: 0.0)

  max_vel_y: 0.1                #                                          (double, default: 0.1)
  min_vel_y: -0.1               #                                          (double, default: -0.1)

#Goal Tolerance Parametes 
  yaw_goal_tolerance: 0.03      #(double, default: 0.05)
  xy_goal_tolerance: 0.07       #(double, default: 0.10)
  latch_xy_goal_tolerance: true #如果锁定目标公差且机器人到达目标xy位置,机器人将简单地旋转到位,即使它在目标公差的范围内结束。
                                 #(bool, default: false)
#Forward Simulation Parameters
  sim_time: 1.7                 #给定轨迹上的点之间的间隔尺寸,单位为 meters (double, default: 1.7)
  sim_granularity: 0.025        # (double, default: 0.025)
  vx_samples: 3                 #样本数 (integer, default: 3)
  vy_samples: 10                 #(integer, default: 10)
  vth_samples: 20               #角速度的样本数 (integer, default: 20)
  controller_frequency: 20.0    #调用该控制器的频率 (double, default: 20.0)

#Trajectory Scoring Parameters
  path_distance_bias: 32.0      #控制器靠近给定路径的权重 (double, default: 32.0)
  goal_distance_bias: 24.0      # 控制器尝试达到其本地目标and控制着速度的权重。(double, default: 24.0)
  occdist_scale: 0.01           #控制器尝试避免障碍物的权重 (double, default: 0.01)
  forward_point_distance: 0.325 #从机器人中心点到另一个得分点的距离 (double, default: 0.325)
  stop_time_buffer: 0.2         #机器人在碰撞前必须停止的时间 (double, default: 0.2)
  scaling_speed: 0.25           #缩放机器人足迹的速度的绝对值,单位为m/s (double, default: 0.25)
  max_scaling_factor: 0.2       #缩放机器人足迹的最大因子 (double, default: 0.2)
  publish_cost_grid: false      # (bool, default: false)

#Oscillation Prevention Parameters
  oscillation_reset_dist: 0.05  #机器人必须运动多少米远后才能复位震荡标记 (double, default: 0.05)

#Debugging
  publish_traj_pc : true        #将规划的轨迹在RVIZ上进行可视化
  publish_cost_grid_pc: true    #将代价值进行可视化显示 (bool, default: false)
  #是否发布规划器在规划路径时的代价网格.如果设置为true,那么就会在~/cost_cloud话题上发布sensor_msgs/PointCloud2类型消息
  1. 估计应用场景中需要的相关速度值
    最大速度
    首先把max_vel_transmax_vel_xmax_vel_theta三个速度最大值减小,角速度通常在1.0左右,平移速度与x方向速度设置相同在0.5左右,根据不同的最大速度,将加速度最大值减小,合适的加速度还和机器人的驱动密切相关,加速能力,控制周期等,不过加速度控制在大概范围就好,初步调试中相对保守的速度值,可以有效避免飞车,碰撞,毕竟机器人还是很贵的。其次平移加速度与旋转加速度的比例也会影响导航避障的表现
    最小速度
    (1)首先min_vel_trans这个参数,它的默认速度是0.1,再通过实际表现会发现,一个较小的最小平移速度是必须的,具体它会影响低速行驶的状态,尤其是到达目标点时,最小速度过大会导致越过目标点,始终无法到达,建议可以尝试在0-0.1之间寻找合适的大小。
    (2) min_vel_x,这个参数巧妙的地方在于,是否要有负值,也就是是否允许倒车,实际使用中过高的倒车速度是极其诡异的,并且通常机器人的激光传感器都不是360度,无法避开后边的障碍物,使用过得机器人唯有turtlebot3是设置了一定的负值的,那是不是设置为0就可以,当然。但是在我的调参过程中发现,机器人在180度左右的转向,且两侧障碍物状况类似时,会出现左右摆动无法选择方向的问题,一度无解,偶然情况下我设置了0.05的后退速度,发现每次转弯会先往后退一点,然后转向也变得很好了,或许这就是玄学吧~
    (3)min_vel_theta,这个参数没有那么多道道,就是找一个相对较小的值就可以了,一般0.1、0.2都可以,默认0.4会导致最小速度过大过大,无法准确到达目标点。
    对于全向轮底盘,还需要考虑y方向的速度、加速、采样等。
  2. 目标误差
    xy方向与角度允许的误差,这个就根据自己机器人大概的精度设置就可以,多试几次就可以
    latch_xy_goal_tolerance:锁定目标,这个参数可以理解为如果机器人确定自己到达那个位置点(具体指,如base_footprint与目标点坐标在误差范围对齐了),但是方向还不对,如果设置为true,这时候就可以原地旋转到达目标角度,及时产生位置上的误差就不再移动。我一般是都设置为true,具体看机器人实际表现吧。
  3. 向前仿真
    这部分是非常重要的一部分
    sim_time:仿真时间,local planner会按频率向前预测,具体计算时间跟机器人上位机性能有关系,不同时间会发现预测的距离也不同了,时间越长预测距离越远,但是对障碍物的躲避变得不灵活,默认1.7,在实验中我设置到了2.0,表现还不错
    三个方向采样数量:对于不同性能的上位机,能够高速计算的点数量有区别,在大多数机器人实验中,x方向默认3表现良好,增大后主要表现为速度变化更加频繁细腻,但是整体速度相对会降低,所以我更倾向相比小一些的x值;同样对于差动轮底盘,有无y方向采样值表现并不明显;旋转采样通常设置默认表现良好
    controller_frequency:控制器频率,关于这个参数,我在不同机器人上使用了不同的参数,较高大概就是10-20,低的时候5,有些机器人使用高频率会导致机器人限制在非常低的移动速度,如果运算性能不够还会导致卡顿现象,具体可能与机器人驱动控制频率等也有关系,目前还未找到具体原因,后续更新记录
  4. 轨迹打分
    这部分只调整三个参数
    cost =  path_distance_bias * (distance to path from the endpoint of the trajectory in meters) 
    + goal_distance_bias * (distance to local goal from the endpoint of the trajectory in meters) 
    + occdist_scale * (maximum obstacle cost along the trajectory in obstacle cost (0-254)
    
    path_distance_bias:控制器尝试到达给定轨迹的权重
    goal_distance_bias: 控制器尝试到达本地目标点的权重,同时控制速度
    occdist_scale:控制器尝试避开障碍物的权重
    多数情况下可以保持默认,观察规划出的路径,若机器人出现移动轨迹与规划轨迹、理想轨迹差别较大,同时出现避障困难等情况,可以适当调整,避障权重过大会导致路径规困难,容易出现卡顿,陷入较窄区域等问题

move_base

recovery_behaviors: true     # 是否允许恢复行为,恢复行为为原地旋转
shutdown_costmaps: false     # 当move_base进入inactive状态时候,决定是否停用节点的costmap (bool, default: false)
controller_frequency: 20.0   # 以Hz为单位的速率运行控制循环并向基座发送速度命令 (double, default: 20.0)
planner_patience: 5.0        # 在空间清理操作执行前,路径规划器等待多长时间(秒)用来找出一个有效规划 (double, default: 5.0)
controller_patience: 20.0    # 在空间清理操作执行前,控制器会等待多长时间(秒)用来找出一个有效控制  (double, default: 15.0)
conservative_reset_dist: 3.0 # 当在地图中清理出空间时候,距离机器人几米远的障碍将会从costmap清除  (double, default: 3.0)
planner_frequency: 5.0       # 全局路径规划器loop速率 (double, default: 0.0)
oscillation_timeout: 10.0    # 执行修复操作之前,允许的震荡时间是几秒  (double, default: 0.0)
oscillation_distance: 0.2    # 机器人需要移动多少距离才算作没有震荡 (double, default: 0.5)

recovery_behaviors:通常根据机器人形状,以及使用的场景是否宽阔来考虑是否允许原地旋转的恢复行为,有时候不规则机器人靠近墙做恢复行为是比较危险的,容易发生碰撞,相比圆形机器人不会有这个问题
controller_frequency:与之前的控制频率是同一个,不在同一层级,这个更高,设置这个即可
planner_frequency:全局路径规划器更新频率,当机器在避障表现较好时,设置一个小频率,可以锦上添花,如果本身local问题很大,再一直更新global路径,会出现离原先最优路径越来越远,直到陷入局部障碍物陷阱
conservative_reset_dist:实验中发现局部地图经常会有移动障碍物遗留,并且不会去除,只有在移动后才能清除,部分只能在恢复行为后清除,所以有一个插件是专门用来做local障碍物清除的
剩余参数用于无法行动之后的恢复行为,震荡表示机器人在很短的距离反复运动,可以设置距离、时间来判断是否为震荡以及多久后执行恢复操作
关于空间清理我还得再研究研究~

你可能感兴趣的:(机器人,ROS)