ROS 2 vs ROS 1: what changed and how to migrate

ROS 1 reached end of life in 2025. Compare ROS 1 and ROS 2, see what changes in code and plan a realistic migration.

Reference
RE-751
Published
Read
4 min

About the author · Sources, testing and AI policy

Laptop showing ROS 1 and ROS 2 documentation side by side

ROS 1 is finished as a supported platform, but plenty of robots still run it. The practical question in 2026 is not which is better — ROS 2 is — but how much of your stack can move, and what you do with hardware that cannot.

This comparison covers the real differences that affect projects: middleware, launch, parameters, lifecycle, security and migration effort. Numbers and time estimates are indicative, not promises.

The short answer

Start new work on ROS 2. ROS 1 Noetic reached end of life in May 2025, which means no security patches and no binary updates for new Ubuntu releases. ROS 2 Jazzy is the current long-term support release for most teams, with the next LTS arriving in 2026.

AspectROS 1ROS 2
Build systemcatkinament and colcon
MiddlewareCustom TCP/UDP transportDDS with configurable vendors
Launch filesXML onlyPython, XML and YAML
ParametersGlobal parameter serverPer-node parameters with callbacks
Node lifecycleNoneManaged nodes with states and transitions
SecurityNone built inSROS2 with certificates and access control
Real-timeLimitedExecutors and DDS QoS designed for it
PlatformsMainly UbuntuLinux, Windows and macOS
Multi-robotNamespaces as a workaroundNamespaces and contexts as first-class features
Python APIrospyrclpy
C++ APIroscpprclcpp

What actually changes in your code

The concepts survive: nodes, topics, services, parameters, TF. The APIs do not. A ROS 1 node that works perfectly needs its includes, initialisation, spin model and message headers rewritten. Plan for a rewrite of the entry points, not a search-and-replace.

ROS 1 patternROS 2 replacementEffort
ros::init and ros::NodeHandlerclcpp::init and a node classSmall per file
ros::spin()rclcpp::spin(node) or an executorSmall
ros::param serverDeclared parameters on each nodeMedium, touches config design
.launch XMLPython launch filesMedium
ActionlibROS 2 actionsMedium
Custom message packagesSame ideas, new build filesSmall
rosbuild or old catkin tricksClean ament packageLarge if the package is old

Why the middleware change matters

ROS 2 does not ship its own transport; it uses DDS. That brings discovery, QoS, and the ability to choose a vendor implementation. It also brings configuration: two nodes that should talk may not, because their QoS settings disagree or their DDS domains differ.

For a single robot on a bench, this looks like extra complexity. For a fleet on a shared network, it is the feature that makes isolation possible: separate domain IDs or namespaces keep robots from hearing each other.

Migration effort by project type

ProjectRealistic effortApproach
Student project, 5–10 nodes1–3 weeksRewrite on ROS 2; faster than porting
Research stack with custom messages1–3 monthsPort packages one at a time behind a bridge
Small AMR fleet, ROS 1 drivers3–6 monthsKeep drivers, bridge topics, replace navigation with Nav2
Industrial cell with vendor softwareNot worth itKeep the vendor stack; integrate at the PLC or API level
Legacy platform with no sourceCannot migrateFreeze, isolate on its own network, plan replacement

If you must stay on ROS 1 for now

  • Freeze the OS image. Noetic will not receive updates, so keep a known-good image and do not upgrade the base system.
  • Isolate the network. No security patches means no exposed services. Keep ROS 1 traffic on a dedicated VLAN.
  • Bridge deliberately. The ros1_bridge package lets ROS 2 nodes talk to ROS 1 topics; use it as a transition path, not a permanent architecture.
  • Document the hardware interfaces. When the controller board or sensor is discontinued, the interface notes are what let you replace it.

What to learn in 2026

  1. ROS 2 command line and workspace layout with colcon.
  2. Publishers, subscribers, services and actions in rclpy or rclcpp.
  3. Launch files in Python, including arguments and namespaces.
  4. URDF, TF2 and robot_state_publisher.
  5. Nav2 for mobile robots or ros2_control for arms.
  6. Enough DDS to debug discovery and QoS.

That list maps closely to what Indian robotics job ads ask for. Legacy ROS 1 work still exists in older AMR fleets, but new projects and interviews assume ROS 2.

Mistakes during migration

MistakeResultBetter approach
Porting every package before testingMonths of work with nothing runningGet one node and one topic working end to end first
Keeping ROS 1 parameter habitsHidden global state, surprising defaultsDeclare parameters per node and validate them
Ignoring QoSSilent message lossSet profiles deliberately for sensors and commands
Bridging everything foreverTwo systems to debugBridge only while replacing, with a removal date
Assuming simulation ports cleanlyGazebo classic models breakRebuild models for the new Gazebo early

Related: ROS 2 for beginners, topics, services and actions, ROS 2 launch files, URDF tutorial, Nav2 tutorial.

Is ROS 1 still supported in 2026?

No. ROS 1 Noetic reached end of life in May 2025, so there are no more security patches or binary updates. Existing installations keep running but should be isolated and planned for replacement.

Should I learn ROS 1 or ROS 2 in 2026?

Learn ROS 2. New projects, courses and job listings assume ROS 2. ROS 1 knowledge is useful only for maintaining existing fleets.

How long does it take to migrate from ROS 1 to ROS 2?

A small student project can move in one to three weeks by rewriting. Research stacks take one to three months, and production fleets with custom drivers can take three to six months.

What is the ros1_bridge used for?

It lets ROS 2 nodes exchange messages with ROS 1 topics during a transition. It is a migration tool, not a long-term architecture.

Is ROS 2 harder to learn than ROS 1?

The basics are similar, but ROS 2 adds launch files in Python, QoS and DDS configuration. Most beginners find the first week harder and everything after that cleaner.

Sources and further reading

Pass it onWhatsAppLinkedIn

Keep reading

Continue learning

The Build Note

One short email when something is worth your bench time.

A new build sheet, a part price that moved, or a mistake worth avoiding. No daily drip, no recycled news.

One short email when a build or a price is worth your time. Unsubscribe in one click.