I'd like to introduce everyone to WiMo. WiMo, this is everyone... Everyone, this is WiMo. What exactly is WiMo? and why did I build him? Both are great questions.
WiMo is the the Windows Mobile Robot. The name comes from the "Wi" from "Windows" and "Mo" from "Mobile" and is pronounced "Weemo" (think of it like a Spanish pronounciation).
I built WiMo for a few different reasons:
- I've always wanted to build a robot and wanted to learn more about hardware.
- Working in Windows Mobile, i thought that our devices would be a lot of fun in a robot especially considering that they also have so much advanced functionality just waiting to be used in a robot (nice screen, speaker, several options of connectivity, an extremely rich API set, camera, etc).
- This would be a great way to show off some of our new and existing APIs and use the SDK in a fun and unique way.
Here's an overview of how WiMo works:
WiMo uses a Windows Mobile 5.0 Smartphone as the central "brain" of the robot. This Smartphone sits directly ontop of a Windows Mobile SDK cd (I did say i was using the SDK in a fun and unique way). The Smartphone communicates to a microcontroller via Bluetooth, using our Managed Bluetooth classes and also communicates with a Pocket PC (and soon to be desktop pc instead) via WiFi. The Pocket PC can be used to remotely control WiMo. The action pad of the Pocket PC is used for standard movement (up, down, left, right, stop).
WiMo has 2 "modes": Personality mode and camera mode. When WiMo is in personality mode, the Smartphone's screen is facing forward and displays a picture that represents WiMo. Right now this is just any photo that I send down to the Smartphone from the Pocket PC. When in Camera Mode, WiMo rotates the Smartphone to face it's camera forward and starts streaming video using DirectShow. This allows you to see where you are going (although it can be fairly difficult to navigate with this tunnel vision). Eventually I will use Managed Direct3D for the personality mode, giving WiMo a more dynamic personality. I'm also planning to use the camera mode for computer vision so that WiMo can start to figure things out for himself (aka be autonomous).
WiMo is learning to make conversation and respond to voice commands via some new prototype APIs in Voice Command. These APIs are not available yet, but we are looking to make them available in the future. WiMo can respond to his name, tell jokes if asked, and even dance!
Yes, that's right, WiMo can dance! He uses the State and Notification Broker to time his dance moves to the music. One of the many (100+) predefined states available in the S&N Broker is the track time (in milliseconds, although it is not updated this frequently) of the song. WiMo gets an event whenever the track time is updated and then can determine which dance move to do. Currently WiMo dances the hokey pokey.
Speaking of events, WiMo is built primarily in C#. I had to write a native layer for DirectShow, but i use it via C#. So, except for some of the support libraries, everything is done in .NetCF.
Want to see WiMo in action? Check out the Channel9 video on WiMo.
Want to build your own WiMo? I'll be posting step-by-step instructions on how to build WiMo, even if you have never worked with electronics (I had little experience with electronics before I started building WiMo). I'll be posting what parts I used, where I got them, and the source code so that you can start playing as soon as possible. In the meantime, if you have any questions, please let me know!