# PyBulletFleet Documentation
Mixed Fleet Grid
100robots_grid_demo.py
Cube Patrol
100robots_cube_patrol_demo.py
Mobile Pick & Drop
pick_drop_mobile_100robots_demo.py
Arm Pick & Drop
pick_drop_arm_100robots_demo.py
A **kinematics-first** simulation framework for large-scale multi-robot fleets, built on PyBullet and designed for **fast N× real-time** evaluation. ## What is PyBulletFleet? Different simulation goals call for different tools. Physics-focused simulators (Gazebo, Isaac Sim, MuJoCo, etc.) excel at accurate contact dynamics, sensor modelling, and single-robot control — but stepping a full physics engine for every robot becomes the bottleneck when you need to evaluate **fleet-level** systems at scale. PyBulletFleet sits in a different part of the design space: it is a **kinematics-first, fleet-scale** simulation engine whose primary goal is to enable fast development and testing of the software that *orchestrates* robot fleets rather than the software that *controls* individual robots. ### Design priorities - **Speed over fidelity** — Fleet algorithms (task allocation, traffic control, path planning) must be tested with hundreds to thousands of robots running *much faster* than real time. Kinematics-based stepping — teleporting each robot to its next pose without calling `stepSimulation()` — removes the physics bottleneck and enables N× real-time execution. - **System integration over low-level control** — The primary consumers are high-level systems: WMS (Warehouse Management Systems), task orchestrators, fleet managers, and monitoring dashboards. These systems issue goals, observe progress via state snapshots, and react to events — they do not need joint-level torque feedback. - **Scale over detail** — Validating behaviour at 100+ robot scale matters more than modelling individual link dynamics or sensor noise. - **Interoperability** — The simulation is designed around a callback-driven step loop and snapshot-friendly state model, so that it can be plugged into larger orchestration frameworks, replay pipelines, or external control systems (e.g., gRPC / ROS 2) as those interfaces are built out. - **Physics as an option** — When physical interaction *is* needed (grasping, conveyor dynamics, contact verification), full PyBullet physics can be switched on per-scenario without changing the rest of the stack. ```{toctree} :maxdepth: 2 :caption: Contents getting-started/quickstart examples/index architecture/index how-to/index configuration/index benchmarking/index testing/index api/index roadmap ``` ### How to read this documentation **📘 Simulation Users** — building simulations with PyBulletFleet: | Section | What you'll find | When to read | |---------|------------------|--------------| | [Quickstart](getting-started/quickstart) | Installation and first simulation | First visit | | [Examples](examples/index) | Step-by-step tutorials: spawn objects, action queue, 100-robot fleet | Writing your first simulation | | [How-to](how-to/index) › [Collision Config](how-to/collision-config) | Detection method, per-object modes, spatial hash tuning | Configuring collision for your scene | | [How-to](how-to/index) › [Custom Profiling](how-to/custom-profiling) | Adding your own profiling metrics | Measuring your custom logic | | [Configuration](configuration/index) | YAML parameter reference | Looking up a specific setting | | [Architecture](architecture/index) › [Collision Overview](architecture/collision-overview) | Design goals, mode summary, two-phase pipeline | Understanding the collision system | | [Benchmarking](benchmarking/index) › [Optimization Guide](benchmarking/optimization-guide) | Performance tuning workflow | Improving simulation speed | | [API Reference](api/index) | Auto-generated module docs | Looking up a specific class or method | **🔧 PyBulletFleet Developers** — extending or debugging the framework: | Section | What you'll find | When to read | |---------|------------------|--------------| | [Architecture](architecture/index) | Design decisions, collision internals, spatial hash grid | Understanding *why* things work the way they do | | [How-to](how-to/index) › [Time](how-to/time-profiling) / [Memory](how-to/memory-profiling) Profiling | Internal component profiling | Diagnosing bottlenecks | | [How-to](how-to/index) › [Logging](how-to/logging) | LazyLogger, performance-safe logging | Adding or reviewing log output | | [Benchmarking](benchmarking/index) | Benchmark suite, profiling scripts, experiments | Deep performance analysis | | [Testing](testing/index) | Test strategy, running tests, coverage | Contributing or debugging | ## Key Features - **N× real-time simulation** — Kinematics-based (teleport) stepping as the default motion mode - **Scalability** — Tested with 100+ robots; spatial-hash collision keeps per-step cost low as fleet size grows - **Physics as an option** — Full PyBullet physics can be enabled per-scenario when needed - **High-level abstractions** — Action system (MoveTo, Pick, Drop, Wait), agent managers, YAML-driven configuration ## Performance at a Glance > Single test environment (Intel i7-1185G7, 32 GB RAM, Ubuntu 20.04). Results will vary by hardware. | Agents | Real-Time Factor | Step Time | |--------|-----------------|-----------| | 100 | 46× | 2.2 ms | | 500 | 7.6×| 13.2 ms | | 1000 | 3.3×| 30.0 ms | | 2000 | 1.1×| 94.8 ms | Kinematics mode (physics OFF), headless. See {doc}`benchmarking/benchmark-suite` for full data, component breakdown, and methodology. See the {doc}`roadmap` for upcoming features and integrations. ## Indices and tables - {ref}`genindex` - {ref}`modindex` - {ref}`search`