Skip to content

Latest commit

 

History

History
140 lines (122 loc) · 6.13 KB

02_roadmap.md

File metadata and controls

140 lines (122 loc) · 6.13 KB

Roadmap

Completed

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

Dec 2024

  • Cross compile for Arm64 from X86
    • with gcc toolchain
    • with clang toolchain
  • grapecam
    • Implement grape::app. (README)
    • Implement grapecam
    • Implement isatty() to identify terminal and print colored logs (see cpptrace::istty)
  • 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
  • Review ecal. Is it an alternative to zenoh?
  • delete /tmp/ctcache-* and fix linter warnings
  • update clang-tidy-cache. Does it fix linter caching problems?

Jan 2025

  • Ability to create and destroy publishers and subscribers at will (required for teleop mux)
  • CANOpen support
  • Teleop controller

Generalise IPC API

  • Implement queryable/query API
  • Avoid copy in createDataCallback() by using SpliceIterator
  • 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

  • Fix GCC builds
    • std::expected not available with -DENABLE_LINTER=ON
    • sccache breaks build with -DENABLE_CACHE=ON
  • 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

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