性能故障排除#
总体症状:
- Autoware 的运行速度比预期的要慢
- 消息在 RViz2 中显示较晚
- 点云滞后
- 相机图像滞后
- RViz2 上的点云或标记闪烁
- 当多个订阅者使用相同的发布者时,消息速率会下降
诊断步骤#
检查是否启用了多播#
目标症状#
- 当多个订阅者使用相同的发布者时,消息速率会下降
诊断#
确保为您的接口启用了多播.
例如,当您运行以下命令时:
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
如果您收到错误消息 所选接口 {your-interface-name} is not multicast-capable: disabling multicast ,则应修复此问题.
解决方案#
尤其是 Enable multicast on lo 部分.
检查编译标志#
目标症状#
- Autoware 的运行速度比预期的要慢
- 点云滞后
- 当多个订阅者使用相同的发布者时,消息速率会进一步下降
诊断#
检查 ~/.bash_history 文件,看看是否有任何没有 -DCMAKE_BUILD_TYPE=Release 或 -DCMAKE_BUILD_TYPE=RelWithDebInfo 标志的 colcon build 指令.
即使构建以这些标志开始,但编译时没有这些标志的同一工作区,最终构建仍然会很慢.
此外,节点通常会运行缓慢,尤其是 pointcloud_preprocessor 节点.
问题示例:issue2597
解决方案#
- 删除主
autoware文件夹中的build、install和可选的log文件夹. -
使用
Release或RelWithDebInfo标签编译 Autoware:colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release # Or build with debug flags too (comparable performance but you can debug too) colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
检查 DDS 设置#
目标症状#
- Autoware 的运行速度比预期的要慢
- 消息在 RViz2 中显示较晚
- 点云滞后
- 相机图像滞后
- 当多个订阅者使用相同的发布者时,消息速率会下降
检查 RMW (ROS 中间件) 实现#
诊断#
运行以下命令以检查使用的中间件:
echo $RMW_IMPLEMENTATION
返回线应为 rmw_cyclonedds_cpp .如果没有,请应用解决方案.
如果您使用的是其他 DDS 中间件,我们可能还没有官方支持.
解决方案#
将 export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp 作为单独的行添加到 ~/.bashrc 文件中.
更多详情见:CycloneDDS 配置
检查 CycloneDDS 配置是否正确#
诊断#
运行以下命令以检查 CycloneDDS 的配置 .xml 文件:
echo $CYCLONEDDS_URI
返回行应该是指向具有 CycloneDDS 配置的 .xml 文件的有效路径.
还要检查文件是否配置正确:
cat ${CYCLONEDDS_URI#file://}
这应该会在终端上打印 .xml 文件.
解决方案#
遵循 CycloneDDS 配置 并确保:
- 你在
~/.bashrc文件上有export CYCLONEDDS_URI=file:///absolute_path_to_your/cyclonedds.xml作为一行. - 您拥有文档中提供的配置的
cyclonedds.xml.
检查 Linux 内核的最大缓冲区大小#
诊断#
解决方案#
检查是否启用了 DDS 的仅 localhost 通信#
- 如果您使用的是多计算机设置,请跳过此检查.
- 为 DDS 启用仅 localhost 通信可以通过减少网络流量并避免与网络上的其他设备发生潜在冲突来帮助提高 ROS 的性能.
目标症状#
- 您看到的话题不应该存在
- 您看到不属于您计算机的点云
- 它们可能来自您网络上运行 ROS 2 的另一台计算机
- RViz2 上的点云或标记闪烁
- 另一个发布者(在另一台计算机上)可能正在与您的节点相同的主题上发布.
- 导致闪烁.
诊断#
跑:
cat ${CYCLONEDDS_URI#file://}
它应该返回 ROS 2 和 Autoware 的 DDS 设置:CycloneDDS 配置此文件.
解决方案#
遵循 ROS 2 和 Autoware 的 DDS 设置:启用仅 localhost 通信的
此外,请确保以下代码返回空行:
echo $ROS_LOCALHOST_ONLY