Michael Hope

Software Engineer

Google Zürich


I’m a software engineer from Christchurch, New Zealand now in Zürich, Switzerland.


  • Autonomus machines, especially drones
  • Developer tools
  • Languages, and their use in embedded
  • Embedded software and electronics


  • Electrical and Electronic Enginnering

    University of Canterbury

  • Mathematics

    University of Canterbury

Recent Posts

Vouch for authentication

I’ve started using Vouch for SSO to my personal site. Quite happy with the experience - it integrates well with Nginx, was straight forward to setup, and is straight forward to enable for different paths on the site.

Propeller adapter

A nice thing about having a 3D printer is quick fixes to small things. The 8x4 propeller that came with my Bixler 3 was loose on the motor shaft, so I 3D printed an adapter:

Bixler 3 Drone

I recently purchased a HobbyKing Bixler 3 to use as a autopilot platform and am pretty happy with how it turned out. Both the under wing area and nose area have plenty of room and could easily fit a Pixhawk 4 Mini with GPS and telemetry.

Pan/tilt mount for a cell phone

I think it’s important to also post about the projects that didn’t turn out. Pudel was a project to automatically track and video a model plane using a cell phone camera.

Tracking using a camera

Here’s Kieferbot being tracked through a camera: It took a few iterations but I settled on matching the colour of the floor to create a floor mask, then findCountours to find the contours as a tree, and then searching the children of the root contours.


ST Link v2 clone as a dev board

Notes on using an Aluminium case ST Link v2 clone as a development board. In summary, it can: Talk to the host over USB Blink the built-in LED (!) Drive a RGB LED via PWM Drive a 40 RGB LED pHAT over SPI Drive a 320x240 LCD over fast bitbanged SPI Docs Schematic STM32F103C8 datasheet STM32F103 series reference manual Programming I used a Segger J-Link to load the pre-built STM32duino bootloader.

Zephyr Project

Added SAMD21 support to the Zephyr ROS

C++ in 2017

Seeing how C++17 compares to Go


A fast indoor mousebot


A rover tracking camera


A balancing robot written in Go and running on ARM Linux.

Solar power for my office

I’m getting a 10 square metre office built in the garden. Let’s solar power it! This page has notes. Most bits are from Jaycar. A 380 W pure sine wave inverter.


Ideas for future projects.


The Never complete; often never started autopilot.


Some things I’ve hacked on.

PL/0 implementation

A toy compiler for the PL/0 educational language.


ser2neo makes it easier to drive a NeoPixel ring


Markdown templates for project plans, etc.


ArduRover based nppilot log

Day 1 Controller brownout when accelerating. I can reproduce this on the bench by gunning the throttle with the wheels off the ground. The documentation suggests that the power module is designed for 3S batteries, not the 2S equivalent that my 7.

LPC810 Hacking

The LPC810 is a Cortex-M0+ in a 8 pin PDIP. PIO0_5 /RESET (o ) PIO0_0 U0_RXD PIO0_4 U0_TXD ( ) Vss PIO0_3 ( ) Vdd PIO0_2 ( ) PIO0_1 /ISPEN See also the user manual.


The NAZE32 is a STM32 based flight controller. I own a rev5 version with the baro and magnetic compass that would be a great sensor and controller board for nppilot. This page has notes on the hardware itself.

Bone v2

I’m using a small, no-name RT5370 from ebay. It’s not fast but it is compatible and reliable, unlike the other three adapters that I have. Disable interface renaming: cd /etc/udev/rules.d; ln -sf /dev/null 70-persistent-net.


crucis Thinkpad R500 P8600 HD3470 Uses PC3-8500 / DDR3-1066 orion ASUS 1215B Uses DDR3 PC3-10600 2 x SO-DIMM Spare Kingston KVR800D2S5/2G: 2GB 256M x 64-Bit DDR2-800 CL5 Elpida 1GB 2Rx16 RC2-6400S-666

Mini Xplus as a Server

Random, incomplete notes on using a Miniand Tech Mini Xplus H24 as a server machine. v2 I’ve soldered up a serial port so doing things from scratch is much easier.


From left to right: Prague for the 2010-07 sprint Orlando, Florida for the 2010-10 LDS Budapest for the 2011-05 LDS Dallas, Texas for the 2011-01 sprint San Francisco, California for the 2012-02 Connect Orlando, Florida for the 2011-10 Connect Brisbane, Australia for the 2011-01 LCA Hong Kong for the 2012-05 Connect San Diego, California for the 2012-08 Plumbers Copenhagen, Denmark for the 2012-10 Connect I’m missing a Cambridge mug for the 2011-08 Connect and Shenzhen for 2011-11.

AVR Hacking

Programmer JTAG Name M168 T85 3 - MOSI 17 5 4 - RESET 1 1 5 - SCK 19 7 6 - GND 8 4 7 - MISO 18 6 ATTINY85 PB5 (o ) VCC PB3 ( ) PB2 PB4 ( ) PB1 GND ( ) PB0 Serial 5V o o o o TX o o RX

ARM host

I’d like a lower power server for inside my home. Some requirements: Cortex-A9, quad core, 1.2 Ghz or more. 2 GiB Ethernet. USB hosted is OK, native gigabit is better.


I’d like to set up clean auto builds of my personal projects and some upstream projects like crosstool-ng, gcc, and binutils. Clean install I’d like the build to run in a clean setup so the base system can be used for general development without affecting the build results.


TCHAIN_PREFIX = arm-none-eabi- export CODE_SOURCERY = NO to skip -fpromote-loop-indicies Command line programming There’s an experimental command line programmer in ground/openpilotgcs/src/experimental/USB_UPLOAD_TOOL. Use http://juju.net.nz/src/pilot-hacks.git/tree/opuploadtool.mk to build it. Custom code The link command is

Olimex STM32-H103 Notes

The Olimex STM32-H103 is a ST STM32F1 based development. Pluses are the USB port, proper JTAG connector, and all I/O out on 0.1” pitch pins. Details: STM32F103RBT6 CPU 128 Ki flash, 20 Ki RAM, 72 Mhz Standard 20 pin JTAG connector Green STAT LED on PC12 8 MHz crystal Links:

Synology DS123 Hacking

Links SynoCommunity Optware What’s running The usuals cron inetd syslogd rsyslogd hotplugd Services ntpd sshd Apache httpd 2.2.22 postgres cupsd Sambda nmbd / smbd snmpd avahi-daemon lighttpd for MediaServer Layout Generally under /usr/syno with one directory per package.

Remote work from New Zealand

I’ve worked remotely since 2009. Here’s some random notes. Organisations The New Zealand Open Source Society: http://nzoss.org.nz/ Canterbury Software Cluster: http://www.canterburysoftware.org.nz/ Institute of IT Professionals (old NZCS):

C++11 abuse

Using the new features in C++11 and the GCC extensions in anger.


OpenWRT can do quite a few things I need on my network that are running in many places, including: DHCP server with DNS hooks - dnsmasq Netboot/DHCP/TFTP server - dnsmasq Proxy - polipo It could let me use IPv6.

LPC1114 Temperature Sensor

The idea is to use the Cortex-M0 based LPC1114 as a low power micro in a remote temperature sensor. Use a solar light as the case and power source and it should run forever.

Jaycar MP3735 MPPT solar charge controller

I’m using the Jaycar MP3735 12V/24V 30A MPPT Solar Charge Controller for charging my office. It’s got a micro on board so let’s open the box and try and get more information out of it.


This page has terse notes on installing the Linaro LEB root filesystem on a BeagleBone, setting up the USB Ethernet gadget, and enabling basic networking. Initial Grab the boot partition contents to get MLO, u-boot, and the kernel.

libmad on the BeagleBone

(or really any Cortex-A) [[notes/bonemad]] I’m mainly interested in performance as power used ~= 1/performance. Using libmad-0.15.1b-7ubuntu1 from Precise and Linaro GCC 4.6 2012.02 as a cross build setup. Has its own complicated and out of date way of selecting the optimisations.

BeagleBone playing media

I have a XITEL MD-PORT AN1 USB Audio adapter. It sounds quite good. Can I hook it to my BeagleBone and use it as a remote audio player? On Precise I see:

Running Ubuntu armel cloud instances manually

Documentation: https://help.ubuntu.com/community/UEC/Images The image itself: http://uec-images.ubuntu.com/oneiric/current/oneiric-server-cloudimg-armel-disk1.img This is the plain QCOW2 image. The normal one includes OMAP3/4(?) kernel but I’ll use the vexpress-a9 Linaro hwpack instead. michaelh@crucis:~/linaro/tests/qemu/img$ qemu-img info oneiric-server-cloudimg-armel-disk1.img image: oneiric-server-cloudimg-armel-disk1.

StatusNet installation

Download 1.0.1. Needs PHP 5.2.3+, MySQL, various extensions. apt-get install php5-cli mysql-server php5-curl php5-mysql php5-gd php5-gmp Would be nice to shift to Debianised versions of the external libraries. MySQL password with a c.

Syncing over MTP

info.product = ‘GT-P7510/Galaxy Tab 10.1’ info.vendor = ‘Samsung’ usb.serial = ‘304D19FDB028588E’ info.capabilities = { ‘camera’, ‘portable_audio_player’ } According to: https://answers.launchpad.net/ubuntu/+question/69910 Set /etc/hal/fdi/policy/no-mtp.fdi: portable_audio_player camera