Optimal Control on the Cubli System

The Cubli (introduction video) is a 15×15×15 cm cube with momentum wheels on three of its faces. By applying torques on the momentum wheels, the Cubli is able to jump up and balance on one of its edges or corners. This work implements H-infinity control to the Cubli system to stabilize it to the upright unstable equilibrium points. Simulations and control analysis are applied to evaluate and compare the performance of the H-infinity control system with the original LQR control strategy in [1]-[3]. The results shows that the H-infinity control is able to stabilize the system, more robust to disturbances and noises than the LQR controller, but harder to tune.

[1] M. Gajamohan, M. Merz, I. Thommen, and R. D’Andrea, “The cubli: A cube that can jump up and balance,” in 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems. IEEE, 2012, pp. 3722– 3727.

[2] M. Gajamohan, M. Muehlebach, T. Widmer, and R. D’Andrea, “The cubli: A reaction wheel based 3d inverted pendulum,” IMU, vol. 2, no. 2, 2013.

[3] M. Muehlebach and R. D’Andrea, “Nonlinear analysis and control of a reaction-wheel-based 3-d inverted pendulum,” IEEE Transactions on Control Systems Technology, vol. 25, no. 1, pp. 235–246, 2016.

Deep Learning Implementations for Computer Vision

Style Transfer

Iteration 0

Iteration 200

Deeply convolutional GANs and latent space interpolation

Image captioning using attention LSTM

Robots in Course Projects

Manipulate Blocks Control the Balance Bot Run SLAM on a Mobile Robot

Information Matrix Sparsification in SLAM

Remove x1

Sparsified factor graph

Original M3500 Dataset [1]

Remove multiple pose variables

Sparsified factor graph minimizing information loss

Explore the sparsity is important for solving large SLAM problems in real-time. In order to keep the memory and computation usage bounded, the algorithm has to marginalize out (remove) some poses, which would, however, result in a dense marginalized information matrix. In this project, we studied different methods to realize information sparsification for large-scale SLAM problems. We wish to approximate the dense marginalized information matrix with a sparse matrix while introducing a minimum information loss.

The approximation is generated by replacing factors around marginalized node to with virtual factors. Generic Linear Constraint (GLC) uses linear virtual factor while Nonlinear Factor Recovery (NFR) uses nonlinear virtual factor. We extensively studied GLC through implementing the algorithm on Matlab and proposed a new method called natural factor to generate nonlinear factors following the theoretical guide of NFR. Preliminary experiments show our natural factor is effective on certain datasets.

[1] E. Olson, J. J. Leonard, S. J. Teller, “Fast Iterative Alignment of Pose Graphs with Poor Initial Estimates“, 2006

Spider Legged Robot Climbing in 3D Block World

We present a three-layer planner for a spider legged robot that climbs in a 3D block world. First, a global path planner outputs a shortest path using weighted A* search; then, a local footstep planner determines a list of motion primitives to follow the global path; finally, a leg motion planner uses RRT-Connect algorithm and linear interpolation to link the states that specified by the motion primitives without collision with the environment. Through experimental test under a wide range of scenarios, we demonstrate that the combined system can output optimal global path and collision free local leg motion that reach the goal.

AirCombat Red & Blue - C++ game programming

A cute air combat game. The main mechanism: "red" and "blue" vanish when meeting each other.

It is a C++ program written from scratch using only OpenGL.

Code: https://github.com/fu-bo/AirCombat_RedBlue

Boom Boom Shooting - C++ game programming

A shooting game like a simplified version of "The Binding of Isaac".

There are multiple rooms. In one room there are multiple enemies, obstacles, and tools. You can shoot to attack the enemies and objects. The goal is to defeat all the bosses.

It is a C++ programming practice written from scratch using OpenGL.

Code: https://github.com/fu-bo/BoomBoomShoot