Real Time kernels and audio on the Raspberry Pi

April 11, 2014

A year or two ago I posted about how you could send audio over the internet with Raspberry Pis using the OpenOB project. Since then the OpenOB project has taken off, with lots of contributions from the community and lots of improvement as a result.

What hasn’t aged well is the Pi. A firmware update to fix some keyboard compatibility issues caused some serious issues with audio over IP, as both the Ethernet controller and USB sound card shared a USB bus which couldn’t operate quickly enough to handle the precise timing demands. Fortunately, the Wolfson Audio Board has come along to save the day – and it’s certainly promising.

Sadly, the kernel support for the Wolfson device isn’t in the mainline kernel yet, so that means using their custom OS image, or building our own kernel. On top of that we’d quite like a preemptible kernel to allow us to get lower latencies in userspace. This is crucial for reliable jitter-free low-latency audio, but because it’s quite niche this also means we need to apply some non-mainline patches to the Raspberry Pi kernel. The Wolfson drivers will eventually make it to the Pi kernel by default, and hopefully someone familiar with packaging for Debian/Raspbian can contribute a package to provide a real-time patched version of the kernel; but in the meantime we need to get our hands dirty. Here’s how to get a stock Raspbian image turned into a low-latency audio capable flavour, broken down and explained a bit. read more …

Diving into Erlang – a Rubyist’s perspective

March 17, 2014

Given what I’ve been writing for the last year and a half has been large scale distributed systems it occurred to me that I should probably look at Erlang, and in part Elixir.

Erlang, for those not in the know, is a functional programming language written by Ericsson ages back for telecoms switch programming. The key requirements were to build systems that were reliable, handled failure gracefully, and operated at huge scale with massive numbers of concurrent activities, connections and tasks.

Real reliability means distribution across hardware – you can’t do five-nines on a single computer. Erlang excels at these tasks by way of a very clever virtual machine and some interesting design choices. read more …

Tags

QGroundControl 2 on Arch

January 15, 2014

For about 5-6 months I’ve been tinkering with a couple of UAV platforms – my UAir R10 quadcopter (which, thanks to UAir being nothing but a couple of scamming students with little actual clue about making quadcopters, has been almost entirely replaced after one crash) and a Hobbyking Bixler fixed-wing aircraft I’ve stuffed full of electronics.

I’m now finally at the point where I can start strapping proper autopilots to these, but to do that I need a ground station with some software to control the autopilot.

In general, the autopilots out there make use of a protocol called MAVLink to talk to a base station via a telemetry link (usually 433MHz). This is great, because it’s a consistent open protocol that means most UAVs can make use of common basestation software.

The most popular of these is the QGroundControl project. This is a great bit of cross-platform software, but took a bit of fiddling to install on Arch Linux, which I’ll detail here. read more …

Tags