ROS基础学习(move_base节点中的5个组件的参数设置解析以及AMCL运行)(十五)

在这里插入图片描述

move_base的参数注释

<node pkg="move_base" type="move_base" name="move_base">
	<!--
	--costmap_common_params.yaml这个文件描述了代价地图的形状,用单一文件描述可以避免分发给全局规划器和局部规划器的形状不一致。
	--ns表示命名空间,可以分别给不同的地图
	--global_costmap_params.yaml和local_costmap_params.yaml这个文件主要描述地图的计算范围和频率,全局和局部不一样,所以用两个文件
	--这个文件主要描述地图的计算范围和频率
	-->
    <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" />
    <param name="base_global_planner" value="global_planner/GlobalPlanner" /> 
    <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" />
</node>

全局代价地图和局部代价地图相同的参数

costmap_common_params.yaml

<!--机器人底盘半径-->
robot_radius: 0.25
<!--膨胀区域的半径-->
inflation_radius: 0.5
<!--6m内扫描到的障碍物都会被加入到代价地图-->
obstacle_range: 6.0
<!--6m内被穿透的栅格都会从代价地图中清除-->
raytrace_range: 6.0
<!--动态障碍物的观测来源,底盘上的激光雷达,头上的观测相机-->
observation_sources: base_lidar head_kinetc2
base_lidar: {
	<!--消息包的类型-->
    data_type: LaserScan,
    topic: /scan, 
    <!--是否将扫描到的障碍物添加到代价地图-->
    marking: true, 
    <!--是否把扫描到的障碍物残影清除掉-->
    clearing: true
    }
<!--将相机得到的障碍物信息投影到代价地图里-->
head_kinect2: {
	data_type:PointCloud2,
	topic: /kinect2/sd/points,
	marking:true,
	clearing:true,
	max_obstacle_height:1.5,
	min_obstacle_height:0.2
}

全局代价地图独有的参数

global_costmap_params.yaml

global_costmap:
  <!--地图的坐标系名称-->
  global_frame: map
  <!--机器人底盘的坐标系名称-->
  robot_base_frame: base_footprint
  <!--是否将map_server发来的地图数据做为初始地图
  --如果设置为false,初始为空的地图,需要建立一套动态建图机制来为它提供导航依据
  --在有些导航目标点所在的场景是未知区域,就需要设置为false,一边建图一边导航。
  -->
  static_map: true
  <!--传感器观测到的障碍物添加到代价地图里的频率,1秒钟添加1次-->
  update_frequency: 1.0
  <!--发送频率,发送给rviz进行显示的频率,和更新频率保持一致-->
  publish_frequency: 1.0
  <!--tf延时的容忍值
  --传感器到机器人坐标系的tf(laser_frame==========base_footprint)
  --里程计的tf(base_footprint===========odom)
  --amcl节点发布的tf(map=========odom)
  -->
  transform_tolerance: 1.0

局部代价地图独有的参数

local_costmap_params.yaml

local_costmap:
  <!--地图的坐标系名称
  --这里不是map是因为amcl输出的tf会跳变,会导致运动不平滑
  --而odom输出的tf相对稳定并且平滑,已于运动控制的实现
  -->
  global_frame: odom
  robot_base_frame: base_footprint
  <!--不使用slam之前建好的全局地图,使用激光雷达当前扫描到的临时地图-->
  static_map: false
  <!--局部地图的范围是否跟着机器人一起移动-->
  rolling_window: true
  <!--局部地图的范围尺寸3米-->
  width: 3.0
  height: 3.0
  <!--局部地图的更新频率,设置为激光雷达扫描的频率-->
  update_frequency: 10.0
  publish_frequency: 10.0
  transform_tolerance: 1.0

如图是:robot_radius和inflation_radius的区别
在这里插入图片描述

Recovery Behaviors

导航流程图
在这里插入图片描述
在这里插入图片描述
参数设置
global_costmap_params.yaml

recovery_behaviors:
  - name: 'conservative_reset'
    type: 'clear_costmap_recovery/ClearCostmapRecovery'
  - name: 'rotate_recovery'
    type: 'rotate_recovery/RotateRecovery'
  - name: 'aggressive_reset'
    type: 'clear_costmap_recovery/ClearCostmapRecovery'
  - name: 'reset_recovery'
    type: 'clear_costmap_recovery/ClearCostmapRecovery'

conservative_reset:
  <!--清除范围,以机器人为中间的正方形边长为2米
  --如果设置为0.0
  --则清除所有地图的障碍层地图
  -->
  reset_distance: 2.0
  <!--要清除哪一层地图:这里是障碍物层
  -->
  layer_names: ["obstacle_layer"]

aggressive_reset:
  reset_distance: 0.0
  layer_names: ["obstacle_layer"]
reset_recovery :
  reset_distance: 1.84
  <!--要清除哪一层地图:这里是障碍物层
  --必须改这个,因为ros里有一个bug
  -->
  layer_names: ["obstacle_layer"]

新的恢复行为流程:
在这里插入图片描述

地图分层

Static 静态层
Obstacles 障碍物层
Inflation 膨胀层
Master 最终的代价地图
在这里插入图片描述

全局规划器

ros的3种全局规划器
在这里插入图片描述

各个全局规划器之间的区别
在这里插入图片描述
下图为Global_planner切换A*算法需要加入的参数
在这里插入图片描述

局部规划器

Trajectory Planner 是ros默认使用的规划器内部使用DWA算法(代码可读性不高)
DWA Planner 是Trajectory Planner的替代的规划器,具有较好的效果
Eband Planner和TEB Planner的原理基本一样
TEB Planner 加入了时间因素的考虑,提供了代价地图的优化插件,运动平滑性和执行效率更高(与Eband Planner对比一般选用这个)
WpbhLocalPlanner的原理是将激光雷达采集到的障碍点信息,把代价地图和Dijkstra算法在局部规划器里又实现一遍

在这里插入图片描述

DWA规划器

在这里插入图片描述
生成轨迹的考虑因素:
底盘加速度的限制
与障碍物保持有效的刹车距离
尽快运动到轨迹终点
挑选轨迹的考虑因素:
运动轨迹和全局导航路线的贴合程度
轨迹末端和目标点的距离
轨迹路线和障碍物之间的距离
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以使用实时动态调参工具设定dwa的参数

rosrun rqt_reconfigure rqt_reconfigure

将动态调参后的值写入dwa_local_planner_params.yaml后保存,就可以下次继续使用

在这里插入图片描述

dwa_local_planner_params.yaml

DWAPlannerROS:
  # 速度参数
  max_vel_x: 0.3      # 最大x方向速度
  #!!!比较有争议!!!
  min_vel_x: -0.05    # 最小x方向速度(设置负数将会允许倒车)
  
  max_vel_y: 0.0      # 差分驱动机器人的最大y方向速度为 0.0
  min_vel_y: 0.0      # 差分驱动机器人的最小y方向速度为 0.0
  max_vel_trans: 0.3  # 最大平移速度
  min_vel_trans: 0.01 # 最小平移速度(建议不要设置为 0.0 )
  trans_stopped_vel: 0.1  # 当平移速度小于这个值,就让机器人停止
  acc_lim_trans: 2.5      # 最大平移加速度
  acc_lim_x: 2.5          # x方向的最大加速度上限
  acc_lim_y: 0.0          # y方向的加速度上限(差分驱动机器人应该设置为 0.0 )
  
  max_vel_theta: 1.0      # 最大旋转速度,略小于基座的功能
  min_vel_theta: -0.01    # 当平移速度可以忽略时的最小角速度
  theta_stopped_vel: 0.1  # 当旋转速度小于这个值,就让机器人停止
  acc_lim_theta: 6.0      # 旋转的加速度上限

  # 目标容差参数
  yaw_goal_tolerance: 0.1         # 目标航向容差
  xy_goal_tolerance: 0.05         # 目标xy容差
  latch_xy_goal_tolerance: false  # 到达目标容差范围后,停止移动,只旋转调整航向

  # 向前模拟参数
  sim_time: 1.7       # 模拟时间,默认值 1.7
  vx_samples: 3       # x方向速度采样数,默认值 3
  vy_samples: 1       # 差分驱动机器人y方向速度采样数,只有一个样本
  vtheta_samples: 20  # 旋转速度采样数,默认值 20

  # 轨迹评分参数
  #!!!!这几个最为重要!!!
  path_distance_bias: 32.0  # 靠近全局路径的权重,默认值 32.0
  goal_distance_bias: 24.0  # 接近导航目标点的权重,默认值 24.0
  occdist_scale: 0.01       # 控制器避障的权重,默认值 0.01
  
  forward_point_distance: 0.325 # 从机器人到评分点的位置,默认值 0.325
  stop_time_buffer: 0.2     # 在碰撞前机器人必须停止的时间长度,留出缓冲空间,默认值 0.2
  scaling_speed: 0.25       # 缩放机器人速度的绝对值,默认值 0.25
  max_scaling_factor: 0.2   # 机器人足迹在高速时能缩放的最大系数,默认值 0.2

  # 防振动参数
  oscillation_reset_dist: 1.05 # 重置振动标志前需要行进的距离,默认值 0.05

  # 辅助调试选项
  publish_traj_pc : true      # 是否在 RViz 里发布轨迹
  publish_cost_grid_pc: true  # 是否在 RViz 里发布代价网格
  global_frame_id: odom       # 基础坐标系

  # 差分驱动机器人配置
  holonomic_robot: false # 是否全向移动机器人

WpbhLocalPlanner规划器

在这里插入图片描述
在这里插入图片描述

AMCL

释放出多个粒子分身,经过匹配和淘汰,保留最优的粒子。
参数文件:
~/catkin_ws/src/wpb_home/wpb_home_tutorials/nav_lidar/

amcl_diff.launch
amcl_omni.launch

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
move_baseROS的一个导航栈的核心模块,用于进行机器人的路径规划和导航。在使用move_base模块时,可以通过rqt_graph工具来可视化其图结构。 rqt_graph是ROS的一个工具,可以用来显示ROS节点和它们之间的通信关系。在move_base的rqt_graph图结构,通常包含以下几个节点和话题: 1. move_base节点:这是导航栈负责路径规划和导航的核心节点。它通过订阅来自其他节点的目标位置信息,并根据机器人当前位置和地图信息进行路径规划,最终发布机器人的速度指令。 2. map节点:这是导航过程的地图节点,它提供机器人所在环境的地图信息。move_base节点会订阅该节点发布的地图信息,用于路径规划。 3. amcl节点:这是一个自适应蒙特卡洛定位(Adaptive Monte Carlo Localization)节点。它通过订阅来自机器人的底盘信息和地图节点发布的地图信息,来进行机器人的精确定位。move_base节点会订阅该节点发布的机器人当前位置信息。 4. goal节点:这是用户输入导航目标位置的节点。通常,用户可以通过RViz等工具指定机器人需要前往的目标位置。goal节点会将目标位置信息发布给move_base节点。 在rqt_graph图结构,这几个节点之间会存在许多话题(Topics)和服务(Services)来实现通信。例如,goal节点可以通过发布目标位置信息的话题与move_base节点通信,map节点可以通过发布地图信息的话题与move_base节点进行通信。同时,move_base节点可能会提供一些服务,让其他节点可以请求机器人的导航服务。 通过使用rqt_graph工具,我们可以清晰地了解move_base模块内部各节点之间的通信关系,帮助我们更好地理解导航过程各个模块的工作原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值