Examples
EasyFleet ships four self-contained example deployments, each its own
package under easyfleet_example_deployments/ (own launch files, own
config). They range from fully mocked capabilities on a single robot to
two robots both running real EasyNavigation
navigation at once — and double as integration tests for the whole
architecture.
If you haven’t run any of these yet, Getting Started
walks through the simplest one (alone) step by step.
Overview
Scenario |
Package |
Robot(s) |
Capabilities |
Launch file |
|---|---|---|---|---|
|
|
|
navigation, manipulation, perception (mock) |
|
|
|
|
navigation + perception (mock), navigation + manipulation (mock) |
|
|
|
one robot (namespace optional) |
navigation — real EasyNav (costmap localizer/maps-manager/planner + regulated pure-pursuit controller) |
|
|
|
|
navigation (real EasyNav, both robots) + perception/manipulation (mock) |
|
Every scenario’s top-level launch file starts both halves of the deployment together: the robot(s) immediately, and mission control a few seconds later, once the robot(s) have finished activating. Each robot also has its own per-robot launch file that can be run standalone — see Design for the robot/mission-control split this relies on.
alone: one robot, three mocked capabilities
The simplest deployment — no simulator, no real navigation stack. Covered step by step in Getting Started.
ros2 launch easyfleet_fake_alone_deployment alone_launch.yaml
collaboration: three robots, mocked capabilities
robot_1 and robot_2 (navigation + perception each), and robot_3
(navigation + manipulation) — each hosted by its own process, discovered
and driven together by collaboration_mission_node:
ros2 launch easyfleet_fake_collaboration_deployment collaboration_launch.yaml
The mission runs two phases: first robot_1/robot_2 run navigation
and perception together (all four goals at once, feedback labeled by each
capability’s resolved action name so interleaved output stays legible);
then robot_3 runs navigation to completion, followed by manipulation.
Poking at a capability by hand
Every capability’s action name is namespaced by robot. Against the
alone scenario, for example:
ros2 action list -t
ros2 lifecycle get /robot_1/navigation
ros2 topic echo /capabilities --once
ros2 topic echo /capabilities_status
ros2 action send_goal /robot_1/navigation easyfleet_interfaces/action/Navigation \
"{target_pose: {header: {frame_id: 'map'}, pose: {position: {x: 1.0, y: 2.0, z: 0.0}}}}" \
--feedback
Monitoring a running fleet
easyfleet_tools provides a read-only TUI (ros2 run easyfleet_tools
tui) and a CLI (ros2 easyfleet <verb>) for watching any of the
scenarios above without hand-assembling ros2 topic echo/ros2 action
send_goal --feedback calls — see Getting Started for the
TUI, or run:
ros2 easyfleet fleet # every robot + capability, with status
ros2 easyfleet describe robot_1/navigation # full JSON description
ros2 easyfleet watch robot_1/navigation --duration 10 # live goal status + feedback + result
ros2 easyfleet status --duration 10 # each robot's RViz status-marker text
ros2 easyfleet logs --robot robot_1 --duration 10 # colored /rosout tail