In fully automated warehouses where only robots operate, the traditional architecture with rows of racks and aisles between them is not always optimal. Modern approaches to designing such warehouses strive to maximize storage density, minimize space for robots to move, and increase overall efficiency.
My proposal is this tiling that uses ~80% of total space for storage:
The key idea is that you need to access any pallet without moving others, meaning that every pallet needs at least one face exposed, so it can be taken out.
The above-shown grid tiling does exactly that; every pallet has one and exactly one air gap near it, and the air gap is exactly the size of the pallet so it can be extracted.
It is also worth noting that all pallets need to have a fixed size for this to work (not necessarily squares). Thankfully there is a widely adopted standard size of a pallet: EPAL pallet 1.2m x 0.8m
So we have the tiling; how would extraction and loading processes look like?
Imagine a scissor lift platform on a roomba - this is the base of a robot that could operate on such storage. They have plenty of space under the shelves to move around with the pallets, and a simple A* algorithm with collision constraints should do the job for the logistics of moving around.
Pallets themselves should be on rollers and slightly angled towards the hole as shown below (you would need some small lock mechanism so they don't just slide down):
Now taking a pallet out is as simple as lifting the platform in the needed hole and unlocking the needed pallet; it will roll down on the platform.
Loading operation is pretty similar to extraction. That scissor lift platform should have its own rollers on the top. Now you simply push the box into it's section and lock the mechanism to stop it from rolling back. No manipulator hands needed!
Blender has a built-in support for scripting with Python. So I made a simple Python script src/main.py thats takes specified collection and stacks it up according to the tiling pattern and given size.
Then made a low-polly low-effort module just for demonstration. Then I did some kitbashing with external assets:
- Wooden pallet by Mehdi Shahsavan from Sketchfab (CC Attribution license)
- Cardboard box by PolyProps3D from Sketchfab (CC Attribution license)
- Empty workshop HDRI by Sergej Majboroda from Poly Haven (CC0 license)
After running the script, it will do the following:
I am not familiar with the problematics of warehouses and their logistics. But this seems like a viable option to me.
Before working on this project I searched if it has been done before and here are some related concepts:
- AutoStore - bins stacked on top of each other in a grid, robots on top pick them out.
- Ocado’s hive-grid system - similar thing.
Those systems usually stack goods vertically and retrieve them from the top, meaning you can't just take out any pallet. Also their designs don't use full scale pallets.
Developint Python script
# Install the UV package manager
curl -LsSf https://astral.sh/uv/install.sh | sh
# powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" on Windows
# Clone the repository and navigate into it
git clone https://github.com/ebolblga/robo-warehouse.git
cd robo-warehouse
# Create virtual environment and install dependencies
uv sync
# Activate virtual environment
. .venv/bin/activate
# .venv\Scripts\activate on Windows
# Install pre-commit hooks
uv run pre-commit install
# Run pre-commit
uv run pre-commit run --all-files
# Ruff
uv run ruff format
uv run ruff check --fixFirst download Blender (v4.5 was used for this project). Now open assets/warehouse.blend file and navigate to "Scripting" tab. If the script is not opened - open it and run it.
This program is licensed under the MIT License. Please read the License file to know about the usage terms and conditions.




