This robot was designed for demonstration purposes. It uses IR detection techniques to play catch with people using a basket and a 4,200RPM pitching wheel. It also has a 36" 3 axis arm capable of manipulating objects up to 3lbs.
The robot has 2 powered swerve pods with 2 omniwheels in the front to act as castors. The swerve pods have 720 degrees of rotation in both directions with 12V motors directly driving the wheels on the pods. This drive configuration allows fully holonomic motion, allowing translation as well as rotation at the same time.
Controller/CPU: Lego NXT
It is a Lego Mindstorms NXT running RobotC. The code is based on a 8 core processing model with 16 total threads running to manage all the parts of the robot.
2: Quadrature encoders on the swerve pods for PID position control
2: Quadrature encoders on the arm motors for PID position control
8: tactile limit switches on a HiTechnic Protoboard:
2: on the arm for automatic calibration
3: on the internal elevator for min/max travel limits and to tell if the robot has a whiffle ball
2: on the swerve pods to automatically calibrate the rotations
1: on the basket to calibrate the up position
1: IR direction sensor to detect where the person to play catch with is
6: current monitors on all the motor and servo controllers to prevent burning up components
8: 12V, 152RPM, 5A, DC Motors
7: Hitec HS-785HB servos
2: Pico Switch Relays for controlling the LED Light strips
The gearing used on the robot is as follows:
Swerve Pods: 1:1 gearing for rotation, direct drive for the wheels
Basket: 1:12 for raising and lowering it
Shooter: 27:1 gearing for approximately 4,200 RPM at full speed
Shoulder joint has a 1:6 reduction
Elbow has a 1:2 reduction
Wrist has a 1:1 ratio
This robot was created as a general purpose demonstration robot. Its main features are a 36" 3 axis arm, a swerve drive with 2 pods capable of holonomic movement, and a catching/pitching mechanism for playing catch.
The drive base on the robot is a swerve drive. Each of the pods have a rotational limit of +/- 720 degrees with a rotational speed of 800 degrees per second. One of the hardest parts about programming this robot was the calculation of the individual pods target vectors based on the desired overall translation and rotation vectors. To make that challenge even more complicated, the drag the omniwheel castors caused had to be calculated and compensated for because they provide a rotational force when moving sideways. The solution I used to overcome the omniwheel drag was adding a rotational scalar to the desired rotation based on the magnitude of the sideways translation. The individual target vectors for the pods were calculated as follows:
1: Creating a vector perpendicular to the line from the center of the robot to the axis of rotation of the pod and multiplying it by the desired rotation
2: Adding the final vector from 1. to a vector directly derived from the desired translation of the robot
(The code is going to be added to the photo gallery for this robot)
For the arm on the robot I implemented a Jacobian based IK engine that keeps the wrist as close to the desired angle as possible while moving the arm. The joint angles are all calculated based on a target location in a rectilinear coordinate grid with the origin located at the shoulder joint. The arm uses PID control loops along with quantic power curves to ensure that joint movements are relatively smooth and accurate. The arm is capable of lifting a maximum of 3lbs at 20".
The shooting and catching mechanism is a system of the robot that is designed to play catch autonomously with a person using standard whiffle balls. The robot uses a IR sensor to locate a pin with a IR beacon worn on the catcher's chest in order to determine where the person to throw the ball to is located. Once the robot has tossed the ball to the person it is able to track them while waiting for the ball to be tossed back. Once the ball has been tossed back the robot will position itself in the ideal location to toss the ball back and then throw it back. The physical construction of the catching system is quite simple. The basket uses polycarbonate flaps to enclose the side, along with 1/4" surgical tubing for the bottom, to provide a flexible, forgiving catching system. The robot uses a continuous rotation servo with a rack and pinion to lift the whiffle ball into the shooter. The shooter is composed of a wheel spinning 4,200RPM with a 39 degree curved hood to angle the shot towards the person catching the ball.
The robot is still a work in progress in this video:
Here is a video of the robot almost done. This includes how the robot calibrates itself, updated drive control methods, a demonstration of the arm, and a demonstration of the autonomous catch playing feature: