ROS 2 grew up. The honest assessment of where it is bulletproof and where you still need to be careful.
For most of ROS's life, "ROS in production" was an oxymoron. ROS 1 was a research framework that academic labs used to publish papers. ROS 2 — particularly Humble (LTS) and the newer Iron and Jazzy releases — is the version that actually ships in commercial robots. We have deployed ROS 2 across autonomous warehouse pickers, agricultural drones, and inspection robots. Here is the field report.
What ROS 2 got right
- DDS as the transport. Real-time, multicast, with QoS controls. Well-suited to production.
- Component lifecycle. Lifecycle nodes have explicit states (unconfigured, inactive, active, finalized). Deterministic startup, deterministic shutdown.
- Native Windows and macOS support. Cross-platform CI is finally tractable.
- Security primitives. SROS2 (Secure ROS 2) integrates DDS security: authentication, encryption, access control. Enterprise-deployable.
What still needs care
- QoS configuration. Get it wrong and your messages drop or your CPU spikes. The defaults are not always right.
- DDS implementation choice. Cyclone DDS, Fast DDS, RTI Connext — they have different performance characteristics and bugs. Pick deliberately.
- Build system complexity. Colcon plus ament plus CMake plus rosdep. The learning curve is real.
- Bridge to ROS 1. If you have legacy ROS 1 components, the bridge works but adds latency and operational complexity.
Patterns from production
- Containerize everything. Docker images per ROS 2 package. Reproducible builds, hash-pinned dependencies, deployable in air-gapped factories.
- Lifecycle nodes for everything that touches hardware. The state machine forces you to think about startup ordering and recovery.
- Custom QoS profiles per topic. Sensor data: best-effort, depth 1. Mission state: reliable, transient-local. Don't use defaults.
- Bag everything in production. rosbag2 records the full topic stream. When something breaks, you replay the day.
What we ship
For new robotics clients we default to ROS 2 Humble (LTS), Cyclone DDS, Docker Compose for orchestration, and rosbag2 + a lightweight ML pipeline for post-incident analysis. Every robot ships with telemetry to a central observability stack so we can debug fleet-wide issues from headquarters.
The takeaway
ROS 2 is no longer a research toy. It is a production-grade robotics middleware with the operational rough edges that any sufficiently mature platform has. Adopt it confidently; budget for the ramp.