AndroidRover A Technical Description
IntroductionIn the last decade, technology has advanced to the point that there is essentially a computer in the pocket of every adult individual in the modern world. Much of the capability of this technology however, goes unharnessed. AnroidRover intends to put that capability back to use. Combining the video call abilities of the modern smartphone with the inexpensive hardware brought forth by a burgeoning hobby robotics industry, anyone with $300 to spare now has access to the ability of "telepresence", once only available to those with deep pockets. More importantly, the software behind AndroidRover remains open source, available to whomever wishes to inspect it and learn about developing mobile applications for robotics. For those who are physically tied to a location, the ability to inexpensively communicate with others and interact with an environment perhaps hundreds of miles away, could be potentially life changing.
Description and Function of PartsThere are two major components to the AndroidRover project. The most obvious is the rover itself, however, without the custom Android app that acts as the brain of the rover, driving anywhere would be difficult.
The RoverServer APK consists of all the necessary components to control the movement and direction of the rover. It is based heavily off of the examples given from the IOIO project to create a service that runs in the background of Android. The ability to run in the background is crucial to the success of AndroidRover's open nature, because it allows any video streaming application of the end user's choice to be run in the foreground. This means that after the RoverServer is started, you can connect to it and stream video from any number of pre-existing video streaming services. The main components of the RoverServer include the MainActivity, which provides the menu interface upon launching the application, the RoverService, which allows the Android device to communicate with the IOIO hardware, and therefore the rover itself, the SkypeHandler, which gives the user the option to initiate a Skype video call from within the application, and the UDPThread, which handles accepting instructions over WiFi from the client device. Future components might include a full stack web server, as it would be convenient to host all necessary client software on the robot itself, only needing a web browser pointed to the correct address for full control.
The RoverRemote APK consists of all the necessary components to provide an interface to the end user for controlling the AndroidRover. It is based on an implementation of a pre-existing open source project's DualJoystickView class. The group, named Mobile Anarchy, has produced a number of open source widgets to aid in teaching the abilities of the custom view capabilities built into the Android OS. Another MainActivity acts as the menu screen for the application, prompting for an IP address before presenting the user with two virtual joysticks, which are handled by JSActivity and all of the corresponding Joystick named classes. Another UDPThread handles taking the output from the virtual joysticks and sending it over WiFi to the server device located on the rover. Currently, in order to access a video stream from the server device, a secondary client device must be used. Traditionally, a device with a larger screen such as a laptop is selected. All that the user has to do to access the stream is place a video call with whatever service they choose. After the call is placed, all that it takes is a little practice with the virtual joysticks in front of the laptop screen to experience a true telepresence scenario.
The hardware for the AndroidRover project is the main distinguishing factor that separates it from all other telepresence solutions, the main difference being cost. All of the parts the compose the rover, except for two, are off the shelf components all which cost under $100 individually, and many under just $25. A full list of the off the shelf components can be found on the Build page.
Off the Shelf
The AndroidRover project would not be possible without the crucial Rover 5 hobby robotics rover base. Sold domestically by Sparkfun electronics for only $60, it is what makes this project economically feasible for someone of a college student budget. Another component that is just as critical is the IOIO microcontroller produced by Sparkfun. It allows App developers with little to no electrical engineering experience to include input and output from an Android device to any number of motor controllers and sensors. An Android device itself is of course necessary to receive commands over WiFi and relay them to the IOIO to communicate to hardware. It also acts as the conduit for visual information, mounted on a pan/tilt bracket with its camera pointed forward, the Android device insures a high enough quality video stream to the end user to operate the rover successfully. Mecanum wheels from Vex give it the unique ability to drive sideways, however they are not entirely necessary for a functioning rover.
Unfortunately, it wasn't possible to achieve all of the needed solutions with off the shelf parts, so for the build of the AndroidRover to be complete, there are two critical components which had to be created with online manufacturing processes. Most importantly, all of the components mentioned above must be attached to the rover somehow. There are existing solutions for attaching components to the Rover 5 chassis, however they are modular, not leading to the polished look desired, and seemed to be difficult to incorporate into the AndroidRover design. Prototype versions of this "rover base" were milled out of acrylic sheets with a milling machine, however the most current iteration was laser cut from an online service. It allows all of the components to stylishly attach to the rover chassis, and advertises the website of the project at the same time. The second crucial component to AndroidRover's success is the custom PCB that maps the output of the IOIO to the inputs of the Rover 5 motor driver board. Without this PCB, the mapping of inputs to outputs is a mess of wires that can be easily dislodged, rendering the rover unusable.
Operating Description & ConclusionThe AndroidRover operating procedure currently requires a few more steps than desired, but as development progresses, the number of steps should decrease. First, the application on the server device must be started. The user then must make note of the IP address displayed in the application, then they press a button to initiate the server process in the background. Then they can choose to start a video call, and the server will remain running in the background. Then, they must start the application on the client device, input the IP address that they made note of earlier, then they are presented with two virtual joysticks to control the rover with. After the have completed controlling the rover, they must kill the application on both the client and the server.
As technology becomes more powerful and more inexpensive at the same time, there is no reason to not harness the power in our own pockets. Even though the AndroidRover is just in its infancy, massive potential exists. The goal of bringing the ability of telepresence to all is finally here.