PackSim
PackSim provides the regular-box simulation environments used by the RoboBPP robot bin-packing benchmark. The package includes a canonical occupancy dataset, replay actions, configuration files, PyBullet scenes, the IRB6700 robot model, and the native OMPL bindings required by the robot-planning mode.
Project documentation: https://robot-bin-packing-benchmark.github.io/documentation.html
Features
- self-contained canonical inputs for a first run;
- headless PyBullet simulation for server environments;
- three simulation settings, from packing-only to robot motion planning;
- backward-compatible
simulate(dict)API; - structured Python results and machine-readable command-line output;
- installation diagnostics with
packsim doctor.
PackSim 0.1.0 supports regular 3D box packing with the bundled occupancy dataset and PCT replay. Irregular and 2D packing are outside this release.
Requirements
Version 0.1.0 retains native OMPL 1.5.2 bindings and therefore has a narrow runtime target:
- Linux x86-64/amd64;
- CPython 3.8;
- glibc 2.31 or newer;
- a repaired
manylinux_2_31_x86_64wheel.
Python 3.9 or newer, macOS, Windows, and ARM are not supported by this release.
The wheel is platform-specific and is not published as py3-none-any.
Python 3.8 is end-of-life. Version 0.1.0 uses it only to preserve compatibility with the bundled OMPL ABI, and should be installed in an isolated environment. A later release will move to rebuilt or current OMPL bindings and a maintained Python version.
Installation
Create an isolated Python 3.8 environment, then install from PyPI:
python3.8 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade "pip<25.1"
python -m pip install packsim==0.1.0
packsim doctor
Ubuntu 24.04 does not provide Python 3.8 as its system Python. See
docs/installation.md for the supported Miniforge
setup and clean-install checks.
Quick start
The existing dictionary API remains available:
from packsim import simulate
summary = simulate({
"setting": 1,
"data": "occupancy",
"test_data_config": 0,
"gui": 0,
})
print(summary)
Configuration, actions, planning times, and occupancy data are loaded from the
installed package when their paths are omitted. Results are written to
./packsim-results by default.
New code can use the structured API:
from packsim import SimulationConfig, run
result = run(SimulationConfig(
setting=1,
data="occupancy",
test_data_config=0,
gui=False,
))
print(result.status)
print(result.placed_items)
print(result.occupancy)
print(result.termination_reason)
Custom paths are still supported:
from packsim import simulate
simulate({
"setting": 1,
"data": "occupancy",
"test_data_config": 0,
"gui": 0,
"config": "/absolute/path/to/default.yaml",
"action_path": "/absolute/path/to/action.json",
"planning_time_path": "/absolute/path/to/planning_time.json",
"save_path": "/absolute/path/to/results",
})
Simulation settings
| Setting | Components | Bundled replay |
|---|---|---|
| 1 | Packing environment | 27 actions |
| 2 | Packing environment and PyBullet physics | 24 physics-aware actions |
| 3 | Packing environment, PyBullet, IRB6700, and OMPL | 24 physics-aware actions |
Run a headless canonical simulation from any directory:
packsim smoke-test --setting 1
packsim smoke-test --setting 2
packsim smoke-test --setting 3
Add --json for machine-readable output or --output DIR to select the result
directory. Use --gui only when a desktop display is available.
status="completed" means the simulator reached a controlled terminal state.
Check all_items_placed, placed_items, failed_item, and
termination_reason for the outcome of an individual run.
The canonical regression values for 0.1.0 are:
| Setting | Expected result |
|---|---|
| 1 | 27 requested, 27 placed, mean occupancy 0.8692859120457622 |
| 2 | 24 requested, 23 placed, item index 23 rejected by the stability preflight, mean occupancy 0.8889730809076817 |
| 3 | Native OMPL loads and the robot planner exits cleanly with a structured result |
Diagnostics
Run the environment check before reporting an installation problem:
packsim doctor
packsim doctor --json
The report checks Python and platform compatibility, installed dependency versions, canonical resource hashes, bundled OMPL locations, and an isolated native-library load on the supported runtime.
Common issues:
| Symptom | Action |
|---|---|
No matching distribution found |
Confirm Linux x86-64 and CPython 3.8. |
| OMPL or shared-library load error | Confirm that pip installed the repaired manylinux_2_31_x86_64 wheel, then save packsim doctor --json. |
| PyBullet cannot connect to X | Run headless without --gui. |
| A custom input cannot be found | Use the bundled defaults or pass an absolute path. |
Development
Installation details are in docs/installation.md.
Maintainer build, validation, and upload commands are in
docs/release.md. The release process rejects universal,
raw linux_x86_64, incomplete, or incorrectly tagged wheels.
License
Original PackSim code is distributed under the MIT License. Bundled components
and assets retain their upstream licenses. See
THIRD_PARTY_NOTICES.md and the LICENSES directory.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file packsim-0.1.0-cp38-cp38-manylinux_2_31_x86_64.whl.
File metadata
- Download URL: packsim-0.1.0-cp38-cp38-manylinux_2_31_x86_64.whl
- Upload date:
- Size: 25.5 MB
- Tags: CPython 3.8, manylinux: glibc 2.31+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/5.1.1 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0983bc23ec81d47f8383e61b84febfb2f7cb18f1182f75125554a74abcc0eda0
|
|
| MD5 |
99315ab8827da4bbc295d1126d1451c6
|
|
| BLAKE2b-256 |
49837d7c3be6d87522def0580228ffffc42a8ea580597ebc31afe72d09b6af2f
|