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
Libcanard for UAVCAN/CAN v1 is released
Libcanard for UAVCAN/CAN v1 is released
Mar 09 4 posts
UAVCAN 2019 roadmap
UAVCAN 2019 roadmap
Nov 14 3 posts
Libcanard v1 STM32 driver design guidelines
Libcanard v1 STM32 driver design guidelines
Apr 03 1 posts
SocketCAN API on a RTOS
SocketCAN API on a RTOS
Apr 02 15 posts
GUI Tool – Next Generation
GUI Tool – Next Generation
Apr 01 37 posts
NestedRootNamespaceError in Basic usage demo
NestedRootNamespaceError in Basic usage demo
Mar 31 7 posts
Libuavcan driver for RTOS/DE10-Nano
Libuavcan driver for RTOS/DE10-Nano
Mar 28 4 posts
Endinaness in the transport layer
Endinaness in the transport layer
Mar 27 4 posts
V0 and v1 coexist
V0 and v1 coexist
Mar 13 2 posts
CanardRxTransfer payload reading?
CanardRxTransfer payload reading?
Mar 10 42 posts
Architectural guidance around UAVCAN Gateway
Architectural guidance around UAVCAN Gateway
Mar 09 9 posts
Param getset for string types fails to be read by UAVCAN GUI tool
Param getset for string types fails to be read by UAVCAN GUI tool
Mar 08 6 posts
Proposed change to variable-length arrays
Proposed change to variable-length arrays
Mar 06 8 posts
Platform-specific components
Platform-specific components
Feb 29 9 posts

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

Development activity

Sevendof forked UAVCAN/libuavcan
Apr 06
TSC21 closed a pull request “This typo briefly confused me. Why not fix it?” at UAVCAN/public_regulated_data_types
Apr 05
JacobCrabill opened a pull request “This typo briefly confused me. Why not fix it?” at UAVCAN/public_regulated_data_types
Apr 05
JacobCrabill forked UAVCAN/public_regulated_data_types
Apr 05
gxp starred UAVCAN/libuavcan
Apr 03
pavel-kirienko created a new tag “1.1.0.dev0” at UAVCAN/pyuavcan
Apr 02
thirtytwobits closed a pull request “add Sonar lint to backend” at UAVCAN/Yukon
Apr 02
pavel-kirienko opened a pull request “Fix the confusing versioning problem per #108” at UAVCAN/pyuavcan
Apr 02
pavel-kirienko created a new branch “fix-108” at UAVCAN/pyuavcan
Apr 02
thirtytwobits opened an issue “Pypi versioning is unclear” at UAVCAN/pyuavcan
Apr 02
TSC21 opened a pull request “add Sonar lint to backend” at UAVCAN/Yukon
Apr 02
TSC21 created a new branch “add_sonar_lint” at UAVCAN/Yukon
Apr 02
thirtytwobits closed a pull request “Bump webpack-dev-server from 2.11.3 to 3.1.11 in /src/yukon/frontend” at UAVCAN/Yukon
Mar 31
pavel-kirienko opened an issue “Configure auto-release” at UAVCAN/pydsdl
Mar 31
pavel-kirienko created a new tag “1.3.1” at UAVCAN/pydsdl
Mar 31