# 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 ```