ARCO (Autonomous Routing, Control, and Observation) is an open-source Python library for autonomous navigation, designed as a reference for modern autonomy stacks. It provides:
- Mapping: Discrete and continuous spatial representations (grids, graphs, occupancy)
- Planning: Path search (A*, D*-lite) and sampling-based planners (RRT*, SST)
- Guidance: Trajectory shaping (interpolation, primitives) and feedback control (PID, Pure Pursuit, MPC)
Video Benchmarks
Good results are visual results. These are some simularions generated with ARCO.
Documentation Index
- GitHub Repository — Full source code, demos, and documentation
- Project Roadmap — Staged milestones from classical planning to ROS 2 integration
- Main docs index
- Mapping layer overview
- Planning layer overview
- Guidance layer overview
Architecture
ARCO is organized around three layers, mirroring the decomposition of a real autonomy stack:
- Mapping: Handles spatial representation (grids, graphs, occupancy)
- Planning: Searches or samples for feasible paths (A*, RRT*, SST, etc.)
- Guidance: Tracks the resulting path with feedback controllers (Pure Pursuit, PID, MPC)
Each layer is independently testable and documented, with visualizations for step-by-step inspection of algorithm behavior.
Core Map Families
- Manhattan Grid: Axis-aligned neighbors with Manhattan metric ($L_1$)
- Euclidean Grid: Diagonal-capable neighbors with Euclidean metric ($L_2$)
- Graph hierarchy: Graph → WeightedGraph → CartesianGraph → RoadGraph
- Occupancy: Abstract continuous-space obstacle-query interface (KDTreeOccupancy)
Guidance and Control
- Exploration primitives: Kinematic steering constraints for graph growth
- Interpolation: Conversion of discrete plans into smooth trajectories
- Controllers: Path tracking and control law generation
Path finding algorithms
| Algorithm | Status | Notes |
|---|---|---|
| A* | ✅ Done | Grid and graph-based, configurable heuristics |
| Route Planning | ✅ Done | A* integration for road networks with waypoint smoothing |
| RRT* | ✅ Done | Asymptotically optimal sampling-based planner |
| SST | ✅ Done | Stable Sparse Trees for kinodynamic planning |
| D* Lite | ⏸️ Stub | Dynamic replanning (API exists, not implemented) |
Requires Python 3.10+
References
Theory notes are under docs. Core references:
- Hart, Nilsson, Raphael (1968). A Formal Basis for the Heuristic Determination of Minimum Cost Paths.
- Stentz (1994). Optimal and Efficient Path Planning for Partially-Known Environments.
- LaValle (1998). Rapidly-Exploring Random Trees: A New Tool for Path Planning.
- LaValle (2006). Planning Algorithms. Cambridge University Press.
- Karaman, Frazzoli (2011). Sampling-based Algorithms for Optimal Motion Planning.
- Li et al. (2016). Asymptotically Optimal Sampling-based Kinodynamic Planning.