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


  • 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.
  • - highly robust multipurpose implementation in the Rust programming language.

Application domains

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

Related announcements and discussions

Working example of libcanard

Hi, I have been trying for some time on a number of boards and firmware to get a working example of libcanard. Each time I fail to see any messages on uavcangui and the board gets stuck in the tx loop. I have tried the libcanard tutorials on zubax babel and on stm32f103 boards, using ac6 (sw4stm …

UAVCAN CAN2 status errors PixhawkV2

Hello I am using The UAVCAN to establish communication between 3 pixhawks. I have created 36 custom data type to be able to carry the data among the pixhawks but when I try to send the messages I get some HW and IO errors on CAN1 statues and a lot of HW and IO errors on CAN2 status when I decrease t…

SW4STM project of source gets stuck in tx loop

Help! I have tried a lot to get the code stuck in a tx loop where nothing ever happens. Each way I try to make the project the same thing happens. It looks like the CAN port is not working although startup code is calculating timings fine with a 18Mhz clock source. I really need some help to mov…


Why were the application specific datatypes removed in UAVCAN v1? While the application specific message definitions were removed from the core specification v1 does not prohibit or even disown the concept of application…

.dbc file for UAVCAN

Hello I have a .dbc file which include some message definitions and signals attributes and I want it to be used on the UAVCAN platform on the pixhawk any idea?…

Compiling problem

Hello, I have the following error when trying to compile the zubax_babel product Compiling config.cpp cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ zubax_chibios///zubax_chibios/config/config.cpp: In function ‘void configRegisterParam_(const Config…

[Future] Zero-cost serialization constraint

Perhaps at some point in the future we should consider adding a new directive that would instruct the DSDL processing tool that the definition where the directive is located should adhere to a conventional layout. It could be called @zerocost. A data schema is of a “conventional layout” if: It is n…

Libuavcan branch renaming!

Please be advised that in the next few days we will be renaming the uavcan-v1.0 branch to “uavcan-v0.5” and will then rename uavcan-v1.0-bluesky to uavcan-v1.0. uavcan-v0.5 is an experimental port of libuavcan v0 to run on CAN-FD. while functional it is a dead-end as all available development effort…

Pydsdlgen is hard to say

“certain people” have complained that pydsdlgen is a really clunky name. Should we rename it and what should we name it? Poll time! no change – keep pydsdlgen because it will break things to change the name. Nunavut – To continue with the theme of Canadian territories started by Yukon (A them…


Is the Zubax and @olliw42’s UC4H the only option for UAVACAN ESCs?…