This blog is also available on Gemini (What's Gemini?)

UAV::Pilot v0.8 Released -- Now Supports WumpusRover


At long last, UAV::Pilot v0.8 has been released. This is a big update with lots of API improvements. Most of those improvements were decoupling the code to support my own WumpusRover in addition to the Parrot AR.Drone. That means a big goal has been reached, where UAV::Pilot can support multiple types of automated vehicles. It also means UAV::Pilot is a major component of the code running on board a UAV, in addition to running the client side.

The WumpusRover is a project I've been working on for a while. It's an old RC car I had laying around, retrofitted with a brushless motor controller, an Arduino, and a Raspberry Pi.

*Update*: Video of the WumpusRover will be up at[1][2]. Going to be leaving soon out of town, but wanted to make sure this gets up before I go out the door.

UAV::Pilot runs on the Raspberry Pi as a server, taking packets from the client and passing turning and throttle data to the Arduino. The reason for the split between Rapsberry Pi and Arduino is:

1. The Arduino has better support for the communication pulses used by RC servos and ESCs 2. The Raspberry Pi with Linux is not a real-time OS--that means a carefully timed signal to the servo could be interrupted by the OS 3. The Raspberry Pi can run Perl, support any WiFi adaptor that Linux does, and has an excelent camera module

(The camera module is not yet implemented directly with Perl support. This is one of my upcoming projects, which will give the WumpusRover a video stream, among other things.)

As you can see, the two complement each other's strengths. In the future, we might see cheap boards that can combine these two uses; the recently announced Arduino Tre looks promising.

I'll be posting more detailed instructions later. If you'd like to get started on your own rover, you can start with the Arduino code here:[3][4]

There are also some improvements to the older AR.Drone code. While making changes to the joystick API to support the WumpusRover, I found a case in the AR.Drone where its navdata sends a floating point -NaN. (More evidence that they shouldn't have been using floating point for this purpose, and that the AR.Drone was badly implemented in general). UAV::Pilot was crashing in this case, but now handles it gracefully.

Also, the nav data will now be sent over ol' fashioned unicast IP by default instead of multicast. This should make Mac users happy, as multicast isn't setup out of the box on OSX.