LinkedIn Reddit icon

Notes from a Programmer

I'm currently a Software Developer for Aurora Innovation in the San Francisco Bay Area, where I'm helping build self-driving cars. This is my blog, where I've put a bunch of reminders of things I want to remember.

Plotting C++ Code

I do a lot of scientific computing in C++, and often have a need for plotting the internals of my algorithms. I love the Eigen Matrix Library, but directly plotting the contents of an Eigen Matrix can be difficult. I’ve narrowed in on a workflow that I really like and want to share. One example might be if I have a Matrix X which contains in each column the estimated state of the quadrotor at each time sample.

Comparing Eigen, GSL and TNT

For a project I’m working on, I need to reduce memory usage on an embedded processor which is currently using Eigen for a non-symmetric eigenvalue decomposition. As all you guys know, that is finding $\lambda$ and $\mathbf{x}$ such that for an arbitrary square matrix $A$ $$ A\mathbf{x} = \lambda\mathbf{x} $$ There are a number of generic algorithms for solving this problem if $A$ is symmetric. This is an easier case becasue all the eigenvalues will be real.

Interrupt Driven SPI using DMA on the STM32F4

I recently have been working on my driver library airbourne for STM32F4-based flight control boards, like the openpilot REVO. I want a driver library that is licensed under BSD-3, and doesn’t compromise modularity, or processor time. This post is about my full duplex asynchronous SPI driver, which uses DMA under the hood. As I put this together I realized that there could be more tutorials on how to set this up.

Killing Gazebo, Every Time

I do a lot of development with Gazebo. A problem that has plagued me has been the fact that gazebo doesn’t listen to the Ctrl-C command, and instead needs a SIGTERM. This is super frustrating, because I have to wait something like 15 seconds before it finally dies, and when I’m trying to develop a controller, that time is valuable. Here’s my solution (it’s a major hack). All you do is modify the nodeprocess.

Speeding Up Compilation with ccache and distcc

As a ROS developer, I find myself wanting to do clean builds of my ROS workspace pretty frequently. This can take a really long time if I’m compiling things like GTSAM and g2o or visual odometry algorithms. ccache is a compiler cache which hashes the source files to determine if it can use a cached version of the object file when doing compilation. The authors claim that it produces identical results to normal compilation.

Getting My Bluetooth Headphones working with 16.04

I have had a lot of issues getting my Bose Soundlink Headphones working in 16.04. I had gotten it working before, after looking at several websites, but I could never reproduce it working. I just got it working again after a fresh install of 16.04, so I though I would compile a little list of instructions to get it working. Disable LE bluetooth edit /etc/bluetooth/main.conf and change (starting at line 48) source link