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.yamlas source of truth -
RViz2-native light theme so it looks at home alongside your existing tools
Screenshot:
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
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.
