UAVCAN

Lightweight data bus standard for reliable communication in aerospace and robotic applications via CAN bus.

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

UAVCAN is now 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 at uavcan.org, and consider subscribing to the mailing list.

Features

  • Democratic network - no single point of failure.
  • Publish/subscribe or request/response exchange semantics.
  • Allows efficient exchange of large data structures.
  • Lightweight, easy to implement protocol.
  • Supports network-wide time synchronization with microsecond precision.
  • Doubly- or triply- redundant CAN bus.
  • Can be used in deeply embedded, resource constrained, hard real-time systems.
  • The specification and high quality reference implementations are open and free to use.

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

Barometer Question

Hey guys a question about enabling the Baro on the GNSS. I have read tht I need to put this code on the mem card to get the baro working, but I see it uses the command “fi” is that a spelling mistake and it should read “If”. uORB will be started again by the main init script later, it’s OK if uorb …

GNSS GPS on Pixracer

Hey guys. Last night I installed my GNSS v2 GPS. It’s all powered and connected to the Pixracer. I have a termination plug in the second port so I figure I should be good. I set the GPS type to 9 and rebooted. NO GPS. So then I read that if there is a redundant port it needs termination as w…

Proposed Changes to UAVCAN's High-Level Architecture

I'd like to propose some changes to the high-level architecture for UAVCAN to make it more modular and allow for different types of UAVs to utilize it. The modifications will introduce the following new concepts: - *Specification Levels* – Pre-defined integration points to define and…

Modify Standard Data Types

Is there a simple way to modify the built in UAVCAN data types? For example, I would like to change the equipment.esc.RawCommand data type to include more than 21 values. I understand that I may run into compatibility issues with other implementations of the UAVCAN protocol, but I don't want to…

Proposed Modification to UAVCAN Specification to Support CAN-FD

We would like to propose a slight modification to the UAVCAN specification that would allow it to work over CAN-FD: *Figure 1 – Elimination of the Tail-Array Optimization (TAO) for DLCs Greater-Than Eight* In the UAVCAN specification, section » 3.0 Data Structure Description…

Meet Kochergá - a robust portable multi-protocol bootloader library for microcontrollers

Hello subscribers, Today I published a simple header-only bootloader library for microcontrollers that supports UAVCAN, check it out: *github.com/Zubax/kocherga* (C++17, MIT license) At the moment it supports UAVCAN, XMODEM, YMODEM, and XMODEM-1K. T…

Problem with union tag size between libuavcan and pyuavcan

Hello, I am sending messages between an embedded platform using libuavcan and a PC running pyuavcan. More specifically I have a request/response that looks (paraphrasing) like this: @union int16 a int16 b int16 c int16 d -- @union int16 a int16 b int16 c int16 d If I send a response of "a",…

I want to know How to use can

What should I do if I want to use APM for can bus communication? Instead of UAVCAN communication。I want to figure out this framework。…

Libcanard question

Dear Libcanard authors! There is a file libcanard/tests/demo.c with a sample implementation of Libcanard library client. It has a function for interaction with CAN subsystem: ``` /** * Transmits all frames from the TX queue, receives up to one frame. */ void processTxRxOnce(SocketCANInstance*…

Ardupilot and UAVCAN

I want to know if UAVCAN under ardupilot should also be able to use zubax gnss? What will be different?…