A project log for Modular Unmanned Vehicle Controller

(former YAUVeC - Yet Another Unmanned Vehicle Controller)

E. N. HeringE. N. Hering 04/19/2019 at 02:290 Comments

Modular Unmanned Vehicle Controller

This project was created in 2009 to develop an unmanned vehicle control system for 
scientific purposes. I wanted to develop not only software but also a reliable hardware
which should be capable of handling redundancies and, most important, which should be
easily upgradable. New sensors and microcontrollers seem to be created frequently and, 
to deal with that, I made my system modular.

In the beginning there were many modules planned and I wanted to make them as cheap
and flexible as possible. Using my very limited knowledge of electronics, I selected
an ATMEL MCU which was the base of the Arduino. I rewrote a lot of code, dividing
solutions into libraries that focused on simple problems.

I tried to define a few standards on the hardware like PCB sizes, module and submodule
connections, inter-module communication interface etc. Then those decisions were 
transported to the code, which despite all the alerts from the AVR development community,
was written in C++.

Everything evolved slowly through four versions until the system converged to a working
solution on version 5, which used an SPI interface to connect modules and a locally developed
protocol to manage long data transfer between them without errors. 

Version 5 depended on a communications module which interrogated every slot of the main
bus asking if there was a module plugged there and which were its capabilities. A matrix 
was created with the obtained data with enough information for the module to take decisions
on which module should be interrogated in each system state to make the information flow
from sources to destinations. Amazingly, it worked. This solution made it possible to
create modules with mixed capabilities, like inertial sensing and piloting, and absorbing
all of the in the system. It also made possible to handle, in the future, the existance
of many sensor modules and many pilots in the same system. This opened the door for
critical fault handling.

Version 5 though, had its own limitations, like the mechanical coupling between modules 
and main bus which was very bad. Vibrations from the engines of a tricopter affected the 
sensor module and messed the readings. A few other problems were detected and I decided
to solve them on version 6.

On this new version I changed the MCU to a STM32F3, which is way more powerful than the 
ATMEGA328P. The new PCBs gained more space and a much better way to couple them mechanically.
Inter module communication was moved to a CAN interface. Everything now is faster
and more powerfull.