Difference between revisions of "Robot Snake"
AndrewLong (talk | contribs) |
|||
Line 154: | Line 154: | ||
The main function of the PIC microcontroller was to control multiple servos (seven in our case). Timer1is set to overflow every 20 milliseconds and trigger an interrupt. When the interrupt is triggered, Timer1'scounter is set to the value held by TMR1_20MS, which will cause the interrupt to trigger again 20 ms later. At the beginning of the interrupt, all the pins connected to the servos are set high. While Timer1 is less than the value held by TMR1_2point25MS, Timer1 is polled, and the value is compared sequentially to the values in the RCservo array. If the value of Timer1 is greater than a value in RCservo, the the corresponding pin is set low. After all the values have been compared, Timer1 is polled again and the process repeats until 2.25 ms have elapsed (when Timer1 > TMR1_2point25MS). After all the servos signals have been sent, the values in the RCServo array are updated to prepare it for the next 20ms interrupt. |
The main function of the PIC microcontroller was to control multiple servos (seven in our case). Timer1is set to overflow every 20 milliseconds and trigger an interrupt. When the interrupt is triggered, Timer1'scounter is set to the value held by TMR1_20MS, which will cause the interrupt to trigger again 20 ms later. At the beginning of the interrupt, all the pins connected to the servos are set high. While Timer1 is less than the value held by TMR1_2point25MS, Timer1 is polled, and the value is compared sequentially to the values in the RCservo array. If the value of Timer1 is greater than a value in RCservo, the the corresponding pin is set low. After all the values have been compared, Timer1 is polled again and the process repeats until 2.25 ms have elapsed (when Timer1 > TMR1_2point25MS). After all the servos signals have been sent, the values in the RCServo array are updated to prepare it for the next 20ms interrupt. |
||
Although this method of timing the pulse trains has a lower resolution than using interrupts (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and preserve the 20ms interrupt. With a 40MHz clock, |
Although this method of timing the pulse trains has a lower resolution than using interrupts (see [http://peshkin.mech.northwestern.edu/pic/code/RCservoSoft/RCservoSoft.c RCservoSoft.c]), it allows one to add and remove servos more easily and preserve the 20ms interrupt. With a 40MHz clock and seven servos, we were able to get a resolution of about 8us, which was good enough for this purpose. |
||
===Serial Communication=== |
===Serial Communication=== |
Revision as of 14:25, 18 March 2008
Overview
Team Members
- Michael Hwang - Electrical Engineer - Class 2008
- Andrew Long - Mechanical Engineer - Class 2009
- Clara Smart - Electrical Engineer - Class 2009
Snake Motion
Snakes are able to adapt their movement to various environments. For instance, snakes can move across extreme environments such as sand, mud and water. Research has discovered there are four types of snake motion, as shown in the image. These motions include; serpentine movement, rectilinear movement, concertina movement and side-winding movement.<ref>Ma, Shugen. "Analysis of creeping locomotion of a snake-like robot." Advanced Robotics Vol.15, No.2 (2001): 205</ref> The most common motion exhibited by most snakes is serpentine motion where section follows a similar path. In order for snakes to successfully locomote using serpentine motion, the belly of the snake must have anisotropic coefficient of friction for the normal and tangential directions. Specifically, the normal friction must be greater than the tangential friction. As a result, when the snake exhibits a force on the ground, it will move in the tangential direction without slipping in the normal direction.<ref>Saito, Fukaya, Iwasaki. "Serpentine Locomotion with Robotic Snakes". IEEE Control Systems Magazine (Feb 2002): 66.<ref/>
Advantages / Disadvantages of Robotic Snake Motion
Advantages
Many robots are limited by the use of motorized wheels. However, there are many advantages for building a robot that mimics the motion of a snake. Several advantages for movement of snake robot are listed below:
- Move across uneven terrain since it is not dependent on wheels
- Possibly swim if water-proofed
- Move across soft ground such as sand since it can distribute its weight across wider area
Also, from a systems standpoint, the snake robot can be very modular with many redundant segments. As a result, it is very easy to replace broken segments as well as shorten or lengthen the robot.
Disadvantages
Although there are many advantages for building a snake like robot, there are several disadvantages which are listed below:
- Low power and movement efficiency
- High cost of actuators (servos or motors)
- Difficult to control high number of degrees of freedom
Cite = Page 206
Robot Snake Motion
Real snake motion does not follow specified equations. However, research has proven that the serpentine motion of a snake can be modeled with the following equations:
where the parameters a, b, and c determine the shape of the serpentine motion. The graph shows how the parameters influence the serpentine curve. Basically, a changes the appearance of the curve, b changes the number of phases, and c changes the direction.
The serpentine curve can be modeled with a snake like robot by changing the relative angles between the snake robot segments using the following formula with the number of segments (n):
where α , β , and γ are parameters used to characterize the serpentine curve and are dependent on a, b, and c as shown below:
The equations above for φi,α,β, and γ were used in this snake like robot as shown in the code section.
Mechanical Design
The robotic snake consists of a head segment and several body segments. The head segment houses the onboard microcontroller and xBee radio. The body segments house the servo motors and the batteries required to power each motor. As the snake is designed to be modular, there is no limit to the number of body segments. More segments will allow it to move more smoothly, while fewer segments will be easier to control. For this design, seven body segments were used due to material limitations.
Mechanically, the snake is designed to move in a serpentine motion, imitating the motion of a real snake. As discussed above, real snakes move with anisotropic coefficients of friction. It is difficult to locate materials with this property, but passive wheels satisfy the friction requirements. The friction will be lower in the direction of rolling, thus providing the required difference in friction. The only problem with this approach is that the wheel may slide in the normal direction if the weight applied to the wheel is not sufficient.
The Body Segments
Each of the body segments are identical and includes a chassis, a servo, a connector, standoffs and two passive wheels as can be seen in the picture.
Chassis
The base of the chassis is made from a thin (approx. 1/8th inch) piece of polycarbonate. The chassis must be wide enough to hold a servo motor with a AAA battery pack on each side and long enough for the servo and a standoff (the connection for the previous segment). The polycarbonate was cut into a rectangle to meet the specifications for our servo motor. Five holes were then drilled in the rectangle, four to mount the servo and one for the standoff. The holes are drilled to allow the servo to be located in the center of the chassis.
Connector
A connector was machined to attach to the servo horn of one body segment and to attach to the next segment's standoff. The length of this connector is about 3 inches and is just long enough to prevent collision between segments. A shorter beam allows for greater torque. This connection needs to be as tight as possible and the beam must be mounted perpendicular to the chassis.
Standoffs
Standoffs were used to attach the servo to the chassis and to attach the connector to the chassis. Two standoffs (1 in and 1/2 in) and several washers were used to make the connector parallel to the ground.
Passive Wheels
Passive wheels were mounted to the bottom of the chassis. Each wheel was made of a 3/4 inch pulley and an o-ring. The o-ring was used to increase friction with the ground. The wheels have been set on polished metal dowel pins which allow the wheels to rotate more freely than when placed on wooden dowels. The dowel pin axles were mounted (hot glue works but is not very strong) in the center of the segment. The center of the segment is not the center of the polycarbonate rectangle. Instead, the entire segment length is the distance from the standoff on one chassis to the center of the servo horn on the other. In this project, the length of the connector was made to be about half the length of the segment. Therefore, the wheels were placed at the same location as the stand off as can be seen in the image. The wheels are held in place with zip ties.
Fully Assembled Body Segment
A fully assembled chassis has a mounted servo and is connected to a segment on either side. AAA batteries packs were attached to the sides of the motor with velcro to allow easy removal. The small electronic circuit board for each segment was mounted on the front of the motor to allow easy access to the switch. (See Electronic Design for more information on the circuit board and batteries.
The Head Segment
The head segment is similar to the body segments except that it contains a PCB board with a PIC instead of a servo motor. The head segment is the same width but slightly longer than the body segment. A ball caster was added to the front of the segment to help support the extra length and help the wheels stay on the ground.
Protection and Visual Appeal
As a final step, housing for each segment was created from 3" PVC pipe. The pipe was cut into segments the same length as the chassis. The bottom of the pipe was cut off, allowing it to sit flat on the chassis. The housing provides a protective covering for the servo, batteries and electronics. The pipe was attached with velcro straps which mounted under the chassis. This housing can be easily removed to debug and to change batteries.
Mechanical Debugging
Wheels come off the ground: Add washers to the standoffs to force the chassis to be parallel to the ground.
Wheels slide, but do not roll: Increase frictionby either adding weight to the segment or changing the "tires" (the o-ring).
The segments slip when the servo rotates: Tighten the screws for the connector standoffs, both above the beam and below the chassis.
Electronics
Needs description of servo - include discussion of how we aligned them (through code)
Needs discussion on batteries. Rechargeable vs Alkaline, 4 vs 5 etc.
Needs circuit diagram for servo boards and/or picture
Needs description of ribbon cable? (ie be careful with it)
Needs reason for terminator
PIC Code
Servo Control
The main function of the PIC microcontroller was to control multiple servos (seven in our case). Timer1is set to overflow every 20 milliseconds and trigger an interrupt. When the interrupt is triggered, Timer1'scounter is set to the value held by TMR1_20MS, which will cause the interrupt to trigger again 20 ms later. At the beginning of the interrupt, all the pins connected to the servos are set high. While Timer1 is less than the value held by TMR1_2point25MS, Timer1 is polled, and the value is compared sequentially to the values in the RCservo array. If the value of Timer1 is greater than a value in RCservo, the the corresponding pin is set low. After all the values have been compared, Timer1 is polled again and the process repeats until 2.25 ms have elapsed (when Timer1 > TMR1_2point25MS). After all the servos signals have been sent, the values in the RCServo array are updated to prepare it for the next 20ms interrupt.
Although this method of timing the pulse trains has a lower resolution than using interrupts (see RCservoSoft.c), it allows one to add and remove servos more easily and preserve the 20ms interrupt. With a 40MHz clock and seven servos, we were able to get a resolution of about 8us, which was good enough for this purpose.
Serial Communication
The PIC communicates serially with a XBee radio. When a byte is received in the UART receive buffer, a high-priority interrupt is triggered. The received byte is put into a switch-case statement, and the corresponding parameters are updated.
Results
Initial Design Discussion? May not be necessary
Discuss how it went well
Link to you tube video (s)
Next Steps
References
</references>