...
- 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
- 1ms
- constructor
- CAN app - science
- constructor
- set hw filters
- periodic
- 10ms
- Update TX signals
- 10ms
- constructor
- Geneva actuator managerControllers
- constructor
- init actuator manager managers and controllers
- periodic
- 1ms
- Update actuator controls
- 1ms
- constructor
- CAN driver
- 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
- main()
- Modules
- 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)
- Create CAN app module (target specific)
- Arm
- Science
- Gimbal
- Create controller modules (target specific)
- 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)
- Create watchdog module (common)
We should document this in confluence!