For this year’s JavaOne, Jim Weaver, Sean Phillips, and I presented a session entitled Creating Our Robot Overlords: Autonomous Drone Development with Java and the Internet of Things. We invested a lot of energy and had a great time developing several components that contributed to a more intelligent drone, and the presentation was well-received. There is SO much to be done, though, and we’re just getting started!
That said, we’ve been slower than we’d like in sharing some of the materials we created along the way, and we’re trying to catch up with some of those housekeeping chores now. This post is intended to provide a starting point and frame of reference for some of our decisions so far, provide some hints to intentions moving forward, and perhaps explain what may or may not make sense at first blush. Think of it as a map legend. :)
We decided early on that there were really two levels of autonomy we could work toward accomplishing, what we referred to very loosely as General Autonomy (GA) and Advanced Autonomy (AA). With the compressed timeline we had for JavaOne, we focussed primarily upon providing a reliable level of General Autonomy. Here is how we differentiated:
General Autonomy (GA): The drone is controlled by its onboard (Raspberry Pi) brain, with instructions issued by the brain via a Java (SE Embedded) program. The brain directs the drone’s movements step by step, e.g. instructing it to move a specified distance/speed/duration in a particular direction. An entire flight sequence is compiled in this manner by the developer, but the Pi executes it entirely from and on the drone itself, with or without external connectivity.
Advanced Autonomy (AA): The drone is controlled by its onboard (Raspberry Pi) brain, but rather than a very specific set of task-based instructions, the brain controls the drone using a goal-oriented - and self-adjusting - program. This requires a much greater awareness by the drone of its environment and the ability to extrapolate an initial framework of behavior based upon instructions further from a list of steps and closer to “navigate around the perimeter of this room at an altitude of approximately 2m/6.5’".
While a great deal of code was (and is) being developed along both paths, we checked into a repository our JavaOne demo code for sharing; more will certainly follow over time. Just recently, I created a wiki page detailing the steps we used to configure a Raspberry Pi as a "Positronic brain” for our drones (one for each, of course - what kind of mad science do you think we do, anyway?!?!). If you’d like to start working on your own intelligent drone, you can read what we did here and see what you think. This was our "version 1.0" and will change and adapt as platform(s) evolve, but our plan is to keep it up-to-date as we go along.
More updates to follow! This is an exciting area to explore, and as I said earlier, we’re just getting started. Join in the fun! How do you ever hope to stay ahead of SkyNet if you don’t help create it? ;)