赞
踩
在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>
在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"));
在launch文件中加载的有用配置文件共6个,逐个介绍如下:
该文件被global_costmap、local_costmap共同使用。
参数含义:
robot_radius: 如果机器人是圆形,则指定机器人的半径;
footprint: [[x0, y0], [x1, y1], ... [xn, yn]] ;如果机器人非圆形,则指定机器人的轮廓;
map_type: voxel 地图类型;
# 障碍物层的参数配置 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
# 膨胀层参数配置
inflation_layer:
enabled: true # 是否使能膨胀层;
cost_scaling_factor: 5.0 #膨胀层的指数衰减速度,值越小衰减越慢(default: 10);
inflation_radius: 1.2 #最大有效膨胀半径,即安装指数衰减扩张的最大半径,计算障碍物cos函数时使用。
# 静态层参数配置
static_layer:
enabled: true # 是否使用静态层;
注解:
1、膨胀层的作用:做动态路径规划时,计算与障碍物的距离的代价值。cost_scaling_factor,表示远离障碍物时,代价值的衰减系数;inflation_radius表示膨胀层的最大考虑半径。
2、机器人轮廓:是为了防止机器人碰撞障碍物生成的序列点,在规划中代价为布尔运算,即碰撞即失效。
局部代价地图配置参数文件。
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"} # 膨胀层
全局代价地图参数配置文件。
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"}
局部路径规划参数配置文件。
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 # (这是什么含义?)
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
全局路径规划参数配置
此文件应该没有被用到!考虑删除!
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 # 目标点的容错量,当目标点在障碍物中时,可以有一定的容错。
#值越大,搜索时间越长。(是否考虑降低呢?)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。