BurtOS encompasses the base station and rover computer applications deployed to operate the Binghamton University Rover Team's Mars rover. This 2.0 version was started in the 2022 competition year and will replace the legacy RoverSystem software. The decision to redevelop the software was reached after evaluating weaknesses and scalability issues in the legacy software. We intend BurtOS 2.0 to be highly modular to rapidly adapt to rover hardware changes.
BurtOS 2 is a new project and thus this section reflects our design goals.
Target name: basestation
The base station is used to drive the rover and monitor onboard sensors. The base station GUI will offer modular windows for monitoring the rover. The base station uses GLFW and NanoGUI for graphics rendering and input processing.
Target name: subsystem
The subsystem program runs on an onboard Raspberry Pi. It receives commands from the base station and controls hardware on the rover.
Not updated for BurtOS-2. The video/perception computer program streams video from rover cameras to the base station.
All libraries and applications in BurtOS 2.0 allow cross-platform development. However, we primarily support Ubuntu-based operating systems for deployment. The subsystem apps use libraries only present on Linux and/or Raspberry Pi OS, but these features are automatically disabled when unavailable on the system.
BurtOS 2 uses CMake, which generates makefiles for many build systems, compilers, and IDEs. Be sure to use CMake 3.16 or newer. Check whether CMake is installed and meets the version requirement with this terminal command: cmake --version
.
If you intend on building the base station, run git submodule update --init --recursive
from the repository root. Follow the build instructions for your platform.
While you are not locked to a specific toolchain, the process suggested below will get you started. The dependencies, however, are not optional.
sudo apt update
. You may want to upgrade your packages as well (sudo apt upgrade
).sudo apt install git
git submodule update --init --recursive
(unless you do not need to build the base station)sudo apt install cmake
.sudo apt install g++
), though Clang should work too.ninja
appears, it can be replaced with make
to accomplish the same task (except for installation). Installation: sudo apt install ninja-build
or sudo apt install make
.
sudo apt install libboost-dev libboost-program-options-dev
sudo apt install protobuf-compiler
sudo apt-get install lua5.3-dev
sudo apt install libboost-all-dev
CXX=g++ cmake -S . -B build -GNinja
GXX=g++
and -GNinja
in the build directory. To change a CMake variable definition (ex. change build type to Release), you do not need to supply the other options. In this example, cmake -B build -DCMAKE_BUILD_TYPE=Release
will work.ninja -C build
. The executables are placed in build/bin/
.
-C [directory]
option specifies the directory for Ninja/Make to use. The default is the current directory. You could also cd build
and only run ninja
.ninja -C build basestation
.Only two options are supported for building on Windows: WSL and MSYS2 MinGW. If you choose WSL, follow the Ubuntu instructions. See MSYS2 MinGW instructions below.
The Ubuntu section provides more context for each command, so read over that section, too. Both procedures are similar, but with different package managers (pacman vs APT) and different package names.
pacman -S git
. While both can be installed on the same system, they are not interchangeable since Git for Windows uses CRLF line endings and MINGW git uses LF line endings.pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-ninja
pacman -S mingw-w64-x86_64-boost
pacman -S mingw-w64-x86_64-protobuf
pacman -S mingw-w64-x86_64-lua
CXX=g++ cmake -S . -B build -GNinja
ninja -C build
Must have Xcode, otherwise a compile error will occur as some of Xcode's command line tools are necessary.
brew install git
brew install cmake
Make or Ninja
. We recommend Ninja
as it is newer, faster, and designed for automated generation by tools like CMake. These instructions always show Ninja. However, wherever ninja appears, it can be replaced with make to accomplish the same task. brew install ninja
or brew install make
.
brew install protobuf
brew install boost
brew install lua
Set variables with CMake on the command line by adding: -DVARIABLE_NAME=VALUE
Default: OFF
Description: If set to ON
, the base station and dependencies will not be built. Use when compiling on Raspberry Pi or when graphics support is not needed. If not specified, CMake will try to detect whether the system supports graphics. If OpenGL is missing, NO_GFX is set to ON and a warning is produced.
Default: OFF
Description: If set to ON
, the network library example applications will be built. This includes chat
and rtt
.
Default: /opt/libjpeg-turbo/lib64/pkgconfig
Description: Search path for pkg-config to find TurboJPEG for the video computer. Only applicable if TurboJPEG was installed manually. Path is not referenced for packages installed with APT.
Default: automatic detection
Description: If set to ON
, the subsystem program will be compiled with Linux-only CAN bus libraries. Otherwise, the program is compiled in offline mode and calling CAN bus functions has no effect.