UAVCAN

Lightweight open vehicle bus standard for aerospace and robotic applications.

Zubax Robotics is the main developer and maintainer of UAVCAN – an open data bus standard designed for aerospace and robotic applications.

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

@union tag in request or response

Hi! Perhaps I have misunderstood the DSDL spec, but are the below DSDL examples correct? Example1. Request contains code and a union of type1_value/type2_value # Service SetMyTypeValue # Request uint8 code @union MyType1 type1_value MyType2 type2_value --- #Response MyResponseCode code Or Exam…

New transports for the UAVCAN protocol: CAN FD, Ethernet, wireless

We are working on providing support for additional transports for the UAVCAN protocol. The main options currently under review are UDP/IP (Ethernet et al) and the wireless IEEE 802.15.4. Learn more and leave feedback here: https://forum.uavcan.org/t/alternative-transport-protocols/324…

Alternative transport protocols

This post is the result of my shallow research of alternative transports conducted over the last two weeks. The reader is assumed to be familiar with the latest draft of the specification v1.0. Motivation In the very early days of UAVCAN, I had one automotive electronics engineer who worked for Ment…

PX4 Actuator control

In uavcan_main.cpp the array _controls has all value arrays by topics actuator_controls_[0-4], but in a mixer and further at transfer to the bus uses only data from actuator_controls_0. I need to take data from actuator_controls_1 by can. why it works this way and how do I get data from the actuato…

High level node descriptor

Hi all! I’ve been trying to understand DSDL and how we can use it in our systems. I like the DSDL composition of types and services but I feel it’s missing a higher level node construct. SensorNode: Service ADCService Service VoltageSensorsService Message Status The intent here is that by using no…

Question regarding template and union tags

Hi! This is more a C++ general question rather than UAVCAN related. Coming from C language I am a bit new to some C++ features such as templates. However, I am trying to make a function template that needs a union tag to create a uavcan request as below. T and V typenames works, but how can I make t…

Battery_info:model_name

why my model is numbers? can I mae text? or make stuff like the end picture? thank you!!! 2.jpg1178x742 126 KB 参考.jpg816x742 111 KB…

Simpler and better DSDL versioning

Simpler and better DSDL versioning I think this suggestion also is the best of both when it comes to code compatibility vs fixing field names and layout Summary Instead of versioning DSDL types individually we version the namespace as a whole. Rules to make this work better than the alternative w…

UAVCAN c library for C2000 microcontrollers

Hi. Is there any attempts to implement UAVCAN protocol on TI C2000 microcontrollers, where minimum data size is 2 bytes?…

VESC UAVCAN support

Hello, we want to modify slightly the uavcan so that it could be compatible with the VESC CAN protocol. How should we proceed thanks An other solution would be to take an orel20 or a Myxa but it’s not powerful enough for our application. we need 12s and 1500W…