Blogs

ROS 2 in Production: A Field Report

ROS 2 is the de facto middleware for production robotics. A field report on what works, what does not, and how to ship robots running it.

Mar 08, 2026 5 min

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.