Skip to content

Latest commit

 

History

History
137 lines (117 loc) · 5.92 KB

02_roadmap.md

File metadata and controls

137 lines (117 loc) · 5.92 KB

Roadmap

Completed

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

Dec 2024

  • grapecam
  • plot
    • Generic plotting API and plottableconcept
    • Implement PoC with Qt6 Graphs
  • Record and replay (reference)
  • Define behaviour for experimental flag in declare_module and implement it

Jan 2025

  • CANOpen support
  • Teleop controller

Generalise IPC API

  • Implement queryable/query API
  • Avoid copy in createDataCallback()
    • Support Bytes::get_contiguous_view for contiguous payload
    • Support SpliceIterator for non-contiguous payload
  • Implement liveliness API
  • Implement shared memory API
  • Implement caching API
  • Define topics for matched example programs in a single place
  • Consider implementing pub-sub match callbacks
  • Implement PutOptions and subscriber Sample fields
    • Support attachments
    • Support timestamping
    • Resolve how we can combine congestion control, priority and reliability settings in a coherent way to offer fewer choices at the user API layer?
    • Consider supporting sample kind (put/delete)
  • Understand the point of on_drop callback in subscriber and support it if necessary
  • Documentation cleanup: examples
  • Understand hybrid logical clocks
  • Support hybrid logical clocks implementation
  • Disk recording and playback for time-series multi-modal data (README)
  • Fix zenoh examples: pull, shm pub/sub
  • New zenoh examples: Router interceptors (downsampling), authentication, access control, serdes (ZBytes)

Robotics core

  • HW IO
    • CANopen
    • joystick
    • midi
  • 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
  • Math library
    • Delay line
    • Low pass filter
    • Differentiator
    • Integrator
    • Matrix operations
  • Behaviour trees: Consider building from first principles
  • FSM: introspectable, visualisable state transition graph using graphviz.
  • Introduce RTSan
  • 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

3D visualisation

CI and build robustness

  • 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
  • Support GCC builds without restrictions

Other

  • Integrate JSON serialisation and reflection using glaze

Demo applications

  • Office environment (CO2, temperature, light) dashboard
  • Network camera and viewer for industrial monitoring
  • Zenoh interop with C++ publisher and Python subscriber, demonstrating data serialisation/deserialisation
  • Improvements to probe::Monitor (See TODO in README)
  • MuJoCoPy Bootcamp LQR sim from lesson 13, demonstrating integration of MujoCo, plotting and control
  • Rover demonstrating joystick teleop, FPV and mission control
  • Implement advanced streaming
    • Choose backend for audio/video device handling and stream processing
    • Implement AV streaming server and client

References