- :done: Versioning
- :done: Exception definitions
- :done: Command line flags parsing
- :done: Logging library
- :done: Scripting library
- :done: Message passing
- :done: Realtime services
- :done: Implement
probe::Controller
- :done: Implement
probe::Monitor
PoC - :done: Serialization
- 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)
- 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
toMPSCQueue
- 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
- Study
- 2D Game Engine
- Vulkan in 30 minutes
- Vulkan Tutorial
- Vulkan guide
- Flecs and ECS
- CLoudPeek: Could serve as a starting point for custom viewer
- USD
- glTF with physics extensions
- HW accelerated 3D graphics
- Design scene description format using our scripting engine
- Design scenegraph library using existing khronos libs
- Decision: Use Qt3D? See scratch/3dvis/qt
- Implement a basic scenegraph example and check performance in MacOS and Linux VM
- 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>
fromconst T*
and then modifying it later is undefined behaviour. Fixprobe::PinConfig::pin
. Considerstd::start_lifetime_as
instead.- replace
grape::realtime::SystemError
withstd::errc
- 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
- 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
- utility: hostaddress, isportinuse, execute, flag_set
- file cache
- md5sum
- factory using crtp (see scratch)
- ftxui based terminal UI apps
- Consider integrating mp_units library
- 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;
}
- MuJoCo tutorials
- C++23 features: cppcon, cpp weekly
- C++20 features: https://youtu.be/N1gOSgZy7h4
- Practical C++26 Reflection
- Interfaces with C++20 concept: https://concepts.godbolt.org/z/PjGb466cr
- Clean code: https://youtu.be/9ch7tZN4jeI
- IoC containers for dependency injection, especially for mocking in tests: https://github.com/ybainier/Hypodermic. For why we should use it, see
clean code
video above