Name: RC Boyd
Member since: 2008-03-01 19:19:55
Last Login: 2008-04-13 03:05:28
I have a 2 year degree in electronics, and am a machinist by trade. I work for a contract packaging company, where I work with automated machinery on a daily basis. I have had a series of commercial websites, the first was in 1998. My current site is lorehold.com, which has nothing to do with robots. I am currently working on a design for a bipedal humanoid robot. Although my main interest is in developing this bot for Robo-One type competitions, I think the design might be of interest to those in this group. The bot, which I am calling RoboDo, will have 32 degrees of freedom: 7 in each arm, 7 in each leg, waist bend and rotate, and head tilt and pan. Power will be distributed, with a 7.4 v LiPo battery in each arm and leg. Additional batteries will be located in the hips and torso. I am currently looking at using a PC-104 single board computer for onboard processing. I don't know if I will ever be able to actually build this bot, but who knows? That's about it for now, be well. RC Boyd Remember: Teamwork is important, it gives them other people to shoot at.
Recent blog entries by RoboDo
BrainBoy and the Slug: BrainBoy was an NXT bot which navigated with the sonic sensor, while the Slug had no sensors. The 2 were in communication via bluetooth, with BrainBoy recording its movements, introducing a 3 move lag, then transmitting moves to the slug, who just followed along. I was exploring an idea for the robotic transportation of military goods where a manned truck would be followed by an unlimited number of unmanned robot trucks carrying supplies.
The Chariot: The Chariot was another experimental bot which featured a front powered section (without sensors) which pulled a trailer containing a sensor array. Having the sensors in an unpowered trailer allowed me to build a sensor array that was capable of continuous 360 degree rotation.
Just for the record... this intensive electromechanical research and development phase, involving numerous iterations, each exploring different design possibilities while keeping within the physical constraints of the available robotic prototyping system should never be confused with "playing with Legos." Someone needs to explain this to my girlfriend.
Ok, maybe the robo-forklift was just for fun.
RoboDo will eventually be a biped humanoid, but that is a long way off. For the moment, I will concern myself with laying the foundations. The RoboDo series of bots is building towards the main project goal.
The latest incarnation in the series is RoboDo Toddler, based on the Lego NXT system. RoboDo Toddler is actually like 2 robots in one.
The top section contains an NXT controller, an ultrasonic sensor with 180 degrees of motion (right-left), and 2 sound sensors. The top section will handle the decision making processes.
The bottom section features an NXT controller, 2 touch sensors, and 2 light sensors.
The top part looks around and maps out where the bot can and can't go from it's current position. It then decides what to do, sets the numerical variable "order" to a number representing its choice, then sends the value to the bottom section via bluetooth.
The bottom section sits and waits for a message. When one is received, it executes the order if possible. It then returns a status message to the top section and waits for further orders.
The bottom section usually just follows the instructions passed to it from the top section, but there are times when it can't follow these instructions. For example, if the bottom section gets an order to move forward when the front bumper sensor shows that way to be blocked, this condition is recognized and the bottom section instead follows instructions specific to this condition.
In any case, the bottom section generates a status message which it sends to the top unit, again via bluetooth. This status message not only lets the top know what's going on in the other unit, it also serves as a timing signal; the top will sit and wait for this message before thinking about its next move.
The NXT-G language seems rather limited, but the custom blocks allow the creation of simple behavior "chunks" which can then be assembled into much more complex behaviors. The graphical interface allows one to make visual sense of the interactions, which makes development go much faster. Yes, I will be going to a more powerful language one day, but NXT-G is perfect for this stage of my project.
Adopting coding standards, even at this early stage, is crucial. Top and Bottom sections may run different code, but they both use the same variables for the same functions. Custom blocks used only by the top section all start with the letter "T" and those used by the bottom start with "B". The icons used also display a consistent pattern. These "small" details will pay big dividends as the project gets more complicated.
The control scheme, based on "orders" and "reports" is simple and effective, and allows co-operation between the sections. The top section decides what to do, but the bottom section is allowed some flexibility in how to carry out the orders. I am starting with a very simple set of possible actions, but once I get the system itself working properly, I expect to develop much more complex responses. I think the basic control scheme will scale up well.
My little NXT bot, RoboDo Baby, has uttered its first word, which was, "Ooops."
I'm using the sounds to help me figure out what's going on in the program as it runs.
Right now, Baby moves forward until it detects something within 10 inches. Once it detects something in its way, it says "ooops" then calls a custom scan block which returns range data for 90 degrees right and left, 45 degrees right and left, and straight forward. This data is then passed to a primitive mapping block which sets the variables right, front right, front, front left, and left to either "1" (can enter) or "0" (can't enter.)
If the way is clear in only one direction, Baby says "turn" followed by the clear direction. Baby will then turn in that direction and restart the movement routine.
If both right and left are valid options, Baby will randomly pick a direction. When this happens, Baby says, "Mindstorm" before making its choice. Introducing random elements gives me the ability to dynamically weight these decisions at some later time.
Two variables are set whenever Baby turns: "dist-turn" resets the distance Baby has traveled since the last turn, and "last-turn" records the last turn direction.
These variables are used in a special case where Baby has wandered down a corridor where turning is impossible. In this case, Baby says, "ooof" backs up to its last turning point, then turns in the same direction again, which sends it back the way it originally came from.
I'm having problems with the turns. It's hard to get accurate 90 degree turns, so Baby crawls in odd directions. The easiest solution will be to get the compass sensor, and that's what I intend to do.
Baby also hits its back end sometimes when it turns. Since RoboDo will have bluetooth communications between torso and legs, I am considering getting a second NXT kit so I can play with NXT to NXT communications via bluetooth. This would also give me more sensors and servos so I could have the bot navigate more effectively. If I do get another kit, expect RoboDo Baby to be replaced by RoboDo Toddler. :-)
That's all for now.
Ok, so maybe building a 32 DOF biped humanoid Kung-Fu bot isn't the best "first project". Though confident I can mostly handle the mechanical end, the computer end is way beyond me... for now.
I can't afford to spend thousands of dollars on parts all at once, and even if I could, the complexity of getting it all working together would be quite overwhelming.
So I bought a Mindstorms NXT.
I'm a "hands on" kinda guy, so this will give me the chance to get some experience with the sensors and programming... real world interaction.
I built and unbuilt RoboDo Zigote and RoboDo Fetus, learning as I went. I'm pretty happy with the newest incarnation, RoboDo Baby, which has 2 driven front wheels and one unpowered rear wheel. The ultrasonic sensor is mounted on the 3rd servo, and the sound, light, and touch sensors are mounted up front too.
So far, Baby crawls forward until it detects something within 10 inches. It then looks left and right, recording the sensor readings. Baby then turns in the direction offering the most room and starts crawling forward again.
The next evolution will be to use data from the other sensors to build a more sophisticated control scheme. For example, I would like Baby to tend to turn towards the light when blocked forward but right and left are both clear. I want to mess around with weighting sensor reading to influence control decisions, which will all be probabilistic in nature.
Another thing I am going to start developing is a mapping routine. I'll start with a limited 6" grid, perhaps as small as 10X10. I'll preload areas outside the map as "0" or unreachable, start Baby in a known location and orientation, and let Baby fill in the rest of the map as either "1" (reachable) or "0" (unreachable). This will, no doubt, give me all kinds of problems to overcome or work around.
The NXT-G language is interesting, but can seem like trying to build a bridge with dominoes sometimes. I am looking into options here, and am leaning towards switching to NXC soon.
I have not given up on RoboDo. The RoboDo Baby work will lay the foundations for what is to come later. I would expect to use a succession of platforms in this project, and this is but the first.
That's all for now...
RoboDo should be able to amuse, entertain, educate... and fight. In order to do these things, the robot will need a certain awareness.
The most basic levels of awareness will operate automatically, no matter what the control mode. These include...
RoboDo should be aware of its body position, center of gravity, and current and upcoming motions in order to maintain its balance. A 2 axis gyro/3 axis accelerometer combo will be the main sensor in this sub-system, and corrections should be applied in real time, without involving upper level subsystems.
RoboDo should be aware of its environment. Mapping (including sonic mapping) will be a key process, at least in most modes. The head mounted Ping ultrasonic sensor, head mounted sound detectors, and hip mounted Sharp IR sensors will provide the data. This environmental data will automatically limit the robot's actions. For example, the "walk forward" command would be disabled if there was a wall directly ahead.
This lower level data (balance and mapping) would be used by the mid level subsystems...
The localization sub-system would add the "you are here" sticker to our map. This subsystem would use data from the onboard compass, mapping sensors, and vision system to determine the robot's position. (The ceiling, with its uncluttered straight lines and clear intersections might prove useful here)
The tracking subsystem will use the vision system to detect and track moving objects. This will probably involve capturing several frames and comparing them to see what's changed. The camera will have servo control of tilt and pan and automatically track the closest object in certain modes.
Upper level subsystems related to awareness include the actions subsystem, which maintains an array containing all of the actions RoboDo can perform. Mode constraints will eliminate some of these possible actions. For example, the "do a cartwheel right" action isn't available in "Explore and Map" mode. Map constraints further limit the actions, and other subsystems may limit the available actions too.
These subsystems will work together to provide a certain sensory awareness. Through them, RoboDo will be aware of its body position and center of gravity, it will sense its environment and know where it can and can't go... what it can and can't do. It will also recognize and track other moving objects in its environment.
Anyway, that's the general idea as it stands now.
RoboDo certified others as follows:
- RoboDo certified spirit as Journeyer
Others have certified RoboDo as follows:
- spirit certified RoboDo as Journeyer
- steve certified RoboDo as Apprentice
- The Swirling Brain certified RoboDo as Journeyer
[ Certification disabled because you're not logged in. ]