UAVCAN is a lightweight protocol designed for highly reliable communication in UAV and robotic applications via CAN bus.
Its key features are the following:
- Very low data overhead - which makes it suitable for high frequency distributed control loops.
- Democratic network - no single point of failure.
- Supports network-wide time synchronization with sub-millisecond resolution.
- Allows to efficiently exchange datagrams longer than can fit a single CAN frame.
- Publish/subscribe or request/response exchange patterns.
- Doubly-redundant or triply-redundant CAN bus support.
- Lightweight, easy to implement protocol (minimal sensor node can be implemented in less than 300 lines of C99).
- Can be used in deeply embedded systems (the full featured reference implementation in C++ runs on a 32K ROM, 8K RAM MCU).
- The specification and the reference implementation are open and free to use (MIT License).
Half a year ago, UAVCAN RFC was first announced here: http://diydrones.com/profiles/blogs/uavcan-can-bus-for-uav. Since then, UAVCAN got a complete specification and a full featured portable reference implementation in C++ for Linux and embedded systems. It's worth noting that the list of officially supported embedded platforms includes NXP LPC11C24 - a low-cost ARM Cortex-M0 MCU with an embedded CAN controller and a CAN driver, i.e. a true single-chip solution for cost-efficient CAN bus applications.
Current release is a preliminary release, which means that some aspects of the specification can be changed in a way that can break backward compatibility. The specification and the standard data type set are expected to be frozen by the end of 2014, which would make a final release. Since the final release, standard data types won't ever change at all, but new types still can be added (it doesn't break the backward compatibility).
PX4 native stack is going to be the first adopter of the protocol; currently UAVCAN support is already merged into its master branch. Also, there's a few products will be announced later this year that use UAVCAN as a primary and only communication interface. Stay tuned!
Links:
- UAVCAN specification: http://uavcan.org/UAVCAN_specification
- Libuavcan tutorials: http://uavcan.org/Libuavcan_tutorials
- List of platforms officially supported by libuavcan: http://uavcan.org/List_of_platforms_officially_supported_by_libuavcan
- UAVCAN mailing list: https://groups.google.com/forum/#!forum/uavcan
- Reference implementation: https://github.com/pavel-kirienko/uavcan
P.S. this is a cross post from https://groups.google.com/forum/#!topic/drones-discuss/wkI6TSmPAdo.
Comments
This is really great Spym,
CAN is a really useful communications medium and it is a shame we haven't been able to make better use of it.
A big thank you for all the great work on this.
Best Regards,
Gary