3.9 局部规划器
1.DWA规划器
修改nav_launch文件,修改base_local_planner的alue选项
<launch><node pkg="move_base" type="move_base" name="move_base"><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="dwa_local_planner/DWAPlannerROS" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/dwa_local_planner_params.yaml" command="load"/></node><node pkg="map_server" type="map_server" name="map_server" args="$(find wpr_simulation)/maps/map.yaml"/><node pkg="amcl" type="amcl" name="amcl"/><node pkg="rviz" type="rviz" name="rviz" args="-d $(find nav_pkg)/rviz/nav.rviz"/></launch>
白色点线为生成被选路径 ,绿色是选定的路径
DWA参数列表
DWAPlannerROS:# 速度参数max_vel_x: 0.3 # 最大x方向速度min_vel_x: -0.05 # 最小x方向速度(设置负数将会允许倒车)max_vel_y: 0.0 # 差分驱动机器人的最大y方向速度为 0.0min_vel_y: 0.0 # 差分驱动机器人的最小y方向速度为 0.0max_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.7vx_samples: 3 # x方向速度采样数,默认值 3vy_samples: 1 # 差分驱动机器人y方向速度采样数,只有一个样本vtheta_samples: 20 # 旋转速度采样数,默认值 20# 轨迹评分参数path_distance_bias: 32.0 # 靠近全局路径的权重,默认值 32.0goal_distance_bias: 24.0 # 接近导航目标点的权重,默认值 24.0occdist_scale: 0.01 # 控制器避障的权重,默认值 0.01forward_point_distance: 0.325 # 从机器人到评分点的位置,默认值 0.325stop_time_buffer: 0.2 # 在碰撞前机器人必须停止的时间长度,留出缓冲空间,默认值 0.2scaling_speed: 0.25 # 缩放机器人速度的绝对值,默认值 0.25max_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 # 是否全向移动机器人
动态调参:在运行过程中修改launch参数
rosrun rqt_reconfigure rqt_reconfigure
2.TEB规划器
安装TEB
sudo apt install ros-noetic-teb-local-planner
修改nav.launch文件
<launch><node pkg="move_base" type="move_base" name="move_base"><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="teb_local_planner/TebLocalPlannerROS" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/teb_local_planner_params.yaml" command="load"/><param name="controller_frequency" value="10" type="double"/></node><node pkg="map_server" type="map_server" name="map_server" args="$(find wpr_simulation)/maps/map.yaml"/><node pkg="amcl" type="amcl" name="amcl"/><node pkg="rviz" type="rviz" name="rviz" args="-d $(find nav_pkg)/rviz/nav.rviz"/></launch>
可视化效果
teb参数
TebLocalPlannerROS:odom_topic: odom# 策略相关teb_autosize: True # 是否允许改变轨迹的时域长度,也就是改变 dt_refdt_ref: 0.5 # 路径上的两个相邻姿态的默认距离dt_hysteresis: 0.1 # 允许改变的时域解析度的浮动范围global_plan_overwrite_orientation: True # 是否修正全局路径中的临时局部路径点的朝向max_global_plan_lookahead_dist: 2.0 # 最大向前看距离feasibility_check_no_poses: 2 #在判断生成的轨迹是否冲突时使用,此时设置为2,即从轨迹起点开始逐个检查轨迹上的2个点,若2个点均不发生碰撞,则认为本次轨迹有效。# 运动相关 max_vel_x: 0.4 # 最大速度max_vel_x_backwards: 0.2 # 最大倒车速度,设置为0或者负数将导致错误。减少倒车应该修改倒车权重,不改这里。max_vel_theta: 1.0 # 最大转向角速度,跟 min_turning_radius 相关 (r = v / omega)acc_lim_x: 0.5 # 最大线加速度acc_lim_theta: 1.0 # 最大角加速度# ********************** 转弯半径相关 ********************min_turning_radius: 0.0 # 小转弯半径。如果设为 0,表示可以原地转弯。wheelbase: 0.31 # 只有在 cmd_angle_instead_rotvel为true时才有效cmd_angle_instead_rotvel: False # 是否将收到的角速度消息转换为操作上的角度变化。设置成 True 时,话题 vel_msg.angular.z 内的数据是转轴角度。# ********************************************************************# 车体轮廓footprint_model: # types可选项: "point", "circular", "two_circles", "line", "polygon"type: "circular"# 对 type "circular" 有效的参数:radius: 0.17# 对 type "line" 有效的参数: line_start: [0.0, 0.0] line_end: [0.35, 0.0]# 对 type "two_circles" 有效的参数:front_offset: 0.35front_radius: 0.35rear_offset: 0.35rear_radius: 0.35# 对 type "polygon" 有效的参数:vertices: [ [0.35, 0.0], [-0.2, -0.25], [0.2, -0.25]] # 到达目标点的判断容差 xy_goal_tolerance: 0.2yaw_goal_tolerance: 0.1# 障碍物相关 min_obstacle_dist: 0.1 # 与障碍物的最小间距inflation_dist: 0.4 # 障碍物膨胀距离include_costmap_obstacles: True # 是否检测动态障碍物costmap_obstacles_behind_robot_dist: 1.0 # 身后多远距离内障碍物加入检测范围obstacle_poses_affected: 25 # 障碍物对附近多少个关键点产生影响costmap_converter_plugin: "" # costmap_converter 插件名称,这里不使用# 路径优化相关no_inner_iterations: 3 # 图优化optimizer的迭代次数no_outer_iterations: 3 # 外循环迭代次数penalty_epsilon: 0.1 # 为所有的惩罚项增加一个小的安全余量weight_max_vel_x: 2 # 平移速度的优化权重weight_max_vel_theta: 1 # 角速度的优化权重weight_acc_lim_x: 1 # 平移加速度的优化权重weight_acc_lim_theta: 1 # 角加速度的优化重量weight_kinematics_nh: 1000 # 非完整运动学的优化权重weight_kinematics_forward_drive: 1 # 往前移动的权重weight_optimaltime: 1 # 耗时权重weight_obstacle: 50 # 与障碍物保持距离的权重# 多线规划enable_homotopy_class_planning: True # 激活多线规划enable_multithreading: True # 多线程计算max_number_classes: 2 # 规划的路径线数上限selection_cost_hysteresis: 1.0 # 路径轨迹入选的评价上限selection_obst_cost_scale: 1.0 # 障碍物评价在入选标准中的缩放倍率selection_alternative_time_cost: False # 时间成本是否要进行平方计算roadmap_graph_no_samples: 15 # 为创建 roadmap graph 而生成的样本数roadmap_graph_area_width: 5 # 关键点采样的宽度,单位为米。