- Get all 5 tribots running
- Begin programming tribots to go in a patterns like squares, circles
- Add remote emergency take over capability
- Add automous ability to travel the cooridors of first floor Clark Library Building
- Add features from the head
- Replace arduino with papilio
- Pull all existing documentation into one place in the below context
Project was inspired by this video that shows a robot balanced on top of a basketball. A completely powered Omni wheel connected to some accelerometer/gryo can create a powered unicycle that moves sideways. This is completely different than the one wheel motor cycle, the monocycle or the R.O.I.T wheel.
The goal is to duplicate the robot balanced on top of a basketball and ultimately duplicate the powered unicycle.
|Hack a Toy|
The idea was to start with hacking a toy. Here is an example hack:
The WowWee Tribot seemed a very close match to the robot balanced on a basketball.
WowWee Tribots retail anywhere from $300 and below here The robot is officially called the "WowWee Tribot Talking Companion." There is a Wowwee Mini Tri-bot that retails for around $21 that should not be confused with the bigger brother. Online it is hard to tell them apart. The Mini Tri-bot does not ship with universal or Omni wheels.
Reverse engineering a toy is similar to forward design. It starts with re-creating the implmentation/operation documentation that already exists.
|Wheel Design Review|
|Original Tribot Features|
The original Tribot has sophisticated hardware, but the software was primitive. The first step was to remove the logic board and replace with aruduino. The manual describes the software features that will be lost:
|Major Hardware Systems to be connected to Arduino|
These are the major hardware systems within the Tribot that needed to be connected to the Arduino:
The current base is too low to the ground to work on top of a basketball. So the base needs to be redesigned.
|New Base Design|
Drew using 3DTin following these tutorials.
Red base The red base is the original tribot base. The wheel "stems" are parallel to the ground. This current base does not allow the Tribot to sit and roll atop of a basketball.
Green base The green base is a new idea for Tribot. The wheel stems would be tilted at an angle so that it would be easier to fit on a ball. This requires almost creating a new base.
Blue base The blue base is another idea. Its a conical base. A hollow cone would allow it to perfectly sit on a basketball I think. Additionally, the wheel stems would have to be recreated similar to the idea in the green base. They would also have to be slanted at an angle.
Yellow base The yellow base is the last idea I had. The yellow base is using the original base but adding extensions to the ends. It would be adding the extensions at an angle.
NEW BASE Started by testing with one 45° elbow shaped 1 1/2" pvc pipe. The motor fit inside perfectly. But wheel could not attach to the motor normally. Had to do some sanding. Video of the result. May have to dedicate a robot to the ball. Seems weaker trying to run motor test with the new base video.
Next Step May be able to use PVC pipe to pivot wheels for both ground and ball use.
These are the steps to take apart a toy Tribot WowWee and add an arduino
|Do not remove the wheels|
|Taking apart the Body|
Remove the Arms
The arms are held on by three screws around the arm socket and one screw at the waist. Remove them. The black handle is held on with two screws. Do not remove them. The goal is to keep the arm assembly together as much as possible. There are two screws near the black handle, towards the back near the back IR transmitter and receiver. Remove one of these screws. The split apart the arms. The black handle should hold the shoulders together. There is a white bar that holds the back shoulders together. Replace the last screw removed.
The breast plate is a speaker. There are 3 infared transmitters and 3 receivers. They are used for the "Home" function where the robot follows someone with the remote and are used to avoid collisions. This tutorial does not show how to restore this functionality with the arduino.
|Remove Existing Logic Board|
Remove Existing Logic Board
Four screws hold on the existing logic board. The Arduino almost fits 2 of the screws. One screw has to be forced in at an angle, the Arduino UNO mounts at two points. The arduino is larger than the original logic board therefore putting the arms back on over the new arduino like they went over the old logic board is not an option.
|Hack the Existing Motor Controler|
|Connecting cables to Arduino|
Cable Harness A color code has been developed that maps colors to Arduino pin numbers:
The power cables are blue and black .. and sometimes a bit thicker:
The head switch needs to be re-attached to the arduino:
Not much work has been done.
This much about the wiring is known:
The arduino encoder web site talks about how it is hard to count these pulses ... all the code is playing with the interrupts of the arduino amtel processor. This means that the code can do nothing else .. and we want the code to turn the motors, look at IR sensors, etc. Probably going to have to build a special circuit to do this out of an FPGA papilio.
|Connecting the Head|
CircuitBoard in Head Wires:
There are 3 wires under a label "HL". HL is headlight. The purple box is where power is connected to.
Video of trying to connect power to the head. It is not straight forward. Need to apply power slowly.
The 5DOF The 5DOF is called an "Inertia Measurement Unit" that measures the following:
It has been retired by sparkfun meaning that it can no longer be purchased. But it exists in Fritzing so it is easy to draw a circuit with it.
Connecting to the Arduino Leveraged this example. A breadboard was necessary because the pins don't match the arduino headers. The alternative was to solder. Ths is how it was connected. At first only the accelerometer was connected, then the gyro was added.
The starting point sketch worked except for the "zero-reading." Hypothesis is it varies from unit to unit. The code was modified to take into account the "zero-reading" in the serial output display.
Results Can see readings changing as it is moved around by hand.
- Find screwdriver that works
- Put batteries in (8 AA batteries)
- Turn on
- Push head down
- Turn off
- Take batteries out
|Creating Program to go in a Square|
Use the Motor test to see a "skeleton" of what the coding in Tribot should look like. The setup() tells you which pins are wired to what. The loop() tells you all of the commands Tribot will follow. In this case it's
-one motor at a time -spin tight CCW -one motor at a time -spin tight CCW -spin tight CW -gradual turn -forward -backward -right forward -right backward
Each command is followed by a delay of 1000 miliseconds
Decide what new pattern will be
Envision what you want the Tribot to do. In this case, it needs to go in a square. A square looks like the graphic above. This new pattern begins with a starting point, then a forWard command from the point then a gradualTurn then forWard then gradualTurn then forWard then gradualTurn and lastly one more forWard command.
Change the original
Copy the original code into a word document. Decide what you want in the new code. In the loop() part of the code, erase what you do not want. At the end, insert the new commands that will make a square. The new commands come from the graphic of the path. Each command is followed by a 1000 millisecond delay. After the loop comes the individual sections for each command. They're titled "void (insert name)". Keep only the commands that you will be using. Erase the rest of the sections.
The final code The final code should look like this:
Powering Tribot If batteries are left in the tribot, they will corrode the battery case. The problem can be solved by scrapping off the corrosion. Corrosion is mostly found on the removable red lid, but it also occurs at the top of the battery, deep inside the base.
There is a black button in the base of the Tribot that has to be pressed to turn it on.
If the batteries are good, an LED on the arduino will glow.
If the head switch is jammed or not connected, then pressing the head will not start the program.
Wheels spin when turning on Send motor test to the arduino. It probably has another program loaded.
- Explore possibilities of line-following tribot
- Apply power to the head and try to control it's features with arduion
- Start capturing wheel turning information from the encoder
- Test new base to see if tribot can work equally well on ground and ball
- Define working, test all 5 and document current status
- Add simple mechanism so that all 5 spill out of a door when is opened
- Add remote controller
- Add speakers
- add a camara
- Determine if accelerometer and gyro have to be calibrated, start testing with PID software