Skip to content

Latest commit

 

History

History
146 lines (121 loc) · 6.04 KB

02_roadmap.md

File metadata and controls

146 lines (121 loc) · 6.04 KB

Roadmap

Phase 1 - Base

  • :done: Versioning
  • :done: Exception definitions
  • :done: Command line flags parsing
  • :done: Logging library
  • :done: Scripting library
  • :done: Message passing
  • :done: Realtime services

Phase 2 - Multimodal data logging and visualisation - part 1

  • :done: Implement probe::Controller
  • :done: Implement probe::Monitor PoC
  • :done: Serialization

Phase 3 - grapecam

Phase 4 - Multimodel data logging and visualisation - part 2

  • Disk recording and playback for time-series multi-modal data (README)
  • Generic plotting api
    • Requirements analysis
    • Narrow down options: qt6, implot
  • Fix zenoh examples: query_sub, pull, shm pub/sub
  • New zenoh examples: Router interceptors (downsampling), authentication, access control, serdes (ZBytes)
  • Implement advanced streaming
    • Choose backend for audio/video device handling and stream processing
    • Implement AV streaming server and client
  • External deps: Replace git clone with direct download of tarballs
  • Improvements to probe::Monitor (See TODO in README)

Phase 5 - Robotics core

  • Configure Raspberry Pi5 for low latency. Document it.
  • Study
  • Shared memory
  • Single producer multiple consumer queue using externally specified memory (heap or shared memory)
  • Consider removing MPSCQueue. It's unused.
  • Rename FIFOBuffer to MPSCQueue
  • HW IO
    • CANopen
    • joystick
    • midi
  • Math library
    • Delay line
    • Low pass filter
    • Differentiator
    • Integrator
    • Matrix operations
  • Behaviour trees: Consider building from first principles
  • FSM: introspectable, visualise state transition graph using graphviz.
  • PoC IPC experiments
    • Case 1: pub-peer on PC1, sub-peer on PC2, router on PC3, multicast scouting off. Confirm data transfer from PC1 to PC2, no data transfer through PC3.
    • Case 2: pub-peer + router on PC1, sub-peer + router on PC2, router on PC3, multicast scouting off. Confirm data transfer from PC1 to PC2, no data transfer through PC3.
    • Case 3: Extend case2 by adding a PC4 with router and sub-client. Confirm sub-client on PC4 receives data from pub-peer on PC1.
  • Introduce RTSan
  • ROS2 interop
    • Study how cactus-rt does it
    • Propose a design

Phase 6 - 3D graphics

Phase 7 - Refactor

  • Support external dependencies on examples and tests that the main project does not depend on
  • Study Quill on how to reduce logging overhead
  • Refactor thread class out of realtime and put it in 'grape'
    • Insert logging to capture timer overruns in the loop
  • reinterpret_cast<uintptr_t> from const T* and then modifying it later is undefined behaviour. Fix probe::PinConfig::pin. Consider std::start_lifetime_as instead.
  • replace grape::realtime::SystemError with std::errc

Phase 8 - CI

  • Setup configuration presets for developer and CI builds
    • Incorporate lessons from https://youtu.be/UI_QayAb9U0
    • Fail the CI if clang-format changes code
    • Add configuration presets to CMakePresets.json
    • Develop github CI build file
    • Document the usage in install instructions
  • Implement CI build using github workflow
  • Integrate cpack to generate artifacts
  • Integrate ninjatracing
  • Review all negated checks in .clang-tidy

Phase 9 - Demo applications

  • Office environment (CO2, temperature, light) dashboard
  • Network camera and viewer for industrial monitoring, diagnostics
  • Zenoh interop with C++ publisher and Python subscriber, demonstrating data serialisation/deserialisation
  • MuJoCoPy Bootcamp LQR sim from lesson 13, demonstrating integration of MujoCo, plotting and control
  • Rover demonstrating joystick teleop, FPV and mission control

Phase 10 - Utilities

  • utility: hostaddress, isportinuse, execute, flag_set
  • file cache
  • md5sum
  • factory using crtp (see scratch)
  • ftxui based terminal UI apps
  • Consider integrating mp_units library

Notes

  • Use C++23 or newer features in development
// hello world in C++23
import std;
auto main() -> int {
  std::println("Hello World!");
  return EXIT_SUCCESS;
}

References