DEV Community

TildAlice
TildAlice

Posted on • Originally published at tildalice.io

ROS1 move_base vs ROS2 Nav2: 8 Breaking Changes

The Navigation Stack Rewrite Nobody Warned You About

ROS2 Nav2 is not a drop-in replacement for ROS1 move_base. It's a complete architectural redesign that will break your production robot if you treat it like a version bump.

I learned this the hard way migrating a warehouse AMR fleet from ROS1 Noetic to ROS2 Humble. The navigation stack worked fine in simulation, passed all integration tests, then immediately crashed on the factory floor when the first robot tried to recover from a blocked path. The recovery behavior API had been completely rewritten, and our custom recovery plugins were silently ignored.

This post walks through the 8 breaking changes that actually matter in production — not the ones mentioned in migration guides, but the ones that only surface when your robot is live.

A miniature tank robot navigating through rocky terrain near railway tracks in Đà Nẵng, Vietnam.

Photo by David Thái on Pexels

Parameter Namespaces: bt_navigator vs move_base

ROS1 move_base used flat parameter namespaces. You configured everything under /move_base/:


yaml
# ROS1 move_base
move_base:
  controller_frequency: 10.0

---

*Continue reading the full article on [TildAlice](https://tildalice.io/ros1-movebase-vs-ros2-nav2-migration-checklist/)*
Enter fullscreen mode Exit fullscreen mode

Top comments (0)