Homepage GitHub

Uavcan.rs v1 progress tracking

As we talked about in the dev call, I’m creating this to track some of the progress and issues with the v1 re-write. Preferably, specific tracking issues for individual tasks will be created (as opposed to the current overall tracking issue).

Previous discussion/Tasks to complete

Copy pasted from my email conversation with Alexander, the main tasks are:

Two API issues that need to be addressed.

  • Timestamping in a no_std environment, right now I use std::time::Instant to handle everything, which doesn’t fly in a no_std environment. It will likely require some tweaks to the overall API as well
  • Random source node IDs (for use in anonymous frames) - not really essential, it can be pushed to the user’s application. Thinking about it right now, that’s probably what I’ll do anyways.

And general work to be done before release is:

  • Message structure generation (via templating in nunavut)
  • Message serialization/deserialization (can be nunavut or via Rust macros, I’m leaning towards macros but not by a lot)
  • UAVCAN/UDP transport support
  • no_std, but alloc-capable SessionManager

Work that I would like to be done, but not considered essential for release:

  • no_std, fully static SessionManager (I don’t think anyone actually wants that other than me, so this isn’t really essential)
  • UAVCAN/Serial transport support
  • some form of automated testing to continuously verify interoperability with pyuavcan

Dev call details

Minor Notes

  • Crate should provide no_std by default, only enable std with a feature
  • Probably copyborrow canadensis’ solution for Instant (check canadensis_core crate)

Alexander’s tasks (subject to modification due to thesis and general progress)

  • Work on implementing more generic timestamping
  • Work on no_std SessionManager
  • Work proc_maco side of generation (David will do Nunavut templating - should be pretty easy)

Action Items

  • (David) Get example working again (or more robust against dependency issues if that’s the problem)
  • (David) Create tracking issues for smaller tasks

There was also some talk about future abstractions on top of the library. I generally didn’t include any of that in my roadmap because I wanted to focus on the core, but there is lots of room for upward growth and nicer things. (Specifically talked about implementing things like Heartbeat)

1 Like

@alexander_huebener I got the example working again, either the pyuavcan API changed slightly or I was using it wrong in the first place (likely the latter :slight_smile: ).

The Rust side also needed some work for my latest changes, that has been updated too - note that it currently needs nightly for GATs.

Created the following issues to track specific tasks:

@pavel.kirienko could you provide @alexander_huebener with write access to the main repo so he doesn’t have to fork it?

I’ve also migrated david/rearchitecting to v1, as a nicer main branch name, so please rebase all future work off of v1 and merge there until we’re ready for a proper release.


Alexander, please share your GitHub username so I could send you an invitation. Thanks.