Mission Statement¶
The Kiwi Robot is a mobile robot with a kiwi drive: three motors with omni wheels, mounted at 120° to each other. Every capability spec of every artifact builds on this document and adds only what is specific to it.
Subsystems¶
- The Superordinate Controller, a Raspberry Pi, decides what the robot does. It collects the data of the other subsystems and of high-bandwidth sensors connected to it directly, computes the kinematics, and commands the other subsystems, for example to steer around an obstacle. It is the superordinate control layer of the robot and may grow into several programs, each with its own responsibility; the Superordinate Controller artifact is the first of them.
- The Drive moves the robot. It receives target speeds for its three motors.
- Battery management and distance sensors report to the Superordinate Controller.
The communication scheme shows how the subsystems are connected.
Principles¶
- One bus. The subsystems communicate over one CAN bus: Classic CAN 2.0B with 29-bit identifiers at 1 Mbps, no CAN FD frames and no 11-bit identifiers. Identifiers follow ADR-001; the messages are specified in technical_design/APIs/.
- Subsystems, not boards. The robot addresses a subsystem as a whole. How many boards implement a subsystem is its own concern, so a board can be replaced without changing the messages of the subsystem.
- Decisions at the top. The Superordinate Controller decides. The subsystems execute and take no decisions of their own.
- Safe when silent. A drive enters its safe state when it receives no valid drive command for longer than its timeout, and leaves it only on a valid drive command. The originator of a drive command repeats it at a fixed cycle, shorter than the timeout, for as long as the drive is meant to keep moving. The originator is the Superordinate Controller or a client that commands the robot through it, such as a remote control. Bridges and adapters that relay messages between the controller and a drive have no logic of their own: they neither generate, repeat, nor refresh a drive command. The message specification of a drive command declares its cycle time and timeout.
- Keep it simple. The simplest solution that meets a requirement wins.