Posts

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.

ESPHome as a Ruuvi bridge

ESPHome is a framework for building custom home automation that runs on an ESP8266 or ESP32. It’s pretty cool - you select and configure components by writing a YAML file, which then drives host side Python snippets to configure and bind the device side code, which is then built and pushed using PlatformIO.

Android phone as an alarm clock

My son wanted to get an alarm clock for his room which preferably plays MP3s. MP3 players are surprisingly expensive at 40 CHF for a 4 GiB model so I picked up a used Moto E 2nd gen phone for 35 GBP, loaded a stripped down version of Lineage OS on it, and designed a 3D printed a stand:

ST Link v2 clone as a dev board

I got distracted and had a hack on using a STL Link v2 clone as a development board. There’s a lot to like: A Cortex-M3 STM32F103C8T processor with 64 KiB of flash and 20 KiB of RAM 4 I/O lines and a LED to blink Decent support in STM32duino with a DFU bootloader Comes in a case and plugs directly into a USB port ~$2/each The I/O is strange and limited but it’s enough to drive a RGB LED via PWM, drive a 40 RGB LED pHAT over SPI, and drive a 320x240 LCD over fast bitbanged SPI.

SDHC over SPI performance

I’m hacking on adding SDHC over SPI block device support to the Zephyr Project RTOS. I’m currently getting 224 KiB/s on an Arduino Zero with a 4 MHz bus and 1 KiB read size, which is an OK-ish 46 % of the top bus capacity.

The many different CRC16-CCITTs

I’m hacking on adding Arduino Zero support to the Zephyr Project at the moment. I had a look at speeding up crc16_ccitt() but ran into a problem: there’s so many variants of CRC16-CCITT to choose from!

OpenOCD with the ST-Link v2

There is an issue when trying to program a SAMD21 like in the Arduino Zero using OpenOCD with a ST-Link v2 which gives errors like this: ** Programming Started ** auto erase enabled Info : SAMD MCU: SAMD21E18A (256KB Flash, 32KB RAM) Error: Failed to erase row containing 00000000 Error: SAMD: failed to erase sector 0 Error: failed erasing sectors 0 to 0 The issue is that NVMCTRL_CTRLA is a half-word register and the ST-Link v2 emulates the half word write using two single byte writes.