Software - Juggle Boy
The Juggler application was growing too much from an idea into a life all its own. I decided that rather than keep adding to the Juggler app, I’d just park it and start a new project from scratch. The infrastructure of the Juggle Boy is pretty much the same as the Juggler; it uses XML as a data structure, it uses a controller to articulate the elements; but I greatly enhanced the functionality of the XML loader, modeler, and controller modules, as well as the kinetics engine. The Juggle Boy was designed from the get-go as a model for a real robot – everything had to be as true as possible to the realities of something that I’d have to make work – how to add servos to the joints, how it would “see”, etc.
So, the Juggle Boy really IS more like a real robot, in that it simulates the functionality of sensors for eyes, and has more realistic eye-hand coordination.
I remember MANY years ago seeing an industrial robot at a tour of the Honeywell computer manufacturing plant. As I recall the engineers would pick up a ping-pong ball and toss it into a cup on the other side of the room. It was cool and all, but I asked them if they could make it juggle 3 balls? I don’t remember their response, but I do remember thinking a lot about that over the years. Unlike my Juggler app, this Juggle Boy is a LOT more practical as a basis for an actual hardware project someday.
Details
This simulator has a LOT more realistic behavior than previous programs. All of the joints (or in other words – movable parts) move with a natural range and behavior of motion.
The Juggle boy itself has a box for a head, with two eyes, fixed in the box. The box rotates back and forth, and up and down. He also has two arms, which consist of shoulders, elbows, wrists and fingers. The shoulder is a pair of rotating joints rather than a single ball-joint that sweeps and lifts the arm. The elbow is a pair of joints that rotates and lifts the forearm. The wrist is a pair of joints that rotates and waves the hand. There are 4 fingers, two fixed, and two flexible. The flexible fingers allow the Juggle Boy to reach for and grasp a specific-sized ball, as well as to toss it. Besides the body, which is a rigid structure, there are 46 moveable parts, but most of them are finger parts that are controlled by only opening/closing the fists.
< [ Juggle Boy picture ] >
The default behavior displays a box that if you click in it launches a ball from a pseudo-random cannon. The higher in the box you move and click, the higher the cannon will aim; moving and clicking right or left in the box moves the cannon back and forth in front of the Juggle Boy into a corresponding position; the randomness is in where the cannon will aim towards the Juggle Boy (right or left of him). The Juggle Boy “sees” the ball coming, follows it with his head movement, predicts its trajectory, determines which hand would be best to catch it with, and starts the hand moving to intercept the ball with the intention of catching it. Though, sometimes the cannon tricks him and fires it out of his reach – in which case he just watches it go by. When he catches the ball (which is almost always) he simple brings it to his side and drops it at his feet.
< [ Juggle Boy behavior video ] >
The user has the ability to move, or zoom the point of perspective to watch the behavior from anywhere around. If you watch from behind, you can even see the cannon in action.
Editor
Like my other robotic simulator programs, the Juggle Boy includes an editor that I used to develop (or mature) the database engine and the data itself. The editor borrows liberally from the other projects, and moves way beyond them in elegance and functionality. The model structure is similar to the other Juggler, but is both simpler (not near so many moving parts) and more complex (more controls). Again, the data is laid out in an XML format and the editor allows manipulation in both a tabular form, as well as graphically.
< [ Scene Graph Editor pictures, XML data, tree layout ] >
The main function of the editor is to visualize the model the data represents. As well as to verify the behavior of the controls to articulate the joints.
< [ Scene Graph Editor video ] >
Exercise controller
Besides the operation of the main program, there is an exercise controller that I used to validate the main behaviors. It can display a ball that the user can then move around with the mouse, and the hand will reach out and grab the ball and follow it wherever you move it.
< [ Exercise Controller video ] >