本文由 AI 分析生成
Summary
A hobbyist roboticist building an AUV describes why he abandoned ROS 2 and built his own system on NATS + protobuf. The core critique: ROS 2 is tightly coupled to Ubuntu, version-locked across OS/framework/package layers, supports only C++ and Python, has a confusing multi-tool CLI, and uses APT as a package manager in ways that make sharing code awkward. His alternative: thin client libraries in any language over a lightweight pub-sub bus, with strongly typed messages via protobuf.
一位業餘機器人開發者說明他為何放棄 ROS 2、改用 NATS + protobuf 自建系統。核心批評:ROS 2 深度綁定 Ubuntu、在 OS/框架/套件三層之間版本鎖死、只支援 C++ 和 Python、CLI 工具分散混亂、以 APT 作為套件管理器導致程式碼分享困難。他的替代方案:任意語言的輕量 client library + 輕量 pub-sub bus + protobuf 強型別訊息。
Key Points
- Ubuntu coupling: ROS 2 packages are Ubuntu packages; Raspberry Pi OS (used by 95% of hobbyists) is effectively unsupported without containerization workarounds
- Version cascading: each ROS 2 version only works with a specific Ubuntu version; upgrading hardware (Pi4 → Pi5) forced an OS upgrade, which forced a ROS 2 upgrade, which broke all third-party packages
- Language lock-in: only C++ and Python supported, despite the modular architecture theoretically enabling any language
- CLI fragmentation:
ros2,rosdep,colconare separate tools; workspace sourcing required on every session; high barrier for beginners - Alternative: NATS (pub-sub) + protobuf (typed messages) gives the same modular architecture with language portability and a simpler mental model; author’s client library is ~150 lines
Insights
- The version cascade failure (hardware → OS → framework → packages) is a textbook example of tight coupling becoming a maintenance liability — the author’s framing as “tech debt” is precise
- The comparison to Arduino’s package manager is pointed: Arduino invested in a dedicated, easy-to-publish registry while ROS 2 piggybacks on APT with worse ergonomics
- NATS + protobuf as an alternative is genuinely interesting — it’s the same distributed message bus pattern ROS 2 uses, but decoupled from OS and language; Kubernetes for node orchestration would complete the picture
- The article was written by someone building a hobby AUV, not an academic — the critique is grounded in the experience of a competent engineer trying to get started, not an expert looking for edge cases
Connections
- learning-from-demonstration-hri — LfD research often runs on ROS 2; this critique is relevant context
- Clippings-container-networking-from-scratch — containerization is the ROS 2 workaround on non-Ubuntu systems; understanding container networking matters here
- Clippings-how-to-learn-devops-engineering-in-6-months — infrastructure fundamentals that would help navigate ROS 2’s Linux-heavy ecosystem
Raw Excerpt
“Things that probably shouldn’t be tightly coupled in the first place end up depending on each other, and then those problems cascade into hours of bugs, incompatibilities, and workarounds.”