当前位置:   article > 正文

【移动机器人技术】move_base参数配置方法及含义_,move_base 手动添加障碍物

,move_base 手动添加障碍物

配置文件的加载方法

在launch文件中加载yaml的配置文件,文件中有参数的赋值,参数加载后就成为ros中的参数。

<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
  <rosparam command="delete" ns="move_base" />
  <rosparam file="$(find wheel_chair)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
  <rosparam file="$(find wheel_chair)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />   
  <rosparam file="$(find wheel_chair)/config/local_costmap_params.yaml" command="load" />   
  <rosparam file="$(find wheel_chair)/config/global_costmap_params.yaml" command="load" />
  <rosparam file="$(find wheel_chair)/config/base_local_planner.yaml" command="load" />
  <rosparam file="$(find wheel_chair)/config/move_base_params.yaml" command="load" />
  <rosparam file="$(find wheel_chair)/config/global_planner_params.yaml" command="load" />
  <rosparam file="$(find wheel_chair)/config/navfn_global_planner_params.yaml" command="load" />
</node>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在ros节点的初始化中,使用这些配置参数。其格式为private_nh.param(“参数名称”,被赋值变量,默认值),

private_nh.param("base_global_planner", global_planner, 
			std::string("navfn/NavfnROS"));
private_nh.param("base_local_planner", local_planner, 			
			std::string("base_local_planner/TrajectoryPlannerROS"));
private_nh.param("global_costmap/robot_base_frame", robot_base_frame_, 
			std::string("base_link"));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

配置文件介绍

在launch文件中加载的有用配置文件共6个,逐个介绍如下:

costmap_common_params.yaml

该文件被global_costmap、local_costmap共同使用。
参数含义:

robot_radius: 如果机器人是圆形,则指定机器人的半径;
footprint: [[x0, y0], [x1, y1], ... [xn, yn]] ;如果机器人非圆形,则指定机器人的轮廓;
map_type: voxel 地图类型;
  • 1
  • 2
  • 3
# 障碍物层的参数配置
obstacle_layer:
  enabled:              true   # 使能障碍物层;
  max_obstacle_height:  0.6 #考虑的最大障碍物高度;
  origin_z:             0.0
  z_resolution:         0.2
  z_voxels:             2
  unknown_threshold:    15
  mark_threshold:       0
  combination_method:   1
  track_unknown_space:  true    # true 禁止全局路径规划穿越未知区域;
  obstacle_range: 2.5   # 添加障碍物范围,一方面考虑激光范围,另外范围越大越耗计算资源;
  raytrace_range: 3.0   # 清除障碍物范围;
  publish_voxel_map: false
  observation_sources:  scan   # 数据源;
  scan:
    {
    frame_name: base_scan,  # Scan的基坐标;
    data_type: LaserScan,   # scan数据类型;
    topic: scan,  				 # scan的话题名称;
    inf_is_valid: true,		# scan的无穷远数据是否有效;
    marking: true,        # 是否根据scan添加障碍物;
    clearing: true,       # 是否根据scan清除障碍物;
    min_obstacle_height: 0.0,    # scan检测到的最小有效障碍物高度;
    max_obstacle_height: 0.35} # scan检测到的最大有效障碍物高度;
  # for debugging only, let's you see the entire voxel grid
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
# 膨胀层参数配置
inflation_layer:
  enabled:              true  # 是否使能膨胀层;
  cost_scaling_factor:  5.0  	#膨胀层的指数衰减速度,值越小衰减越慢(default: 10);
  inflation_radius:     1.2  #最大有效膨胀半径,即安装指数衰减扩张的最大半径,计算障碍物cos函数时使用。
  • 1
  • 2
  • 3
  • 4
  • 5
# 静态层参数配置
static_layer:
  enabled:              true   # 是否使用静态层;
  • 1
  • 2
  • 3

注解:
1、膨胀层的作用:做动态路径规划时,计算与障碍物的距离的代价值。cost_scaling_factor,表示远离障碍物时,代价值的衰减系数;inflation_radius表示膨胀层的最大考虑半径。
2、机器人轮廓:是为了防止机器人碰撞障碍物生成的序列点,在规划中代价为布尔运算,即碰撞即失效。

local_costmap_params.yaml

局部代价地图配置参数文件。

local_costmap:

   global_frame: /map  					# odom 全局坐标系(这是用来做什么的?局部路径规划用?);
   robot_base_frame: /base_footprint    # 机器人基准坐标系(局部路径规划用?);

   update_frequency: 3.0 #2.0    # 局部代价地图的更新频率(内部计算使用);
   publish_frequency: 1.0        # 局部代价地图的发布频率 (Rviz显示使用);
   static_map: false       # 是否为静态地图属性,代价地图位动态,设置为否;
   rolling_window: true       # 是否位滚动窗口(随着机器人移动而滑动);
   width: 4.0        # 宽度;
   height: 4.0      # 高度(长度);
   resolution: 0.05	# 栅格地图分辨率;
   transform_tolerance: 1 # 0.5  订阅tf时的时间差冗余量;
   plugins:    # 局部代价地图使用的地图插件(顺序颠倒会影响效果)
    - {name: static_layer,        type: "costmap_2d::StaticLayer"}  # 静态地图层
    - {name: obstacle_layer,      type: "costmap_2d::VoxelLayer"} # 障碍物层
    - {name: inflation_layer,     type: "costmap_2d::InflationLayer"}  # 膨胀层
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

global_costmap_params.yaml

全局代价地图参数配置文件。

global_costmap:
   global_frame: /map  # 全局坐标系(全局路径规划用?)
   robot_base_frame: /base_footprint  # 机器人基准坐标系(局路径规划用?)

   update_frequency: 3.0 #1   # 更新频率(内部计算用);
   publish_frequency: 0.5     # 发布频率(Rviz显示用);
   static_map: true	# 是否位静态地图(全局地图位静态地图吗?那为什么还考虑障碍物层呢?);
   transform_tolerance: 1 #0.5  订阅tf时的时间差冗余量;
   plugins:   # 全局代价地图使用的地图插件
     - {name: static_layer,            type: "costmap_2d::StaticLayer"}
     - {name: obstacle_layer,          type: "costmap_2d::VoxelLayer"}
     - {name: inflation_layer,         type: "costmap_2d::InflationLayer"}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

base_local_planner.yaml

局部路径规划参数配置文件。

TrajectoryPlannerROS:    # 规划器名称?

# Robot Configuration Parameters
  max_vel_x: 0.6    # x方向前进最大线速度
  min_vel_x:  -0.1   # x方向倒退最大线速度

  max_vel_theta:  0.6 # 正向旋转最大速度
  min_vel_theta: -0.6 # 反向旋转最大速度
  min_in_place_vel_theta: 0.1  # 原地转向最大速度(思考:180度转向速度慢,是否因此导致?)

  acc_lim_x: 0.6	# x方向的最大线加速度
  acc_lim_y: 0.0
  acc_lim_theta: 0.6 # 最大角加速度

# 到达目标位置的误差冗余参数
  xy_goal_tolerance: 0.5  # xy平面上的直线距离误差;
  yaw_goal_tolerance: 3.0 # 角度朝向误差;
  latch_xy_goal_tolerance: false # 什么含义?

# 是否全向轮机器人,否则为差动轮;
  holonomic_robot: false

# 动态路径规划仿真预测时间步长
  sim_time: 2.0  # 预测时间;
  sim_granularity: 0.05   # 细分步长(距离);
  angular_sim_granularity: 0.087 # 细分转向(角度);
  vx_samples: 10  # x 方向速度采样个数;
  vtheta_samples: 20  # 角速度采样个数;
  controller_frequency: 10  # 局部规划的跟新频率;
  # 注解与思考:更新考虑因素与地图及机器人状态有关系,每一次更新后产生的最优轨迹的线速度、角速度位固定值,即一次更新仅能产生一个圆弧运动,多次更新就可以产生复杂运动曲线。

# 轨迹评分方面的参数
# (cost = 
#   pdist_scale * (轨迹横向偏差) 
#   + gdist_scale * (轨迹局部目标距离) 
#   + occdist_scale * (障碍物代价)

  meter_scoring: false  # 是否使用米作为单位.(建议使用,这样更标准,不依赖地图分辨率);
  pdist_scale: 0.6  # 横向偏差权重;
  gdist_scale: 0.8  # 目标距离权重;
  occdist_scale: 0.1  # 障碍物代价权重 ;
  heading_lookahead: 0.325  # 原地转向是前瞻距离;
  heading_scoring: false  # 朝向评分(需要研究其实际作用);
  heading_scoring_timestep: 0.8  # 判断朝向代价的时间步长;
  dwa: false 	# 选择使用 DWA还是 Trajectory Rollout方法;
  publish_cost_grid_pc: false	 #是否发布代价网格图;

# 放置震荡
  oscillation_reset_dist: 0.4 #移动最小距离后,震荡约束条件复位;

  forward_point_distance: 0.8  # (这是什么含义?)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

move_base_params.yaml

move_base基础配置文件。

shutdown_costmaps: false		# 这是什么含义?

controller_frequency: 10.0     # 哪个模块的控制频率?
controller_patience: 15.0 #1.0	# 实时性的容错时间

planner_frequency: 1.0		# 规划频率
planner_patience: 5.0 	# 规划实时性的容错时间

oscillation_timeout: 10.0	# 震荡超时报错时间
oscillation_distance: 0.2

# 局部路径规划器的选择,默认为: trajectory rollout
# base_local_planner: "dwa_local_planner/DWAPlannerROS"

# 全局路径规划器的选择,有navfn/NavfnROS、global_planner/GlobalPlanner、carrot_planner/CarrotPlanner三种;
base_global_planner: "navfn/NavfnROS" 

# 恢复机制选择
recovery_behavior_enabled: true
recovery_behaviors: [{"name":"super_conservative_reset1", "type":"clear_costmap_recovery/ClearCostmapRecovery"}]
reset_distance: 5.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

global_planner_params.yaml

全局路径规划参数配置

此文件应该没有被用到!考虑删除!
  • 1

navfn_global_planner_params.yaml

navfn/NavfnROS全局路径规划的参数配置。

NavfnROS:
  visualize_potential: true     # 是否发布可视化路径至Rviz;
  allow_unknown: false          # 是否穿越未知区域;
                                #需要设置 track_unknown_space: true,在 obstacle / voxel layer (in costmap_commons_param) 中,使得地图中有未知区域。
  planner_window_x: 0.0         # x方向的限制(什么含义?)
  planner_window_y: 0.0         # y方向的限制(什么含义?)
  
  default_tolerance: 2.0        # 目标点的容错量,当目标点在障碍物中时,可以有一定的容错。
                               			 #值越大,搜索时间越长。(是否考虑降低呢?)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/509075
推荐阅读