Robot software stack
This repo contains all the software used on our robots:
can-io-firmwarecontains the firmware that runs on the IO board
motor-control-firmwarecontains the firmware that runs on the motor board
proximity-beacon-firmwarecontains the firmware that runs on the proximity beacon, it's the same code as the motor board but with a different application that is tailored to the needs of our proximity beacon module
master-firmwarecontains the software that runs on the master board, it interfaces all the other boards over CAN and runs the robot's "intelligence".
eurobotcontains documentation and cofiguration files specific to the Eurobot competition
sensor-firmwarecontains code running on the sensor board
uwb-beacon-firmwarecontains code and documentation that runs on the UWB beacon board
hitlcontains code to support Hardware In The Loop testing of the master board firmware.
Other important software components can be found in this repo:
libcontains all the libraries and building blocks we use on multiple boards, which includes:
lib/can-bootloaderthe bootloader that allows us to update our boards (IO and motor) over CAN
lib/ChibiOSthe RTOS/HAL we use on all our boards
lib/uavcanthe CAN communication library we use on all our boards
lib/errora logging library
lib/parametera library to create and manage configurations of boards
lib/msgbusa publish/subscribe library for inter thread communication
- and more.
toolsgroups all tools we use to develop on the robot including:
tools/pid-tunera GUI to tune PID gains of motor boards over CAN, written using Python and Qt
tools/studioa set of introspection tools written in Python and Qt to debug our robots
uavcan_data_typescontains the custom message definitions (DSDL) for the UAVCAN communication protocol
cigroups scripts and Docker files for our continuous integration server
user-guidecontains high-level documentation about software and electronics components used on our robots
Building with CMake
To build one platform with cmake, for example here our UWB beacon board:
mkdir build-uwb && cd build-uwb cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/uwb-beacon.cmake # WARNING: Make all or make without target does not work. make uwb-beacon-firmware.elf # The resulting firmware is at `uwb-beacon-firmware/uwb-beacon-firmware.elf`.
To build the unit tests for all the boards:
mkdir build cd build cmake .. make all test
clang-format (tested with version 7 or greater) to enforce proper source code formatting.
You can use the
format-all.sh script in the root directory to format the whole source tree.
You can also use
clang-format -i --style=file src/foo.c to format a particular file.
Finally, some editors include support for
clang-format through plugin, check for yourself.