Carefully-designed utility for quickly rendering high-quality images of fractals. I supports rendering directly from the command line, as well as an interactive GUI for "exploring" the fractals. There are a ton of user-configurable parameters for each fractal type, passed in as a JSON file. The core library leverages rusts generic programming and parallel processing with Rayon to achieve fast rendering. The library also includes some nice features like anti-aliasing and convergence extrapolation to get high-quality renders.
← Monte-Carlo simulation of poker handsThe order of the hands (pair, two pair, three of a kind, ...) in poker is based on the likelihood that each type of hand is drawn at random. I've always been curious to see if I can reproduce the analytic results with a monte-carlo simulation. Turns out you can!
After work during the spring semester of 2018, I taught "optimal control for robotics" at Tufts University, basing the curriculum on my graduate work at Tufts. I ran the course of this GitHub page, with lecture notes, homework assignments, and demos.
A few tutorials, written in Matlab, that demonstrate how to use the Langrange Equations to derive the equation of motion for a variety of systems, including:
← Bouncing BallA ball bouncing around on hilly terrain. This simple simulation is designed for learning event detection with ode45 in Matlab.
← Toppling StickA simulation of a stick toppling from rest. Inspired by Tad Mcgeer's 1989 paper: Wobbling, toppling, and forces of contact. My simulation is based on a finite state machine, using ode45 for integration and event detection. I used this simulation to study the effects of coefficient of friction and moment of inertia; the results are discussed here.
← Three massesA system of three point masses in 2D. The center mass is connected to the other two with arbitrary force and torque actuators. This is the basis for another simple model of walking: a point mass at each foot, and at the hip. The simulation supports many different contact configurations, as shown in this simple test animation.
I wrote a trajectory optimization library for Matlab, as a way to collect many of the things that I've learned about trajectory optimization. In particular, I tried to make the code readable, and I've also made it easy to compare different transcription methods. For example, it makes it easier to understand the trade-offs between multiple shooting and collocation, or whether it is worth it to use a high-order method.
← Double Pendulum WalkerThis code uses GPOPS to find an optimal walking trajectory for a double pendulum model of walking.
← Cart-Pole Swing-UpSolves the swing-up problem for pendulum handing from a cart. There is a motor in the cart, but the pendulum hangs free. I solve the problem using three transcription algorithms: Multiple shooting, Orthogonal Collocation, and GPOPS. The differences between these methods are discussed here.
Finds an optimal policy for an inverted pendulum, by converting the continuous system to a Markov Decision Process (MDP) and solving the Bellman equation using value iteration.
← Tractor Trailer ControllerI wrote this simulation for my Q-exam presentation . It has partial sensing of its state using noisy sensors and control of the steering angle and travel speed (both of which were bounded). The states is estimated using an extended Kalman filer (EKF) and then controlled using a discrete linear quadratic regulator (dLQ), linearized about the current state estimate.
← LQR Trajectory TrackingA tutorial for using time-varying LQR to stabilize a non-linear trajectory. The code compares the time-varying gains to the infinite horizon gains. It also computes an approximation of the reachable set, using two different methods.
← Chebyshev PolynomialsA small library of functions that use Chebyshev polynomials for function approximation and solving differential equations. These functions are also used in my orthogonal collocation trajectory optimization program. The background methematics for this library are largely taken from a book by Lloyd Trefethen: Approximation Theory and Approximation Practice.
← CMAES DemoThis code uses Covariance Matrix Adaptation Evolutionary Strategy (CMAES) to solve for the gains in a simple non-linear controller.
← Function SmoothingThis code is used to create smooth versions of commonly used discontinuous functions (max,min,abs,ramp,clamp...). There are two methods for smoothing that are used: exponential, and polynomial.
This package contains a few functions for making simple 2D scientific plots and animations based on the standard java.awt and java.swing packages. It also includes some code for getting the frame-rate of an animation correct, as well as linking buttons to parameters in an animation.
← DynamicalSystems and ControlA few functions that I've used in my Java simulation libraries for doing simulations of walking robots. Most code is not posted, but I have included a few utility classes, such as a Butterworth filter.
← ExamplesA few executable Java classes that demonstrate the use of the above packages, particularily for plotting and animation.
← GamesA place to put simple Java games. So far I've only written one: Snake.
The source for this website is in GitHub, including all of the Javascript that runs the interactive tutorials.