Open Source Software and Hardware
The base software on Spiri is open source, though we include certain proprietary packages on top of that, both of our own and others’. Our hardware design is also predominantly open and we support the development and making of Spiri parts, most of which can be 3D printed.
We hope and expect that our use of open source systems will help you and us in the following ways:
Support repair work and hardware variation;
Provide information security and peace of mind;
Foster the development of new software, features, and capabilities;
Subject our systems to robust review.
In this essay we will discuss a few of the major open source systems on Spiri and in general terms what we have done to the base install versions of these systems to make them work together or improve them.
Electronic Speed COntroller, BLHeli
The ESC (electronic speed controller) on Spiri runs the open source BLHeli firmware. We install the latest stable version in the factory. We provide instructions on how you can update the firmware. We do not have a Spiri-specific derivation of the base software, but we do support and document two variations of the settings. The first variation, the default, spins the motors in one sense only, either clockwise or counterclockwise. The second variation spins the motors in either sense. On Spiri Mu, that enables upside-down flight when used with symmetrical propellers.
Flight Controller, PX4
The flight controller on Spiri Mu is our derivation of open source PX4 firmware. Our alterations to the base stack allow SLAM and GPS (plus similar satellite networks) to work together on position estimation, and extend MAVLINK support to more input/output channels on the board. MAVLINK is an open protocol for communicating navigational messages. We also provide documentation on the default settings, and scripts to help you customize settings for your mission.
Operating System, Ubuntu 16.04
The main computer on Spiri runs Ubuntu Linux, version 16.04. On Spiri Mu, the main computer is a TX2 by Nvidia, which runs a quad-core central processing unit on arm64 architecture plus a graphics processing unit consisting of 256 Pascal CUDA cores. The kernel of the system is a highly customized derivative of L4T (Linux for Tegra) to optimize performance on our graphics-heavy architecture, and also to work with the hardware we connect to the main computer. This includes the cameras, the carrier board and its input/output ports, and the interface to the flight control board. We have also chosen to pare down to a minimum the packages installed with Ubuntu, while enabling packet forwarding for user interface.
Vision System, OpenCV
OpenCV3 is an open source computer vision suite in widespread use. We have customized its compilation, installation and configuration to take advantage of the parallel processing power of our CUDA cores.
Robot Operating System (ROS)
Spiri comes with ROS installed, currently ROS Kinetic. At its core, ROS is a communications system that allows software systems running simultaneously on a robot or among robots to share information with each other on demand. On Spiri Mu, for example, image frames from the cameras are published as ROS “topics” and these topics are used by the navigation system as well as the video recording system, both of which subscribe to the image topics relevant to them. Multiple Spiris in a splendor use ROS topics to share their position information amongst themselves so they can keep formation without any outside control.
Our installation of ROS is highly customized to make sure that our CUDA-enabled version of OpenCV is the only one ROS uses, and to set up properly the autonomous navigation, machine vision, deep learning and inference packages that Spiri requires.