Multicopter Flight Control (2013-2015)

One of my favorite projects: a flight control unit for multicopters with an integrated navigation system. The code is not based on an existing (open-source) projects and was developed from scratch for my research purposes. Features: on-board sensor fusion algorithms, STM32F407 microcontroller (168MHz, 192KB RAM, 1MB flash memory), ChibiOS 2.6.x real-time operating system, custom hardware. In total about 100,000 lines of C/C++ code. MEMS IMU, barometer, single-frequency low-cost multi GNSS receiver. Robust wireless 2.4 GHz telemetry. Includes a wide range of unit tests. As well as a SIL (software- in-the-loop) environment and a HIL (hardware-in-the-loop) environment. Can be coupled with the X-Plane simulator or a MATLAB simulation environment.

Screenshot

YouTube Video

Navigation Soft- and Hardware Solution (2012-2016)

I've developed and designed a complete low-cost navigation solution, based on the following components:

  • Gyroscope
  • Accelerometer
  • Magnetometer (with build-in calibration routines)
  • GNSS Receiver
  • Helix GNSS Antenna
  • Cortex M4 ARM Microcontroller (STM32407)
  • Three different on-board Kalman Filters
  • Code relies heavily on the Eigen C++ math library

Screenshot

YouTube Video

Lighthouse Tracking Simulation (2016)

This MATLAB simulation tries to answer the question what happens if a base station fails in a VR tracking application with two base stations (for example as used in the HTC Vive VR Tracking Solution or Nikon's iGPS System). Can the remaining base station in combination with an IMU provide a continuously usable tracking solution? The answer is: yes, for an astonishingly long time.

Simulation environment:

  • IMU (with the characteristics of the InvenSense MPU9150 and a 240 Hz update rate)
  • IMU Accelerometer spectral noise density: 0.008 m/s²/sqrt(Hz)
  • IMU Accelerometer bias random walk: 0.001 m/s²/sqrt(s)
  • One sensor (to detect the laser beam of the base stations)
  • Two base stations (at the beginning)
  • Lighthouse update rate 60 Hz
  • Lighthouse angle measurement white noise: 65*1e-6 rad
  • Simulation is written in MATLAB
After 60 seconds, base station 2 is disabled. So there is only one sensor and one lighthouse for the rest of the simulation. The total simulation time is 240 seconds (but this can go on for more than 1h). The user position is orbiting around location [4;4] with a velocity of about 0.3 – 0.5 m/s (figure 1). The object tracking is not lost, even with only one sensor and one base station due to the modelling of the system dynamics (supported by the IMU). As long as the Kalman filter prediction is corrected by single angle measurements, the tracking works. But it is not very accurate (figure 2). Though the accelerometer bias random walk is estimated quite well with only one base station.

Download the MATLAB simulation source code

 

Screenshot

A MATLAB multicopter simulation system "multicoptersim" (2015)

This toolbox can simulate pretty much any multicopter configuration one can think of. This is useful to test control algorithms as well as navigation algorithms (as IMU measurements are generated). The main purpose though is to simulate motor problems and test redundant flight control system configurations.

Screenshot

Stereo Camera Visual Odometry and IMU fusion (2014)

I've implemented an inside-out tracking that is using libviso2 in cooperation with my own sensor fusion hard- and software. Especially for the time synchronization it is useful to have full control over the hardware and to have a real-time operating system. This system works quite well, but it is not good enough for virtual reality applications.

Screenshot

YouTube Video

Quake 2 with IMU integration (2012)

Being hyped by the Oculus DK1 in 2012, I’ve added my sensor fusion algorithms to the Quake 2 engine.

YouTube Video

Android App Wireless IMU (2012)

This app sends the measurements from your phone inertial sensors via UDP as CSV (Comma-Separated Values) to a computer in your network. This turns your phone into a wireless inertial measurement unit (IMU).

Link to Google Play Store

 

Screenshot

Wireless IMU logo
Wireless IMU screenshot
GNSS RTK Integration into a Quadcopter (2011)

Program (written in C) to integrate a GNSS RTK solution into a multirotor aerial vehicle. The code is simulating a u-blox 4 receiver to inject a stream of navigation solutions with a much higher accuracy into the drone. The navigation solution is calculated with the open source RTKLIB package. The program runs on the BeagleBoard ARM Cortex-A8 single-board computer.

Screenshot

RTK solution
Flexible Least-Squares Solution Software: LSQ (2010)

The LSQ application is a free (as in beer) software tool to solve arbitrary overdetermined linear and nonlinear equation systems. If there is some interest in this application, I might release the source code (C#) at a later time.

Features

  • Math equation parser
  • Supports linear and nonlinear systems
  • Outlier detection with normalized residuals and global t-test
  • L2 (best linear unbiased estimator) and robust BIBER method (Wicki, 1998)

Get LSQ for Windows (457 KB)

 

Documentation

Link to documentation (PDF) with a small example adjustment process: LSQ.pdf

Screenshots (click to enlarge)

LSQ data LSQ stat LSQ settings
GPS Positioning with Carrier Phases (2010)

GPS navigation program written in C for position calculation based on the ambiguity function (see e.g. Hofmann-Wellenhof, B. et. al. (2001). GPS Theory and Practice, 5th Edition. Springer.).

Description PDF (German)

 

Screenshot

Bachelor Thesis at CERN (2010)

Bachelor thesis written at CERN (European Organization for Nuclear Research) in Geneva: 3-D Integrated Network Adjustment with a Parametric Height Reference Surface (written in MATLAB).

Screenshot

PPP - Precise Point Positioning MATLAB Library (2009)

A complete MATLAB library to calculate the position and velocity from L1 GPS raw measurements (code, phase and doppler measurements).

Corrections

  • Ionosphere (IONEX files)
  • Orbit and satellite clock (from SP3 files)

Description PDF (German)

 

Screenshot

IONEX corrections
Lynx - Multiplayer Zombie Shooter (2007-2009)

Lynx is my latest and completely self written C++ 3D engine. I've started this project in 2007 and I am still happy with the codebase. In 2009 I've uploaded the source code to Google Code as open source software (GNU General Public License v2).

Features

  • Multiplatform support (Windows, Mac OS X, Linux)
  • OpenGL 2.0
  • Shadow mapping, per-pixel lighting
  • Lag tolerant multiplayer with cubic movement interpolation
  • Dedicated server
  • Blender as a map editor + custom bsp compiler
  • Did I mention zombies?

Get from GitHub

 

Screenshots (click to enlarge)

Lynx Lynx Lynx
Vim color scheme: Blueshift

Not really a project: this is a color scheme for my favourite text editor Vim.

Features

  • Clean and bright coding environment
  • Visual Studio colors

Get Blueshift from vim.org

 

Screenshot (click to enlarge)

Lynx
Ray of Light - Multiprocessor realtime raytracer (2008)

Writting a ray tracing application is fun, as the math behind it is straightforward. Though a dual core CPU is just not fast enough for complex scenes and the code itself code is not very optimized. I might get back to this program with a 32 core CPU...

Features

  • Multithreaded raytracer
  • Runs on Windows, Linux and Mac OS X
  • Nice colorful spheres

Screenshots (click to enlarge)

Ray of Light screen 1 Ray of Light screen 2
Orca (2002-2003)
Orca
What is Orca?

Orca is a small 3D first person shooter (FPS), designed and programmed by Victor Rühle, Tobias Lawrenz and me. We've developed Orca in our spare time as a non-commercial project for learning purposes.

Engine Features
  • Direct3D Rendering
  • Terrain Renderer
  • Bonemodel System
  • User Modification (mods) Interface
  • Particle System
  • TCP/IP Internet Multiplayer support

Get Orca for Windows (2318 KB)

 

Screenshots (click to enlarge)

Orca Orca Orca
Orca Orca Orca
Wombat (2003-2004)

Wombat is a multiplayer space combat game, I've developed together with Victor Rühle and Tobias Lawrenz. Like Orca, Wombat is a non-commercial project we programmed just for fun.

Features:
  • Extensible OO design
  • Multiplatform (Windows/Linux Server and Client)
  • Low-bandwidth multiplayer capable (i.e. playable via 56k modem)
  • Designing and implementing a solid and reusable gaming toolkit library
Wombat

Screenshots (click to enlarge)

Wombat Screenshot 1 Wombat Screenshot 2 Wombat Screenshot 3
Wombat Screenshot 4 Wombat Screenshot 5 Wombat Screenshot 6
Sector based rendering engine and Maya converter (2004)

After Orca and Wombat I became interested in "indoor game environments" and the powerful 3D program Maya from Alias|Wavefront. So I wrote a sector based engine and a Maya converter to transform a Maya Scene into my own level file format.

My goals for this project were:
  • Using DirectX 9
  • Learning the Maya API

Screenshots

Maya Wireframe

Level editing in Maya

Maya Converter
Krautsystem (2003)

Inspired by the Lord of the Rings movies, I got interested in crowd systems. Thus the project name: "krautsystem". I've programmed a Java application to simulate groups of "fighting" entities.

My goals for the Krautsystem were:
  • Watching the behaviour of flocking entities
  • A solid and extensible 2D Java game engine

Screenshots

Krautsystem2

Blue vs. Red without obstacles

Krautsystem3

Displaying the enemy network between the actors