从零开始使用global_planner全局规划

1. 环境配置

global_planner已集成在ROS的navigation包中。若未安装,安装navigation包:

sudo apt-get install ros-noetic-navigation 
# 验证安装:
rospack find global_planner

在这里插入图片描述

二、配置全局规划器(global_planner)

2.1 创建global_planner_params.yaml,配置算法行为参数(关键参数):

GlobalPlanner:
  #use_dijkstra=true:Dijkstra算法,保证最优路径但计算较慢。
  #use_dijkstra=false:A*算法,启发式搜索更快,但路径可能非最优。
  use_dijkstra: false       # true=Dijkstra, false=A*
  use_grid_path: false      # true=沿栅格边界生成路径,false=梯度下降法(启用梯度下降法,生成更平滑路径)
  allow_unknown: true       # 允许路径穿越未知区域
  old_navfn_behavior: false # 禁用navfn兼容模式
  visualize_potential: true # 可视化势场(用于调试)
  default_tolerance: 0.5    # 目标点容差(m)

2.2 创建move_base_globalplanner.launch文件,并指定move_base的base_global_planner参数为global_planner:

base_global_planner: "global_planner/GlobalPlanner"

2.3 加载参数文件:

<launch>
  <node pkg="move_base" type="move_base" name="move_base">
    <!-- 加载全局规划器参数 -->
    <rosparam file="$(find nav)/param/global_planner_params.yaml" command="load" />
    。。。。

三、修改启动文件并生成

turtlebot3_navigation.launch文件中,move_base_globalplanner.launch代替初始move_base.launch

  <include file="$(find nav)/launch/move_base_globalplanner.launch">
    <arg name="model" value="$(arg model)" />
    <arg name="move_forward_only" value="$(arg move_forward_only)"/>
  </include>
cd ~/catkin_ws
catkin_make_isolated --pkg nav --install

在这里插入图片描述

四、启动仿真

roslaunch nav turtlebot3_navigation.launch

在这里插入图片描述

五、启动导航(设置目标位姿)

use_dijkstra=true(默认值):Dijkstra算法,保证最优路径但计算较慢。
use_dijkstra=false:A*算法,启发式搜索更快,但路径可能非最优,可能导致贴着墙走
在这里插入图片描述

在这里插入图片描述

六、对比(NavfnROS)

global_planner是对 NavfnROS 的改进版本,提供更高质量的路径规划,是 ROS Indigo(Ubuntu 14.04) 及以后版本中的默认全局规划器。

对比项NavfnROSglobal_planner
默认使用ROS Hydro 及之前版本ROS Indigo 及之后版本
算法Dijkstra / A*A* / Dijkstra / Greedy Best First
路径质量一般,锯齿较多更平滑,更适合机器人运动
性能小地图好,大地图慢性能更优,适合大地图
参数配置较少丰富,可高度定制
实时性较差更好
是否推荐已逐渐淘汰推荐使用
功能扩展不支持插值等高级功能支持路径插值、启发函数选择等

七、配置避障参数

inflation_layer:
  # 启用膨胀层,负责在障碍物周围生成一个“禁止通行”的安全区域,防止路径规划器生成贴着障碍物的路径。
  enabled: true
  # 定义膨胀区域的半径(单位:米)。表示从障碍物向外扩展的“危险区域”范围,路径规划时会避开这些区域。
  inflation_radius: 1.0 
  # 控制膨胀代价的衰减速度(即从障碍物到自由空间的代价梯度)。数值越大,代价衰减越快,路径会更远离障碍物。
  cost_scaling_factor: 3.0 
rosrun rqt_reconfigure rqt_reconfigure

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代价值(cost value)在ROS的代价地图中表示机器人在某个位置或路径段的可行性和安全性 ,其数值范围通常为0到255,具体含义如下:

  • 代价值越高 :表示该区域越危险或不可行,路径规划器会尽量避开该区域。例如,障碍物附近或狭窄通道的代价较高。
  • 代价值越低 :表示该区域越安全或可通行,路径规划器倾向于选择低代价区域。

在ROS的代价地图(costmap_2d)中,cost_scaling_factor 和 inflation_radius 是 相互关联的参数,共同决定了机器人路径规划时对障碍物的避让行为,代价值的计算公式为:
cost=e−1.0∗cost_scaling_factor∗(d−r)cost=e^{ −1.0 * cost\_scaling\_factor * (d-r)}cost=e1.0cost_scaling_factor(dr)其中 d 是当前点到障碍物的距离,r 是机器人内切圆半径,

7.1 inflation_radius 是膨胀半径

表示从障碍物向外扩展的“安全区域”范围(单位:米,表示用于计算的区域,区域外默认安全则不计算),在这个区域内,代价值会根据 cost_scaling_factor 计算,路径规划器会尽量避开高代价区域。

  • 全局参数用于全局路径规划时避开障碍物,增大该值会使全局路径更远离障碍物,但可能限制可通行区域。
  • 局部参数用于局部避障(DWA控制器),但某些场景下可能不启用膨胀层,通常比全局值小(如 0.2~0.5 米),以允许更灵活的动态避障。

7.2 cost_scaling_factor

是膨胀代价的衰减因子 ,控制代价值从障碍物向外递减的速度,数值越大代价衰减越快,数值越小代价衰减越慢路径可能更贴近障碍物。

  • 全局参数控制全局代价地图中代价值的衰减速度。数值越大,代价衰减越快,路径更远离障碍物。若值过高(如 20),即使增大 inflation_radius,实际有效膨胀区域可能受限,导致路径差异不明显 。
  • 局部参数影响局部避障的保守程度。数值较小允许更贴近障碍物的动态避障。

7.3 cost_scaling_factor 与 inflation_radius 需要协同设置:

参数全局代价地图局部代价地图
inflation_radius设置机器人与障碍物的最小安全距离(如 0.55~1.0 米),避免全局路径贴墙可选,用于局部避障(如 0.2~0.5 米),或禁用(依赖局部规划器功能)
cost_scaling_factor控制全局路径避障的保守程度(推荐 3.0~5.0)调整局部避障的灵活性(推荐 1.0~2.0)

7.4 不同带价值颜色表示

在ROS的代价地图(costmap)中,代价值的不同颜色表示机器人在该位置的通行可行性和障碍物接近程度 。具体含义如下:

  • 白色(代价值=0) :表示自由空间,无障碍物,机器人可以安全通过。
  • 浅灰色/浅红色(代价值=1~127) :表示靠近障碍物的区域,但仍可通行。数值越接近127,越接近障碍物边界,可能存在风险。
  • 深红色(代价值=128~254) :表示高代价区域(如障碍物膨胀层),路径规划器会尽量避免通过。
  • 黑色(代价值=255) :表示致命障碍物区域,路径规划器完全禁止通行。

7.5 注意

  1. 降低 cost_scaling_factor :
    例如将 cost_scaling_factor 从20降至3~5,代价衰减速度变慢,inflation_radius 的增大将更明显地扩展安全区域。
  2. 匹配参数比例 :
    若 inflation_radius=10 米,可设置 cost_scaling_factor=0.5~1.0。
    若 inflation_radius=20 米,可设置 cost_scaling_factor=0.2~0.5。
    这样代价衰减速度与膨胀半径更匹配,路径避障行为差异更显著 。
  3. 结合机器人尺寸 :
    inflation_radius 应至少大于机器人半径(如机器人半径0.3米,inflation_radius 推荐0.5~1.0米)。
    cost_scaling_factor 可根据实际路径平滑度调整,推荐初始值3~5
  4. 当 cost_scaling_factor 设置为较高值(如20) 时,代价衰减速度非常快,代价值会在距离障碍物很近的范围内(如 d=0.5 米)迅速衰减到接近0。此时,inflation_radius=10 或 20 的区别仅体现在代价趋近于0的区域,对路径规划的约束几乎相同。
TebLocalPlannerROS: odom_topic: odom map_frame: odom # Trajectoty 这部分主要是用于调整轨迹 teb_autosize: True #优化期间允许改变轨迹的时域长度 dt_ref: 0.3 #期望的轨迹时间分辨率 dt_hysteresis: 0.03 #根据当前时间分辨率自动调整大小的滞后现象,通常约为。建议使用dt ref的10% #覆盖全局规划器提供的局部子目标的方向;规划局部路径时会覆盖掉全局路径点的方位角, #对于车辆的2D规划,可以设置为False,可实现对全局路径的更好跟踪。 global_plan_overwrite_orientation: True #指定考虑优化的全局计划子集的最大长度,如果为0或负数:禁用;长度也受本地Costmap大小的限制 max_global_plan_lookahead_dist: 3.0 feasibility_check_no_poses: 0 #检测位姿可到达的时间间隔,default:4 #如果为true,则在目标落后于起点的情况下,可以使用向后运动来初始化基础轨迹 #(仅在机器人配备了后部传感器的情况下才建议这样做) allow_init_with_backwards_motion: False global_plan_viapoint_sep: -1 #参数在TebLocalPlannerROS::pruneGlobalPlan()函数中被使用 #该参数决定了从机器人当前位置的后面一定距离开始裁剪 #就是把机器人走过的全局路线给裁剪掉,因为已经过去了没有比较再参与计算后面的局部规划 global_plan_prune_distance: 1 exact_arc_length: False publish_feedback: False # Robot max_vel_x: 1.8 max_vel_x_backwards: 1 max_vel_theta: 3.6 acc_lim_x: 1.8 acc_lim_theta: 3.6 #仅适用于全向轮 # max_vel_y (double, default: 0.0) # acc_lim_y (double, default: 0.5) # ********************** Carlike robot parameters ******************** min_turning_radius: 0.5 # 最小转弯半径 注意车辆运动学中心是后轮中点 wheelbase: 0.26 # 即前后轮距离 #设置为true时,ROS话题(rostopic) cmd_vel/angular/z 内的数据是舵机角度, cmd_angle_instead_rotvel: True # ******************************************************************** # footprint_model: # types: "point", "circular", "two_circles", "line", "polygon" 多边形勿重复第一个顶点,会自动闭合 # type: "line" # # radius: 0.2 # for type "circular" # line_start: [-0.13, 0.0] # for type "line" # line_end: [0.13, 0.0] # for type "line" # front_offset: 0.2 # for type "two_circles" # front_radius: 0.2 # for type "two_circles" # rear_offset: 0.2 # for type "two_circles" # rear_radius: 0.2 # for type "two_circles" # vertices: [ [0.25, -0.05], [0.18, -0.05], [0.18, -0.18], [-0.19, -0.18], [-0.25, 0], [-0.19, 0.18], [0.18, 0.18], [0.18, 0.05], [0.25, 0.05] ] # for type "polygon" # GoalTolerance footprint_model: type: "polygon" vertices: [[0.18, 0.10], [0.18, -0.10], [-0.18, -0.10], [-0.18, 0.10]] xy_goal_tolerance: 0.1 yaw_goal_tolerance: 0.1 #自由目标速度。设为False时,车辆到达终点时的目标速度为0。 #TEB是时间最优规划器。缺少目标速度约束将导致车辆“全速冲线” free_goal_vel: True # complete_global_plan: True # Obstacles min_obstacle_dist: 0.2 # 与障碍的最小期望距离, include_costmap_obstacles: True #应否考虑到局部costmap的障碍设置为True后才能规避实时探测到的、建图时不存在的障碍物。 costmap_obstacles_behind_robot_dist: 2.0 #考虑后面n米内的障碍物2.0 obstacle_poses_affected: 30 #为了保持距离,每个障碍物位置都与轨道上最近的位置相连。 costmap_converter_spin_thread: True costmap_converter_rate: 5 # Optimization no_inner_iterations: 3 no_outer_iterations: 2 optimization_activate: True optimization_verbose: False penalty_epsilon: 0.1 weight_max_vel_x: 3 #2 weight_max_vel_y: 0.1 weight_max_vel_theta: 3 #2 weight_acc_lim_x: 2 weight_acc_lim_y: 0.1 weight_acc_lim_theta: 2 #1 weight_kinematics_nh: 200 #100 weight_kinematics_forward_drive: 200 #100 #1 weight_kinematics_turning_radius: 200 #100 #1 weight_optimaltime: 1.0 #0.5 weight_shortest_path: 0.5 #0 weight_obstacle: 20 #50 weight_inflation: 2 #1 weight_dynamic_obstacle: 1 # not in use yet # alternative_time_cost: False # not in use yet selection_alternative_time_cost: True switching_blocking_period: 0.1 # Homotopy Class Planner enable_homotopy_class_planning: False enable_multithreading: False simple_exploration: False max_number_classes: 4 roadmap_graph_no_samples: 15 roadmap_graph_area_width: 5 h_signature_prescaler: 0.5 h_signature_threshold: 0.1 obstacle_keypoint_offset: 0.1 obstacle_heading_threshold: 0.45 visualize_hc_graph: False # # Recovery # shrink_horizon_backup: True # shrink_horizon_min_duration: 10 # oscillation_recovery: True # oscillation_v_eps: 0.1 # oscillation_omega_eps: 0.1 # oscillation_recovery_min_duration: 10 # oscillation_filter_duration: 10 这里有吗
06-10
<think>我们正在讨论TEB局部规划器(teb_local_planner)中关于是否允许机器人冲过目标点的参数。用户之前已经询问了`allow_overlapping_trajectory`参数,现在又提到了`free_goal_vel`参数。根据ROS官方文档和TEB的代码实现,我们需要明确这两个参数的含义和区别。1.**`allow_overlapping_trajectory`**:该参数控制机器人是否被允许在轨迹规划中超出目标点(即冲过目标点),然后再返回。设置为`true`时允许超调,设置为`false`时则要求机器人必须严格在目标点之前停下来(不超调)。这个参数主要影响轨迹的生成方式。2.**`free_goal_vel`**:这个参数的作用是是否放宽对目标点速度的限制。默认情况下,TEB会要求机器人在到达目标点时速度为零。但如果我们设置`free_goal_vel`为`true`,那么规划器将允许机器人在到达目标点时的速度不为零(自由速度)。这通常用于以下场景:-机器人需要连续通过多个目标点(例如路径跟踪),在中间目标点不需要完全停止。-机器人需要以非零速度到达目标点,然后继续前进(比如跟随路径点序列时,点之间不需要停顿)。因此,这两个参数都与“冲线”行为有关,但角度不同:-`allow_overlapping_trajectory`:控制轨迹是否可以超出目标点(空间上的超调)。-`free_goal_vel`:控制到达目标点时是否强制要求速度为零(速度上的约束)。用户当前的问题是关于`free_goal_vel`的配置说明。所以我们应重点解释这个参数。##参数详细说明###1.**`free_goal_vel`**-**类型**:boolean-**默认值**:`false`-**功能**:当设置为`true`时,机器人到达目标点的速度不受约束(即可以不为零);当设置为`false`时,规划器会强制要求在目标点处的速度必须为零(即完全停止)。-**典型应用场景**:-当机器人在执行连续路径点跟踪任务时,我们希望机器人在中间点不要停下,而是保持一定的速度继续前进。这时我们可以将`free_goal_vel`设置为`true`。-如果机器人需要精确地在目标点停下(例如到达最终目标点),则应设置为`false`。###2.与`allow_overlapping_trajectory`的区别-`allow_overlapping_trajectory`主要控制轨迹形状是否允许超出目标点(空间上的超调),而`free_goal_vel`控制的是目标点处的速度约束。-这两个参数可以组合使用:-若`free_goal_vel=true`且`allow_overlapping_trajectory=true`:机器人可以以非零速度冲过目标点,并且轨迹可以超出目标点。-若`free_goal_vel=false`且`allow_overlapping_trajectory=true`:机器人必须停在目标点(速度为零),但由于允许轨迹超调,机器人可能会先略微超过目标点再返回(取决于其他参数和运动状态)。-若`allow_overlapping_trajectory=false`:则无论`free_goal_vel`如何,轨迹都不能超出目标点,机器人会在目标点之前减速至停止(或非零速度,但不会超过目标点)。###3.配置建议在ROS导航中,通常我们使用一系列的局部路径点(比如通过`move_base`发送目标)。对于最终目标点,我们通常希望机器人完全停止(`free_goal_vel=false`)。而对于中间路径点(如果使用路径点序列),我们可能希望机器人以一定速度通过(`free_goal_vel=true`)。然而,请注意TEB规划器通常在一次规划中只处理一个目标点(即当前目标点),所以在`move_base`中通常不会遇到中间路径点连续通过的情况。因此,在一般的导航任务中,我们通常将`free_goal_vel`设为`false`以确保在目标点停下。但是,如果用户使用自定义的节点连续发送目标点(比如使用`move_base_flex`),则可能需要设置为`true`。##配置文件示例下面是一个参数配置示例(`teb_local_planner_params.yaml`):```yamlTebLocalPlannerROS:#是否允许轨迹超出目标点(空间超调)allow_overlapping_trajectory:true#是否放宽目标点速度约束(允许非零速度到达目标)free_goal_vel:false#位置容差(米)xy_goal_tolerance:0.1#朝向容差(弧度)yaw_goal_tolerance:0.2```##实测建议-观察速度曲线:当机器人接近目标点时,使用`rostopicecho/cmd_vel`查看速度变化,检查到达目标点时速度是否降为零。-RViz中显示轨迹:打开TEB的轨迹可视化,观察机器人的轨迹是否超调以及是否在目标点处停止。##相关问题根据用户的问题习惯,生成几个相关问题:1.如何配置TEB规划器实现中间路径点不停顿?2.当`free_goal_vel`设置为`true`时,机器人无法在目标点停下怎么办?3.`xy_goal_tolerance`和`yaw_goal_tolerance`与`free_goal_vel`的关系是什么?注:我们的回答基于ROS官方文档和TEB源码分析[^1]。[^1]:[TebLocalPlannerROS参数文档](https://github.com/rst-tu-dortmund/teb_local_planner)</think> ### `TebLocalPlannerROS` 的参数 `free_goal_vel` 配置说明 在 `teb_local_planner` 中,**`free_goal_vel`** 是与是否冲线直接相关的核心参数,它控制到达目标点时的速度约束机制,具体说明如下: #### 1. **参数作用** - **控制目标点速度限制**:决定是否强制要求机器人以零速度到达目标点 - **`true`**: 允许机器人以 **非零速度冲过目标点** ($v_{goal} \neq 0$) - **`false`**: 强制机器人以零速度停在目标点 ($v_{goal} = 0$) *图例:* ``` 允许冲线:[当前位姿]----->[目标点]-----------> 禁止冲线:[当前位姿]----->[目标点] // 急停刹车 ``` #### 2. **默认值** - **`false`** (强制零速度到达)[^1] - 确保导航精度,避免超调风险 - 适用于绝大多数安全敏感场景 #### 3. **典型应用场景** | 配置值 | 适用场景 | 优点 | 风险 | |--------|----------|------|------| | `true` | 高速连续运动<br>路径点序列跟踪<br>时间敏感任务 | 平滑轨迹<br>节省时间<br>避免急刹抖动 | 可能冲过目标点<br>末端碰撞风险↑ | | `false`| 精确到达目标<br>狭窄空间<br>接近障碍物 | 无超调风险<br>末端稳定<br>安全性高 | 可能产生轨迹震荡<br>刹车冲击↑ | #### 4. **协同参数** 必须配合以下参数使用: - **`xy_goal_tolerance`** 目标点位置容差 ($\delta_d$) ```yaml # 当 free_goal_vel=true 时需增大容差 xy_goal_tolerance: 0.3 # 默认0.1 ``` - **`min_obstacle_dist`** 障碍物最小距离 ($d_{min}$) ```yaml # 防止冲线撞到后方障碍物 min_obstacle_dist: 0.5 # 默认0.2 ``` #### 5. **配置示例** ```yaml TebLocalPlannerROS: # 冲线控制参数 free_goal_vel: true # 启用冲线功能 # 协同参数 xy_goal_tolerance: 0.3 # 位置容差(米) yaw_goal_tolerance: 0.5 # 朝向容差(弧度) min_obstacle_dist: 0.5 # 障碍物安全距离 # 动态调整 max_vel_x: 1.0 # 最大线速度 acc_lim_x: 0.5 # 线加速度限制 ``` #### 6. **调试建议** 1. 在RViz中启用 **"TEB轨迹预测"** 可视化 2. 使用`rqt_plot`监控 **`/cmd_vel`** 的末端速度曲线 3. 冲线场景下需验证目标点后方障碍物安全距离: $$ s_{safe} = \frac{v_{max}^2}{2a_{dec}} + d_{buffer} $$ *其中 $a_{dec}$为减速度,$d_{buffer}$为缓冲距离* > ⚠️ **重要提示**:当目标点靠近墙壁、家具等障碍物时,务必禁用冲线(`free_goal_vel=false`),否则可能因动量惯性引发碰撞[^2]。 --- ### 相关问题 1. **当`free_goal_vel=true`时,如何避免机器人冲过目标点后撞到障碍物?** 2. **TEB规划器中的`min_obstacle_dist`参数对安全冲线有何影响?** 3. **在ROS2的`nav2`中`free_goal_vel`参数是否有命名变更?** 4. **如何通过动态调参实现高速场景自动启用冲线?** [^1]: [teb_local_planner参数文档](https://github.com/rst-tu-dortmund/teb_local_planner/wiki/Parameter-Reference) [^2]: [ROS导航实践指南](https://navigation.ros.org/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

具身小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值