LittleRobot(tm) project
prof_braino
Posts: 4,313
Ken asked that I start a thread for this project.
The LittleRobot(tm) is a demo to show off the usability and function of the newly completed PropForth version 5.5 kernel. The (tm) is there just so noone tries to claim it and/or prevent others from using the materials. The software and materials are all free and open source, and available from the propforth google code site.
http://code.google.com/p/propforth/
Just look in the WIKI section for page names that start with LittleRobot. They are not well organized, but most of the information is there.
EDIT - b We've started work on organizing the materials. Please give feedback so we can improve.
http://code.google.com/p/propforth/wiki/GettingStartedWithPropForth
http://code.google.com/p/propforth/wiki/GettingStartedLittleRobot
The LittleRobot(tm) is a demo to show off the usability and function of the newly completed PropForth version 5.5 kernel. The (tm) is there just so noone tries to claim it and/or prevent others from using the materials. The software and materials are all free and open source, and available from the propforth google code site.
http://code.google.com/p/propforth/
Just look in the WIKI section for page names that start with LittleRobot. They are not well organized, but most of the information is there.
EDIT - b We've started work on organizing the materials. Please give feedback so we can improve.
http://code.google.com/p/propforth/wiki/GettingStartedWithPropForth
http://code.google.com/p/propforth/wiki/GettingStartedLittleRobot
Comments
We ended up with a simple "tail dragger" differential steering bot, as commonly found all over the web. It consists of the 5 volts steppers and ULN2003 drivers; the SR04 ultrasonic range finder (silimar to ping))) but of questionable quality), and the HC05 bluetooth module. These parts can be purchased on Ebay from China for under $20. The rermainder of the parts are to be found our fabricated.
We did not include the cost of the micro controller. We use the Quickstart, since we use PropForth; but others could use any other microprocessor and any other programming environment. The kit of robot parts, the software design, and the algorithms should be directly applicable to any solution. Anyone should be able to expand on the concept and contribute further using any applicable set of tools, this is the intent. Many of the PropForth team are familliar with other tool chains, perhaps equivalent examples using SPIN, BASIC, and C may be added (however, this effot is currently limited to propforth).
So far, we have an effective low cost demo. These bots are designed to be slow, gentle, easy, and above all CHEAP. Those that find they have a nack for bots, might upgrade to more capable offerings. The prop and propforth may provide a base to upgrade.
The school did not want to buy the individual parts directly, they went to OBC and arranged for PropellerPowered to source the kits. Jeff handles most of the parts already and arranged a price to provide convenience for the client and sufficient margin for PropellerPowered. It is in everyone interest for him to afford to continue sourcing the kits. Notes on the kits (with "do different next time") are in the wiki pages. Jeff was able to find excellent wheels for the kits, battery holders, mounted bluetooth modules, and included "protoboard and more" kits with each Quickstart. We discovered that the school prohibits the kids from soldering (forth graders, go figure), so we are switching to bread boards and saving the solderable parts for next term. The chassis will be cut fom a 4x8 chunk of pink foam insullation from the home center.
All plans and schedules were overcome by events, we missed the January 3rd start date of the term and instead started April 22. The term still ends June 3rd. We have seven kids (or eight, roster is STILL in flux). The mix is fourth and fifth graders, and one or two seventh(?) graders. All the kids have done "Hello World" and "blinky LEDs".
Today we got the terminals (old laptops running coolterm, these are more than adequate for propforth) set up in the robotics lab (a table in the Art room) and assigned one kid per station. (They were sharing borrowed laptops till now). We started logging the progress for each kid for each session (they already completed the work but it was not logged).
We have adopted the rule "if there's no record, we can't claim it happened". The management appreciates the progress data, they will use this to refine the course.
There have been recent requests for one or two day workshops. The team feels we can tailor the session for adults to fit the setup and intro to programming activites in a single session. Actuators and sensors may or may not fit in this session, depending on the individuals present. A second session could be devoted to "build the bot out of cardboard", and the participants would refine their design at home.
A LittleRobotWorkshop page may be created it this develops.
In the case of elementary school kids, we don't assume the habit of reading data sheets is established. The instructor reads or has read the material, and presents it in a logical manner.
Today's task is to start figuring out a way to show the kids how FIND the information they need in the materials available, and to ask questions.
Understanding the mechanism for knowledge transfer, this is ... something I have to work on.
We were pretty much taught one way to do something, maybe two. Nowadays, kids are given multiple ways to do something and exposed to several different knowledge transfer methods: written, visual, oral, etc. Some kids (and this extends into adulthood) just learn things better and more effectively through different mechanisms. This is probably applied most effectively in primary education situations. The science and practical methods are just being applied to adult education and training.
O'Reilly's Head First Book Series makes good use of these various techniques to make the learning process more efficient and effective. I have a couple these books and have found them well done and effective for picking up a new subject. Anyone interested in writing a book or tutorial should check out some of these titles.
As you have mentioned, some people (many) have become frustrated by the PropForth method of documentation and tutorialization ( I like the sound of that word!) and have walked away from it. I don't think the presentation is well suited for elementary for elementary or middle-school aged kids.
I do think you are safe in the assumption that the habit of reading data sheets has not been established in the case of elementary school kids.
The instructor (who knows these kids and how they learn) pointed out how these fourth graders are not going to learn structure programming the same way I did (by reading the fortran manual) or by reading Propforth.htm, or by reading the Prop data sheet. And I was so happy that I had it all planned out so nice! Start again!
My new direction: Jump to the completed algorithm, let them play with the robot, and answer questions as they come up. Work BACKWARD from the working robot to its code pieces. This allow the kids to drive the discussion, and set the pace. Unfortunately I spent all my time preparing for Plan A, now that the requirement changed, I have to spend that time again on Plan B. Such is the nature of new development. If it was easy, it wouldn't be so fun.
'm seeing similar challenges with the slightly older 4-H kids.
This is clearly impossible. Only a fool would take such a challenge. I am that fool.
Yeah, and this is problematic, as folks tend to bail out and I don't have any clues as to what needs changes. We have contributions form Nick, Duane, Loopy, and Caskaz; but I don't know if any are "better" or what about them should be emulated.
Really, for an electrical Engineer with some familiarity with software, or a software engineer with some familiarity with electronics, propforth.htm is the only reference needed. This is also sufficient for any other user, it just requires careful reading a couple times. Or so we think. Maybe the propforth wiki pages are just confusing matters?
So, this is the question: When should folks get introduced to reading proper references, like data sheets and manuals? Should they EVER be introduced to datasheets? I didn't see a datasheet until the second month of my first job after university, I felt cheated. Many issues I encounter are from folks not following the proper references (or the references being incomplete or incorrect). The thought was start the kids NOW, and they'll be good at it later...
Suggestions? Opinions?
Here is a data sheet one could introduce to a new student...
http://www.jameco.com/Jameco/Products/ProdDS/660130.pdf
And here is a data sheet that prolly should not be a first introduction...
http://www.jameco.com/Jameco/Products/ProdDS/10567AMD.pdf
I do think data sheets should be used early and often, It just takes some practice to wade thru what is needed from them.
-Tommy
I still hold my strange fascination and admiration for Forth but I wonder of it's value as an educational tool in today's world. It used to have value because of its speed and interactive nature that led to a rapid prototyping environment that was close to the hardware. A unique position for a while. Now, there are a number of higher level languages that offer powerful REPL interpreters and growing libraries that support various features and functions so is the Forth experience that unique and beneficial? Now, perhaps it's more like learning Latin or Greek as a classical language.
BUT, if you do want to propagate (sorry) Propforth, it does need a tutorial or two that are engaging and relevant for younger minds and newer learners and quick, painless and relevant for experienced folks. Quite a challenge! This is especially true for a part time army the likes of us. When you look at the good documentation and tutorials that are coming out for the RasPi and Scratch and Python, the task is even more daunting.
The LittelRobot(tm) project offers an exciting medium to explore Forth. Maybe with kids it's best to present the hole and then decompose and explore deeper as they are interested. If they aren't interested to dig any deeper with Forth (or any other language), at least they've had a building experience and hopefully come away with something...it may just be the realization that they might not really be technologists! There are still other areas of interest and career opportunities to pursue when you are 10-11 years old!!
Suggestions? Watered down data sheets? Simple reference manuals? Googling 101? I noticed my daughter needs some google tips: how the avoid advertisers, best potential sites for good answers, avoid worthless sites, spam, etc. When we were young, encyclopedias, libraries and such were safe and generally had vetted information, this isn't true anymore for general searching. Do I want my 5th grader out Googling for information unsupervised? Not particularly.
I am in process of developing a reduced version of my forth robot control language for the Little Robot and will post it when completed.
NickL
It has the same value as any other tool. If you can't find a use for it, it has no value.
In my case, I have found it has the lowest entry cost, and is the easiest to get started with, and is the most powerful in that it spans the entire range of beginner to professional. It can be used by hobbiest and the highest tech organizations like Sun, Alpple, and NASA. It does not rely on powerful external systems for its evey operation. I have not found a similar bang for the buck in any modern tools. But then, I don't look very hard.
Until we get try nglordi's robot control language, I've changed the curriculum outline:
1) setup PC, software, (drivers, prop tool, terminal program) load devkernel.spin into EEprom
2) Hello world, blinky LED
3) stepper driver (complete) show the motor turns
4) SR04 driver (complete) show the sensor measures
5) HC05 driver (complete) show the bluetooth talks
6) build the bot by sticking the parts on the foam chassis
7) bot.f from extensions directory, show the bot can dance
The idea is that we only need to show the hardware is connected correctly, then let the kids play. If they are interested in further exploration of programming, their questions will drive the discussion.
It uses the same bot.f demo from the extensions directory, and the standard PropforthEEprom.spin kernel
http://propforth.googlecode.com/files/Bot2Intro.mp4
...and Sal really does exist!!
All the kids present connected the steppers, showed the LEDS flash as predicted, and got the steppers to move. They weren't as impressed as I with the ramp up and ramp down, maybe it happens too quickly for them to notice?
We also were short two teachers. Professor Braino and his side-kick Captain Entropy were almost overwhelmed by the fourth and fifth graders. As luck would have it, two high school kids happened by, and their presence was enough to maintain some order. The high school kids we able to connect a board, do hello world, Blinky LED, load the stepper driver, and make the stepper move, in under an hour and a half.
After an hour and a half, all the kids set their steppers to move 9,999,999,999 steps, and went out to play, so we ended class early.
Next class we plan to mount the steppers to the chassis, and play with SR04 ultrasonic range finder.
We may have a request to do the LittleRobot project as a 4 hour demo for older kids. More as this develops
The second group of commands are all prefixed with a G, i.e., GF (go forward). Executing, 9 GF with cause the robot to move forward 30 inches and then stop. Executing 2 GC (GCC, GTR, GTL) will cause the robot to turn 15 degrees in the direction defined by the specific command. Indices in this version are limited to 0 - 9 (10 items).
The ping is set to automatically stop the robot if it approaches an obstacle by less than a preset value in inches.
I believe that this approach to robot control is well suited to the age range of the students involved in the project. I would appreciate any comments or suggestions related to the program. I am not yet in a position to actually build the robot, although I have all the parts and have tested the stepper motors using the program.
NickL
Really Cool! Very concise!
The kids start building the bots today, the chassis will be the pink foam insulation from the home center. Everything will be stuck on with velcro or duct tape (per school safety rules). After we get some unit assembled and tested with individual drivers, we'll give this a try.
Posted http://code.google.com/p/propforth/wiki/LittleRobotNickLordiRobotControlLanguage
In order to use the program, you need to change the motor pin assignments. Also the ping driver will not work with the ultrasonic device. I believe that only a couple of minor changes need to be made in the code. When I receive my US device later this week, I will be able to make adjustments in the code.
Will the 3-D printer code used by Sal be made available?
NickL
He SAID he would let me post the SCAD file when he's done, but he takes a LONG time to test stuff before he feels its ready to be called "released". However, he let his grandson play with his prototype, and both survived without damage. I'll ask him again this week, maybe we should just decide the prototype is sufficient.
One fourth grader stopped me to say he really enjoys the class and thanked me for doing it.
The kids also started asking if they could go over the "Hello World" and blinky LED programs again for more practice. We only have two weeks to finish the bots and we have to start the chassis built or we won't finish by end of term. Notice to self, start next class at BEGINNING of term, starting middle of term is a little cramped for time.
Attached find an updated version of my LittleRobot program (still short on documentation) which has been updated to utilize the SR04 Ultrasonic distance detector. I finally put together a LittleRobot and am pleased to report that all commands work as expected. Note the simplicity of the my SR04 driver, which uses a counter, as compared to the bot.f version. I have also added a couple of example maneuvers.
I would appreciate comments and suggestions for additions or changes in the program.
NickL
Thanks! Posted on the wiki under downloads http://code.google.com/p/propforth/downloads/list
I'll get the kids to make comments when their bots get rolling.
We used the PINK INSULATION FOAM as suggested. I found 2 inches 4 feet by 8 feet for under $30 at the home center. This was cut into 8 inch by 6 inch blocks. We have about ten times more blocks than we need, so I gave each kid a block to destroy while we set up the class room. The blocks did very well, only a couple were completed reduced to powder, and that kid really had to work. This was a half hour well spent. They all have some respect for the foam, and know exactly what it takes to ruin the blocks, and hopefully will not destroy them when the robots are being built.
Turns out the only thing that needs actual cutting on the blocks are the insert holes for the stepper motors. Everything else can just screw in to the top. We had the kids do "layout" on the blocks, by placing the parts on the block, and tracing around them with a sharpie. Some did amazing, the layout looks very pro, some look like they were uninterested (just like in a real workplace!). The fourth graders generally did more meticulous layout than the fifth graders.
I will cut motor holes with a hole saw this weekend. The kids will fasten the parts to the block with regular screw, I think I'll find a box of long skinny machine screws at the home store, and bring in a bunch of screw drivers for one day.
This should be a picture of the LittleRobot chassis' with the kids' sketched layout.
These are 2" pink house insulation foam, 6" x 8", cut from a 4' by 8' sheet
Attached find V. 2 of my LittleRobot control program. Also included is an image of my LittleRobot. This version eliminates the use of indexed commands except for changing speeds. Consequently, GF & GB take the actual number of inches as input. GC, GCC, GTR, GTL require the actual number of degrees as inputs. I believe this improves the program for older users as well as increase its flexibility.
Constants defining motor driver pins, ping, as well as the user constant stpdg (steps/degree) may have to be changed to suit a specific robot's configuration. In the case of stpdg, the important parameter is the distance between the two wheels. The stpdg is calculated as follows: (512*wheel distance*100)/(wheel diameter*360) where 100 is a scaling factor.
If changes in these constantsneed to be made after the program has been merged with the forth deveopment kernel, one can use the utility WTO to change values, followed by saveforth.
NickL
Posted! v1.1 has been marked deprecated, so it doesn't display in the Search: "current downloads" list.
The kids are just building their chassis, I'll have them try this when they are assembled.
Thanks again!