Showing posts with label AR Drone. Show all posts

Endless ways to use Android for creating hardware-enriched intelligent systems

It might sound exaggerating that I use the word "endless" because most applications in Android Market don't give us such an impression. In our daily life we don't use our smartphones to interact with other machines pretty often. 

I'd say, it is just a start.

AR.Drone players may say: 

"Isn't the phone a cool remote-control, a console that is fully programmable and you can take everywhere?"

Arduino lovers or robotics/electronics system designers may say: 

"Well, more than a console. We love reading beautiful data graphs on Android's large screen. That's a perfect portable oscilloscope. Of course, we can take advantage of Android's great processor to perform complex computing. We can also use an USB cable to integrate it as an on-board "brain".

RC model makers say, "Sure we love the brain mode to have Android integrated on-board", as the DIY Drone's PhoneDrone board suggests:

"With Android you can switch between RC control and Android control or mix the two. You steer your vehicle via RC, but an Android phone does the actual control sending M2M commands to the on-board IMU. On a car, that would allow every turn to be a high-speed controlled drift, for instance.

Or, with a UAV, you might have the Android phone doing high-level image processing and object tracking, sending mission commands to an autopilot board. You might also want to use the phone's long-distance wireless instead of an Xbee for two-way telemetry.  This can either replace the original control board if you've got equivalent code running on Android, or compliment it with the Android device doing image processing or long-distance wireless communications."

OK, that's a lot of messy information when I put all the remarks here. It took me a while (actually two years) to observe, to test and to conclude what people really need Android to do in such hardware-enriched intelligent systems.

I've finally made a list of all possible outputs from Android and what we can input to Android:

1. Possible outputs from Android:

1.1 Sending high-level human-readable commands via user-interface by using the phone's built-in hardware

There is a big screen to display images and text, a speaker to perform text-to-speech or play music, a vibrator to give some notifications, etc.

This is what most applications in Android Market do. 

1.2 Sending high-level commands to tell one or multiple external devices what tasks to perform and controlling the actions of each external device

Examples:

1.2.1 All the remote control applications using WiFi or bluetooth. 

High-tech toys are pretty popular now, like this Sphero Toy Ball controlled by iPhone and Android:



Of course we have some more serious use-cases: e.g.: using Android to replace your PC's keyboard and mouse.  I use RemoteDroid personally in bed: 



1.2.2 Autonomous control system where Android is integrated on-board and outputs the commands automatically like this:




And this open-source project called Droid-Copter:


             
1.3 Sending built-in sensor data  (GPS, gyroscope, accelerometer, digital compass , proximity sensor, etc.) from the phone to one or multiple external devices

Examples: 

GPS tethering: search "GPS tether" in Android Market and you will get many applications.

In DIY quadcopter, we can use Android to replace completely the MCU control board like ArduPilot. In that way we will use Android's gyroscope and compass. I am confident enough that on DIY Drones some intelligent guys can finally make a UAV with their on-board Android phone in the near future, like this unfinished project:



But let's see a prototype from the Cellbots open source project that I really like. The Arduino on the robot reads the phone's digital compass output to adjust orientations in an autonomous way, you get the idea:





2. Possible inputs to Android:

2.1 Receiving human commands via user-interface input by using the phone's built-in hardware

We have:
  • a touch screen for getting user's command,
  • a camera for "recording" the optical environment and some image processing to recognize a face,
  • a microphone to get what people say and may perform voice recognition like "speech-to-text", etc.

This is what most applications in Android Market do. 

2.2 Receiving high-level commands from external devices that can be processed and figuring out what to do next

Examples:
  • Autonomous SMS chat between two phones
  • Various Internet protocols between Android and cloud. In Google IO 2011 there is more about Cloud Robotics, ROS Java and Android:


3. Receiving low-level sensor data from one or multiple external devices to get processed by the phone

This usually requires Bluetooth, WiFi, UART or serial connector to realize the sensor reading.  

Examples can be using an external GPS to replace the built-in GPS to provide accuracy, or using temperature sensors to be displayed on Android, etc.  

And today we just received this cool project from Mr. Al Linke, who proudly presents his cute funny artistic masterpiece, the Android Breathalyser:


Mr. Al Linke said that as a casual programmer, he spent just 3 nights to realize this, which shows the ease of using the IOIO board for Android

Whoever wants to replicate this project within 2 nights (if you want a challenge:)), here is the main parts list:


2. LiPo rider: the LiPo rider takes the 3.7V from the LiPo battery and converts to +5V that the IOIO needs on its Vin. Plus the LiPo rider is also a charger so the whole thing becomes a self contained rechargeable unit.


4. And of course the magical IOIO board.


All in all:

There are endless ways to use Android for creating hardware-enriched intelligent systems. We hope that before designing your new system, you take a serious glance at what Android can provide and which inputs/outputs are capable to meet your needs, in order to keep the project simple and powerful. A good selection and combination of those Android inputs and outputs can be the key to success.


3 possible ways for Android to control the outside world using WiFi

In our last post about the Top 10 Android Hardware Interface Tools, we have already been concentrating too much on the low-speed high-delay Bluetooth connectivity; we have also been hacking too hard (the ROM or the Android Debug Bridge) to ask the little micro USB port to give us serial Rx/Tx and prepared some Android libraries to avoid programming the microcontrollers; we have even been dying to get some low rate serial characters or PWM signals through the poor 3.5mm audio jack on the phone.

What haven't we tried? Due to the seemingly high-price issue, we haven't tried much those WiFi modules or dongles. But finally we ask: why not! WiFi means easier configuration (UDP/TCP/WiFi direct), secured connection, NO annoying cables, high speed data transmission (video streaming possible), smoother control (less delay), and the Internet of things.

What are the possible WiFi connection modes with an Android phone? The DIY Phone Gadgets community has drawn such a conclusion so far:

1.    Classic mode: WiFi router+Android+external WiFi device:

Thanks to the router, the Android device has full Internet connection, and can control multiple external WiFi devices within this local network. The inconvenience is that the LAN is not mobile (limited by the router's WiFi range).

Sample application or ideas:

Well, we haven’t seen something using WiFi and Android but we would love to test those good-looking arduino-compatible WiFi boards and shields very soon.
DomoticHome uses Android, Arduino and an Ethernet shield to provide simple home automation protocol. Based on that, it is hyper-easy to use WiFi shields to quickly realize the same thing. To port the project using a WiFi shield, we don’t even have to change anything on the Android side. Here is how it works:



2.    Ad Hoc P2P mode: Android+WiFi device, without WiFi router, where there are two types :

a) P2P Android Client mode:

The external device is the AP. The Android device is the client.

Sample application or ideas:

The AR Drone from Parrot. The AR Drone mother board is a WiFi AP.

b) P2P Android AP mode:

The Android device is the AP and the external WiFi device is the client.

Sample application or ideas:

There is no mature application of this type now in the market. But we do see pretty much potential. Unlike the P2P type A that is limited to be connected to one AP, the Android AP can control multiple external WiFi client devices. Shown in the Open World Forum 2011 in Paris, Yan’s “Chicken Haha Telepresence Robot” is the first prototype based on P2P WiFi Android AP solution. Multiple android devices can control multiple robots and get live video feedback, without needing a router.




FAQs: 

In P2P Ad Hoc mode, do we still have Internet access?

Nowadays, each Android device has only one WiFi module. Once configured to work in Ad Hoc P2P Android client mode, the phone will no longer have internet access unless the external AP can provide an Internet content (which is difficult). In P2P Android AP mode, more luckily, the Android device will have Internet access if it has a 3G connection.

How to enable Android WiFi tethering hotspot AP?

You don’t have to root the phone. The WiFi tethering hotspot (AP) is natively supported on Android 2.2 Froyo or above. One interesting thing that we noticed is that on all Android devices we have tested so far, the IP address of the Android AP is always 192.168.43.1. That makes it so easy to develop client applications without considering the server's IP address. What's more, we can even programmatically enable tethering mode and define the AP name in the Android code. It needs some hack because one of the pains to develop P2P Adhoc applications is that Android SDK doesn't provide explicit APIs to configure the network). In our next post, we will give you a tutorial to enable and configure P2P AP mode, both manually and programmatically.