# Software
The robot runs two separate processes on two custom PCBs.
| Process | Board |
|---------|-------|
| [Asimov Firmware](https://github.com/asimovinc/asimov-firmware) | [Motion Control Board](../hardware/specs/the-brains) (ARM64) |
| [Asimov Manager](https://github.com/asimovinc/asimov-manager) | [Perception and Network Controller](../hardware/specs/the-brains) (x86) |
They talk [nanopb](https://github.com/nanopb/nanopb) over UDP:
```{mermaid}
flowchart LR
subgraph pnc["Perception & Network Controller"]
manager["Asimov Manager
Cameras, Audio, Net"]
end
subgraph mcb["Motion Control Board"]
firmware["Asimov Firmware
Motors, IMU, RL Policy"]
end
manager -->|"UDP :8888
Commands"| firmware
firmware -->|"UDP :8889
State"| manager
```
- **Port 8888**: Commands (manager → firmware)
- **Port 8889**: State (firmware → manager)
```{toctree}
:maxdepth: 2
firmware/index
manager/index
```