From Indoor to Outdoor, From 1 Robot to Many
In previous 4 posts of this series, we went from SLAM to Nav2, learning-based navigation, and vision-language navigation. All focused on single robot operating indoors. But real industrial deployments demand more:
- Outdoor navigation: delivery robots, agricultural robots, exploration robots -- where GPS may be unavailable or unreliable
- Multi-robot coordination: 50 AMRs in one warehouse, how do they avoid colliding and operate efficiently?
These are 2 hardest problems in real-world navigation, and topics of final post in this series.
Part 1: Outdoor Navigation
Challenges When Going Outside
Indoor navigation (Nav2 + LiDAR SLAM) works well because environment is structured: straight walls, flat floor, stable lighting. Outdoors is different story:
| Challenge | Indoor | Outdoor |
|---|---|---|
| Terrain | Flat | Rough, slopes, mud, sand |
| GPS | Not needed | Might be unavailable (GPS-denied) |
| Weather | Stable | Rain, fog, bright sun |
| Dynamic obstacles | People, carts | Cars, animals, vegetation |
| Map | Can pre-map | Changes constantly |
| Lighting | Stable | Changes with time, weather |
GPS-Denied Navigation
In many situations, GPS is unavailable or unreliable:
- Indoors / underground: no GPS signal
- Urban canyon: tall buildings block signal, multipath reflections
- Dense forest: tree canopy blocks signal
- EW (Electronic Warfare): GPS jammed or spoofed (military)
Solution: Sensor Fusion
Without GPS, robot relies on sensor fusion -- combining multiple information sources:
┌──────────┐
│ IMU │ ← Short-term accurate, long-term drift
└────┬─────┘
│
┌──────────┐ ┌────▼─────┐ ┌──────────┐
│ LiDAR │──▶│ Fusion │◀──│ Camera │
│ SLAM │ │ (EKF/ │ │ (Visual │
└──────────┘ │ Factor │ │ Odom) │
│ Graph) │ └──────────┘
┌──────────┐ └────┬─────┘
│ Wheel │───────▶│
│ Odom │ │
└──────────┘ ┌────▼─────┐
│ Fused │
│ Pose │
└──────────┘
LIO-SAM (discussed in Part 1) is excellent for outdoor because it supports factor graph allowing adding any sensor: LiDAR, IMU, wheel odometry, and GPS (when available).
Visual Place Recognition
When robot revisits location, visual place recognition helps recognize and correct drift. Modern methods:
- NetVLAD / Patch-NetVLAD: CNN-based feature aggregation for place recognition
- DINOv2: vision foundation model, good retrieval features without training
- CosPlace (Berton et al., CVPR 2022): optimized for large-scale visual geo-localization
Terrain Classification
Outdoor robot must understand terrain to choose safe, efficient path:
- Asphalt: fast, safe
- Grass: possible but slower
- Soft earth: can sink, slip
- Gravel: vibration, needs slower speed
- Water: avoid
- Steps / slopes: assess climbing ability
Method
Semantic segmentation from camera:
# Use pre-trained model for terrain classification
import torch
from torchvision.models.segmentation import deeplabv3_resnet101
model = deeplabv3_resnet101(pretrained=True).eval()
# Terrain classes: road, grass, dirt, gravel, water, obstacle
# Fine-tune on off-road dataset (RUGD, RELLIS-3D)
Point cloud analysis from LiDAR:
- Roughness: terrain roughness (z variance in local patch)
- Slope: surface slope (normal vector)
- Step height: height of step / curb
Traversability map: combine visual + geometric into cost map for planning:
Traversability score = w1 * terrain_type + w2 * slope + w3 * roughness
This feeds into Nav2 costmap for planner to avoid dangerous terrain.
Outdoor SLAM: Solutions
| Method | Sensor | Outdoor Performance | Notes |
|---|---|---|---|
| LIO-SAM | LiDAR + IMU | Excellent | Factor graph, optional GPS |
| FAST-LIO2 | LiDAR + IMU | Excellent | Incremental kd-tree, fast |
| ORB-SLAM3 | Camera + IMU | Good (textured) | Fails with low texture |
| VILENS | Visual-Inertial-LiDAR | Best | Multi-sensor, most robust |
Part 2: Multi-Robot Coordination
Why Multi-Robot?
One AMR does 1 m/s, carries 100 kg. Want throughput of 1000 deliveries/hour? Need 20-50 robots operating simultaneously. Now problems start:
- Traffic management: 50 robots in warehouse, how to avoid collision?
- Task allocation: which order goes to which robot?
- Deadlock prevention: 2 robots waiting in narrow hallway -- who backs up?
- Heterogeneous fleet: Robot A is forklift, robot B is small AMR -- different coordination
VDA5050 -- Standard Protocol for AGV/AMR Fleet
VDA5050 is open communication standard between AGV/AMR and fleet management software, developed by VDA (German Auto Association) and VDMA (German Machine Builders).
Why VDA5050?
Before VDA5050, each manufacturer had proprietary protocol. Want 10 MiR robots + 5 KUKA robots in one warehouse? Need 2 fleet managers, can't talk to each other. VDA5050 solves with common protocol.
VDA5050 Architecture
┌─────────────────────────────────┐
│ Master Control │ ← Fleet Management Software
│ (Fleet Manager / Supervisor) │
└──────────┬──────────────────────┘
│ MQTT (JSON messages)
│
┌──────┼──────┬──────────┐
│ │ │ │
┌───▼──┐┌──▼──┐┌──▼──┐ ┌───▼──┐
│AGV 1 ││AGV 2││AGV 3│ │AGV N │
│(MiR) ││(KUKA)││(Custom)│(Any) │
└──────┘└─────┘└─────┘ └──────┘
Main Messages
From Master Control → AGV:
{
"headerId": 1,
"timestamp": "2026-02-20T10:00:00Z",
"version": "2.0.0",
"manufacturer": "vnrobo",
"serialNumber": "AMR-001",
"orderId": "order-123",
"orderUpdateId": 1,
"nodes": [
{
"nodeId": "node-1",
"sequenceId": 0,
"released": true,
"nodePosition": { "x": 10.5, "y": 3.2, "mapId": "warehouse-A" },
"actions": [
{ "actionType": "pick", "actionId": "pick-1", "blockingType": "HARD" }
]
},
{
"nodeId": "node-2",
"sequenceId": 2,
"released": true,
"nodePosition": { "x": 15.0, "y": 3.2, "mapId": "warehouse-A" }
}
],
"edges": [
{
"edgeId": "edge-1",
"sequenceId": 1,
"startNodeId": "node-1",
"endNodeId": "node-2",
"released": true,
"maxSpeed": 1.0
}
]
}
From AGV → Master Control (State):
- Current position (x, y, theta, map_id)
- Battery status, speed, errors
- Task progress (which node reached, action completed)
VDA5050 Advantages
- Interoperability: robots from different manufacturers in one fleet
- Open standard: free, no vendor lock-in
- MQTT-based: lightweight, real-time, scales well
- Wide adoption: MiR, KUKA, Locus Robotics, 50+ manufacturers
MAPF -- Multi-Agent Path Finding
MAPF solves problem: find paths for multiple agents simultaneously such that no collisions and total cost optimized (minimize total path length or makespan).
Problem
Input:
- Graph G (map with nodes and edges)
- N agents, each with start and goal
- Constraint: 2 agents cannot occupy same node or swap positions
Output:
- Sequence of actions for each agent
- No conflicts
- Optimal (shortest total path length)
Difficulty: optimal MAPF is NP-hard when optimizing makespan. Practice needs fast, near-optimal algorithms.
CBS -- Conflict-Based Search
CBS (Sharon et al., 2015) is most widely used MAPF algorithm:
CBS Algorithm:
1. [Low-level]: Find shortest path for each agent (independent A*)
2. [High-level]: Check conflicts between paths
3. If conflict exists (2 agents at same location at same time):
a. Create 2 child nodes:
- Node 1: forbid agent A at conflict location
- Node 2: forbid agent B at conflict location
b. Re-plan for forbidden agent
4. Repeat until no conflicts
Complexity: optimal but exponential worst case. With heuristics (ECBS, EECBS), runs fast for hundreds of agents.
Practice MAPF with Python
# Use python-mapf library
# pip install cbs-mapf
from cbs import CBSSolver
# Define map (0 = free, 1 = obstacle)
grid = [
[0, 0, 0, 0, 0],
[0, 1, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 1, 1, 0],
[0, 0, 0, 0, 0],
]
# Define agents: (start, goal)
agents = [
((0, 0), (4, 4)), # Agent 0: top-left to bottom-right
((4, 0), (0, 4)), # Agent 1: bottom-left to top-right
((2, 0), (2, 4)), # Agent 2: mid-left to mid-right
]
solver = CBSSolver(grid, agents)
paths = solver.solve()
for i, path in enumerate(paths):
print(f"Agent {i}: {path}")
MAPF in Practice
| Algorithm | Optimality | Speed | Scale | Use case |
|---|---|---|---|---|
| CBS | Optimal | Slow (>50 agents) | ~50 agents | Research, small |
| ECBS | Bounded sub-optimal | Fast | ~200 agents | Production |
| Priority-Based | Sub-optimal | Very fast | ~1000 agents | Large warehouse |
| ORCA | Local (reactive) | Real-time | Unlimited | Dynamic obstacles |
Traffic Management in Warehouse
MAPF solves offline planning. Real warehouse needs online traffic management:
Zone-Based Control
┌─────────┬─────────┬─────────┐
│ Zone A │ Zone B │ Zone C │
│ (max 3 │ (max 2 │ (max 3 │
│ robots) │ robots) │ robots) │
├─────────┼─────────┼─────────┤
│ Zone D │ Zone E │ Zone F │
│ (max 2 │ (max 1) │ (max 2 │
│ robots) │ ONE-WAY │ robots) │
└─────────┴─────────┴─────────┘
- Limit robots per zone
- One-way corridors for narrow paths
- Priority rules: robot with cargo prioritized over empty robot
Deadlock Prevention
4 conditions for deadlock (Coffman):
- Mutual exclusion: only 1 robot per location
- Hold and wait: robot holds current and waits for next
- No preemption: cannot force robot to back up
- Circular wait: A waits for B, B waits for C, C waits for A
Solution: break condition 4 (circular wait) with priority ordering -- lower ID robot always defers.
Open-RMF -- Fleet Management for ROS 2
Open-RMF (Open Robotics Middleware Framework) is ROS 2 fleet management framework supporting multi-robot coordination.
# Install Open-RMF
sudo apt install ros-humble-rmf-demos
# Launch demo with 2 fleets (TinyRobot + DeliveryRobot)
ros2 launch rmf_demos office.launch.xml
Open-RMF provides:
- Traffic negotiation: robots auto-negotiate when meeting
- Fleet adapter: connect any robot (even non-ROS)
- Task dispatcher: assign task to appropriate robot
- Web dashboard: unified fleet monitoring
See Open-RMF Fleet Management for details.
Combining Outdoor + Multi-Robot
Some applications combine both:
Autonomous Agriculture
- Fleet of autonomous tractors in field
- GPS-RTK for precise localization (±2cm)
- Multi-robot coordination to cover full area
- Terrain classification to avoid waterlogged zones
Last-Mile Delivery
- Fleet of delivery robots on sidewalk
- GPS + visual localization in urban
- Traffic management with cars and pedestrians
- Dynamic re-routing when obstacles appear
Search and Rescue
- Multi-robot exploration in unknown environments
- GPS-denied (collapsed building, underground)
- Collaborative SLAM: multiple robots mapping simultaneously
- Communication constraints: not always connected
Wrapping Up Modern Navigation Series
Over 5 posts, we covered entire landscape of modern robot navigation:
| Post | Topic | Keywords |
|---|---|---|
| Part 1 | SLAM | EKF, Cartographer, LIO-SAM, ORB-SLAM3 |
| Part 2 | Nav2 | Path planning, behavior trees, costmap |
| Part 3 | Learning-based | GNM, ViNT, NoMaD, diffusion |
| Part 4 | VLN | R2R, LLM planning, NaVILA |
| Part 5 | Outdoor + Multi-Robot | GPS-denied, VDA5050, MAPF |
Key Takeaways:
- Indoor structured: Nav2 + LiDAR SLAM still best for production
- Unstructured / novel: Learning-based (NoMaD, ViNT) approaching production-ready
- Language-guided: VLN + LLMs open natural robot interaction
- Multi-robot: VDA5050 for interoperability, MAPF for coordination, Open-RMF for ROS 2
- Outdoor: sensor fusion is key, terrain classification critical for safety
Related Posts
- Multi-Robot Coordination -- Multi-robot coordination problem
- Open-RMF Fleet Management -- ROS 2 fleet management framework
- AGV vs AMR: Comparison -- Choose appropriate robot type
- Robot Fleet Management -- Fleet management overview
- LiDAR 3D Mapping -- LiDAR technology for outdoor mapping