解决mavros2 ros2版本cpu占用高的问题

树莓派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"
    ]

改善明显

  1. 设置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

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

bash 复制代码
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

相关推荐
Java后端的Ai之路1 小时前
昇腾NPU显存管理避坑指南:从npu-smi输出精准识别空闲卡的底层逻辑与实战
服务器·网络·数据库·npu·大模型服务
鱼宵2 小时前
LangChain4j 结构化输出:让模型吐出 Java 对象,JSON 不再手写解析
java·开发语言·json·langchain4j
HSunR2 小时前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
Wang's Blog2 小时前
Java 项目部署之 Docker工具快速入门: Docker 是什么以及它如何解决部署环境问题
java·开发语言·docker
老木避暑研究所2 小时前
从原始数据到洞察:一次完整的避暑房环境数据采集、清洗与可视化分析
java·开发语言
ajassi20002 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
linux 进程信号(下)
linux·运维·服务器
前端 贾公子3 小时前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库