Skip to content

CAN Bus Intro

David Lenfesty edited this page Mar 5, 2020 · 2 revisions

CAN Bus

CAN Bus is a 2-wire, daisy-chained communications protocol. It uses differential signalling to provide a medium-speed, reliable physical layer, and has a simple frame-based protocol.

I don't think I can explain it too well, so I would recommend looking at wikipedia and the uavcan spec

UAVCAN

UAVCAN is the higher level protocol we leverage to actually get things done. It operates based on a topic system, similar to ROS, however it differs in that all messages of a message type are recieved by all nodes that subscribe to that message type. I would recommend reading all of the pages on the specification.

On the Teensy's that run every embedded board, we use libuavcan, a C++ library, to implement the protocol. The build tooling is based off of someone else's work, you can still see it in the repo. Don't touch the build system unless you really know what you're doing. PlatformIO is fragile.

On the ROS side, we use canros, which is a bridge between ROS topics, and UAVCAN.

We do have several custom message types, which are found in au_teensycode/lib/arvp.

V0 vs. V1

You may notice some stuff about UAVCAN v0 vs v1. There was meant to be a full, production release of the v1 version of the spec in late 2019, however that did not happen, likely due to a lack of manpower. In the meantime (and likely for a while after v1 is released), we are sticking with v0, as that is what all of our stuff is based on.

Clone this wiki locally