It’s a remote-controlled armchair that kidnaps people! It’s a really comfy armchair on an old electric wheelchair chassis that is controlled remotely by using three live video feeds and an Xbox controller. It has two big arms that are air-powered to “trap” people in the chair as it takes off and deliver them to random places at Burning Man events.
Super Technical Details from Matt (for the software/networking geeks)
We’re using an old Invicare electric wheelchair, that’s skid-steer (ie. has casters for front wheels and two independent electric motors on each back wheel). That means that we can spin on the spot, which is a ton of fun to do. The motors are controlled by a Dimension Engineering Sabertooth 2×60 controller using packetized serial data from a BeagleBone Black running Ubuntu linux.
Also on the chair are Phidgets thermocouple sensors (for motor and enclosure temperatures), as well as a Phidgets I/O board for setting relays. We are using a cheap optoisolated line-level relay board from DealExtreme to run the air solenoids.
Two-way audio is handled by running Asterisk PBX on the BeagleBone and using the DSP/console channel with a USB sound card, cheap Walmart USB-powered speakers, and a nice directional Rode VideoMic. On the controller side we used a Yealink cordless SIP phone (DECT) to register directly to the Asterisk server.
The telecom gear is RouterBoard RB493 CPU boards with R52Hn wireless cards, running the NV2 TDMA protocol between the chair and the base station, and running 802.11a/n between the controller and the base station. The Xbox Controller dongle lives inside the base station, as well as the SIP base – which means that the controller has a ~100ft range to the base station (but it’s less to carry around). A BeagleBone Black in the base station handles the Xbox controller commands, and acts as a web server for the controller.
On the software side, both the chair and the base station beaglebones are running a collection of scripts in both Python and NodeJS. The python scripts interact with the Phidgets library and the serial data for the motor controller on the chair side, and the Xbox controller on the basestation side. I ended up having to reverse engineer the data from the xbox kernel driver, as none of the higher-level drivers seemed to work as expected.
The NodeJS scripts handle all of the main “brains” of the operation. The base station sends packets at a regular interval (~50ms) to the chair, containing xbox control state, text to speech info, and a sequence number – and the chair sends ACK packets back containing all the telemetry information (sensor states), as well as the original sequence number. The base station uses this to determine latency. The chair’s NodeJS script uses asynchronous timers to set emergency stop routines for lost communication (motor stop after 500ms, full system stop and all relays off after 2.5s).
Camera data is handled by Raspberry Pi’s with the built-in PiCameras (with wide angle lenses attached). These stream h264 data using Gstreamer optimized for very low latency, to two destinations – another raspberry pi in the cabinet for recording, and the “controller”, which is an Odroid U3 running the default Ubuntu Desktop install. We also receive video directly from a D-Link fisheye surveillance camera, which has a bit more lag to it (~500ms), so it can’t be use for navigation.
The Odroid U3 is the main interface we use to control the chair. It receives the raspberry pi streams, and also runs a web browser window that talks to the controller’s BeagleBone with a really simple JQuery-based UI to get 500ms interval AJAX updates of the telemetry and text-to-speech status. The controller BeagleBone gets signal strengths via SNMP from the Mikrotik RB493.
Power on the chair is two 120Ah deep cycle lead acid marine batteries, in series to get 24V. We’d get about 2-2.5 hours runtime out of this on the playa with near constant driving. Most of the 5V electronics on the chair are handled by a Startech industrial USB 3.0 hub (huge input voltage range), and the Mikrotik can run directly off the 24V (also has a big input range). On the base station and controller we used Dimension Engineering 25W adjustable DC-DC switching power supplies and 5.5Ah 5S LiPo battery packs (which gave us pretty much all-day runtime).
I’m sure I’ve missed something in here – but if you have any questions feel free to send me an email.