☰
解决mavros2 ros2版本cpu占用高的问题
2026/10/11 5:36:55 网站建设 项目流程

树莓派5上mavros2原先占用20%单核,改后只占5%

cpu高来源两个方面:DDS对于单个节点资源消耗高,mavros2的plugins每个都是一个node;同时ros2的multi threaded executor线程多时占用cpu也高。

三招:

1. 设置plugin_allowlist为只允许必要的,因为mavros2里每个node都是一个节点占用DDS资源较多:

[ "sys_status", "command", "imu", "local_position", "setpoint_raw", "sys_time", "vision_pose", "global_position", "gps_status" ]

改善明显

2. 设置MAVROS_UAS_EXECUTOR_THREADS环境变量为2。mavros2默认用的multi thread executor是用的全部核心,没必要,最低设置为2保证并发。改善会有一些,较为明显。该参数只适用于Jazzy 及更高版本CPU usage 4x higher in ROS 2 than ROS 1 · Issue #2031 · mavlink/mavros · GitHub

3. 改rmw的dds从fastdds改到cyclonedds,因为dds开销层面cyclonedds小一点,对所有节点都适用,尤其对mavros这种多plugin多node的架构有效。实测能从50%降低到40%,有一定效果。

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

未来可能可行:ubuntu26 ros2 lyrical版本及以上(最近jazzy版本也支持了),执行器multi threaded executor可以改为事件驱动的CBGEventsExecutor,改善会有一些,但是cm executor是实验性功能,对service等的支持还不完善:Lyrical: try new executor by vooon · Pull Request #2249 · mavlink/mavros · GitHub

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询