# xstone1129/dobotmagician architecture

> Architecture diagram of the GitHub repository xstone1129/dobotmagician, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xstone1129/dobotmagician
- Repository: https://github.com/xstone1129/dobotmagician

## Overview

This repository learns robot palletizing trajectories from recorded demonstrations and replays selected learned motion in CoppeliaSim. The main workflow is CSV demonstrations → one of four GMM/BGMM–GMR–movement-primitive variants → saved model and evaluation artifacts → configured trajectory selection and simulator playback. The README also documents a separate suction-arm setup and demonstration-generation workflow. Several entry points and integrations are represented from documented capabilities and filenames; their unsampled internals are not expanded.

Main entry points: [`src/dobot_bgmm_promp/scripts/learn.py`](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/learn.py) (Training entry), [`src/dobot_bgmm_promp/io.py`](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/io.py) (Data and model I/O), [`src/dobot_bgmm_promp/scripts/play_coppeliasim.py`](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/play_coppeliasim.py) (Playback entry), [`src/dobot_bgmm_promp/gmr_primitives.py`](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/gmr_primitives.py) (GMM/GMR variants)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Demonstration data"]
  node_demo_csv["Demo CSVs"]
  node_suction_csv["Suction demos"]
  node_config["Runtime config<br/>[default.yaml]"]
  node_suction_config["Suction config<br/>[suction_arm.yaml]"]
  node_demo_generator["Suction demo generator"]
end

subgraph group_learning["Trajectory learning"]
  node_learn["Training entry<br/>[learn.py]"]
  node_io["Data and model I/O<br/>[io.py]"]
  node_variants["GMM/GMR variants<br/>[gmr_primitives.py]"]
  node_dmp["DMP execution model<br/>[dmp.py]"]
  node_incremental["Incremental GMM<br/>[incremental_gmm.py]"]
end

subgraph group_runtime["Playback and simulation"]
  node_play["Playback entry"]
  node_selection["Place selection<br/>[model_selection.py]"]
  node_client["Simulator client"]
  node_scene_generator["Suction scene setup"]
  node_suction_scene["Suction simulation scene"]
end

subgraph group_artifacts["Models and analysis"]
  node_metrics["Trajectory metrics<br/>[metrics.py]"]
  node_plotting["Trajectory plots<br/>[plotting.py]"]
  node_models[("Saved models")]
  node_report_figures["Report figures<br/>[report_figures.py]"]
end

node_engineer(("Robot engineer"))
node_sim(("CoppeliaSim"))

node_engineer -->|"starts training"| node_learn
node_engineer -->|"starts playback"| node_play
node_config -->|"configures training"| node_learn
node_demo_csv -->|"provides trajectories"| node_io
node_learn -->|"loads data"| node_io
node_learn -->|"fits algorithms"| node_variants
node_variants -.->|"uses incremental fit"| node_incremental
node_variants -->|"fits DMP variants"| node_dmp
node_learn -->|"saves models"| node_io
node_learn -->|"evaluates trajectories"| node_metrics
node_learn -->|"renders plots"| node_plotting
node_io -->|"writes models"| node_models
node_engineer -->|"generates demos"| node_demo_generator
node_demo_generator -->|"writes demonstrations"| node_suction_csv
node_suction_config -->|"configures playback"| node_play
node_models -->|"loads model"| node_io
node_play -->|"loads model"| node_io
node_play -->|"selects place trajectory"| node_selection
node_play -->|"dispatches trajectory"| node_client
node_client -->|"controls simulation"| node_sim
node_engineer -->|"creates scene"| node_scene_generator
node_scene_generator -->|"edits scene"| node_sim
node_scene_generator -->|"produces scene"| node_suction_scene
node_report_figures -->|"reads configuration"| node_config

click node_demo_csv "https://github.com/xstone1129/dobotmagician/tree/master/data/demos_single_place"
click node_suction_csv "https://github.com/xstone1129/dobotmagician/tree/master/data/demos_suction_turn"
click node_config "https://github.com/xstone1129/dobotmagician/blob/master/configs/default.yaml"
click node_suction_config "https://github.com/xstone1129/dobotmagician/blob/master/configs/suction_arm.yaml"
click node_learn "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/learn.py"
click node_io "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/io.py"
click node_variants "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/gmr_primitives.py"
click node_dmp "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/dmp.py"
click node_incremental "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/incremental_gmm.py"
click node_metrics "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/metrics.py"
click node_plotting "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/plotting.py"
click node_models "https://github.com/xstone1129/dobotmagician/tree/master/models"
click node_play "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/play_coppeliasim.py"
click node_selection "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/model_selection.py"
click node_client "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/coppeliasim_client.py"
click node_demo_generator "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/generate_suction_turn_demos.py"
click node_scene_generator "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/create_suction_arm_scene.py"
click node_suction_scene "https://github.com/xstone1129/dobotmagician/blob/master/scenes/dobot_magician_suction.ttt"
click node_report_figures "https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/report_figures.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_demo_csv,node_suction_csv,node_config,node_suction_config,node_demo_generator toneBlue
class node_learn,node_io,node_variants,node_dmp,node_incremental toneAmber
class node_play,node_selection,node_client,node_scene_generator,node_suction_scene toneMint
class node_metrics,node_plotting,node_models,node_report_figures toneRose
class node_engineer,node_sim toneIndigo
```

## Components

### Demonstration data

- [Demo CSVs](https://github.com/xstone1129/dobotmagician/tree/master/data/demos_single_place): `data/demos_single_place`
- [Suction demos](https://github.com/xstone1129/dobotmagician/tree/master/data/demos_suction_turn): `data/demos_suction_turn`
- [Runtime config](https://github.com/xstone1129/dobotmagician/blob/master/configs/default.yaml): `configs/default.yaml`
- [Suction config](https://github.com/xstone1129/dobotmagician/blob/master/configs/suction_arm.yaml): `configs/suction_arm.yaml`
- [Suction demo generator](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/generate_suction_turn_demos.py): `src/dobot_bgmm_promp/scripts/generate_suction_turn_demos.py`

### Trajectory learning

- [Training entry](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/learn.py): `src/dobot_bgmm_promp/scripts/learn.py`
- [Data and model I/O](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/io.py): `src/dobot_bgmm_promp/io.py`
- [GMM/GMR variants](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/gmr_primitives.py): `src/dobot_bgmm_promp/gmr_primitives.py`
- [DMP execution model](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/dmp.py): `src/dobot_bgmm_promp/dmp.py`
- [Incremental GMM](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/incremental_gmm.py): `src/dobot_bgmm_promp/incremental_gmm.py`

### Playback and simulation

- [Playback entry](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/play_coppeliasim.py): `src/dobot_bgmm_promp/scripts/play_coppeliasim.py`
- [Place selection](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/model_selection.py): `src/dobot_bgmm_promp/model_selection.py`
- [Simulator client](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/coppeliasim_client.py): `src/dobot_bgmm_promp/coppeliasim_client.py`
- [Suction scene setup](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/scripts/create_suction_arm_scene.py): `src/dobot_bgmm_promp/scripts/create_suction_arm_scene.py`
- [Suction simulation scene](https://github.com/xstone1129/dobotmagician/blob/master/scenes/dobot_magician_suction.ttt): `scenes/dobot_magician_suction.ttt`

### Models and analysis

- [Trajectory metrics](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/metrics.py): `src/dobot_bgmm_promp/metrics.py`
- [Trajectory plots](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/plotting.py): `src/dobot_bgmm_promp/plotting.py`
- [Saved models](https://github.com/xstone1129/dobotmagician/tree/master/models): `models`
- [Report figures](https://github.com/xstone1129/dobotmagician/blob/master/src/dobot_bgmm_promp/report_figures.py): `src/dobot_bgmm_promp/report_figures.py`

### Other components

- **Robot engineer**
- **CoppeliaSim**

## Connections

- Robot engineer → Training entry: starts training
- Robot engineer → Playback entry: starts playback
- Runtime config → Training entry: configures training
- Demo CSVs → Data and model I/O: provides trajectories
- Training entry → Data and model I/O: loads data
- Training entry → GMM/GMR variants: fits algorithms
- GMM/GMR variants → Incremental GMM: uses incremental fit
- GMM/GMR variants → DMP execution model: fits DMP variants
- Training entry → Data and model I/O: saves models
- Training entry → Trajectory metrics: evaluates trajectories
- Training entry → Trajectory plots: renders plots
- Data and model I/O → Saved models: writes models
- Robot engineer → Suction demo generator: generates demos
- Suction demo generator → Suction demos: writes demonstrations
- Suction config → Playback entry: configures playback
- Saved models → Data and model I/O: loads model
- Playback entry → Data and model I/O: loads model
- Playback entry → Place selection: selects place trajectory
- Playback entry → Simulator client: dispatches trajectory
- Simulator client → CoppeliaSim: controls simulation
- Robot engineer → Suction scene setup: creates scene
- Suction scene setup → CoppeliaSim: edits scene
- Suction scene setup → Suction simulation scene: produces scene
- Report figures → Runtime config: reads configuration
