RMF Demo Catalog
Complete Run Your First RMF Demo before using these scenarios.
All entries require the rmf_demos overlay because it supplies the building
maps, navigation graphs, fleet configurations, and task tools. The examples
default to client_mode:=python_fleet; see Open-RMF Integration before
selecting a ROS-backed mode.
Scenarios
Scenario |
Launch file |
Fleets |
Focus |
|---|---|---|---|
Office |
|
1 |
First patrol, delivery, and basic RMF dispatch |
Campus |
|
1 |
Outdoor single-fleet navigation without doors or lifts |
Battle royale |
|
1 |
Compact single-fleet map and task dispatch |
Clinic |
|
2 |
Multiple fleets, doors, and elevators |
Hotel |
|
3 |
Multiple fleets with door and lift coordination |
Airport terminal |
|
4 |
Largest multi-fleet configuration and cleaning tasks |
Start with Office. The other scenarios reuse the same RMF infrastructure while changing the building map, bridge world, navigation graphs, and fleet adapters.
Native Jazzy
Source the ROS and rmf_demos overlays in every terminal. Replace
office_pybullet.launch.py with any catalog launch file:
source /opt/ros/jazzy/setup.bash
source ~/rmf_demos_ws/install/setup.bash
ros2 launch pybullet_fleet_rmf office_pybullet.launch.py
The command assumes the dedicated ~/rmf_demos_ws overlay from the quickstart.
When rmf_demos was added to an existing workspace, source that workspace’s
install/setup.bash instead.
For a headless simulator and RMF visualization, use gui:=false. To omit RViz
as well, add headless:=true:
ros2 launch pybullet_fleet_rmf hotel_pybullet.launch.py \
gui:=false headless:=true
Native simulator with RMF Web containers
To add the RMF Web dashboard without building a PyBulletFleet Docker image,
follow the optional Web stack step in Run Your First RMF Demo.
It pulls only the upstream RMF Web API and dashboard images. Set the same
ROS_DOMAIN_ID in every native terminal and pass
server_uri:=ws://localhost:8000/_internal to the scenario launch:
export ROS_DOMAIN_ID=42
source /opt/ros/jazzy/setup.bash
source ~/rmf_demos_ws/install/setup.bash
ros2 launch pybullet_fleet_rmf office_pybullet.launch.py \
gui:=false headless:=true target_rtf:=1.0 \
server_uri:=ws://localhost:8000/_internal
The browser dashboard is then available at http://localhost:3000.
Docker
Docker Compose bind-mounts the checkout for the bridge and RMF packages, so
clone the repository and build the image before running a scenario. The image
already contains the required rmf_demos overlay:
git clone https://github.com/yuokamoto/PyBulletFleet.git
cd PyBulletFleet/docker
docker compose build bridge
Then run a scenario by replacing the launch filename:
docker compose run --rm bridge \
ros2 launch pybullet_fleet_rmf clinic_pybullet.launch.py \
gui:=false headless:=true
Full RMF Web stack
The Compose stack also starts the RMF Web API and dashboard. It is the most direct Docker demonstration of a fleet that is both dispatched through RMF and visible in a browser. Start the Office scenario with a headless simulator:
GUI=false RVIZ=false docker compose up --build
Open http://localhost:3000 for the RMF dashboard. The
API is available at http://localhost:8000. The bridge
automatically connects its fleet adapter to the API at
ws://localhost:8000/_internal when it is launched through Compose.
In a second terminal, dispatch a task through the already-running bridge:
cd docker
docker compose exec bridge \
ros2 run rmf_demos_tasks dispatch_patrol \
-p pantry lounge -n 3 --use_sim_time
The task and robot state should appear in the dashboard. Stop the full stack
with docker compose down. Set GUI=true or RVIZ=true when a local display
server is available. To start another catalog scenario, set DEMO_WORLD before
the command, for example DEMO_WORLD=clinic GUI=false RVIZ=false docker compose up.
Dispatch Examples
Run task commands in a second terminal after sourcing the same native overlays,
or through another docker compose run --rm bridge command.
# Office patrol
ros2 run rmf_demos_tasks dispatch_patrol \
-p pantry lounge -n 3 --use_sim_time
# Office delivery destination
ros2 run rmf_demos_tasks dispatch_go_to_place -- -p pantry
# Airport cleaning task
ros2 run rmf_demos_tasks dispatch_clean -cs zone_1 --use_sim_time
For multi-fleet scenarios, dispatch to the fleet expected by the map and task
configuration. For example, the airport terminal launch accepts a patrol for
the tinyRobot fleet:
ros2 run rmf_demos_tasks dispatch_patrol \
-p A -n 1 -F tinyRobot --use_sim_time
The available waypoints, task types, and fleet names come from the pinned
rmf_demos version. Inspect its map and fleet configuration when adapting a
scenario rather than assuming Office waypoint names apply elsewhere.