In this update I will briefly review the current state and the near future of UAVCAN. For those unfamiliar, UAVCAN is a lightweight CAN bus protocol designed for reliable communication in aerospace and robotic applications. It aims to provide standardized and unified communications at the application level by means of defining a fixed set of messages and RPC services, at the same time maintaining flexibility by virtue of vendor-specific (custom) message and service definitions. I will not focus on the technical details here - those interested can learn more directly from the specification at uavcan.org.
The first release-candidate version of the protocol was announced almost a year ago; since then, no significant changes were introduced, and therefore the specification can be considered almost mature enough for the first release. There certainly will not be any significant breaking changes. The current pre-release version is implemented in the following three official implementations:
- Libuavcan - this is the reference implementation in C++, mostly targeted at embedded systems and Linux. Being the reference implementation, Libuavcan is the most feature complete library and it sports the best documentation with elaborate tutorials.
- Pyuavcan - a Python 2.7/3.x package, primarily targeted for testing, scripting, development of GUI tools, etc. This package is compatible with Linux, Windows, and OSX. The UAVCAN GUI Tool (more on it later) is based on Pyuavcan.
- Libcanard - an alternative for Libuavcan for extremely resource constrained microcontrollers. Libcanard is a minimal implementation in pure C99 with no third party dependencies that works anywhere from low-end 8-bit AVR up to desktop Linux systems. This library is still sort of under development - it is generally feature-complete, but there's no comprehensive documentation published yet. We compensate the lack of documentation by this neat demo.
Another interesting thing that we made is the UAVCAN GUI Tool - a neat open source cross-platform application for bus management and diagnostics that runs on Windows, Linux, and (sort of) OSX (the project could use help from an OSX guru to resolve some packaging issues). The screenshots on the right are intended to demonstrate just how neat it is. It supports a bunch of use cases:
- Bus sniffing with transfer dissection.
- Plotting values from the bus in real time.
- Node reconfiguration and firmware upgrade over the bus.
- Python scripting with interactive IPython console.
- Support for different CAN hardware backends.
Speaking about tools, it is also worth noting Zubax Babel - a Swiss knife of a CAN adapter. Zubax Babel is a USB-CAN and UART-CAN adapter that can also be used as a UAVCAN dev board. The full specs are here, orderable from TitanElite, Inc.
As for other hardware, I put together a brief list of some of the most notable projects and products that leverage UAVCAN:
- Zubax Robotics - GNSS 2 (advanced GNSS module), Orel (ESC based on the PX4 Sapog firmware), and already mentioned Babel.
- OpenGrab EPM from NicaDrone (electropermanent magnet). This device is based on an interesting MCU - LPC11C24, a true single-chip CAN solution - a low cost MCU with embedded CAN controller and a CAN transceiverin the same package. This MCU is supported by Libuavcan (and soon will be supported by Libcanard too).
- Projects from Thiemar. Sadly, the hardware doesn't seem to be available at the moment.
- MAPIR Kernel camera for aerial imagery.
- The Paparazzi project appears to be in the process of integration with UAVCAN (by means of Libcanard). There's a video showing some kind of PoC.
- Obviously, PX4 and APM, including the official and derivative hardware designs.
We believe that the new tools and commercially available hardware should further incentivize UAV vendors, integrators and researchers to abandon inherently flawed interfaces (especially I2C and PWM) in favor of UAVCAN. There is a Gitter channel and a mailing list for those who have questions or just want to stay in the loop; furthermore, we at Zubax Robotics can provide assistance for companies and projects that are willing to adopt UAVCAN but lack relevant expertise. Also remember that with UAVCAN, everything is open source and licensed under MIT or in the public domain; as such, all specifications are completely free to use or distribute, and the reference implementations can be used in closed source commercial projects with no strings attached. Go have a look at our GitHub profile to learn more.