Avatar

Michael Hope

Software Engineer

Google Zürich

Biography

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

Interests

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

Education

  • Electrical and Electronic Enginnering

    University of Canterbury

  • Mathematics

    University of Canterbury

Recent Posts

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.

Self-contained and smoke

A day of highs and lows. Here’s Kieferbot still in teleop mode but now self contained: The PinePhone is taking commands from a PS4 DualShock over Bluetooth using ds4drv and sending them to the IO board over serial.

Teleop

As a winter project, I’m turning my PinePhone into an indoor robot. The Pinephone has everything needed for a decent stand-alone robot: plenty of CPU, a camera, gyro/accelerometor/compass, display, and it can run Debian.

Bare metal Raspberry Pi Zero

These are short notes on loading baremetal software on the Raspberry Pi Zero. I started down this path due to wanting to learn Rust, which lead to Tock which is an embedded operating system in Rust.

Projects

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 (!

Zephyr Project

Added SAMD21 support to the Zephyr ROS

C++ in 2017

Seeing how C++17 compares to Go

spdbt

A fast indoor mousebot

pipoint

A rover tracking camera

Citizen

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

Ideas for future projects.

nppilot

The Never complete; often never started autopilot.

Others

Some things I’ve hacked on.

PL/0 implementation

A toy compiler for the PL/0 educational language.

ser2neo

ser2neo makes it easier to drive a NeoPixel ring

Templates

Markdown templates for project plans, etc.

Notes

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.

NAZE32

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.

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.

Machines

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.

Mugs

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.

Builder

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.

CopterControl

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.

Fancybox

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.

BeagleBone

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.

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: <?xml version=“1.0” encoding=“UTF-8”?> portable_audio_player camera