Skip to content

Software Architecture Layout

matthew edited this page Sep 16, 2020 · 1 revision

Below is a block diagram of the current software architecture layout. This diagram only includes the software to be run on the MCB. This diagram highlights the distinction between the static library, aruwlib, and the robot-specific subsystems and commands in aruwsrc. If you are unfamiliar with the command/subsystem framework developed for this software, refer to subsystem/command framework. Note that an arrow from block foo to block bar means that foo depends on bar and that not all commands/subsystems are shown for brevity.

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

  • Drivers: These interact with hardware and device objects. There is only one instance created while running on hardware, which is initialized once on startup.
    • The CommandScheduler and CommandMapper are two special drivers. They do not interact with hardware, but instead interact with Subsystems and Commands.
  • Device Objects: These are owned by a particular subsystem and are a way for the Subsystem or Command to interact with a Driver. An example would be a motor, which is owned by a Subsystem and interacts with a motor manager.
  • Subsystems: These are user defined and particular to a robot. They interact with device objects or directly with drivers.
  • Commands: These know about all of the above states and can interact with all of them freely.