/
FW Rover Apps Structure
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
- 1ms
- constructor
- CAN app - science
- constructor
- set hw filters
- constructor
- Controllers
- constructor
- init actuator 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) 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!
, multiple selections available,
Related content
Firmware Training
Firmware Training
More like this
Software/Firmware
Software/Firmware
Read with this
Winter 23 Firmware Code Restructure
Winter 23 Firmware Code Restructure
More like this
ROS2 on Jetson AGX Xavier
ROS2 on Jetson AGX Xavier
Read with this
CAN - Establish CAN Interface
CAN - Establish CAN Interface
More like this
Rover CAN Architecture
Rover CAN Architecture
More like this