当前位置: 首页 > news >正文

四种方法解决ROS2超过100个节点时的DDS瓶颈

fastdds 默认的 participant 限制是 100 个,超过会报错。可通过设置环境变量FASTRTPS_DEFAULT_PROFILES_FILE指向自定义 XML 配置文件来修改 participant 限制。

解决方法1: 增加fastdds的udp端口范围(100个以内节点首选)

新建fastdds_large_scale_configuration.xml:

<?xml version="1.0" encoding="UTF-8" ?><ddsxmlns="http://www.eprosima.com"><profiles><participantprofile_name="participant_profile"is_default_profile="true"><rtps><builtin><mutation_tries>1000</mutation_tries></builtin></rtps></participant></profiles></dds>

设置了mutation_tries为 10000(至少超过节点数,多了无害),避免 participant 创建失败。参考 https://docs.ros.org/en/humble/Tutorials/Advanced/Discovery-Server/Discovery-Server.html#large-number-of-participants

~/.bashrc~/.zshrc中添加:

exportFASTDDS_DEFAULT_PROFILES_FILE=改为path to fastdds_large_scale_configuration.xmlexportFASTRTPS_DEFAULT_PROFILES_FILE=改为path to fastdds_large_scale_configuration.xml# for old version (ROS humble)

Then run

source~/.bashrc# make ros2 cli tools take effectros2 daemon stop ros2 daemon start

优点:

  • 实测启动100个节点左右的仿真是可行的。

  • 不用改rmw实现,兼容现有fastdds的其他节点。

缺点:

  • 超过100个后仍然容易出现端口占用问题,而且启动速度明显变慢,甚至出现丢包。
    这是因为它采用的是Simple Discovery,每个节点都参与UDP广播的discovery机制,节点数过多时会导致网络拥塞。即使fastdds可以改用Discovery Server模式来解决这个问题,但实测仍然会出现启动问题,而且额外启动Discovery Server并不方便。

解决方法2: rmw改用cyclonedds(100-200个节点首选)

不同于fastdds的simple discovery机制,cyclonedds会共享 discovery 信息,而不是简单让每个 participant 独立完成全部 discovery, 对大规模 participant 更友好。

sudoaptinstallros-${ROS_DISTRO}-rmw-cyclonedds-cpp-yexportRMW_IMPLEMENTATION=rmw_cyclonedds_cpp# 添加到 ~/.bashrc 或 ~/.zshrc

优点:

  • 实测启动200个节点左右的仿真是可行的,不用额外启动Discovery Server,启动速度也比fastdds快。

缺点:

  • 节点数量较少时,cyclonedds的性能上限低于fastdds,话题发布到订阅的端到端延迟可能会慢一些。但是数量较多时,差异不明显。

  • 多于200个节点后,ros启动和运行开销仍然会明显增加,容易打满cpu。但这已经和发现机制关系不大了。

解决方案3: rmw改用zenoh(200+节点选择)

在2026版本的ros2 lyrical中,zenoh已经被支持为一等rmw实现。优势:

  • 节点Discovery效率更高,有望支持大规模节点。zenoh的router gossip发现机制类似ROS1的master节点,所有节点都通过router gossip来发现其他节点,理论上可以支持更多的participant。当然zenoh也支持udp multicast discovery机制,类似fastdds的simple discovery机制,但是overhead更低,性能更好。

  • 支持共享内存传输,多进程间话题通信可以更快。这对于高频或者大带宽话题发布和订阅非常有利

缺点:

  • 不兼容DDS版本的ros2生态,zenoh目前还没有被广泛使用,很多ros2包不支持zenoh rmw。

  • 仍然未能解决ros2一个节点就是一个进程(分配一个ros context)的问题,进程多时,ros2启动和运行开销仍然会明显增加,容易打满cpu。

解决方案4: 单进程启动多node(1000+节点首选)

类似ros1的nodelet,ros2也支持在一个进程中启动多个node,并用多线程executor。这样可以避免ros2多进程开销。

优点:

  • 避免ros2多进程开销,启动和运行开销明显降低。是最有可能实现1000+节点仿真的方案。

  • 进程内部可以使用零拷贝通信,/clock话题发布和订阅可以更快,有望提供fss_time coordinator的更高RTF推进速度。

缺点:

  • 不灵活,难以把用户算法也放入一个进程中。用户算法通常需要在不同的进程中运行。

  • 多个node在同一个进程中运行时,ros2的多线程executor调度机制不能完全隔离不同node的callback,可能会导致一个node的原本单线程的callback现在被分配到多线程上运行,和单线程行为不完全一致,尤其是用了多个callback group的时候。不过注意callback group的设置一般问题不大。

http://www.jsqmd.com/news/1372099/

相关文章:

  • 什么是无线PTL亮灯拣选专业直供?一篇读懂其定义、价值与实现路径 - 汇聚至此
  • Python爬虫实战:金融舆情数据抓取与情绪分析
  • Java构建中医药知识图谱与智能推荐系统实践
  • 企业云端数据保护怎么做?CIA三元组与共享责任模型指南
  • 逆向工程与加密算法实战:从CTF到真实攻防的破解之道
  • KMS_VL_ALL_AIO:3分钟解决Windows系统激活难题的智能工具
  • 3分钟免费终极指南:如何用LinkSwift网盘直链助手让下载速度翻倍
  • 东营区装修设计怎么选?本地装企盘点与家装实用避坑指南 - 收录优先
  • # 大湾区企业团建服务商怎么选?从四个维度看靠谱机构 - 友人团建
  • 用匠心搭建孩子的欢乐世界 - 城刊速递
  • iPhone录音文件怕意外丢失?支持云端备份的录音APP实测
  • 易语言EXUI框架可视化UI设计实战与优化
  • 2026无线PTL亮灯拣选哪家口碑好?主流品牌深度选型指南 - 汇聚至此
  • ChatGPT辅助Recipe开发:从试错到精准调参
  • Navicat重置脚本深度探索:揭秘macOS数据库工具的试用期管理机制
  • 2026 杭州婚庆用车租赁,大巴车、商务接待用车怎么预约? - LYL仔仔
  • 在线教育平台缺人才?金领玮业输送的退役军人学习服务师直接上岗 - 优企甄选
  • NCMDump终极指南:快速解密网易云音乐NCM文件的完整解决方案
  • 检测仪器小型化高压模块HVR82片式无感电阻布局方案
  • QKeyMapper:Windows按键映射终极指南 - 5分钟从新手到高手
  • 私有化部署长上下文大模型:从vLLM实战到API服务构建
  • 知识复利引擎:RAG + 全文索引 + 引用体系如何让文档互为素材
  • 终极Windows激活指南:如何使用KMS_VL_ALL_AIO智能脚本
  • 上下文工程新范式:当 Claude 5 重新定义提示词的边界
  • 如何三步解锁Adobe全家桶:破解付费墙的终极解决方案
  • Godot引擎2D游戏开发全攻略:从入门到优化
  • 国内卫浴十大品牌华艺卫浴:800+专利加持 技术创新领跑国货卫浴赛道 - GrowthUME
  • 0基础文科生勇闯AI产品经理规划
  • 碧蓝航线Perseus修改器:3分钟解锁游戏个性化体验的终极指南
  • 5个关键步骤:Atmosphere大气层系统完整部署与优化指南