FW Rover Apps Structure

FW App Structure Redesign

  • Currently, all our rover apps have this general structure:
    • Start CAN RX/TX threads 
    • while(true) loop
      • Update actuator controls
      • Update CAN TX signals
  • This gets really messy and repetitive
  • We want to create a more modularized app structure
    • Drivers (everything in our libs folder)
    • Modules (logic for a particular part of an app)
      • Init function (constructor)
      • Periodic functions
    • Rover apps
      • Consists of multiple modules
      • Responsible for calling module constructor and periodic functions
  • We also want to fix timing requirements, right now there is no guarantee to the period at which the while(true) loop in main() runs
  • Example: science app
    • Modules
      • CAN driver
        • constructor
          • start postman thread
          • attach ISRs
        • periodic
          • 1ms
            • RX processor 
          • 10ms
            • TX processor
      • CAN app - science
        • constructor
          • set hw filters
      • Controllers
        • constructor
          • init actuator managers and controllers
        • periodic
          • 1ms
            • Update actuator controls
    • main.cpp
      • main()
        • instantiate all modules
        • start periodic_1ms thread
        • start periodic_10ms thread
      • periodic_1ms
        • call 1ms functions from each modules
        • delay until next 10ms mark
      • periodic_10ms
        • call 10ms functions from each module
        • delay under next 10ms mark
  • Should put modules under the rover app folder


Notes

  • Do we want to decouple encoder / current sensor reads from actuator update loops?
    • Yes, make separate modules for these
  • Which module should CAN one shots go under?
    • Should go under module related to the logic (NOT CAN app module)


Tasks

  • Create modules and main.cpp skeleton + refactor cmake suite
  • Create CAN driver module (common) Former user (Deleted) 
  • Create CAN app module (target specific)
    • Arm
    • Science
    • Gimbal
  • Create controller modules (target specific) @Allan
    • Arm
    • Science
    • Gimbal
  • Create encoder update modules (target specific)
    • Arm
    • Science
    • Gimbal
  • Create current sensor update modules (target specific)
    • Arm
  • Create moisture sensor update module (science app) Former user (Deleted) 
  • Create watchdog module (common) Former user (Deleted) 
  • Create LED matrix module (PDB) @Osose
  • Create PDB monitoring module (includes load, rail, and temperature monitoring) Former user (Deleted) 

We should document this in confluence!