Giorgio – open, CE-oriented mobile bimanual service robot made in Italy: own AMR base, CAD, safety electrics, MuJoCo sim, RL training
See the codeAn open, mobile two-armed service robot. It sorts, carries, docks to charge itself, and makes espresso.
We couldn't build the parts. So we bought them, and made them work together.
Simulation render. Click the GIF for the full 68 s teaser. More videos ↓
[!IMPORTANT] Work in progress: design and simulation only. Giorgio has not been built. Many points are still open: type tests, CE certification, the choice of arms, real-hardware validation and more. See Known gaps & open questions. Every number in this repository comes either from a manufacturer document or is marked as an estimate or an assumption. Help is very welcome.
Giorgio is a mobile bimanual service robot assembled from open-hardware projects and certified off-the-shelf components:
The structure, shells, power system and software are our own. All of it is public: CAD, calculations, electrical and safety design, a CE technical-file skeleton, a MuJoCo simulation of the whole robot, the robot software (GIORGIO-OS) and reinforcement-learning training. Fork it, study it, improve it.
Start here · What it does · Videos · Architecture · Repository map · Quick start · Bill of materials · Customise · Contribute · Known gaps · Roadmap · Status & honesty · Licence · Trademarks
| I want to… | Go to | Time |
|---|---|---|
| Just look | the videos, the AMR base datasheet (download it and open it in a browser), the renders in amr/renders/ and the bill of materials | 5 min |
| Run the simulation | Quick start: make setup && make sim | 5–10 min |
| Change the design | Customise your Giorgio, then CONTRIBUTING.md. Starter tasks are labelled good first issue | an evening |
Questions and ideas go to Discussions. Some file and variable names are still in Italian; the glossary translates them.
All clips are renders of the MuJoCo simulation (Blender 4.5 over recorded physics states), not footage of hardware.
![]() Kitting. It loads its own tray and uses vision to insert the parts into the kit. | ![]() Sorting. It sorts parts by colour with a clash-aware two-arm planner. | ![]() Coffee hand-over. "Make me a coffee and bring it to Marco": it brews, drives and hands over the cup. |
![]() Own AMR base (rev B4). 780 × 560 mm, turns on the spot, two ez-Wheel safety drives, two SICK nanoScan3. | ![]() Every part, off the shelf or laser-cut. 170 CAD parts, 0 interferences, power on the left and safety on the right. | ![]() Learned skills. An ORCA hand learns in-hand cube rotation with PPO on GPU (236 M steps in 81 min). |
![]() Auto-docking. It goes home to charge on its own; the contacts stay dead until it is docked. | ![]() Drawers and doors. A policy trained on a plain OpenArm runs unchanged on Giorgio: 90–95 % success, against 71–76 % for scripted IK. | ![]() GIORGIO-OS console. Chat, skills, a live energy budget and safety state, with the same code for sim and robot. |
Full-HD (1920×1080) videos of the simulation, attached to the v0.1.0-design release (CC BY 4.0):
| Video | Length | What you see |
|---|---|---|
| Teaser | 1:08 | the whole idea in one minute |
| Components | 0:57 | the parts and the own AMR base: exploded views, batteries, power and safety, the dock |
| Activities | 0:51 | loading the tray, vision-guided insertion, slowing down for people, sorting, going home to charge |
| Training | 1:08 | an ORCA hand learns to turn a cube; an OpenArm learns drawers and doors, then runs on Giorgio |
| Customisation | 1:06 | LED faces, hats, four setups (grippers, ORCA hands, budget hands, coffee module) |
| Full film | 4:05 | everything above, in one cut |
The videos are built by render/video_series.py. Vertical 9:16 cuts are still to do (see the
issues).
flowchart LR
subgraph BASE["Own AMR base (amr/), rev B4"]
BAT["2× Discover 48 V LFP<br/>3.07 kWh"] --> PWR["Power: fuses, K0 contactor,<br/>Mean Well DC-DCs"]
DOCK["Dock: RoboPad contacts<br/>+ NPB-750 charger"] --> BAT
PWR --> DRV["2× ez-Wheel SWD 125<br/>safety wheel drives"]
end
subgraph SAFE["Safety chain (deterministic, certified parts)"]
SCN["2× SICK nanoScan3<br/>protective fields"] --> PNOZ["Pilz PNOZmulti 2<br/>safety controller"]
ES["E-stops · key selector<br/>enabling pendant"] --> PNOZ
PNOZ -->|"STO / SLS"| DRV
PNOZ -->|"K1/K2 contactors"| ARMPWR["Arm 24 V bus"]
end
subgraph SUP["Superstructure (cad/)"]
ARMS["2× OpenArm 2.0<br/>+ grippers / ORCA / AmazingHand"]
VIS["Orbbec Gemini 336L<br/>+ wrist cameras"]
COF["Coffee module + tray"]
JET["Jetson Orin NX"]
end
subgraph SW["Software, sim and training"]
OS["GIORGIO-OS (giorgio_os/)<br/>HAL · skills · energy · NL agent · console"]
SIM["MuJoCo 3.8 simulation<br/>giorgio_v5.py, giorgio_model.py"]
RL["RL training<br/>rl_mani/ · rl_openarm/ (mujoco_warp)"]
end
ARMPWR --> ARMS
PWR --> JET
JET --- OS
OS <-->|"sim backend"| SIM
OS -.->|"real backend (stubs)"| ARMS
RL -->|"policies"| OS
OS -.->|"status only, never in the safety path"| PNOZ
Design rule: every safety function runs on certified, deterministic hardware: scanners, a safety controller and
safety drives. No machine-learning model sits in the safety path, as the EU Machinery Regulation 2023/1230, Annex I
requires. Details: amr/electrical/ and amr/ce/.
| Folder / file | What's there | Status | Main entry point |
|---|---|---|---|
amr/ | Own mobile base: • CAD (170 parts) and calculations • electrical + safety package • CE file skeleton • industrialisation plan and certainty audit | design rev B4, checks pass | amr/amr_cad.py, amr/amr_calc.py, amr/electrical/check_amr.py |
cad/ | Superstructure CAD (CadQuery): • parts and bolted joints • validator • STEP/STL exports | design; base-adapter parts belong to an earlier base variant | cad/validate.py → cad/VALIDATION.md |
electrical/ | Superstructure power and safety design, netlists, BOM generator | design; base variants archived | electrical/calc.py, electrical/make_bom.py |
giorgio_v5.py, giorgio_model.py, … (root) | MuJoCo simulation: • robot model (official OpenArm MJCF + own base) • missions, IK, vision • people, energy, docking | working in sim | giorgio_v5.py (make sim) |
giorgio_os/ | Robot software: • HAL (sim + real stubs), skills • safety supervisor, energy and mission managers • NL agent, web console | sim backend works; real backend stubs | python -m giorgio_os.sim_server (make console) |
rl_mani/ | RL: ORCA hand in-hand cube rotation (PPO, mujoco_warp) | trained policy included | rl_mani/train.py |
rl_openarm/ | RL: OpenArm lift and drawer/door policies, transferred unchanged to Giorgio | trained policies included | rl_openarm/train.py, rl_openarm/run_cpu.py |
verifiche/ | Simulation checks: docking, arm collisions, shells, box forces | working | verifiche/aggancio.py, verifiche/urti.py |
render/ | Blender 4.5 render pipeline, LED faces, hats, music, video editing | working (needs Blender) | render/video_series.py, render/run_v19.sh |
assets/, robots/ | Shell meshes (OBJ) and arm URDFs | data | shells.py |
docs/ | BOM overview, customising, glossary, base decision, power & certification notes, Italian summary | docs | — |
FEASIBILITY.md | SDK, driver and licence check for every component, plus the top risks | docs | — |
kickstarter/, launch/ | Campaign and launch drafts (IT/EN) | drafts | — |
scripts/ | setup.sh, fetch_third_party.sh, bom_overview.py | working | make setup |
legacy/ | One-off and superseded scripts, kept for history | unmaintained | — |
third_party/ (not committed) | OpenArm MJCF, ORCA, AmazingHand, LEAP models at pinned commits | fetched | scripts/fetch_third_party.sh |
Tested on Ubuntu 24.04 with Python 3.12. You need git, Python ≥ 3.10 with venv, and about 1.5 GB of disk. The
optional parts need more: a GPU for training, Blender 4.5 for renders, and a separate environment for the CAD.
git clone https://github.com/VenetoStato/giorgio.git && cd giorgio
make setup # .venv + requirements.txt (MuJoCo 3.8, ...) + third_party/ at pinned commits
make sim # GUI simulation: the logistics mission (needs a display)
make coffee # GUI: "Giorgio, make me a coffee and bring it to Marco"
make console # GIORGIO-OS operator console → http://127.0.0.1:8080
make check # fast checks, the same as CI (AMR electrical/safety + calculations, syntax)
# 1. simulation environment (Debian/Ubuntu: sudo apt install python3-venv git)
python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt && pip install --no-deps -e giorgio_os
scripts/fetch_third_party.sh # ~400 MB; --minimal = OpenArm only (~30 MB)
# 2. run
MUJOCO_GL=egl PYTHONPATH=. python giorgio_v5.py # GUI
MUJOCO_GL=egl PYTHONPATH=. python giorgio_v5.py --seconds 40 --video video/sim.mp4 # headless → mp4
MUJOCO_GL=egl python -m giorgio_os.sim_server # console
(cd giorgio_os && MUJOCO_GL=egl python -m pytest -q) # tests
# 3. checks of the base (PyYAML + numpy only)
python amr/electrical/check_amr.py # 242 PASS / 0 FAIL / 11 OPEN
(cd amr && python amr_calc.py) # writes amr/CALC.md
# 4. CAD (separate env, ~2 GB): see cad/README.md
python3.11 -m venv cad/.env && cad/.env/bin/pip install -r cad/requirements.txt
make cad-validate && make amr-cad
# 5. renders (Blender 4.5 on PATH or BLENDER=/path/to/blender)
make render-amr
# 6. GPU training (separate env, Python 3.11, NVIDIA GPU): see rl_openarm/README.md, rl_mani/README_IT.md
pip install torch && pip install -r requirements-train.txt
cd rl_openarm && python train.py --task cabinet --envs 4096 --max_minutes 95 --out runs/cX
Environment variables: PYTHON (interpreter for make and setup.sh), CADPY (CAD env), BLENDER (Blender binary),
MUJOCO_GL=egl (headless rendering, the default in make).
The full robot, grouped by subsystem with part numbers, sources and status, is in docs/BOM_OVERVIEW.md.
It is generated by scripts/bom_overview.py from amr/bom_amr.csv and
docs/bom.csv. Component costs only: EUR excluding VAT, prototype quantity 1, no labour.
| Subsystem | Main parts | EUR |
|---|---|---|
| Base AMR | 2× ez-Wheel SWD 125, laser-cut/bent steel and aluminium frame, sprung castors, covers | 8,317 |
| Safety | 2× SICK nanoScan3 Pro I/O, Pilz PNOZmulti 2 (B0 + 3 × EF 4DI4DOR), contactors, e-stops, pendant | 8,919 |
| Power | 2× Discover DLP-GC2-48V LFP, fuses, main contactor, Mean Well DC-DCs, harnesses | 4,855 |
| Dock | RoboPad contacts, Mean Well NPB-750-48 charger, dock controller | 2,171 |
| Arms & hands | Enactic OpenArm 2.0 bimanual kit (arms, torso, grippers, wrist cameras) + arm power | 6,959 |
| Vision & compute | Jetson Orin NX (reComputer J4012), Orbbec Gemini 336L, fisheye cameras, LED face | 2,335 |
| Structure & shells | column, brackets, tray, PA12 shells, fasteners | 1,476 |
| Coffee module | 24 V capsule machine, cup shuttle, coffee power | 1,025 |
| Total (barista configuration) | 171 rows; 67 % of the value from documented prices, the rest are estimates waiting for quotes | 36,056 |
Giorgio is meant to be remixed. docs/CUSTOMIZE.md explains how to:
amr/amr_params.py);make check plus the checks of the area you touched.Rules that matter:
The details are in CONTRIBUTING.md. Please follow the Code of Conduct. Security or safety-design concerns go through SECURITY.md.
What is not done or not certain yet. Each item has its source:
amr/ce/GAPS.md). The alternative is a certified cobot on 48 V DC (variant "C48": UR e-Series /
Kassow), or a brake retrofit of OpenArm.amr/ce/GAPS.md):
amr/ce/TEST_PLAN.md). They cover stopping
distances, personnel detection, EMC, short-circuit current (TP-14) and payload.amr/CERTAINTY.md). Of the 82 BOM rows, 32 have only a price and need a
quote, and 1 is a gap. Of the calculation inputs, 2 are gaps (gripper length, coffee machine power) and 28 wait for
type tests. In the netlist, the battery short-circuit current is unpublished, which leaves 11 OPEN rows.amr/DOWNLOAD_LIST.md): the Pilz certificate, the
Discover UN 38.3 summary, EN 60204-1 / DIN VDE 0298-4, and EN ISO 3691-4.cad/VALIDATION.md). The superstructure CAD in cad/ still carries adapter parts of an earlier
base variant.giorgio_model.py (castors, wheels) is typed by hand and differs
slightly from amr/amr_params.py (see docs/CUSTOMIZE.md).ros2_control, and the GIORGIO-OS
real backend.| Simulated / designed | Verified on hardware | |
|---|---|---|
| Mechanics (CAD, interferences, tipping, bolt loads) | yes: CadQuery + checks | no |
| Electrical and safety design (fuses, contactors, PL targets) | yes: netlists + 242 automated checks | no |
| Robot behaviour (kitting, sorting, coffee, docking) | yes: MuJoCo 3.8 with official arm models | no |
| Learned skills (cube rotation, lift, drawers/doors) | yes: GPU PPO, evaluated on 50–100 episodes | no |
| Purchased-part data | from manufacturer documents where tagged SOURCED; otherwise marked | n/a |
| Prices | 67 % documented, the rest estimates | no quotes yet |
The renders and videos show the simulation. Where a value is an estimate, the file says so. If you find a number that is wrong or unsourced, please open an issue.
Third-party models keep their own licences and are not redistributed here (see NOTICE.md):
Giorgio is an independent design concept, not affiliated with, sponsored or endorsed by any company named here. Component names are used only to identify compatible parts. OpenArm is a project of Enactic, Inc. SICK and nanoScan3 are trademarks of SICK AG. Pilz and PNOZ are trademarks of Pilz GmbH & Co. KG. NVIDIA and Jetson are trademarks of NVIDIA Corporation. Orbbec and Gemini are trademarks of Orbbec. ORCA Hand is a trademark of ORCA Dexterity, Inc. AmazingHand is a project of Pollen Robotics. Ferrari is a trademark of Ferrari S.p.A. Fiat and Panda are trademarks of FCA Italy S.p.A. (Stellantis). The teaser line "Not a Ferrari. A Fiat Panda." uses them only as a comparison. All other names are trademarks of their respective owners. See NOTICE.md.
Giorgio – open, CE-oriented mobile bimanual service robot made in Italy: own AMR base, CAD, safety electrics, MuJoCo sim, RL training
See the codeAn open, mobile two-armed service robot. It sorts, carries, docks to charge itself, and makes espresso.
We couldn't build the parts. So we bought them, and made them work together.
Simulation render. Click the GIF for the full 68 s teaser. More videos ↓
[!IMPORTANT] Work in progress: design and simulation only. Giorgio has not been built. Many points are still open: type tests, CE certification, the choice of arms, real-hardware validation and more. See Known gaps & open questions. Every number in this repository comes either from a manufacturer document or is marked as an estimate or an assumption. Help is very welcome.
Giorgio is a mobile bimanual service robot assembled from open-hardware projects and certified off-the-shelf components:
The structure, shells, power system and software are our own. All of it is public: CAD, calculations, electrical and safety design, a CE technical-file skeleton, a MuJoCo simulation of the whole robot, the robot software (GIORGIO-OS) and reinforcement-learning training. Fork it, study it, improve it.
Start here · What it does · Videos · Architecture · Repository map · Quick start · Bill of materials · Customise · Contribute · Known gaps · Roadmap · Status & honesty · Licence · Trademarks
| I want to… | Go to | Time |
|---|---|---|
| Just look | the videos, the AMR base datasheet (download it and open it in a browser), the renders in amr/renders/ and the bill of materials | 5 min |
| Run the simulation | Quick start: make setup && make sim | 5–10 min |
| Change the design | Customise your Giorgio, then CONTRIBUTING.md. Starter tasks are labelled good first issue | an evening |
Questions and ideas go to Discussions. Some file and variable names are still in Italian; the glossary translates them.
All clips are renders of the MuJoCo simulation (Blender 4.5 over recorded physics states), not footage of hardware.
![]() Kitting. It loads its own tray and uses vision to insert the parts into the kit. | ![]() Sorting. It sorts parts by colour with a clash-aware two-arm planner. | ![]() Coffee hand-over. "Make me a coffee and bring it to Marco": it brews, drives and hands over the cup. |
![]() Own AMR base (rev B4). 780 × 560 mm, turns on the spot, two ez-Wheel safety drives, two SICK nanoScan3. | ![]() Every part, off the shelf or laser-cut. 170 CAD parts, 0 interferences, power on the left and safety on the right. | ![]() Learned skills. An ORCA hand learns in-hand cube rotation with PPO on GPU (236 M steps in 81 min). |
![]() Auto-docking. It goes home to charge on its own; the contacts stay dead until it is docked. | ![]() Drawers and doors. A policy trained on a plain OpenArm runs unchanged on Giorgio: 90–95 % success, against 71–76 % for scripted IK. | ![]() GIORGIO-OS console. Chat, skills, a live energy budget and safety state, with the same code for sim and robot. |
Full-HD (1920×1080) videos of the simulation, attached to the v0.1.0-design release (CC BY 4.0):
| Video | Length | What you see |
|---|---|---|
| Teaser | 1:08 | the whole idea in one minute |
| Components | 0:57 | the parts and the own AMR base: exploded views, batteries, power and safety, the dock |
| Activities | 0:51 | loading the tray, vision-guided insertion, slowing down for people, sorting, going home to charge |
| Training | 1:08 | an ORCA hand learns to turn a cube; an OpenArm learns drawers and doors, then runs on Giorgio |
| Customisation | 1:06 | LED faces, hats, four setups (grippers, ORCA hands, budget hands, coffee module) |
| Full film | 4:05 | everything above, in one cut |
The videos are built by render/video_series.py. Vertical 9:16 cuts are still to do (see the
issues).
flowchart LR
subgraph BASE["Own AMR base (amr/), rev B4"]
BAT["2× Discover 48 V LFP<br/>3.07 kWh"] --> PWR["Power: fuses, K0 contactor,<br/>Mean Well DC-DCs"]
DOCK["Dock: RoboPad contacts<br/>+ NPB-750 charger"] --> BAT
PWR --> DRV["2× ez-Wheel SWD 125<br/>safety wheel drives"]
end
subgraph SAFE["Safety chain (deterministic, certified parts)"]
SCN["2× SICK nanoScan3<br/>protective fields"] --> PNOZ["Pilz PNOZmulti 2<br/>safety controller"]
ES["E-stops · key selector<br/>enabling pendant"] --> PNOZ
PNOZ -->|"STO / SLS"| DRV
PNOZ -->|"K1/K2 contactors"| ARMPWR["Arm 24 V bus"]
end
subgraph SUP["Superstructure (cad/)"]
ARMS["2× OpenArm 2.0<br/>+ grippers / ORCA / AmazingHand"]
VIS["Orbbec Gemini 336L<br/>+ wrist cameras"]
COF["Coffee module + tray"]
JET["Jetson Orin NX"]
end
subgraph SW["Software, sim and training"]
OS["GIORGIO-OS (giorgio_os/)<br/>HAL · skills · energy · NL agent · console"]
SIM["MuJoCo 3.8 simulation<br/>giorgio_v5.py, giorgio_model.py"]
RL["RL training<br/>rl_mani/ · rl_openarm/ (mujoco_warp)"]
end
ARMPWR --> ARMS
PWR --> JET
JET --- OS
OS <-->|"sim backend"| SIM
OS -.->|"real backend (stubs)"| ARMS
RL -->|"policies"| OS
OS -.->|"status only, never in the safety path"| PNOZ
Design rule: every safety function runs on certified, deterministic hardware: scanners, a safety controller and
safety drives. No machine-learning model sits in the safety path, as the EU Machinery Regulation 2023/1230, Annex I
requires. Details: amr/electrical/ and amr/ce/.
| Folder / file | What's there | Status | Main entry point |
|---|---|---|---|
amr/ | Own mobile base: • CAD (170 parts) and calculations • electrical + safety package • CE file skeleton • industrialisation plan and certainty audit | design rev B4, checks pass | amr/amr_cad.py, amr/amr_calc.py, amr/electrical/check_amr.py |
cad/ | Superstructure CAD (CadQuery): • parts and bolted joints • validator • STEP/STL exports | design; base-adapter parts belong to an earlier base variant | cad/validate.py → cad/VALIDATION.md |
electrical/ | Superstructure power and safety design, netlists, BOM generator | design; base variants archived | electrical/calc.py, electrical/make_bom.py |
giorgio_v5.py, giorgio_model.py, … (root) | MuJoCo simulation: • robot model (official OpenArm MJCF + own base) • missions, IK, vision • people, energy, docking | working in sim | giorgio_v5.py (make sim) |
giorgio_os/ | Robot software: • HAL (sim + real stubs), skills • safety supervisor, energy and mission managers • NL agent, web console | sim backend works; real backend stubs | python -m giorgio_os.sim_server (make console) |
rl_mani/ | RL: ORCA hand in-hand cube rotation (PPO, mujoco_warp) | trained policy included | rl_mani/train.py |
rl_openarm/ | RL: OpenArm lift and drawer/door policies, transferred unchanged to Giorgio | trained policies included | rl_openarm/train.py, rl_openarm/run_cpu.py |
verifiche/ | Simulation checks: docking, arm collisions, shells, box forces | working | verifiche/aggancio.py, verifiche/urti.py |
render/ | Blender 4.5 render pipeline, LED faces, hats, music, video editing | working (needs Blender) | render/video_series.py, render/run_v19.sh |
assets/, robots/ | Shell meshes (OBJ) and arm URDFs | data | shells.py |
docs/ | BOM overview, customising, glossary, base decision, power & certification notes, Italian summary | docs | — |
FEASIBILITY.md | SDK, driver and licence check for every component, plus the top risks | docs | — |
kickstarter/, launch/ | Campaign and launch drafts (IT/EN) | drafts | — |
scripts/ | setup.sh, fetch_third_party.sh, bom_overview.py | working | make setup |
legacy/ | One-off and superseded scripts, kept for history | unmaintained | — |
third_party/ (not committed) | OpenArm MJCF, ORCA, AmazingHand, LEAP models at pinned commits | fetched | scripts/fetch_third_party.sh |
Tested on Ubuntu 24.04 with Python 3.12. You need git, Python ≥ 3.10 with venv, and about 1.5 GB of disk. The
optional parts need more: a GPU for training, Blender 4.5 for renders, and a separate environment for the CAD.
git clone https://github.com/VenetoStato/giorgio.git && cd giorgio
make setup # .venv + requirements.txt (MuJoCo 3.8, ...) + third_party/ at pinned commits
make sim # GUI simulation: the logistics mission (needs a display)
make coffee # GUI: "Giorgio, make me a coffee and bring it to Marco"
make console # GIORGIO-OS operator console → http://127.0.0.1:8080
make check # fast checks, the same as CI (AMR electrical/safety + calculations, syntax)
# 1. simulation environment (Debian/Ubuntu: sudo apt install python3-venv git)
python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt && pip install --no-deps -e giorgio_os
scripts/fetch_third_party.sh # ~400 MB; --minimal = OpenArm only (~30 MB)
# 2. run
MUJOCO_GL=egl PYTHONPATH=. python giorgio_v5.py # GUI
MUJOCO_GL=egl PYTHONPATH=. python giorgio_v5.py --seconds 40 --video video/sim.mp4 # headless → mp4
MUJOCO_GL=egl python -m giorgio_os.sim_server # console
(cd giorgio_os && MUJOCO_GL=egl python -m pytest -q) # tests
# 3. checks of the base (PyYAML + numpy only)
python amr/electrical/check_amr.py # 242 PASS / 0 FAIL / 11 OPEN
(cd amr && python amr_calc.py) # writes amr/CALC.md
# 4. CAD (separate env, ~2 GB): see cad/README.md
python3.11 -m venv cad/.env && cad/.env/bin/pip install -r cad/requirements.txt
make cad-validate && make amr-cad
# 5. renders (Blender 4.5 on PATH or BLENDER=/path/to/blender)
make render-amr
# 6. GPU training (separate env, Python 3.11, NVIDIA GPU): see rl_openarm/README.md, rl_mani/README_IT.md
pip install torch && pip install -r requirements-train.txt
cd rl_openarm && python train.py --task cabinet --envs 4096 --max_minutes 95 --out runs/cX
Environment variables: PYTHON (interpreter for make and setup.sh), CADPY (CAD env), BLENDER (Blender binary),
MUJOCO_GL=egl (headless rendering, the default in make).
The full robot, grouped by subsystem with part numbers, sources and status, is in docs/BOM_OVERVIEW.md.
It is generated by scripts/bom_overview.py from amr/bom_amr.csv and
docs/bom.csv. Component costs only: EUR excluding VAT, prototype quantity 1, no labour.
| Subsystem | Main parts | EUR |
|---|---|---|
| Base AMR | 2× ez-Wheel SWD 125, laser-cut/bent steel and aluminium frame, sprung castors, covers | 8,317 |
| Safety | 2× SICK nanoScan3 Pro I/O, Pilz PNOZmulti 2 (B0 + 3 × EF 4DI4DOR), contactors, e-stops, pendant | 8,919 |
| Power | 2× Discover DLP-GC2-48V LFP, fuses, main contactor, Mean Well DC-DCs, harnesses | 4,855 |
| Dock | RoboPad contacts, Mean Well NPB-750-48 charger, dock controller | 2,171 |
| Arms & hands | Enactic OpenArm 2.0 bimanual kit (arms, torso, grippers, wrist cameras) + arm power | 6,959 |
| Vision & compute | Jetson Orin NX (reComputer J4012), Orbbec Gemini 336L, fisheye cameras, LED face | 2,335 |
| Structure & shells | column, brackets, tray, PA12 shells, fasteners | 1,476 |
| Coffee module | 24 V capsule machine, cup shuttle, coffee power | 1,025 |
| Total (barista configuration) | 171 rows; 67 % of the value from documented prices, the rest are estimates waiting for quotes | 36,056 |
Giorgio is meant to be remixed. docs/CUSTOMIZE.md explains how to:
amr/amr_params.py);make check plus the checks of the area you touched.Rules that matter:
The details are in CONTRIBUTING.md. Please follow the Code of Conduct. Security or safety-design concerns go through SECURITY.md.
What is not done or not certain yet. Each item has its source:
amr/ce/GAPS.md). The alternative is a certified cobot on 48 V DC (variant "C48": UR e-Series /
Kassow), or a brake retrofit of OpenArm.amr/ce/GAPS.md):
amr/ce/TEST_PLAN.md). They cover stopping
distances, personnel detection, EMC, short-circuit current (TP-14) and payload.amr/CERTAINTY.md). Of the 82 BOM rows, 32 have only a price and need a
quote, and 1 is a gap. Of the calculation inputs, 2 are gaps (gripper length, coffee machine power) and 28 wait for
type tests. In the netlist, the battery short-circuit current is unpublished, which leaves 11 OPEN rows.amr/DOWNLOAD_LIST.md): the Pilz certificate, the
Discover UN 38.3 summary, EN 60204-1 / DIN VDE 0298-4, and EN ISO 3691-4.cad/VALIDATION.md). The superstructure CAD in cad/ still carries adapter parts of an earlier
base variant.giorgio_model.py (castors, wheels) is typed by hand and differs
slightly from amr/amr_params.py (see docs/CUSTOMIZE.md).ros2_control, and the GIORGIO-OS
real backend.| Simulated / designed | Verified on hardware | |
|---|---|---|
| Mechanics (CAD, interferences, tipping, bolt loads) | yes: CadQuery + checks | no |
| Electrical and safety design (fuses, contactors, PL targets) | yes: netlists + 242 automated checks | no |
| Robot behaviour (kitting, sorting, coffee, docking) | yes: MuJoCo 3.8 with official arm models | no |
| Learned skills (cube rotation, lift, drawers/doors) | yes: GPU PPO, evaluated on 50–100 episodes | no |
| Purchased-part data | from manufacturer documents where tagged SOURCED; otherwise marked | n/a |
| Prices | 67 % documented, the rest estimates | no quotes yet |
The renders and videos show the simulation. Where a value is an estimate, the file says so. If you find a number that is wrong or unsourced, please open an issue.
Third-party models keep their own licences and are not redistributed here (see NOTICE.md):
Giorgio is an independent design concept, not affiliated with, sponsored or endorsed by any company named here. Component names are used only to identify compatible parts. OpenArm is a project of Enactic, Inc. SICK and nanoScan3 are trademarks of SICK AG. Pilz and PNOZ are trademarks of Pilz GmbH & Co. KG. NVIDIA and Jetson are trademarks of NVIDIA Corporation. Orbbec and Gemini are trademarks of Orbbec. ORCA Hand is a trademark of ORCA Dexterity, Inc. AmazingHand is a project of Pollen Robotics. Ferrari is a trademark of Ferrari S.p.A. Fiat and Panda are trademarks of FCA Italy S.p.A. (Stellantis). The teaser line "Not a Ferrari. A Fiat Panda." uses them only as a comparison. All other names are trademarks of their respective owners. See NOTICE.md.