# lyz1202dt/atnewroboticarm architecture

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

## Overview

RoboticArm is a ROS 2/ros2_control system for controlling a six-joint arm in MuJoCo or on physical hardware, with an offline dynamics-identification workflow. The main loop sends joint state through ArmController and its FSM to motion/model calculations, then dispatches commands through either simulation PID or the USB CDC interface. Additional branches cover MuJoCo sensors and visualization, and measurement-to-identification-to-URDF output. Runtime links follow the README and sampled sources; unsampled subsystem details and ROS control-manager wiring are shown only where documented.

Main entry points: [`src/arm_controller/arm/arm_fsm.cpp`](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/arm_fsm.cpp) (Arm FSM states), [`src/parameter_identify/parameter_identify/identify_arm.py`](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/identify_arm.py) (Offline identification), [`src/arm_controller/controller/src/controller.cpp`](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/controller.cpp) (ArmController), [`src/mujoco_ros2_control/src/mujoco_system.cpp`](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_system.cpp) (MuJoCo system)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["Arm control"]
  node_arm_controller["ArmController<br/>[controller.cpp]"]
  node_fsm_factory["FSM factory"]
  node_arm_fsm["Arm FSM states<br/>[arm_fsm.cpp]"]
end

subgraph group_calculation["Model and motion"]
  node_task_mapping["Task mapping"]
  node_arm_solve["ArmSolve<br/>[arm.cpp]"]
  node_kinematics["Kinematics<br/>[kinamic.cpp]"]
  node_trajectory["Trajectory tools<br/>[trajectory.cpp]"]
  node_urdf_model["URDF model"]
end

subgraph group_hardware["Hardware and simulation"]
  node_sim_pid["Simulation PID"]
  node_mujoco_system["MuJoCo system<br/>[mujoco_system.cpp]"]
  node_mujoco_engine["MuJoCo engine"]
  node_mujoco_sensors["MuJoCo sensors"]
  node_depth_camera["Depth camera"]
  node_mujoco_viz["Simulation visualization"]
  node_sim_gui["Simulation GUI<br/>[simulate_gui.cpp]"]
  node_real_interface["Real hardware interface"]
  node_cdc["USB CDC transport<br/>[cdc_trans.cpp]"]
end

subgraph group_identification["Parameter identification"]
  node_measured_csv["Measurement CSV"]
  node_excitation["Excitation trajectory"]
  node_offline_identify["Offline identification<br/>[identify_arm.py]"]
  node_csv_loader["CSV loader<br/>[csv_loader.py]"]
  node_figaroh["FIGAROH integration<br/>[vendor.py]"]
  node_urdf_writer["URDF writer<br/>[urdf_writer.py]"]
  node_identified_urdf["Identified URDF"]
end

node_operator(("ROS operator"))
node_arm_description["Arm description"]
node_mcu["Arm MCU"]

node_operator -->|"sets state"| node_arm_controller
node_arm_controller -->|"drives FSM"| node_fsm_factory
node_fsm_factory -->|"dispatches states"| node_arm_fsm
node_arm_fsm -->|"generates motion"| node_trajectory
node_arm_fsm -->|"requests solve"| node_arm_solve
node_arm_fsm -->|"requests dynamics"| node_urdf_model
node_arm_solve -->|"uses solver"| node_kinematics
node_arm_solve -->|"maps tasks"| node_task_mapping
node_urdf_model -->|"loads model"| node_arm_description
node_arm_controller -->|"reference commands"| node_sim_pid
node_sim_pid -->|"effort commands"| node_mujoco_system
node_mujoco_system -->|"reads and steps"| node_mujoco_engine
node_mujoco_engine -->|"simulation state"| node_mujoco_system
node_mujoco_system -->|"supplies simulation"| node_mujoco_sensors
node_mujoco_engine -->|"renders camera data"| node_depth_camera
node_mujoco_engine -->|"renders scene"| node_mujoco_viz
node_mujoco_engine -->|"provides simulation"| node_sim_gui
node_arm_controller -->|"reference commands"| node_real_interface
node_real_interface -->|"sends and receives"| node_cdc
node_cdc -->|"USB CDC packets"| node_mcu
node_mcu -->|"state packets"| node_cdc
node_arm_fsm -->|"optimizes excitation"| node_excitation
node_arm_fsm -->|"records measurements"| node_measured_csv
node_measured_csv -->|"identification input"| node_offline_identify
node_arm_description -->|"input model"| node_offline_identify
node_offline_identify -->|"loads measurements"| node_csv_loader
node_offline_identify -->|"identifies parameters"| node_figaroh
node_offline_identify -->|"writes model"| node_urdf_writer
node_urdf_writer -->|"outputs URDF"| node_identified_urdf

click node_arm_controller "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/controller.cpp"
click node_fsm_factory "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/arm_fsm_factory.hpp"
click node_arm_fsm "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/arm_fsm.cpp"
click node_task_mapping "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/default6dof_task.cpp"
click node_arm_solve "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/calculate/arm.cpp"
click node_kinematics "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/calculate/kinamic.cpp"
click node_trajectory "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/calculate/trajectory.cpp"
click node_urdf_model "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/model_from_urdf.cpp"
click node_arm_description "https://github.com/lyz1202dt/atnewroboticarm/tree/main/src/arm_model"
click node_sim_pid "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/sim_pid_controller.cpp"
click node_mujoco_system "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_system.cpp"
click node_mujoco_sensors "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_ros2_sensors.cpp"
click node_depth_camera "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_depth_camera.cpp"
click node_mujoco_viz "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_visualization.cpp"
click node_sim_gui "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/simulate_gui.cpp"
click node_real_interface "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/arm_real_interfaces.cpp"
click node_cdc "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/cdc_trans/cdc_trans.cpp"
click node_excitation "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/paramter_identify/excitation_trajectory.cpp"
click node_offline_identify "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/identify_arm.py"
click node_csv_loader "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/csv_loader.py"
click node_figaroh "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/vendor.py"
click node_urdf_writer "https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/urdf_writer.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_arm_controller,node_fsm_factory,node_arm_fsm toneBlue
class node_task_mapping,node_arm_solve,node_kinematics,node_trajectory,node_urdf_model toneAmber
class node_sim_pid,node_mujoco_system,node_mujoco_engine,node_mujoco_sensors,node_depth_camera,node_mujoco_viz,node_sim_gui,node_real_interface,node_cdc toneMint
class node_measured_csv,node_excitation,node_offline_identify,node_csv_loader,node_figaroh,node_urdf_writer,node_identified_urdf toneRose
class node_operator,node_mcu toneIndigo
class node_arm_description toneTeal
```

## Components

### Arm control

- [ArmController](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/controller.cpp): `src/arm_controller/controller/src/controller.cpp`
- [FSM factory](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/arm_fsm_factory.hpp): `src/arm_controller/arm/arm_fsm_factory.hpp`
- [Arm FSM states](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/arm_fsm.cpp): `src/arm_controller/arm/arm_fsm.cpp`

### Model and motion

- [Task mapping](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/default6dof_task.cpp): `src/arm_controller/arm/default6dof_task.cpp`
- [ArmSolve](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/calculate/arm.cpp): `src/arm_controller/lib/calculate/arm.cpp`
- [Kinematics](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/calculate/kinamic.cpp): `src/arm_controller/lib/calculate/kinamic.cpp`
- [Trajectory tools](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/calculate/trajectory.cpp): `src/arm_controller/lib/calculate/trajectory.cpp`
- [URDF model](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/arm/model_from_urdf.cpp): `src/arm_controller/arm/model_from_urdf.cpp`

### Hardware and simulation

- [Simulation PID](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/sim_pid_controller.cpp): `src/arm_controller/controller/src/sim_pid_controller.cpp`
- [MuJoCo system](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_system.cpp): `src/mujoco_ros2_control/src/mujoco_system.cpp`
- **MuJoCo engine**
- [MuJoCo sensors](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_ros2_sensors.cpp): `src/mujoco_ros2_control/src/mujoco_ros2_sensors.cpp`
- [Depth camera](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_depth_camera.cpp): `src/mujoco_ros2_control/src/mujoco_depth_camera.cpp`
- [Simulation visualization](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/mujoco_visualization.cpp): `src/mujoco_ros2_control/src/mujoco_visualization.cpp`
- [Simulation GUI](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/mujoco_ros2_control/src/simulate_gui.cpp): `src/mujoco_ros2_control/src/simulate_gui.cpp`
- [Real hardware interface](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/controller/src/arm_real_interfaces.cpp): `src/arm_controller/controller/src/arm_real_interfaces.cpp`
- [USB CDC transport](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/cdc_trans/cdc_trans.cpp): `src/arm_controller/lib/cdc_trans/cdc_trans.cpp`

### Parameter identification

- **Measurement CSV**
- [Excitation trajectory](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/arm_controller/lib/paramter_identify/excitation_trajectory.cpp): `src/arm_controller/lib/paramter_identify/excitation_trajectory.cpp`
- [Offline identification](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/identify_arm.py): `src/parameter_identify/parameter_identify/identify_arm.py`
- [CSV loader](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/csv_loader.py): `src/parameter_identify/parameter_identify/csv_loader.py`
- [FIGAROH integration](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/vendor.py): `src/parameter_identify/parameter_identify/vendor.py`
- [URDF writer](https://github.com/lyz1202dt/atnewroboticarm/blob/main/src/parameter_identify/parameter_identify/urdf_writer.py): `src/parameter_identify/parameter_identify/urdf_writer.py`
- **Identified URDF**

### Other components

- **ROS operator**
- [Arm description](https://github.com/lyz1202dt/atnewroboticarm/tree/main/src/arm_model): `src/arm_model`
- **Arm MCU**

## Connections

- ROS operator → ArmController: sets state
- ArmController → FSM factory: drives FSM
- FSM factory → Arm FSM states: dispatches states
- Arm FSM states → Trajectory tools: generates motion
- Arm FSM states → ArmSolve: requests solve
- Arm FSM states → URDF model: requests dynamics
- ArmSolve → Kinematics: uses solver
- ArmSolve → Task mapping: maps tasks
- URDF model → Arm description: loads model
- ArmController → Simulation PID: reference commands
- Simulation PID → MuJoCo system: effort commands
- MuJoCo system → MuJoCo engine: reads and steps
- MuJoCo engine → MuJoCo system: simulation state
- MuJoCo system → MuJoCo sensors: supplies simulation
- MuJoCo engine → Depth camera: renders camera data
- MuJoCo engine → Simulation visualization: renders scene
- MuJoCo engine → Simulation GUI: provides simulation
- ArmController → Real hardware interface: reference commands
- Real hardware interface → USB CDC transport: sends and receives
- USB CDC transport → Arm MCU: USB CDC packets
- Arm MCU → USB CDC transport: state packets
- Arm FSM states → Excitation trajectory: optimizes excitation
- Arm FSM states → Measurement CSV: records measurements
- Measurement CSV → Offline identification: identification input
- Arm description → Offline identification: input model
- Offline identification → CSV loader: loads measurements
- Offline identification → FIGAROH integration: identifies parameters
- Offline identification → URDF writer: writes model
- URDF writer → Identified URDF: outputs URDF
