# hucebot/seiko_controller_code architecture

> Architecture diagram of the GitHub repository hucebot/seiko_controller_code, 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/hucebot/seiko_controller_code
- Repository: https://github.com/hucebot/seiko_controller_code

## Overview

SEIKO is a Talos whole-body, multi-contact controller for position-controlled robots. The principal workflow runs a 500 Hz task that processes Cartesian commands and contact changes, retargets motion, estimates contact wrenches, and solves the SEIKO controller optimization; its commands pass to a 2 kHz ROS_Control layer for interpolation, safety checks, and hardware output. The graph reflects documented subsystem responsibilities and sampled calls; some internal wiring is not visible in the excerpts.

Main entry points: [`inria_controller/src/TaskSEIKO.cpp`](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/TaskSEIKO.cpp) (SEIKO task pipeline), [`inria_controller/src/ControllerBase.cpp`](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ControllerBase.cpp) (ROS low-level control), [`inria_model/src/Model.cpp`](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/Model.cpp) (Robot model), [`inria_controller/src/ControllerTalos.cpp`](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ControllerTalos.cpp) (Talos controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime control"]
  node_lowlevel["ROS low-level control<br/>[ControllerBase.cpp]"]
  node_taloscontrol["Talos controller"]
  node_thread["Task thread manager<br/>[ThreadManager.cpp]"]
  node_task["SEIKO task pipeline<br/>[TaskSEIKO.cpp]"]
end

subgraph group_optimization["SEIKO optimization"]
  node_retargetwrapper["Retargeting wrapper<br/>[SEIKOWrapper.cpp]"]
  node_retarget["SEIKO retargeting"]
  node_talosparams["Talos retargeting config<br/>[SEIKOTalos.cpp]"]
  node_qp["SEIKO controller QP"]
end

subgraph group_robotmodel["Robot model"]
  node_description["Talos description"]
  node_model["Robot model<br/>[Model.cpp]"]
  node_pinocchio["Pinocchio interface"]
end

subgraph group_support["Math and utilities"]
  node_maths["Pose processing"]
  node_filters["Command and state filters"]
  node_trajectory["Motion trajectories"]
end

node_operator(("Operator"))
node_rhio["RhIO interface"]
node_robot["Talos hardware"]

node_operator -->|"sends commands"| node_rhio
node_rhio -->|"provides commands"| node_task
node_task -->|"processes targets"| node_retargetwrapper
node_retargetwrapper -->|"updates contacts"| node_retarget
node_task -->|"solves control"| node_qp
node_task -->|"updates state"| node_model
node_task -->|"processes poses"| node_maths
node_task -->|"filters estimates"| node_filters
node_task -->|"generates motion"| node_trajectory
node_task -->|"configures retargeting"| node_talosparams
node_qp -->|"reads kinematics"| node_model
node_qp -->|"uses derivatives"| node_pinocchio
node_model -.->|"loads robot model"| node_description
node_lowlevel -->|"updates state"| node_model
node_lowlevel -->|"exchanges state and commands"| node_thread
node_taloscontrol -->|"starts task thread"| node_thread
node_taloscontrol -->|"selects SEIKO task"| node_task
node_robot -->|"provides sensor state"| node_lowlevel
node_lowlevel -->|"sends joint commands"| node_robot
node_taloscontrol -->|"publishes monitoring"| node_rhio
node_task -->|"exposes task controls"| node_rhio

click node_description "https://github.com/hucebot/seiko_controller_code/tree/main/inria_talos_description"
click node_lowlevel "https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ControllerBase.cpp"
click node_taloscontrol "https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ControllerTalos.cpp"
click node_thread "https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ThreadManager.cpp"
click node_task "https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/TaskSEIKO.cpp"
click node_retargetwrapper "https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKOWrapper.cpp"
click node_retarget "https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKORetargeting.cpp"
click node_talosparams "https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKOTalos.cpp"
click node_qp "https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKOController.cpp"
click node_model "https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/Model.cpp"
click node_pinocchio "https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/PinocchioInterface.cpp"
click node_maths "https://github.com/hucebot/seiko_controller_code/blob/main/inria_maths/src/PoseCommandProcessing.cpp"
click node_filters "https://github.com/hucebot/seiko_controller_code/blob/main/inria_maths/include/inria_maths/FilterExponential.hpp"
click node_trajectory "https://github.com/hucebot/seiko_controller_code/blob/main/inria_maths/src/TrajectoryBangBangAcc.cpp"

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_lowlevel,node_taloscontrol,node_thread,node_task toneBlue
class node_retargetwrapper,node_retarget,node_talosparams,node_qp toneAmber
class node_description,node_model,node_pinocchio toneMint
class node_maths,node_filters,node_trajectory toneRose
class node_operator,node_rhio,node_robot toneIndigo
```

## Components

### Runtime control

- [ROS low-level control](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ControllerBase.cpp): `inria_controller/src/ControllerBase.cpp`
- [Talos controller](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ControllerTalos.cpp): `inria_controller/src/ControllerTalos.cpp`
- [Task thread manager](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/ThreadManager.cpp): `inria_controller/src/ThreadManager.cpp`
- [SEIKO task pipeline](https://github.com/hucebot/seiko_controller_code/blob/main/inria_controller/src/TaskSEIKO.cpp): `inria_controller/src/TaskSEIKO.cpp`

### SEIKO optimization

- [Retargeting wrapper](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKOWrapper.cpp): `inria_model/src/SEIKOWrapper.cpp`
- [SEIKO retargeting](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKORetargeting.cpp): `inria_model/src/SEIKORetargeting.cpp`
- [Talos retargeting config](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKOTalos.cpp): `inria_model/src/SEIKOTalos.cpp`
- [SEIKO controller QP](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/SEIKOController.cpp): `inria_model/src/SEIKOController.cpp`

### Robot model

- [Talos description](https://github.com/hucebot/seiko_controller_code/tree/main/inria_talos_description): `inria_talos_description`
- [Robot model](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/Model.cpp): `inria_model/src/Model.cpp`
- [Pinocchio interface](https://github.com/hucebot/seiko_controller_code/blob/main/inria_model/src/PinocchioInterface.cpp): `inria_model/src/PinocchioInterface.cpp`

### Math and utilities

- [Pose processing](https://github.com/hucebot/seiko_controller_code/blob/main/inria_maths/src/PoseCommandProcessing.cpp): `inria_maths/src/PoseCommandProcessing.cpp`
- [Command and state filters](https://github.com/hucebot/seiko_controller_code/blob/main/inria_maths/include/inria_maths/FilterExponential.hpp): `inria_maths/include/inria_maths/FilterExponential.hpp`
- [Motion trajectories](https://github.com/hucebot/seiko_controller_code/blob/main/inria_maths/src/TrajectoryBangBangAcc.cpp): `inria_maths/src/TrajectoryBangBangAcc.cpp`

### Other components

- **Operator**
- **RhIO interface**
- **Talos hardware**

## Connections

- Operator → RhIO interface: sends commands
- RhIO interface → SEIKO task pipeline: provides commands
- SEIKO task pipeline → Retargeting wrapper: processes targets
- Retargeting wrapper → SEIKO retargeting: updates contacts
- SEIKO task pipeline → SEIKO controller QP: solves control
- SEIKO task pipeline → Robot model: updates state
- SEIKO task pipeline → Pose processing: processes poses
- SEIKO task pipeline → Command and state filters: filters estimates
- SEIKO task pipeline → Motion trajectories: generates motion
- SEIKO task pipeline → Talos retargeting config: configures retargeting
- SEIKO controller QP → Robot model: reads kinematics
- SEIKO controller QP → Pinocchio interface: uses derivatives
- Robot model → Talos description: loads robot model
- ROS low-level control → Robot model: updates state
- ROS low-level control → Task thread manager: exchanges state and commands
- Talos controller → Task thread manager: starts task thread
- Talos controller → SEIKO task pipeline: selects SEIKO task
- Talos hardware → ROS low-level control: provides sensor state
- ROS low-level control → Talos hardware: sends joint commands
- Talos controller → RhIO interface: publishes monitoring
- SEIKO task pipeline → RhIO interface: exposes task controls
