I'm porting my AVC entry to Raspberry Pi + Rust !

August 24, 2016

I very recently started using the Rust programming language professionally and although I am still working my way through the learning curve, I feel that I am proficient enough to "get it done" even if it isn't using the most idiomatic Rust code. I'm enjoying the language immensely and have been spending evenings and weekends challenging myself to solve various problems in Rust.

I've even created a dedicated blog to write about my experiences learning rust: Keep Calm and Learn Rust.

After attending the Boulder/Denver Rust Meetup recently, I agreed to give a talk on Rust at their next meetup on 9/21, perhaps related to IoT or Raspberry Pi.

This past Saturday (8/20) I started playing around with Rust on the Raspberry Pi and started researching how to interact with webcams as well as serial and SPI sensors. Within a couple of hours I was hooked and decided to commit to upgrading my Sparkfun AVC entry from an Arduino platform to a Raspberry Pi platform with as much logic as possible implemented in Rust.

Yes, that's right ... with a perfectly fine working entry, and with exactly four weeks until the event, I decided to completely change the hardware and software architecture. Have I bitten off more than I can chew? Maybe ... we will see.

Moving to the Pi opens up so many opportunities. I have already prototyped processing a live video stream using Rust and OpenCV and overlaying text onto the captured frames, so I can include instrumentation data (GPS, compass bearing, etc) in the video. This will really solve the problem I have had of debugging the vehicle after each run to see what really happened.

Moving to Rust is ideal because I can call C code (such as OpenCV) with zero overhead. Rust also ensures that my code will be robust thanks to its memory safety features.

I am now 4 days into the process and have been able to read GPS and compass data successfully using an FTDI Basic breakout to connect the sensors to the Raspberry Pi's USB ports, and as I already mentioned, I have been able to add real-time instrumentation data to a video stream.

There are challenges ahead though. I need to figure out SPI communications (for the board that I have that monitors the ultrasonic sensors - and this is based on 5V rather than the Pi's 3.3V). I'll also have to implement a serial protocol in Rust to driver the motor controller board, since there is no Rust source code available yet.

You can follow along with my progress in several ways - you can subscribe to this blog, you can follow me on twitter at @andygrove73, and you can watch my github repository. This is all open source and I hope I can inspire others to try Rust out by sharing this code.