This code determines the assembly sequence for each fragment of an entire fresco group. Furthermore, it adds a space between each fragment so that it is possible to place it on the work bench using, e.g., the RePAIR SoftHand.
Setup a Python 3.12 virtual environment e.g. "fresco-assembly-sequence". You can use e.g. Virtualenv with Virtualenvwrapper or Conda.
If you are using Virtualenv with Virtualenvwrapper, make sure that you are in the correct environment.
workon fresco-assembly-sequence
Then clone the repository and install the required requirements.
git clone git@github.com:RePAIRProject/fresco_assembly_sequence.git
pip3 install -r requirements.txt
cd ..
Go to the root folder and install everything:
cd fresco_assembly_sequence
pip3 install -e .
You have to navigate to the meshes folder and use gdown to download and unzip the fresco fragment meshes.
cd /fresco_assembly_sequence/fresco_assembly_sequence/meshes
gdown <file_id>
unzip <file_name>
rm <file_name>
Replace <file_id> and <file_name> with one entry of the following table. For example:
cd /fresco_assembly_sequence/fresco_assembly_sequence/meshes
gdown 1g1CEPjjb5doxD8e317eZYAkK77YDBitP
unzip 2d_frescoes_group_15_and_29.zip
rm 2d_frescoes_group_15_and_29.zip
| Dataset ID | File_name | File_id |
|---|---|---|
| 1 | 2d_frescoes_group_15_and_29.zip | 1g1CEPjjb5doxD8e317eZYAkK77YDBitP |
If you are using Virtualenv with Virtualenvwrapper, make sure that you are in the correct environment.
workon fresco-assembly-sequence
Run the code with default parameters:
python3 fresco_assembly_sequence.py
Run the code with a specific fresco, e.g., fresco group 29:
python3 fresco_assembly_sequence.py -f 29
Run the code with a specific assembly sequence type, e.g., following a snake pattern:
python3 fresco_assembly_sequence.py -a snake
Run the code with a specific minimum gap between each fragment, e.g., with an inflation width of 20 mm:
python3 fresco_assembly_sequence.py -i 20
Plots can be generated and saved with -s. For debug purposes, the plots are visualisable during execution of the code with -p. In this case, the assembly sequence is animated. To continue the code's execution all plot windows have to be closed. For debug prints, the verbosity level is adjustable via -v.
Show all parameter options:
python3 fresco_assembly_sequence.py -h
The fresco placement poses and the assembly sequence are stored in a json file called fresco_placement.json. The file is stored with the meshes of the corresponding fresco group. Furthermore, all plots are stored there. E.g. for group 29, you can find the files in: /fresco_assembly_sequence/fresco_assembly_sequence/meshes/group_29/2D/
The images below show the scaling of fresco 29 with -i 20:
![]() |
![]() |
|---|
The images below show the determined assembly sequence for the scaled fresco 29:

The images below show the resulting json file including the assembly sequence and the 2D placement poses (x,y,yaw):
{
"header": {
"fresco_group": 29
},
"assembly_sequence_snake": [
{
"0": "RPf_00204_intact_mesh",
"1": "RPf_00208_intact_mesh",
"2": "RPf_00205_intact_mesh",
"3": "RPf_00207_intact_mesh",
"4": "RPf_00206_intact_mesh"
}
],
"assembly_sequence_spiral": [
{
...
}
],
"RPf_00204_intact_mesh": {
"trans_x": 1307.2354784251324,
"trans_y": 1923.3159280175662,
"ori_yaw": 121.36839075838125
},
"RPf_00207_intact_mesh": {
...
},
...
}
None.
"Compact Multi-Object Placement Using Adjacency-Aware Reinforcement Learning", B. Kreis, N. Dengler, J. de Heuvel, R. Menon, H. D. Perur, M. Bennewitz, in Proceedings of the IEEE-RAS International Conference on Humanoid Robots (Humanoids), 2024.
BibTex String:
@inproceedings{kreis24humanoids,
title={Compact Multi-Object Placement Using Adjacency-Aware Reinforcement Learning},
author={Benedikt Kreis and Nils Dengler and Jorge de Heuvel and Rohit Menon and Hamsa Perur and Maren Bennewitz},
booktitle={Proc. of the IEEE-RAS Int. Conf. on Humanoid Robots (Humanoids)},
doi={10.1109/Humanoids58906.2024.10769899},
year={2024}
}

