UAVCAN Logo

Intravehicular communication

What is UAVCAN?

UAVCAN is an open lightweight protocol designed for reliable intravehicular communication in aerospace and robotic applications over CAN bus, Ethernet, and other robust transports. It is created to address the challenge of deterministic on-board data exchange between systems and components of next-generation intelligent vehicles: manned and unmanned aircraft, spacecraft, robots, and cars.

The name UAVCAN stands for Uncomplicated Application-level Vehicular Communication And Networking.

A quick introduction can be found in the UAVCAN crash course. A high-level overview is provided in the article "UAVCAN: a highly dependable publish-subscribe protocol for real-time intravehicular networking".

UAVCAN is a standard open to everyone, and it will always remain this way. No licensing or approval of any kind is necessary for its implementation, distribution, or use. Voluntary monetary donations are welcomed via Open Collective.

Features

How do I use UAVCAN?

First, read the short UAVCAN crash course or the full UAVCAN specification. Familiarize yourself with the regulated DSDL repository. If you have questions or feedback, bring them to the discussion forum.

Pick one of the free open source implementations (MIT licensed) for use in your application:

Name Transports Language Applications Status
Libcanard UAVCAN/CAN C11 Embedded Released
Pyuavcan Any Python HMI, scripting Released
Libuavcan Any C++11 Embedded Work-in-progress
uavcan.rs Any Rust Embedded Work-in-progress

None of the implementations suit your needs? Write your own! UAVCAN is a very simple protocol; an experienced developer can easily create a custom implementation from scratch to address the unique needs of their application.

The open source tools will help you design, develop, and maintain your UAVCAN-based application:

Please reference UAVCAN in scientific or technical publications.

Discussions and publications

UAVCAN v1 crash course
UAVCAN v1 crash course
Mar 11 3 posts
Viper Quadcopter
Viper Quadcopter
Jun 05 24 posts
Data type extensibility and composition
Data type extensibility and composition
Jun 04 13 posts
Yukon management thread
Yukon management thread
Jun 03 5 posts
UAVCAN/serial: issues with DMA friendliness and bandwidth overhead
UAVCAN/serial: issues with DMA friendliness and bandwidth overhead
Jun 03 11 posts
On CAN cable impedance and RJ45 connectors
On CAN cable impedance and RJ45 connectors
May 30 6 posts
PR preparations for the upcoming UAVCAN v1.0 release: new website, new logo
PR preparations for the upcoming UAVCAN v1.0 release: new website, new logo
May 28 32 posts
PyDSDL/Nunavut Union offsets seem to be incorrect
PyDSDL/Nunavut Union offsets seem to be incorrect
May 27 3 posts
Libuavcan compatibility for ATSAMC21 family microcontroller
Libuavcan compatibility for ATSAMC21 family microcontroller
May 24 10 posts
Automatic configuration of port identifiers
Automatic configuration of port identifiers
May 22 2 posts
Data type regulation policy and membership fees
Data type regulation policy and membership fees
May 21 28 posts
Long char messages
Long char messages
May 17 3 posts
Alternative transport protocols
Alternative transport protocols
May 12 19 posts
Converting Received Data to CanardFrame
Converting Received Data to CanardFrame
May 08 2 posts
Libcanard for UAVCAN/CAN v1 is released
Libcanard for UAVCAN/CAN v1 is released
May 04 18 posts

Join the forum to start a new discussion. Also, feel free to participate in the weekly dev call.

Development activity

pavel-kirienko opened a pull request “A SocketCAN facade for Libcanard” at UAVCAN/platform_specific_components
Jun 04
pavel-kirienko created a new branch “socketcan_libcanard” at UAVCAN/platform_specific_components
Jun 04
pavel-kirienko opened an issue “After generating a DSDL package, advise the user to add the destination directory to PYTHONPATH” at UAVCAN/pyuavcan
Jun 04
pavel-kirienko opened an issue “The CLI Transport Subsystem Factory should skip transports whose dependencies are not installed” at UAVCAN/pyuavcan
Jun 04
pavel-kirienko opened an issue “Provide a blue box explaining when it is appropriate to use fixed port-IDs” at UAVCAN/specification
Jun 03
thirtytwobits closed an issue “intrinsic C type generation” at UAVCAN/nunavut
Jun 01
thirtytwobits closed a pull request “Adding C PoD type generation” at UAVCAN/nunavut
Jun 01
nacansino starred UAVCAN/libcanard
Jun 01
pavel-kirienko opened a pull request “Minor clarifications in the README” at UAVCAN/specification
May 30
pavel-kirienko created a new branch “pavel-kirienko-patch-1” at UAVCAN/specification
May 30
thirtytwobits closed a pull request “Add PowerShell to image” at UAVCAN/docker_toolchains
May 29
PetervdPerk-NXP opened an issue “Message size definition bits or bytes?” at UAVCAN/nunavut
May 29
clyde-johnston opened a pull request “Add PowerShell to image” at UAVCAN/docker_toolchains
May 29
clyde-johnston created a new branch “powershell” at UAVCAN/docker_toolchains
May 29
pavel-kirienko opened an issue “Unexpected exception if the namespace is empty” at UAVCAN/pydsdl
May 28