|
Nav2 Navigation Stack - lyrical
lyrical
ROS 2 Navigation Stack
|
The Nav2 loopback simulator is a standalone simulator to create a "loopback" for non-physical simulation to replace robot hardware, physics simulators (Gazebo, Bullet, Isaac Sim, etc). It computes the robot's odometry based on the command velocity's output request to create a perfect 'frictionless plane'-style simulation for unit testing, system testing, R&D on higher level systems, and testing behaviors without concerning yourself with localization accuracy or system dynamics.
This was created by Steve Macenski of Open Navigation LLC and donated to Nav2 by the support of our project sponsors. If you rely on Nav2, please consider supporting the project!
**⚠️ If you need professional services related to Nav2, please contact Open Navigation at info@opennav.org.**
It is drop-in replaceable with AMR simulators and global localization by providing:
nav_msgs/Odometry odometry/initialpose topic for transporting the robot to another locationNote: This does not provide sensor data, so it is required that the global (and probably local) costmap contain the StaticLayer to avoid obstacles.
It is convenient to be able to test systems by being able to:
update_duration: The duration between updates (default 0.01 – 100hz)base_frame_id: The base frame to use (default base_footprint)odom_frame_id: The odom frame to use (default odom)map_frame_id: The map frame to use (default map)scan_frame_id: The scan frame to use to publish a scan to keep the collision monitor fed and happy (default base_scan for TB3, rplidar_link for TB4)enable_stamped_cmd_vel: Whether cmd_vel is stamped or unstamped (i.e. Twist or TwistStamped). Default true for TwistStamped (Kilted and newer; was false in Jazzy).odom_publish_dur: The duration between publishing odometry (default: same as update_duration)scan_publish_dur: The duration between publishing scan (default 0.1s – 10hz)publish_map_odom_tf: Whether or not to publish tf from map_frame_id to odom_frame_id (default true)publish_scan: Whether or not to publish a fake laser scan (default true)publish_clock: Whether or not to publish simulated clock to /clock (default true)speed_factor: Speed factor for the simulated clock, e.g. 2.0 runs simulation at 2x wall time (default 1.0). Dynamically reconfigurable.scan_range_min: Minimum measurable distance from the scan in meters. Values below this are considered invalid (default: 0.05)scan_range_max: Maximum measurable distance from the scan in meters. Values beyond this are out of range (default: 30.0)scan_angle_min: Starting angle of the scan in radians (leftmost angle) (default: -π / -3.1415)scan_angle_max: Ending angle of the scan in radians (rightmost angle) (default: π / 3.1415)scan_angle_increment: Angular resolution of the scan in radians (angle between consecutive measurements) (default: 0.02617)scan_use_inf: Whether to use inf for out-of-range values. If false, uses scan_range_max - 0.1 instead (default: true)scan_noise_std: Standard deviation of Gaussian noise added to scan ranges (default: 0.01)This node subscribes to:
initialpose: To set the initial robot pose or relocalization request analog to other localization systemscmd_vel: Nav2's output twist to get the commanded velocityThis node publishes:
clock: To publish a simulation clock for all other nodes with use_sim_time=True (when publish_clock is true)odom: To publish odometry from twisttf: To publish map->odom and odom->base_link transformsscan: To publish a range laser scan sensor based on the static map (when publish_scan is true)