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 这里有吗
时间: 2025-06-09 15:07:27 浏览: 32
<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/)
阅读全文
相关推荐



















