UAVCAN

Lightweight open vehicle bus standard for aerospace and robotic applications.

Zubax Robotics is the main developer and maintainer of UAVCAN – an open lightweight data bus standard designed for reliable intravehicular communication in aerospace and robotic applications via CAN bus, Ethernet, and other robust transports.

UAVCAN is an integral part of the Dronecode core infrastructure (the Dronecode project is maintained by The Linux Foundation) and is used by numerous vendors and companies all over the world.

Learn more from the official website at uavcan.org.

Features

  • Democratic network – no bus master, no single point of failure.
  • Publish/subscribe and request/response (RPC) data exchange semantics.
  • Efficient exchange of large data structures with automatic decomposition and reassembly.
  • Lightweight, deterministic, easy to implement, and easy to validate.
  • Suitable for deeply embedded, resource constrained, hard real-time systems.
  • Supports dual and triply modular redundant transports.
  • Supports high-precision network-wide time synchronization.
  • The specification and high quality reference implementations in popular programming languages are free, open source, and available for commercial use (MIT license).

Software libraries

  • Libuavcan - full-featured, highly robust implementation in C++ for embedded systems and Linux.
  • Libcanard - lightweight implementation in C for deeply embedded systems.
  • Pyuavcan - general-purpose, easy to use Python implementation.
  • Uavcan.rs - highly robust multipurpose implementation in the Rust programming language.

Application domains

  • Manned and unmanned aircraft.
  • Spacecraft.
  • Robots.

Related announcements and discussions

Proposed New design tenet

Today, in the v1 specification, we have the following “features”: Features: • Democratic network – no bus master, no single point of failure. • Publish/subscribe and request/response (RPC1) exchange semantics. • Efficient exchange of large data structures with automatic decomposition and reassembly…

On CAN adapters and stateless interfaces

As a practical experiment on the applicability of DSDL, I have designed a namespace defining the interface to an abstract UAVCAN-interfaced CAN adapter. It is not supposed to be included in the standard namespace since it’s too application-specific; rather, suppose that these definitions are contain…

Uavcan gui tool toggling messages (mac os)

Hi guys, On the uavcan tool on mac os, I m checking the network through my Zubax babel. I can see the node number 10 (an external device that I programmed) toggling on and off on the tool. The console output this message coming at ~1Hz INFO uavcan_gui_tool.widgets.node_monitor Removing row 0 INF…

Libuavcan RX timestamps on S32K

Answering @noxuz here about the FlexCAN peripheral’s 16-bit timestamps (see 53.4.2.4 of the S32K reference manual: https://www.nxp.com/docs/en/reference-manual/S32K-RM.pdf) My assumption is that you can clock this timer externally using the first channel of a timer chain that adds up to 48-64 bits o…

Set parameters via UAVCAN

Is it possible to set parameters other than RPM via UAVCAN on the Myxa controller, or is it only possible via telega? If it is, how do I do it, and are all the required data types part of the public regulated data types?…

Library-independent code generation

@scottdixon would you say that extracting the C++ code generator from libuavcan into a separate, independently reusable entity, is feasible? My attempt to identify items that generated code might depend on shows that most of those come from the C++ standard library rather than the UAVCAN implementat…

How to support GetNodeInfo and GetDataTypeInfo on STM32?

I’m trying to implement the services GetNodeInfo and GetDataTypeInfo on a STM32 F207ZG. I have another node on a virtual machine that runs Ubuntu, but neither the GUI Tool nor the active monitor from the libuavcan tutorial seems to get the information of the STM32. The passive Monitor is working ju…

Time abstractions for libuavcan v1

In the latest commit to the v1 branch of libuavcan we have ported the old time.hpp abstraction over but have yet to provide more definition for system time. We do have monotonic timestamps on received frames that are documented to be a “hardware supplied monotonic time value” but no other definition…

Updating ESCs with secondary protocol

Hi everyone, I want to update my ESCs which have an ATSAMC21. I have a FMU (STM32 F4) running the PX4 flight stack to communicate with the ESCs. To update an ESC I use a secondary protocol that directly communicates with the MCU on the ESC. Using libuavcan, I achieve this by using the function injec…

The firmware upgrade was successful, while the UAVCAN GUI Tool showed one of firmware update requests has timed out