Mobile Base Support in MoveIt Pro
MoveIt Pro navigates mobile bases with Nav2, the standard ROS 2 navigation stack, and plans coordinated base and arm motion for mobile manipulators. This page summarizes what ships today and links to the guides that cover each part in detail.
At a Glance
| Capability | What ships | Details |
|---|---|---|
| Localization | 2D lidar particle-filter localization against a map, with Beluga AMCL, on top of wheel odometry and IMU fused by Fuse | Localization Tuning |
| Mapping | 2D occupancy grid maps built from lidar scans with slam_toolbox | Localization and Mapping |
| Navigation | Nav2 path planning, path following, costmap obstacle avoidance, and replanning, driven from Objectives | Mobile Navigation (Nav2) |
| Whole-body motion | One planned trajectory that moves an omnidirectional base and an arm together | Whole-Body Motion |
| Visualization | Map, costmaps, footprints, and particle cloud in the 3D Visualizer; planned paths, controller rollouts, and live lidar data from MoveIt Pro 10.2 | Costmaps in the Desktop App |
| Simulation | Simulated lidar, wheel odometry, and IMU in the MoveIt Pro Simulator | Try It in Simulation |
Localization and Mapping
Localization uses Beluga AMCL, a particle-filter localization library from Ekumen whose beluga_amcl node has the same interface as Nav2's AMCL node. It matches 2D lidar scans against an occupancy grid map and publishes the map → odom correction that places the robot on the map. It has motion models for both omnidirectional and differential-drive bases.
Underneath it, the Fuse state estimator, which ships with MoveIt Pro, combines wheel odometry and IMU data into a smooth odometry estimate that AMCL corrects.
Mapping uses slam_toolbox to build a 2D occupancy grid map from lidar scans. Mapping and localization run one at a time: once the map is saved, Nav2's map server loads it for localization and global path planning. Try It in Simulation shows how to switch hangar_sim to mapping.
To see how localization and Fuse work together in hangar_sim, see the Localization section of Mobile Navigation (Nav2); to set them up and tune them on your robot, see Localization Tuning.
Navigation
MoveIt Pro runs Nav2 alongside the Runtime and drives it from Objectives through built-in Behaviors: NavigateToPoseAction, NavigateThroughPosesAction, ComputePathToPoseAction, FollowPathAction, SetInitialPose, and WaitForUserPathApproval. Mobile Navigation Setup shows how to add them to a robot configuration package.
Nav2 is configured per robot, so you choose its planner and controller plugins in your own parameters file. The reference configuration, hangar_sim, uses:
- Global planner: NavFn.
- Controller: MPPI (Model Predictive Path Integral), followed by Nav2's velocity smoother.
- Costmaps: a global costmap with static map, lidar obstacle, and inflation layers, and a rolling local costmap with lidar obstacle and inflation layers.
- Recovery actions: spin, back up, drive on heading, wait, and assisted teleoperation.
Two example Objectives navigate to a goal clicked in the 3D Visualizer: one plans a single path and waits for your approval before following it, and the other lets Nav2 replan continuously as obstacles appear. See Mobile Navigation (Nav2) and Navigation with Replanning.
Sensors and Dependencies
| Input | Used for |
|---|---|
2D lidar (sensor_msgs/LaserScan) | Localization, mapping, and costmap obstacle layers. Costmaps take several lidars directly; localization and mapping read one scan topic, so hangar_sim relays its front and rear lidar scans onto a single topic for 360° coverage. |
3D lidar (sensor_msgs/PointCloud2) | Flattened to a 2D LaserScan before use, because Beluga AMCL and slam_toolbox each take a 2D scan. The simulated lidars in hangar_sim publish point clouds, and its flattening node is an example you can adapt. |
| Wheel odometry | Fuse odometry estimate; in hangar_sim, from the active base controller. |
| IMU | Fuse odometry estimate, as the source of heading. |
The navigation stack is built from third-party ROS 2 Jazzy packages that a robot configuration package declares in its package.xml, so they install with the workspace's ROS dependencies: nav2_bringup (Nav2), beluga_amcl, slam_toolbox, and laser_filters for scan filtering. Fuse is installed with MoveIt Pro. The hangar_sim MPPI settings need nav2_mppi_controller 1.3.13 or newer, which the example workspace's Dockerfile installs.
Drive Types
| Drive type | Navigation (Nav2) | Whole-body motion |
|---|---|---|
| Omnidirectional (holonomic), such as mecanum | Supported. Reference: hangar_sim, a Clearpath Ridgeback. | Supported. Reference: hangar_sim. |
| Differential drive | Nav2 and Beluga AMCL both support differential-drive bases, but no reference configuration runs Nav2 on one yet. lunar_sim provides a differential-drive Clearpath Husky A300 driven by teleoperation. | Planned. |
| Ackermann and other car-like bases | No reference configuration. | Not supported. |
Whole-Body Motion explains why whole-body motion requires a holonomic base today.
Navigation and Whole-Body Motion
Navigation and whole-body motion do different jobs on the same robot:
- Navigation drives the robot from one place to another with Nav2, using the map, localization, and costmaps.
- Whole-body motion is short-range: once the base is roughly in position, MoveIt Pro plans one trajectory that moves the base and the arm together, for example to extend the arm's reach.
Each uses its own controller for the base, and only one is active at a time. Objectives switch between them: a navigation Objective activates the navigation velocity controller, and a whole-body Objective activates the whole-body trajectory controller. In hangar_sim, Fuse reads odometry from the base controller that is currently active, so the robot's position estimate follows the base in both modes.
Whole-body trajectories run through a joint trajectory controller rather than MoveIt Pro's admittance controller, so Cartesian admittance, force compliance, and trajectory time scaling apply to arm-only motion. See Whole-Body Motion for the full model.
Try It in Simulation
Two robot configuration packages in the MoveIt Pro example workspace run mobile bases in the MoveIt Pro Simulator:
hangar_sim: a Clearpath Ridgeback mecanum base carrying a UR5e arm in an aircraft hangar, with front and rear lidars. It runs Beluga AMCL localization against a pre-built hangar map, Fuse, Nav2 navigation Objectives, and whole-body motion. To build a map with slam_toolbox instead, setslamtoTrueinrobot_drivers_to_persist_sim.launch.py; slam_toolbox then places the robot on the map in place of AMCL. Start with the motion planning tutorial.lunar_sim: a Clearpath Husky A300 differential-drive rover on cratered lunar terrain, with front and rear lidars and a forward camera. Drive it with teleoperation or theDead Reckon SquareObjective. It does not run Nav2 or localization.
Not Yet Supported
- Whole-body motion on differential-drive bases. This is planned.
- 3D localization and 3D maps. Localization and mapping work on 2D occupancy grids, so 3D lidar data is flattened to a 2D scan.
- Building a map from the Desktop App, and base-only teleoperation to drive the robot while mapping. Both are planned. Today, mapping runs through slam_toolbox, started from the robot configuration package's launch files.