我使用常见的navigation-noetic-level功能包,在gazebo中仿真,使用cartographer建图定位。
但打开rviz发现costmap显示不全,甚至全局规划都会直接穿过障碍物,我以前从没碰到过这种事情,请问有谁了解这种事情?
项目地址:https://gitee.com/mmeroke/dm_ws
https://gitee.com/mmeroke/dm_ws/tree/master/src/turn_on_robot/param



costmap_common_params.yaml
#机器人几何参,如果机器人是圆形,设置 robot_radius,如果是其他形状设置 footprint
robot_radius: 0.22 #圆形
# footprint: [[-0.15, -0.15], [-0.15, 0.15], [0.15, 0.15], [0.15, -0.15]] #其他形状
obstacle_range: 2.5 # 用于障碍物探测,比如: 值为 3.0,意味着检测到距离小于 3 米的障碍物时,就会引入代价地图
raytrace_range: 3 # 用于清除障碍物,比如:值为 3.5,意味着清除代价地图中 3.5 米以外的障碍物
# 默认被全局代价地图使用
#膨胀半径,扩展在碰撞区域以外的代价区域,使得机器人规划路径避开障碍物
inflation_radius: 0.10
#代价比例系数,越大则代价值越小
cost_scaling_factor: 5.0 # dafault 5.0
track_unknown_space: true
#导航包所需要的传感器
observation_sources: scan
#对传感器的坐标系和数据进行配置。这个也会用于代价地图添加和清除障碍物。例如,你可以用激光雷达传感器用于在代价地图添加障碍物,再添加kinect用于导航和清除障碍物。
scan: {sensor_frame: laser, data_type: LaserScan, topic: scan, marking: true, clearing: true}
global_costmap_params.yaml
global_costmap:
global_frame: map #地图坐标系
robot_base_frame: base_footprint #机器人坐标系
# 以此实现坐标变换
update_frequency: 1.0 #默认1.0 代价地图更新频率
publish_frequency: 1.0 #默认1.0 代价地图的发布频率
transform_tolerance: 0.5 #等待坐标变换发布信息的超时时间
plugins:
- {name: static_layer, type: "costmap_2d::StaticLayer"} # 静态地图层
- {name: obstacle_layer, type: "costmap_2d::VoxelLayer"} # 障碍地图层
- {name: inflation_layer, type: "costmap_2d::InflationLayer"} # 膨胀地图层,用于留出足够的安全距离
local_costmap_params.yaml
local_costmap:
global_frame: map #里程计坐标系,不要设置成odam(Extrapolation Error)
robot_base_frame: base_footprint #机器人坐标系
update_frequency: 4.0 # 默认10.0 代价地图更新频率
publish_frequency: 3.0 #默认10.0 代价地图的发布频率
transform_tolerance: 0.5 #等待坐标变换发布信息的超时时间
#膨胀半径,扩展在碰撞区域以外的代价区域,使得机器人规划路径避开障碍物,local可以设置的比global小
inflation_radius: 0.07
#代价比例系数,越大则代价值越小
cost_scaling_factor: 5.0 # default 5.0
rolling_window: true #是否使用动态窗口,默认为false,在静态的全局地图中,地图不会变化
width: 2 # 默认3,局部地图宽度 单位是 m
height: 2 # 默认3,局部地图高度 单位是 m
resolution: 0.05 # deafault 0.05 局部地图分辨率 单位是 m,一般与静态地图分辨率(map/nav.yaml)保持一致
plugins:
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"}
move_base_params.yaml
shutdown_costmaps: false #当move_base在不活动状态时,是否关掉costmap.
controller_frequency: 5.0 #向底盘控制移动话题cmd_vel发送命令的频率.
controller_patience: 3.0 # 3.0 在空间清理操作执行前,控制器花多长时间等有效控制下发
planner_frequency: 0.0 #全局规划操作的执行频率.如果设置为0.0,则全局规划器仅
# 在接收到新的目标点或者局部规划器报告路径堵塞时才会重新执行规划操作.
planner_patience: 3.0 # default 3.0 在空间清理操作执行前,留给规划器多长时间来找出一条有效规划.
oscillation_timeout: 3.0 #default 5.0执行修复机制前,允许振荡的时长.
oscillation_distance: 0.15 #来回运动在多大距离以上不会被认为是振荡.
# Planner selection 规划器选项
base_global_planner: "global_planner/GlobalPlanner" #指定用于move_base的全局规划器插件名称.
# base_local_planner: "base_local_planner/TrajectoryPlannerROS"
base_local_planner: "teb_local_planner/TebLocalPlannerROS" # 指定用于move_base的局部规划器插件名称.
# base_local_planner: "eband_local_planner/EBandPlannerROS" # 指定用于move_base的局部规划器插件名称.
max_planning_retries: 1 #
recovery_behavior_enabled: true #
clearing_rotation_allowed: false #
recovery_behaviors: #
# 无作用,旋转后依旧无法找到可行路径
# - name: 'rotate_recovery'
# type: 'rotate_recovery/RotateRecovery'
- name: 'conservative_reset' #
type: 'clear_costmap_recovery/ClearCostmapRecovery' #
- name: 'aggressive_reset'
type: 'clear_costmap_recovery/ClearCostmapRecovery'
- name: 'super_reset'
type: 'clear_costmap_recovery/ClearCostmapRecovery'
- name: 'move_slow_and_clear'
type: 'move_slow_and_clear/MoveSlowAndClear'
# rotate_recovery:
# sim_granularity: 0.017
# frequency: 20.0
conservative_reset: #
reset_distance: 1.0 #
#layer_names: [static_layer, obstacle_layer, inflation_layer]
layer_names: [obstacle_layer] #
aggressive_reset: #
reset_distance: 3.0 #
#layer_names: [static_layer, obstacle_layer, inflation_layer]
layer_names: [obstacle_layer]
super_reset: #
reset_distance: 5.0 #
#layer_names: [static_layer, obstacle_layer, inflation_layer]
layer_names: [obstacle_layer]
move_slow_and_clear: #
clearing_distance: 0.5 #
limited_trans_speed: 0.1 #
limited_rot_speed: 0.4 #
limited_distance: 0.3 #
# # 是否是全向移动机器人
# holonomic_robot: false
# # Forward Simulation Parameters,前进模拟参数
# sim_time: 4.0 # default 0.8 ,提高此参数能有效提高运行轨迹的平滑,一般1~2
# vx_samples: 20 # default 18 在 x 方向上进行速度采样时平移部分的量
# vtheta_samples: 40 # default 20 控制速度采样中旋转部分的量,倾向于设置 vth_samples 的值大于平移部分的值
# sim_granularity: 0.05