Hi everyone,
I have released Nav2 Ready v0.1.0, an open-source CLI tool that checks whether a custom ROS 2 robot meets the basic runtime prerequisites for using Nav2.
GitHub release:
The problem
Nav2 often works successfully with sample robots such as TurtleBot3, but moving to a custom robot can be difficult.
When navigation does not start correctly, it may not be obvious whether the problem comes from:
-
TF connectivity or frame names
-
Odometry messages
-
LaserScan data
-
The sensor-to-base transform
-
A missing
cmd_velsubscriber -
Nav2 lifecycle states
-
The
maptoodomtransform -
Inconsistent ROS time settings
Nav2 Ready checks these prerequisites together and reports each result as PASS, WARN, or FAIL, with a possible cause and a suggested next step.
Example
[PASS] TF-001 Odometry transform
Transform available: base_footprint -> odom
[PASS] ODOM-001 Odometry stream
Received nav_msgs/msg/Odometry (odom -> base_footprint)
[PASS] SENSOR-001 Obstacle sensor stream
Received sensor_msgs/msg/LaserScan (frame: base_scan)
[PASS] NAV-001 Nav2 lifecycle
Required nodes active: behavior_server, bt_navigator,
controller_server, planner_server
Overall: PASS
8 passed, 0 warned, 0 failed
A typical command is:
ros2 run nav2_ready check \
--base-frame base_footprint \
--timeout 5 \
--ros-args -p use_sim_time:=true
Scope of v0.1.0
The initial release targets ROS 2 Jazzy and supports one obstacle sensor topic per run using either sensor_msgs/msg/LaserScan or sensor_msgs/msg/PointCloud2.
PointCloud2 validation is structural only. It does not diagnose point-cloud quality, filtering, or Nav2 voxel-layer configuration.
It intentionally does not include a GUI, AI-based diagnosis, automatic configuration changes, or support for multiple ROS distributions.
The current goal is to validate whether a small readiness checker like this is useful before expanding its scope.
Feedback wanted
I would especially appreciate feedback from people who have integrated Nav2 with a custom robot:
-
Would these checks have helped during your Nav2 setup?
-
Is an important prerequisite missing?
-
Are any results or suggested actions unclear?
-
Does the tool produce an incorrect
PASS,WARN, orFAILin your environment?
Please try it and open a GitHub Issue if you encounter a problem:
Thank you!