# cheng695/engineer_arm architecture

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

## Overview

This is a ROS 2 robot-arm stack: users issue enable, mode, joint, Cartesian, pause, or named-target commands; the control manager changes controller state and, for named targets, submits a joint trajectory. Controllers turn motion requests and joint feedback into ros2_control interface commands, while hardware packages provide real, simulated, and mock backends. MoveIt configuration and robot descriptions support planning and visualization. README content was not supplied, and most hardware, launch, and MoveIt implementation was not sampled, so those connections are shown only where supported by the tree or excerpts.

Main entry points: [`src/my_robot_control_manager/src/control_mode_manager.cpp`](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_control_manager/src/control_mode_manager.cpp) (Control mode manager), [`src/arm_hardware_interface/src/arm_hardware_base.cpp`](https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/arm_hardware_base.cpp) (Hardware interface base), [`src/my_robot_controllers/src/dls/dls_cartesian_controller.cpp`](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/dls/dls_cartesian_controller.cpp) (Cartesian controller), [`src/my_robot_controllers/src/joint/joint_command_controller.cpp`](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/joint/joint_command_controller.cpp) (Joint command controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_commands["Command and orchestration"]
  node_manager["Control mode manager"]
  node_fsm["Control state FSM<br/>[control_fsm.cpp]"]
  node_commander["C++ commander example"]
end

subgraph group_control["Arm control"]
  node_dls["Cartesian controller"]
  node_joint_controller["Joint command controller"]
  node_gravity["Gravity compensation"]
  node_hold["Hold controller"]
end

subgraph group_hardware["Hardware backends"]
  node_hardware_base["Hardware interface base"]
  node_real_hw["Real arm backend"]
  node_mujoco_hw["MuJoCo backend"]
  node_mock_hw["Mock backend"]
  node_can["CAN motor transport"]
end

subgraph group_robot["Robot configuration"]
  node_descriptions["Robot descriptions"]
  node_moveit["MoveIt planning config"]
  node_bringup["Robot bringup<br/>[robot.launch.py]"]
end

node_operator(("Robot user"))
node_controller_manager["ros2_control manager"]
node_trajectory_action["Trajectory action server"]
node_joint_states["Joint state stream"]

node_operator -->|"sends commands"| node_manager
node_manager -->|"dispatches events"| node_fsm
node_manager -->|"queries and switches"| node_controller_manager
node_manager -->|"submits trajectories"| node_trajectory_action
node_joint_states -->|"updates positions"| node_manager
node_manager -->|"publishes Cartesian commands"| node_dls
node_manager -->|"publishes joint commands"| node_joint_controller
node_controller_manager -->|"activates controller"| node_dls
node_controller_manager -->|"activates controller"| node_joint_controller
node_controller_manager -->|"activates controller"| node_gravity
node_controller_manager -->|"activates controller"| node_hold
node_dls -->|"writes position commands"| node_hardware_base
node_joint_controller -->|"writes position commands"| node_hardware_base
node_gravity -->|"writes effort commands"| node_hardware_base
node_hold -->|"writes hold positions"| node_hardware_base
node_real_hw -->|"implements backend"| node_hardware_base
node_mujoco_hw -->|"implements backend"| node_hardware_base
node_mock_hw -->|"implements backend"| node_hardware_base
node_real_hw -.->|"uses CAN transport"| node_can
node_bringup -->|"loads robot model"| node_descriptions
node_moveit -->|"configures planning model"| node_descriptions
node_commander -.->|"issues ROS commands"| node_manager

click node_manager "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_control_manager/src/control_mode_manager.cpp"
click node_fsm "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_control_manager/src/control_fsm.cpp"
click node_dls "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/dls/dls_cartesian_controller.cpp"
click node_joint_controller "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/joint/joint_command_controller.cpp"
click node_gravity "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/gravity/gravity_compensation_controller.cpp"
click node_hold "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/hold/hold_controller.cpp"
click node_hardware_base "https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/arm_hardware_base.cpp"
click node_real_hw "https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/real_arm_hardware_interface.cpp"
click node_mujoco_hw "https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/mujoco_arm_hardware_interface.cpp"
click node_mock_hw "https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/mock_arm_hardware_interface.cpp"
click node_descriptions "https://github.com/cheng695/engineer_arm/tree/main/src/my_robot_description"
click node_moveit "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_moveit_config/launch/move_group.launch.py"
click node_bringup "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_bringup/launch/robot.launch.py"
click node_commander "https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_commander_cpp/src/commander_template.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_manager,node_fsm,node_commander,node_operator toneBlue
class node_dls,node_joint_controller,node_gravity,node_hold toneAmber
class node_hardware_base,node_real_hw,node_mujoco_hw,node_mock_hw,node_can,node_trajectory_action toneMint
class node_descriptions,node_moveit,node_bringup toneRose
class node_controller_manager,node_joint_states toneIndigo
```

## Components

### Command and orchestration

- [Control mode manager](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_control_manager/src/control_mode_manager.cpp): `src/my_robot_control_manager/src/control_mode_manager.cpp`
- [Control state FSM](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_control_manager/src/control_fsm.cpp): `src/my_robot_control_manager/src/control_fsm.cpp`
- [C++ commander example](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_commander_cpp/src/commander_template.cpp): `src/my_robot_commander_cpp/src/commander_template.cpp`

### Arm control

- [Cartesian controller](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/dls/dls_cartesian_controller.cpp): `src/my_robot_controllers/src/dls/dls_cartesian_controller.cpp`
- [Joint command controller](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/joint/joint_command_controller.cpp): `src/my_robot_controllers/src/joint/joint_command_controller.cpp`
- [Gravity compensation](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/gravity/gravity_compensation_controller.cpp): `src/my_robot_controllers/src/gravity/gravity_compensation_controller.cpp`
- [Hold controller](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_controllers/src/hold/hold_controller.cpp): `src/my_robot_controllers/src/hold/hold_controller.cpp`

### Hardware backends

- [Hardware interface base](https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/arm_hardware_base.cpp): `src/arm_hardware_interface/src/arm_hardware_base.cpp`
- [Real arm backend](https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/real_arm_hardware_interface.cpp): `src/arm_hardware_interface/src/real_arm_hardware_interface.cpp`
- [MuJoCo backend](https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/mujoco_arm_hardware_interface.cpp): `src/arm_hardware_interface/src/mujoco_arm_hardware_interface.cpp`
- [Mock backend](https://github.com/cheng695/engineer_arm/blob/main/src/arm_hardware_interface/src/mock_arm_hardware_interface.cpp): `src/arm_hardware_interface/src/mock_arm_hardware_interface.cpp`
- **CAN motor transport**

### Robot configuration

- [Robot descriptions](https://github.com/cheng695/engineer_arm/tree/main/src/my_robot_description): `src/my_robot_description`
- [MoveIt planning config](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_moveit_config/launch/move_group.launch.py): `src/my_robot_moveit_config/launch/move_group.launch.py`
- [Robot bringup](https://github.com/cheng695/engineer_arm/blob/main/src/my_robot_bringup/launch/robot.launch.py): `src/my_robot_bringup/launch/robot.launch.py`

### Other components

- **Robot user**
- **ros2_control manager**
- **Trajectory action server**
- **Joint state stream**

## Connections

- Robot user → Control mode manager: sends commands
- Control mode manager → Control state FSM: dispatches events
- Control mode manager → ros2_control manager: queries and switches
- Control mode manager → Trajectory action server: submits trajectories
- Joint state stream → Control mode manager: updates positions
- Control mode manager → Cartesian controller: publishes Cartesian commands
- Control mode manager → Joint command controller: publishes joint commands
- ros2_control manager → Cartesian controller: activates controller
- ros2_control manager → Joint command controller: activates controller
- ros2_control manager → Gravity compensation: activates controller
- ros2_control manager → Hold controller: activates controller
- Cartesian controller → Hardware interface base: writes position commands
- Joint command controller → Hardware interface base: writes position commands
- Gravity compensation → Hardware interface base: writes effort commands
- Hold controller → Hardware interface base: writes hold positions
- Real arm backend → Hardware interface base: implements backend
- MuJoCo backend → Hardware interface base: implements backend
- Mock backend → Hardware interface base: implements backend
- Real arm backend → CAN motor transport: uses CAN transport
- Robot bringup → Robot descriptions: loads robot model
- MoveIt planning config → Robot descriptions: configures planning model
- C++ commander example → Control mode manager: issues ROS commands
