Eddie's visit to Norris Labs
For the past month or so I have had an Eddie robot visiting here at Norris Labs. It has been great fun!
Despite being engineered independently Eddie and my robot K-See have many similarities. But one major difference between K-See and Eddie is the ability to pan the Kinect left or right by 90 degrees. Being able to pan the Kinect greatly increases its field of view without the need to rotate the entire robot. This is particularly useful when navigating around obstacles while trying to keep a navigation target (a sign, glyph, or a person) within the view of the Kinect. The Kinect is restricted to about a 60 degree field of view. It can quickly lose its target if the robot were to turn sharply while avoiding an obstacle. And since I was planning on reusing my K-See software I decided to add the same feature to Eddie.
To accomplish this (in a non-destructive manner), I replaced the Kinects mounting plate (from Parallax) with my own made from Plexiglas and cut to the same dimensions of the original. To this new plate I cut a center hole for a Hitec HS-422 servo. Using leftover parts I fashioned a mounting plate and support structure for the Kinect. I attached this assembly to the servo. The servo was then electrically connected to one of the Eddie Control Board digital I/O pins. I also had to modify the Eddie Control Board firmware to support an additional command (KPOS) used to position the servo from 0 to 180 degrees left to right.
I like to write my own code and despite all its capability (and complexity) I did not want to use the Microsoft RDS robot operating system. As mentioned before I had already developed software for K-See which was written in C# and uses the Microsoft Kinect SDK and a WPF user interface. It was a simple matter to port it over to Eddie. Most of the changes involved rewriting the underlying communication code in the RobotController class to support the Eddie firmware protocol instead of my own used in K-See.
My application provides a basic navigation system and obstacle avoidance using a behavior-based programming architecture. This architecture uses a collection of simple behaviors that take inputs from one or more of the sensors (both the Kinect and the Pings/IR) and then triggers an action that is sent to motor drive system. Each behavior is written as a single C# method that is called sequentially based on its priority. The priority determines when a behavior can get access to the motor drive system.
The user interface for my Eddie application is divided into five display tabs. The first tab displays the Ping and IR sensor data graphically while the second tab displays it numerically. The third tab displays the Kinects RGB and depth data streams. The fourth tab is used to create and edit glyph routes (not finished yet). Finally the fifth tab provides manual control of the robot. I access this tab from another PC and connect to the Eddie laptop via Remote Desktop over Wi-Fi
.
I love working with Eddie and I hope he will stick around the lab a little while longer. There will be a full article in the next Robot Magazine and I'll post the finished code as well.
Below are some pictures on my modified Eddie and screen shots of the application.
Here is a link to a YouTube video showing Eddie navigating and avoiding stuff: http://www.youtube.com/watch?v=bQkHZhvnd-g
Despite being engineered independently Eddie and my robot K-See have many similarities. But one major difference between K-See and Eddie is the ability to pan the Kinect left or right by 90 degrees. Being able to pan the Kinect greatly increases its field of view without the need to rotate the entire robot. This is particularly useful when navigating around obstacles while trying to keep a navigation target (a sign, glyph, or a person) within the view of the Kinect. The Kinect is restricted to about a 60 degree field of view. It can quickly lose its target if the robot were to turn sharply while avoiding an obstacle. And since I was planning on reusing my K-See software I decided to add the same feature to Eddie.
To accomplish this (in a non-destructive manner), I replaced the Kinects mounting plate (from Parallax) with my own made from Plexiglas and cut to the same dimensions of the original. To this new plate I cut a center hole for a Hitec HS-422 servo. Using leftover parts I fashioned a mounting plate and support structure for the Kinect. I attached this assembly to the servo. The servo was then electrically connected to one of the Eddie Control Board digital I/O pins. I also had to modify the Eddie Control Board firmware to support an additional command (KPOS) used to position the servo from 0 to 180 degrees left to right.
I like to write my own code and despite all its capability (and complexity) I did not want to use the Microsoft RDS robot operating system. As mentioned before I had already developed software for K-See which was written in C# and uses the Microsoft Kinect SDK and a WPF user interface. It was a simple matter to port it over to Eddie. Most of the changes involved rewriting the underlying communication code in the RobotController class to support the Eddie firmware protocol instead of my own used in K-See.
My application provides a basic navigation system and obstacle avoidance using a behavior-based programming architecture. This architecture uses a collection of simple behaviors that take inputs from one or more of the sensors (both the Kinect and the Pings/IR) and then triggers an action that is sent to motor drive system. Each behavior is written as a single C# method that is called sequentially based on its priority. The priority determines when a behavior can get access to the motor drive system.
The user interface for my Eddie application is divided into five display tabs. The first tab displays the Ping and IR sensor data graphically while the second tab displays it numerically. The third tab displays the Kinects RGB and depth data streams. The fourth tab is used to create and edit glyph routes (not finished yet). Finally the fifth tab provides manual control of the robot. I access this tab from another PC and connect to the Eddie laptop via Remote Desktop over Wi-Fi
.
I love working with Eddie and I hope he will stick around the lab a little while longer. There will be a full article in the next Robot Magazine and I'll post the finished code as well.
Below are some pictures on my modified Eddie and screen shots of the application.
Here is a link to a YouTube video showing Eddie navigating and avoiding stuff: http://www.youtube.com/watch?v=bQkHZhvnd-g
Comments
Congratulations a successful project. It looks very good, clean and well thought out. An Eddie is still on my wish list, but I'm waiting for the product to mature a little (ie stabilize need for firmware updates) and a 'release' version of MRDS 4.
I have built an EDDIE clone along the lines of Steve's K-See except that mine is a double decked version of EDDIE. I am using Steve's K-See Propeller Controller and Prototino sensor controller and software. I am presently awaiting an Intel dual Atom motherboard and associated support hardware to simulate K-See's Atom powered Asus laptop. I presently do not have my Kinect mounted on the top of the 2" PVC tube which I plan to cut down slightly this weekend. The wooden shelf above the PC case is where I am mounting the PC video dsiplay. I can't wait to try out Steve's software on my Atom PC.
Here is a link to Steve's K-See Bot Mag download page: http://www.find.botmag.com/031205
Regards,
TCIII
Have you encountered this kind of behavior with the Kinect while the EDDIE or K-See are in motion:
"Jessica,
Thanks for the reply. Damping the movement with foam is a good idea, I'll give that a try. Late last night (too late to really investigate) I saw an entry in one of the C# files in the ReferencePlatform2011 service group that had an entry for acceleration ramping with a value of 5. However, I didn't see one for deceleration so possibly it is just a generic for acceleration (both positive and negative). I'm going to do some more testing and see if the Kinect shake is when Eddie starts, stops, or both.
Todd ."
Regards,
TCIII