Software Architecture Layout - MatthewMArnold/taproot GitHub Wiki

Below is a block diagram of the current software architecture layout for taproot. This diagram only includes the software to be run on the MCB (no testing or simulation software). This diagram highlights the distinction between the static library and the various levels HALs and drivers in taproot. When using taproot, taproot encapsulates all the software shown in the diagram. Users interact with taproot through a singleton drivers object (see [[Drivers Architecture]]). The user then defines all subsystems and commands required to control their robot (see Command Subsystem Framework) and a robot configuration file (for an example see aruw-mcb's soldier_control.cpp). Note that an arrow from block foo to block bar means that foo depends on bar.

Note the following distinctions in architecture made in the diagram above:

  • HALs: These are objects that abstract away hardware. Modm provides many HALs that allow taproot to not have to worry about interacting with hardware directly. taproot HALs provide an abstraction layer between modm HALs and taproot drivers and utilities. This is useful for simulation and testing
  • Drivers: These interact with HALs and third party libraries. They expose public APIs that taproot consumers may use to to interact with various hardware components.
  • High level control utilities and algorithms: These provide higher level functionality than HALs or Drivers. All these objects are hardware agnostic.