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

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

Uavcan_gui_tool unrecognized message 1027 (windows)

Hello, I am doing some testing with UAVCAN, using the legacy v0.x version, for now. Having developed a prototype on a Linux machine, passed it over to a colleague using Windows. The uavcan_gui_tool on my machine (v0.9.1) has no problems looking into the message stream, but the version on the windo…

Myxa uavcan.equipment.esc.Status frequency increasing

Hello Is it possible to increase the frequency of the esc.Status message? We would be happy to receive updates with a frequency about of 100 Hz…

An article about UAVCAN based on the materials presented at the PX4 Dev Summit in Zurich

Two weeks ago there was a PX4 developer’s summit held at Zurich ETH where we have presented our recent developments, future plans, and long-term vision for UAVCAN. We have published an article based on the materials presented there: UAVCAN Forum – 2 Jul 19 UAVCAN: a hig…

UAVCAN: a highly dependable publish-subscribe protocol for real-time intravehicular networking

This write-up is loosely based on the materials presented at the PX4 Dev Summit in Zurich on June 20th, 2019 by Pavel Kirienko (Zubax Robotics) and Scott Dixon (Amazon Prime Air). What UAVCAN is? The following diagram …

Unique-ID for node-ID acquisition

Some thoughts on UAVCAN v1.0 PnP / node-ID allocation: I’ve been involved in designing similar functionality to a CANaerospace implementation. In that particular implementation the unique ID is an EUI-48 identifier assigned by IEEE, which fits nicely inside a single CAN 2.0 frame. The Node-ID acquis…

CAN on nuttx OS

I have 2 STM32f427 MCU’s on a custom developed board. On both MCU’s nuttx OS is running. I want to send data from one MCU to the other using CAN bus. I cant find any getting started example for running can on nuttx OS. Can anyone point me to any related example or documentation that will help me get…

Queue Disciplines and Linux SocketCAN

The purpose of this topic is to discuss what to do about frame queuing on Linux for UAVCAN. The current libuavcan implementation provides a single priority queue in user-space that sits in front of SocketCAN which is an interesting choice since most CAN devices appear to default to using the pfifo_f…