Files

211 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
``` bash
root@nvidia:~/ros2_ws# ros2 topic echo /goal_pose
header:
stamp:
sec: 1776912839
nanosec: 772353086
frame_id: map
pose:
position:
x: -0.2929971516132355
y: -28.93631362915039
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.7140266359687852
w: 0.7001185350546718
---
header:
stamp:
sec: 1776912894
nanosec: 349057427
frame_id: map
pose:
position:
x: 1.0191293954849243
y: -23.940237045288086
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.758253550259611
w: 0.6519597790651626
---
header:
stamp:
sec: 1776912930
nanosec: 59193832
frame_id: map
pose:
position:
x: -0.25821736454963684
y: -26.604511260986328
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.7286561115363753
w: 0.6848797493872113
---
header:
stamp:
sec: 1776913007
nanosec: 811936088
frame_id: map
pose:
position:
x: -0.5403046607971191
y: -23.95861053466797
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.7323575592769619
w: 0.6809202635917743
---
header:
stamp:
sec: 1776913105
nanosec: 601216801
frame_id: map
pose:
position:
x: -0.13717754185199738
y: -31.840221405029297
z: 0.0
orientation:
x: 0.0
y: 0.0
z: -0.6531641242066932
w: 0.7572163672618966
---
```
雷达同步问题
```
ros2_ws\src\rslidar_sdk\config\config.yaml
use_lidar_clock: false
```
```
---
⚠️ 警告1:No goal checker was specified in parameter 'current_goal_checker'. Server will use only plugin loaded
general_goal_checker
含义
这是配置缺失类警告,不影响功能,只是提示你没有显式指定当前使用的目标检查器,系统自动用了第一个加载的general_goal_check
er。
根因
ROS2 Humble及以上版本的Nav2新增了current_goal_checker强制配置项,你的配置里只定义了goal_checker插件,但没有指定当前使
用哪一个。
✅ 解决方案
在controller_server的ros__parameters下添加一行即可:
controller_server:
ros__parameters:
current_goal_checker: "general_goal_checker" # 新增这行
controller_frequency: 20.0
# ... 其他原有配置
---
⚠️ 警告2:Behavior Tree tick rate 100.00 was exceeded!
含义
这是性能类警告,行为树默认tick频率是100Hz(每10ms执行一次),现在单次tick执行时间超过了10ms,导致频率不达标。
根因
行为树中的计算密集型节点执行太慢,90%的情况是MPPI控制器计算耗时过长,小概率是系统CPU负载过高、规划器卡顿等。
✅ 排查&解决方案
1. 先看CPU占用:top 看controller_server进程的CPU占比,如果超过100%就是计算量太大
2. 优先优化MPPI参数(你的当前配置计算量过高),后面警告3会详细说
3. 实在优化不了可以调大BT的tick间隔,在bt_navigator下加:
bt_navigator:
ros__parameters:
bt_loop_duration: 20 # 从10ms改成20ms,频率降到50Hz,不推荐,优先优化控制器
---
⚠️ 警告3:Control loop missed its desired rate of 20.0000Hz
含义
这是核心性能警告,控制器要求20Hz的控制频率(每50ms输出一次速度指令),现在单次循环执行超过了50ms,频率不达标。
⚠️ 这个问题必须优先解决:控制频率低于15Hz会导致MPPI控制不稳定,甚至出现急刹、撞障碍物的情况。
根因
你的MPPI配置计算量过大,两个核心参数超标:
FollowPath:
batch_size: 2000 # 单次迭代采样2000条轨迹,计算量极大
time_steps: 56 # 每条轨迹预测56步(0.05*56=2.8秒预测时长)
- 2000的batch_size在Jetson NX级别的嵌入式平台单次计算就要60-80ms,肯定达不到50ms的要求
- 额外加重负载的配置:local costmap的obstacle_max_range: 20.0,local
costmap本身只有6m×6m,处理20米内的点云完全是浪费CPU
✅ 解决方案(按优先级)
1. 调小MPPI计算量(优先保证控制频率达标):
FollowPath:
batch_size: 1000 # 降到800-1200,轨迹采样数减半,性能提升一倍,效果下降不明显
time_steps: 40 # 降到32-40,预测时长2秒足够,履带车速度慢不需要太长预测
2. 缩小local costmap障碍物检测范围:
# local_costmap的voxel_layer下的scan配置
obstacle_max_range: 10.0 # 从20米改成10米,足够覆盖6m的local costmap范围
3. 验证效果:改完后用ros2 topic hz /cmd_vel_nav看频率,稳定在18Hz以上就算合格
---
❌ 错误1:Failed to create a plan from potential when a legal potential was found. This shouldn't happen.
含义
这是Navfn规划器内部错误:规划器已经算出了从起点到终点的势场(理论上存在可行路径),但实际提取路径的时候失败了。
根因
结合你的配置,最可能的几个原因:
4. 可行通道太窄:你的膨胀半径是1.8m,车身本身宽1.8m,通道宽度必须大于3.6m才能通过,如果路径上有窄于这个宽度的通道,膨
胀后就没有可行空间了
5. 起点/终点落在膨胀区内:虽然势场是通的,但膨胀后的代价太高,路径提取的时候找不到合法的起点/终点
6. 膨胀半径过大:1.8m的膨胀半径刚好是车身宽度,没有冗余,稍微有点障碍物就会把通道堵死
7. 全局costmap噪点过多:点云误检的障碍物挡住了路径
✅ 排查&解决方案
8. 排查路径情况:规划失败时,在rviz上看起点到终点的通道宽度,是不是小于3.6m
9. 优化膨胀半径(如果通道普遍较窄):
# 全局和局部costmap的inflation_radius都可以降到1.5m(只要大于车身最大半长1.2m就满足SMAC优化要求)
inflation_radius: 1.5
10. 优化Navfn参数:
GridBased:
tolerance: 1.0 # 从0.5米改成1.0米,允许终点有更大的容忍范围
11. 终极方案:换规划器:如果经常走窄通道,把Navfn换成nav2_smac_planner/SmacPlanner,对窄通道的支持好很多
12. 检查全局costmap噪点:如果有很多误检的小障碍物,调大mark_threshold过滤噪点
---
❌ 错误2:Failed to get result for follow_path in node halt!
含义
这是次生错误,不影响功能,只是日志提示:行为树在终止(halt)的时候,尝试获取follow_path节点的执行结果,但结果不存在。
根因
完全是前面的规划失败导致的连锁反应:规划失败后整个导航任务提前终止,follow_path节点还没来得及产生结果就被强制停止了。
✅ 解决方案
解决前面的规划失败问题后,这个错误会自动消失,不需要单独处理。
---
🎯 解决优先级建议
13. 【最高优先级】先解决控制循环频率不够的问题,直接影响导航安全性
14. 【次高优先级】解决规划失败的问题,影响导航可用性
15. 【低优先级】解决剩下的配置类警告,不影响功能只是优化日志
额外优化建议
你现在的voxel层mark_threshold: 10有点太高了,需要10个点才能标记障碍物,容易漏检小障碍物,建议调到3-5更合适:
voxel_layer:
mark_threshold: 3 # 从10改成3,平衡噪点过滤和小障碍物检测
```