Nav2_config -- real-time Nav2 parameter tuning GUI (no restart needed)

I have been deploying Nav2 on UV disinfection robots in hospitals for the past year. One thing that kept slowing me down was the kill edit relaunch cycle every time I needed to tweak inflation_radius, MPPI cost weights, or DWB critic parameters mid-session. On a real robot in a live environment, that’s not just annoying and it breaks the tuning flow completely.

So I built nav2_config, a PyQt6 desktop app that connects to your running Nav2 stack and lets you change parameters in real-time via ros2 param set. No node restart needed for most params.

What it does:

  • Connects to live Nav2 nodes via the ROS2 node graph, polls every 3 seconds

  • 278 parameters with descriptions, ranges, and tuning advice — plus auto-discovery for anything outside the schema (any plugin works automatically)

  • Per-param Set button with visual feedback: idle → ready → pending → success/fail

  • Automatic post-set service calls — clears costmaps after inflation params, triggers AMCL nomotion update, reloads map for map_server

  • Lifecycle management through lifecycle_manager (not direct node transitions, which causes CRITICAL FAILURE)

  • Loads/saves your nav2_params.yaml as source of truth

  • RViz2-native light theme so it looks at home alongside your existing tools

Screenshot:

Screenshot

Screenshot1856×1053 118 KB

Install:

cd ~/ros2_ws/src
git clone https://github.com/sutharsan-311/nav2_config.git
sudo apt install python3-pyqt6
cd ~/ros2_ws
colcon build --packages-select nav2_config
source install/setup.bash
ros2 run nav2_config gui


Repo: GitHub - sutharsan-311/nav2_config: Real time Nav2 parameter tuning GUI for ROS2, no kill or relaunch needed · GitHub

Tested on Humble. The APIs are identical across Humble, Iron, and Jazzy so it should work, but haven’t verified on the newer distros yet would appreciate reports if anyone tries.

This came out of a real production deployment so the edge cases around lifecycle and post set service calls are handled from actual debugging, not just the docs. Feedback welcome.

2 Likes

Is this limited to nav2, or can I also use it for all the other nodes that could be running on a robot?

Btw, how does it compare to rqt_reconfigure?

1 Like

Nav2 specific for now, the UI, schema, post-set service calls, and lifecycle management are all built around Nav2’s structure. That said, the underlying param read/write uses standard ROS2 param services, so technically it talks to any node. The Nav2 specific parts are the schema descriptions, the costmap clear and AMCL update triggers, and the lifecycle handling.

On rqt_reconfigure, it’s a generic param editor with raw names and no context. nav2_config knows what the params mean, which ones need follow up actions after being set, and how Nav2’s plugin namespacing works (FollowPath.max_vel_x, inflation_layer.inflation_radius). rqt_reconfigure has none of that.

2 Likes