解决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

相关推荐
葡萄城技术团队1 小时前
1000 人协同压测的环境瓶颈排查:CPU 争用与 Wi\-Fi
前端
中云DDoS CC防护蔡蔡2 小时前
DDOS和CC攻击谁更可怕
运维·服务器·经验分享·网络安全·ddos
2301_780789662 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧2 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
学长毕设2 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
excel3 小时前
Marked 与 Markdown 有什么区别?该怎么选?
前端
步行cgn3 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
前端精髓3 小时前
调用大模型API
运维·服务器·microsoft