Skip to content

Latest commit

 

History

History
140 lines (112 loc) · 5.76 KB

02_roadmap.md

File metadata and controls

140 lines (112 loc) · 5.76 KB

Roadmap

Goal: A catalog of useful tools and applications using X86-64 and Raspberry Pi as hardware platforms

Completed

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

Current tasks

  • IPC: Impmenent Python bindings [#131]
  • IPC: Implement means to isolate IPC to a set of hosts [#129]
  • IPC: Implement Query API [#130]
  • IPC: Implement zero-copy read and write [#132]

Camera

  • Implement a PoC gstreamer capture and HW accelerated glfw display
  • Implement grapecam

CAN

  • Implement canopen interface

Teleop

  • Implement Teleop controller
  • Implement joystick interface

Low latency applications on raspberry pi

  • Document how to configure Raspberry Pi5 for realtime applications
  • Document how to allocate specified CPU cores to run Linux.
  • Document how to allocate specified CPU cores to run my processes and threads.
  • Demo application to show low latency and low jitter loop execution on Pi
  • Reference: Low latency Ubuntu

Data structures for realtime control

  • Implement shared memory interface
  • Implement single producer multi-consumer queue using heap and shared memory
  • Refactor multi-producer single-consumer queue
    • Compare MPSCQueue against FIFOBuffer. Remove one.
    • Rename it for clarity
  • 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
  • Implement behaviour tree

Math library for realtime control

  • Delay line
  • Low pass filter
  • Differentiator
  • Integrator
  • Matrix operations
  • Quaternion operations

Robot model/kinematics/Visualisation

Goal: Robot model description file as the single source of truth to generate forward/inverse kinematics and scenegraph visualisation

  • Choose Windowing API. Options:
    • SDL3: Better pipeline model that matches how GPUs work. Better support for GPU computing
    • GLFW: Simple
    • PoC: Implement a HW accelerated shaded triangle in both of them. Choose based on simplicity (verbosity, expressiveness), maintainability
  • Study
  • HW accelerated 3D graphics
    • Design scene description format using our scripting engine
      • Study Anki which uses Lua for scnegraph
    • Design scenegraph library using existing khronos libs
      • Review type-erasure as an abstraction technique for drawing shapes
      • Implement PoC. (Example: Qt3d)
      • Implement a basic scenegraph example and check performance in MacOS and Linux

Recording and playback for time-series multi-modal data

CI and build robustness

  • Introduce RTSan
  • 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
  • Support GCC builds without restrictions
  • Support installing targets as systemd services

Raspberry Pi Demo Applications

  • AHRS
  • Environment monitor (CO2, temperature, humidity, pressure, light)
  • PoE camera
  • LQR sim
    • Improvements to probe::Monitor (See TODO in README)
    • MuJoCoPy Bootcamp LQR sim from lesson 13, demonstrating integration of MujoCo, plotting and control
  • Rover
    • DiY kit: Rover
    • Demonstrate joystick teleop, FPV and mission control

References