I've uploaded a bunch of projects to GitHub.
Checkout my GitHub profile!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
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
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
Download the MATLAB simulation source code
Screenshot
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
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
Being hyped by the Oculus DK1 in 2012, I’ve added my sensor fusion algorithms to the Quake 2 engine.
YouTube Video
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
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.pdfScreenshots (click to enlarge)
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
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)
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)
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)
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
Screenshots (click to enlarge)
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
Level editing in Maya
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
Blue vs. Red without obstacles
Displaying the enemy network between the actors