# shm-white/skywalker_general_embedded_code architecture

> Architecture diagram of the GitHub repository shm-white/skywalker_general_embedded_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/shm-white/skywalker_general_embedded_code
- Repository: https://github.com/shm-white/skywalker_general_embedded_code

## Overview

SkyWalker is a Zephyr-based robot-control framework, with paired sentry chassis and gimbal application skeletons as its principal integrated workflow. Operator input and referee state feed command and global-safety decisions on the gimbal controller; commands cross the interboard link to locally guarded chassis and gimbal motion, with feedback and heartbeats returning across the link. The README also documents reusable DJI/DM motor, IMU, control, referee, DR16, and swerve capabilities. Application excerpts establish the main task ownership; unsampled subsystem wiring is shown only where documented.

Main entry points: [`applications/sentry_gimbal/src/main.cpp`](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_gimbal/src/main.cpp) (Gimbal application), [`lib/communication/interboard_link.cpp`](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/interboard_link.cpp) (Interboard link), [`applications/sentry_chassis/src/main.cpp`](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_chassis/src/main.cpp) (Chassis application), [`drivers/motor/can_bus.cpp`](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/can_bus.cpp) (CAN bus)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["Sentry Applications"]
  node_gimbal_app["Gimbal application<br/>[main.cpp]"]
  node_chassis_app["Chassis application<br/>[main.cpp]"]
  node_router["Command router<br/>[command_router.cpp]"]
  node_hardware["Chassis hardware"]
end

subgraph group_comms["Communications"]
  node_remote["DR16 service<br/>[remote.cpp]"]
  node_referee["Referee service<br/>[referee.cpp]"]
  node_interboard["Interboard link"]
  node_parser["Frame parser"]
end

subgraph group_robotics["Robot Decisions"]
  node_global_safety["Global safety<br/>[safety.cpp]"]
  node_command["Command management<br/>[command.cpp]"]
  node_local_safety["Local safety"]
  node_power["Power limiter"]
  node_swerve["Swerve chassis<br/>[swerve.cpp]"]
  node_yaw["Yaw gimbal<br/>[yaw_gimbal.cpp]"]
end

subgraph group_motion["Motion and Control"]
  node_control["Control algorithms"]
  node_motor_api["Motor API<br/>[motor.cpp]"]
  node_motor_group["Motor groups<br/>[group.cpp]"]
end

subgraph group_drivers["Hardware Drivers"]
  node_can_bus["CAN bus<br/>[can_bus.cpp]"]
  node_dji["DJI protocol<br/>[dji_protocol.cpp]"]
  node_dm["DM protocol<br/>[dm_protocol.cpp]"]
  node_imu["BMI088 IMU<br/>[imu.c]"]
  node_kalman["Kalman filter<br/>[kalman_filter.c]"]
end

node_operator(("Operator"))
node_referee_unit(("Referee system"))
node_motors(("CAN motors"))
node_imu_sensor(("IMU sensor"))

node_operator -->|"sends frames"| node_remote
node_remote -->|"publishes state"| node_gimbal_app
node_referee_unit -->|"sends frames"| node_referee
node_referee -->|"publishes state"| node_gimbal_app
node_gimbal_app -->|"maps intent"| node_command
node_gimbal_app -->|"evaluates inputs"| node_global_safety
node_command -->|"produces commands"| node_gimbal_app
node_global_safety -->|"returns decisions"| node_gimbal_app
node_gimbal_app -->|"routes output"| node_router
node_router -->|"publishes local command"| node_gimbal_app
node_router -->|"publishes chassis control"| node_interboard
node_interboard -->|"parses frames"| node_parser
node_parser -->|"delivers frames"| node_interboard
node_gimbal_app -->|"sends heartbeat"| node_interboard
node_interboard -->|"delivers control"| node_chassis_app
node_chassis_app -->|"sends feedback"| node_interboard
node_interboard -->|"delivers feedback"| node_gimbal_app
node_chassis_app -->|"checks motion"| node_local_safety
node_chassis_app -->|"limits effort"| node_power
node_chassis_app -->|"commands hardware"| node_hardware
node_hardware -->|"runs chassis"| node_swerve
node_gimbal_app -->|"commands yaw"| node_yaw
node_yaw -->|"uses control"| node_control
node_motor_api -->|"applies targets"| node_control
node_motor_api -->|"checks group"| node_motor_group
node_can_bus -->|"updates motors"| node_motor_api
node_can_bus -->|"encodes and decodes"| node_dji
node_can_bus -->|"encodes and decodes"| node_dm
node_motors -->|"exchanges CAN"| node_can_bus
node_imu_sensor -->|"provides samples"| node_imu
node_imu -->|"filters estimates"| node_kalman
node_swerve -->|"uses algorithms"| node_control

click node_gimbal_app "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_gimbal/src/main.cpp"
click node_chassis_app "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_chassis/src/main.cpp"
click node_router "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_gimbal/src/command_router.cpp"
click node_hardware "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_chassis/src/chassis_hardware.cpp"
click node_remote "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/remote.cpp"
click node_referee "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/referee.cpp"
click node_interboard "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/interboard_link.cpp"
click node_parser "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/interboard_parser.cpp"
click node_global_safety "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/safety.cpp"
click node_command "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/command.cpp"
click node_local_safety "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/include/robotics/safety/chassis_local_safety.hpp"
click node_power "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/chassis_power_limiter.cpp"
click node_swerve "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/swerve.cpp"
click node_yaw "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/yaw_gimbal.cpp"
click node_control "https://github.com/shm-white/skywalker_general_embedded_code/tree/main/lib/control"
click node_motor_api "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/motor.cpp"
click node_motor_group "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/group.cpp"
click node_can_bus "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/can_bus.cpp"
click node_dji "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/dji/dji_protocol.cpp"
click node_dm "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/dm/dm_protocol.cpp"
click node_imu "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/imu/imu.c"
click node_kalman "https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/kalman_filter/kalman_filter.c"

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_gimbal_app,node_chassis_app,node_router,node_hardware toneBlue
class node_remote,node_referee,node_interboard,node_parser toneAmber
class node_global_safety,node_command,node_local_safety,node_power,node_swerve,node_yaw toneMint
class node_control,node_motor_api,node_motor_group toneRose
class node_can_bus,node_dji,node_dm,node_imu,node_kalman,node_operator,node_referee_unit,node_motors,node_imu_sensor toneIndigo
```

## Components

### Sentry Applications

- [Gimbal application](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_gimbal/src/main.cpp): `applications/sentry_gimbal/src/main.cpp`
- [Chassis application](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_chassis/src/main.cpp): `applications/sentry_chassis/src/main.cpp`
- [Command router](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_gimbal/src/command_router.cpp): `applications/sentry_gimbal/src/command_router.cpp`
- [Chassis hardware](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/applications/sentry_chassis/src/chassis_hardware.cpp): `applications/sentry_chassis/src/chassis_hardware.cpp`

### Communications

- [DR16 service](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/remote.cpp): `lib/communication/remote.cpp`
- [Referee service](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/referee.cpp): `lib/communication/referee.cpp`
- [Interboard link](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/interboard_link.cpp): `lib/communication/interboard_link.cpp`
- [Frame parser](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/communication/interboard_parser.cpp): `lib/communication/interboard_parser.cpp`

### Robot Decisions

- [Global safety](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/safety.cpp): `lib/robotics/safety.cpp`
- [Command management](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/command.cpp): `lib/robotics/command.cpp`
- [Local safety](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/include/robotics/safety/chassis_local_safety.hpp): `include/robotics/safety/chassis_local_safety.hpp`
- [Power limiter](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/chassis_power_limiter.cpp): `lib/robotics/chassis_power_limiter.cpp`
- [Swerve chassis](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/swerve.cpp): `lib/robotics/swerve.cpp`
- [Yaw gimbal](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/lib/robotics/yaw_gimbal.cpp): `lib/robotics/yaw_gimbal.cpp`

### Motion and Control

- [Control algorithms](https://github.com/shm-white/skywalker_general_embedded_code/tree/main/lib/control): `lib/control`
- [Motor API](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/motor.cpp): `drivers/motor/motor.cpp`
- [Motor groups](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/group.cpp): `drivers/motor/group.cpp`

### Hardware Drivers

- [CAN bus](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/can_bus.cpp): `drivers/motor/can_bus.cpp`
- [DJI protocol](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/dji/dji_protocol.cpp): `drivers/motor/dji/dji_protocol.cpp`
- [DM protocol](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/motor/dm/dm_protocol.cpp): `drivers/motor/dm/dm_protocol.cpp`
- [BMI088 IMU](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/imu/imu.c): `drivers/imu/imu.c`
- [Kalman filter](https://github.com/shm-white/skywalker_general_embedded_code/blob/main/drivers/kalman_filter/kalman_filter.c): `drivers/kalman_filter/kalman_filter.c`

### Other components

- **Operator**
- **Referee system**
- **CAN motors**
- **IMU sensor**

## Connections

- Operator → DR16 service: sends frames
- DR16 service → Gimbal application: publishes state
- Referee system → Referee service: sends frames
- Referee service → Gimbal application: publishes state
- Gimbal application → Command management: maps intent
- Gimbal application → Global safety: evaluates inputs
- Command management → Gimbal application: produces commands
- Global safety → Gimbal application: returns decisions
- Gimbal application → Command router: routes output
- Command router → Gimbal application: publishes local command
- Command router → Interboard link: publishes chassis control
- Interboard link → Frame parser: parses frames
- Frame parser → Interboard link: delivers frames
- Gimbal application → Interboard link: sends heartbeat
- Interboard link → Chassis application: delivers control
- Chassis application → Interboard link: sends feedback
- Interboard link → Gimbal application: delivers feedback
- Chassis application → Local safety: checks motion
- Chassis application → Power limiter: limits effort
- Chassis application → Chassis hardware: commands hardware
- Chassis hardware → Swerve chassis: runs chassis
- Gimbal application → Yaw gimbal: commands yaw
- Yaw gimbal → Control algorithms: uses control
- Motor API → Control algorithms: applies targets
- Motor API → Motor groups: checks group
- CAN bus → Motor API: updates motors
- CAN bus → DJI protocol: encodes and decodes
- CAN bus → DM protocol: encodes and decodes
- CAN motors → CAN bus: exchanges CAN
- IMU sensor → BMI088 IMU: provides samples
- BMI088 IMU → Kalman filter: filters estimates
- Swerve chassis → Control algorithms: uses algorithms
