SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Downloaden Sie, um offline zu lesen
Robotics Portfolio
Raphael Chang
2014 FRC Robot CAD Model Render
2014
Hexagonal Drive Base and Bumpers
During the 2014 FRC season, our robot’s biggest weakness was its susceptibility to
being “T-boned”, or being pinned from the side by another robot by friction between the
bumpers. This effect can be seen here.
I decided to pursue a solution to this problem. There are two factors that could reduce
the friction preventing the robot’s movement, the angle of effect of the frictional force,
and the coefficient of friction between the bumpers.
Frame Geometry
By changing the angle of the sides of the frame, there are three factors that improve the
situation. The friction force parallel and opposing the traction force would be reduced,
because the friction is no longer parallel to the traction. The normal force between the
bumpers is also reduced, because there is a component of the traction pulling away
from the contact by the other robot. Some of the pushing force from the pinning robot
would also add to the forward force of our robot, because the robot is no longer pushing
perpendicularly.
Because this project was done in the offseason, I chose to modify our current drive
base rather than design a new one. Using Autodesk Inventor CAD, I found how much
angle I could add to our current frame geometry without exceeding the frame perimeter
limit of 112 inches.
Ftraction1
Ftraction2Ffriction
Ftraction1
Ffriction
Ftraction2
Regular drive base Hexagonal drive base
The maximum angle turned out to be around 11.7 degrees, which gave our robot 104%
of its original traction force. This meant that any robot T-boning us would not only have
no effect, but the other robot would actually be helping us drive away!
To manufacture the bumpers, which were made of wood, I used a box joint to join two
pieces of wood together at an angle. I used Autodesk Inventor to model the bumper
wood before manufacturing to get the correct angles for the cuts.
Low-friction Fabric
Another way to reduce friction was by changing the
material of the fabric covering our bumpers. Doing some
research, I found that sail cloth had a very low
coefficient of friction. Performing a static friction test
comparing the original material with the new sail cloth, I
found that the coefficient of friction with the sail cloth
was 3 times lower than the original. I had our new
bumpers covered in this sail cloth, and the results were
impressive. Here is a video showing the final result. The completed angled bumpers
Ball Manipulation Software
The 2014 FRC game involved passing a game ball to other robots on our alliance.
Control of the ball during matches was also very important in this game. To assist our
drivers in handling the ball, I wrote code in C++ using three sensors, an IR proximity
sensor, a gear tooth sensor, and the drivetrain encoders.
Ball Collection and Detection
Using an IR proximity sensor behind the bumper, my code
automatically spun the rollers until a ball was detected to
have been collected over the bumper. Whenever the
proximity sensor detected that the ball had slipped out of
the robot, the rollers quickly spun the ball back into the
robot. This allowed us to always have control of the ball so
the driver could focus on controlling the rest of the robot.
Dribbling with Speed Control
In autonomous mode, we had to move two
balls at the same time, one inside the robot,
and one behind it on the ground. To
maintain control of the ball on the ground
without collecting into the robot, my code
read the drivetrain encoder values and set
the collector roller motor power so that the
surface speed of the rollers matched the ground speed of the robot.
Controlling Passing Speed Independently of Driving Speed
A gear tooth sensor and the drivetrain encoders are used to control the ground speed of
the ball when passing. Similar to dribbling, the drivetrain encoders were used to set the
roller motor power so that the robot ground velocity offset the roller velocity. For
increased accuracy, an additional gear tooth sensor on the rollers was used to detect
when the rollers were spinning at the desired speed by measuring the passing rate of
the gear teeth. The collector arm was then lifted, leaving the ball at the desired ground
speed independent of driving speed. This was especially spectacular when the robot
drops the ball still on the ground even while driving at full speed.
Crank Geometry
Our 2014 robot had to launch a 2 foot diameter game ball into a 7 foot high goal, and
we designed our robot to do so from 15 feet away. We used two 400 pound
compression springs to get us the required energy. To compress these springs, we
used a two-stage crank rotated by a worm gearbox.
The second (gray) and third (yellow) linkages are pulled in the first stage (1 and 2), until
the second linkage is caught by a peg (3). In the second stage, the rotation continues (4)
until the linkages are over center and the shooter releases (5). Here is a video of the
crank in action.
I worked on calculating the
geometry of the linkages of the
crank. The geometry had to both
compress the springs the right
amount and also minimize the
torque on the gearbox by the
springs so that we could use a
lower reduction and reload faster.
Using CAD, I created a sketch of
the linkages that also calculated
the torque required at various
points to overcome the spring’s
force at that compression. The
torque increased as the springs
were compressed further.
The geometry sketch could be
dragged around to show the
torque at different points of the pull.
The first linkage's length is the diameter of the solid green circle. The second linkage is
attached to that green circle, and the third link is attached to that going up to the shooter
arm. The images above show the crank in its second stage.
I then realized that the peak
torque could be minimized if I
made the length of the first linkage
longer and the second linkage
shorter different while keeping the
total length the same. Because
torque was force times radius, the
larger radius and the smaller
spring force in the first stage and
the smaller radius and the larger
spring force in the second stage
would make the torques balance.
This modification resulted in a 100
lb-in torque reduction for the
gearbox, allowing us to reload 3
seconds faster.
Automatic Ball Tracking
As a side project, I worked on a vision program to allow the robot to automatically track
the game ball and drive towards it to pick it up. I used a Kinect, which could give me
depth images in addition to RGB images. This allowed me to easily find the location of
the ball in 3D space.
This is the overall process of the program:
1. Convert Kinect depth image to 3D point cloud.
Using the OpenNI library, I captured both the RGB and depth images. I then
used the library to convert the depth image into a 3D point cloud.
2. Use RANSAC to filter out ground plane.`
RANSAC (Random Sample Consensus) is an algorithm that finds a model that
contains the most inliers out of a set of points. It works by iteratively selecting a
random set of few points, fitting a model to them, calculating the number of points
that are outliers to that model, and then repeating and taking the model with the
minimum number of outliers. I used this algorithm to find the ground plane, which
was the most prominent plane in the point cloud. These points were removed
from the cloud, leaving only the objects.
3. Isolate objects using 3D blob detection.
Using a blob detection algorithm that works in 3 dimensions, blobs of points were
separated into distinct objects. One of these objects would be the ball.
4. Take blobs with highest percentage of blue and red pixels as blue and red
ball, respectively.
Matching the points in the point cloud with their respective pixels from the RGB
image, the blobs with the highest percentage of blue and red pixels were taken
as the blue and red balls, respectively, because the balls were solid red and blue.
5. Find average coordinate of blobs.
The average coordinate of all the points in each blob was used as the location of
each ball.
6. Convert coordinate from camera space to robot space using ground plane.
The coordinates above were relative to the camera. I used matrices to convert
the points from camera space to robot space, using the projection of the camera
onto the ground plane as the new origin.
7. Drive towards ball location.
The drivetrain position control loop used the ball location as the desired setpoint,
and actively corrected itself every cycle to move towards the current location of
the ball.
Codebase Framework
In 2013, our software had many automated routines, such as the climb and autonomous.
The codebase was badly structured for these routines, causing the code for the routines
to be complicated and unreadable, and thus hard to maintain. Addressing this problem
in the 2014 C++ codebase, I created a framework that made automation structured and
easy to maintain.
The framework was event-driven, meaning that each automation routine would be
started and aborted by events, such as the pressing or releasing of a joystick button.
Each automation routine was a subclass of the Automation class, and each event was a
subclass of the Event class. During construction, automation classes could be linked to
start and abort events, making it very easy to change how routines are started and
aborted.
The Automation class had three main functions, StartAutomation, AbortAutomation, and
Update. StartAutomation was called the cycle the start event fired, and AbortAutomation
was called the cycle the abort event fired. The Update method did the main processing
of the routine, including control of parts of the robot. This structure made adding and
modifying automation routines easy and understandable.
Subclasses of the Automation and Event classes in the 2014 codebase
The entire framework was controlled by the Brain class, which this flowchart describes.
2013
Automated Climb Sequence
The 2013 FRC game involved climbing up a pyramid, and we designed a robot that
could climb up two rungs to the second level. I wrote the complex software routine to
automate the sequence.
The robot had a winch pawl that could be powered by a single motor to reel the line in
and out, and it could also be powered by a power take-off (PTO) from the drivetrain to
get full power when lifting the weight of the robot. The PTO was engaged by a servo
motor. My code used a state machine that involved a gear tooth sensor and the
drivetrain encoders. The gear tooth sensor measured the distance travelled by the
winch pawl motor, and the drivetrain encoders measured the distance travelled by the
drivetrain. When the PTO was engaged, the winch pawl motor had to be run in sync
with the drivetrain.
Winch lines
Upper hooks
Arms
Lower hooks
CAD model of the 2013 robot with parts of the climber labeled. The lower
hooks were later redesigned, and the upper hooks were reversed.
This is the overall sequence of the routine, using a state machine:
1. Pneumatically actuate the lower hooks up, and simultaneously reel the line out a
specific amount to prepare for later. Pause the routine to allow the driver to line
up to the first rung.
2. When a button is pressed, lower the lower hooks to pull the robot to the first level.
3. Reel out the line further to engage the upper hooks to the second rung.
4. When the driver ensures the hooks are engaged and presses a button, the lower
hooks release and the robot hangs by the upper hooks, ready to pull.
5. The PTO engages and the drivetrain and winch pawl motor reel the line in at the
same time, pulling the robot up to the second level.
With this automation, the entire routine can be completed in the last 20 seconds of a
match, with only 3 button presses by the driver. Here is a video of this routine in action.
Shooter Loading Routine
Our 2013 robot had to shoot discs into goals after picking them off the ground, so our
robot had a storage container to store four discs at a time. To load the discs from the
storage into the flywheel shooter, we had a pneumatic pusher with a wedge at the end.
To automatically load discs into the shooter, I wrote a state machine involving a
proximity sensor and the Hall Effect sensors on the shooter flywheel. When the wedge
moved back, the discs would jump up, so my code had to wait for the discs to fall back
down before moving the wedge forward and pushing one disc into the shooter. The
proximity sensor detected if the discs were settled and the Hall Effect sensors
measured the speed of the shooter.
This was the overall state machine:
1. Move the pusher back, and wait for the proximity sensor to detect that the discs
have jumped.
2. Wait for the discs to fall back down, triggering the proximity sensor.
3. Move the pusher forward, and wait for the shooter flywheel speed to drop,
indicating that the disc entered the shooter.
4. Repeat the process until all four discs in the storage are fired.
This auto-fire routine allowed our robot to fire all four discs in approximately 2.5 seconds.
Here is a detailed video showing this routine.
Goal Detection
In the 2013 FRC game, the goals had reflective tape around them to allow teams to
write vision code to detect the location of the goals. I wrote computer vision code in C++
to calculate the location of the goal and automatically align the robot to it.
The camera I used was a PS3Eye camera with the infrared filter
removed. I attached a ring of infrared LED lights around it to light
up the reflective targets. This ensured that the only image present
would be the reflection from the goal.
This is the overall process of the program.
To calculate the location of the goal in the image, I used the phase correlation algorithm.
Using a template image of the goal, the algorithm would find the location of the closest
match of that template on the input image. The algorithm ran the Fast Fourier Transform
on the template and input images and calculated the phase correlation between the
images. When the Inverse Fourier Transform was run on the phase correlated image,
the location of the brightest point was the location of the goal.
Final ResultInverse Fourier Transform
Input Image
Template Image
Camera
The image is acquired
from a PS3 Eye
camera with the IR
filter removed.
External Processor
The image is sent to a
Foxconn computer, and the
image is to find the location
of the target.
Robot Processor
The location of the goal is
sent to the main processor,
which is used to position the
robot to the correct location.
2012
Key Detection
One of the features in the FRC 2012 game was a “key” that
robots could line up to for shooting basketballs. One of my first
software projects on the team was to write a vision program that
automatically lined the robot up to the edge of the key.
Overall Process for Positioning on the Key
Detecting the Key
Thresholded Image & Histogram
- The same process is also applied to the blue
channel so that we can detect both keys.
- The red and blue pixels that pass the
thresholds are added to a counter, which is
converted to a percentage of the entire image.
- The percentage is used to determine whether
the robot is on the edge of the key.
Input Image & Histogram
- The red channel peaks at the same value for
both white and red pixels, so thresholding red
values would not work.
- The values of the other channels are lower for
red pixels (compared to the same for white
pixels), so using a difference algorithm
(thresholding differences between the red and the
other channels) would only accept red pixels
above a certain threshold.
Red Pixels
Red Pixels
Red Pixels
Only
Camera
The image is acquired
from a webcam.
BeagleBoard
The image is sent to a processor
called the BeagleBoard, and the
image is processed (see below)
to get information about the key.
Robot Processor
The processed data is sent to the
main processor to control the
robot position to stop at the edge
of the key.
Original Image Thresholded Image
Red Pixels
Red Pixels
White Pixels
White Pixels
Red & White Pixels
Team Website
As the webmaster of the team in my sophomore year, I decided to rewrite the team
website at http://lynbrookrobotics.com from scratch. Instead of using WordPress like it
previously did, I wrote a custom content management system that could also manage
our membership list and organize rides for team events.
I designed the theme for our website using HTML and CSS, and wrote the back-end
code using PHP and MySQL. I also designed many of the banner images on the home
page, and rewrote a lot of outdated content throughout the website.
Our new team website design and content was commended by many other teams.
Additional Sources
Papers I wrote for some of my projects:
Detecting the Key (2012) -
http://lynbrookrobotics.com/resourcefiles/whitepages/2012/Key%20Detection.pdf
Lining Up to the Goal (2013) -
http://lynbrookrobotics.com/resourcefiles/whitepages/2013/AutoAimDocument.pdf
Manipulating the Ball (2014) -
http://lynbrookrobotics.com/resourcefiles/whitepages/2014/BallManipulation.pdf
Hexagonal Drive Base and Bumpers (2014) -
http://lynbrookrobotics.com/resourcefiles/whitepages/2014/HexagonalDriveBase.pdf
Source code for some of my projects:
Automatic Ball Tracking (2014) - https://dl.dropboxusercontent.com/u/76375046/BallTracking.rar
Goal Detection (2013) - https://dl.dropboxusercontent.com/u/76375046/AutoAim.rar
Videos of my projects in action on our robots:
Hexagonal Drive Frame and Bumpers (2014) - http://youtu.be/eKcOGrCJX24
Automatic Ball Catch (2014) - http://youtu.be/R6odjjIuDBU
Dropping Ball Still on Ground (2014) - http://youtu.be/3vdnbtxrBGc
Automated Climb Sequence (2013) - http://youtu.be/23uxOb8Iwko
Autonomous Mode Routine (2013) - http://youtu.be/3615Vo_b2Nc
Shooter Loading Routine (2013) - http://youtu.be/o-IbhKo36-s
2011 Robot Arm Control Loop (2012) - http://youtu.be/w30u4442c20
Promotional videos I made for our robots:
2012 Season Highlights - http://youtu.be/XJYD4rgPWGU
2012 CalGames Offseason Competition Highlights - http://youtu.be/ws2bLb_TVbY
2013 Robot “Reveal” - http://youtu.be/jmdET56tukM
2013 Season Highlights - http://youtu.be/w79l4VhjrD0
2013 Offseason Competition Highlights - http://youtu.be/yCBjZ0s0kAo
2014 Robot “Reveal” - http://youtu.be/92IbHU0Z76I
2014 Season Highlights - http://youtu.be/6LP_wzg0UKI
2014 Offseason Competition Highlights - http://youtu.be/zd-kX49NzuM
Team Website (created in 2012): http://lynbrookrobotics.com

Weitere ähnliche Inhalte

Andere mochten auch

Edgar Degas: Creating Ballet Lines
Edgar Degas: Creating Ballet LinesEdgar Degas: Creating Ballet Lines
Edgar Degas: Creating Ballet Lineskmarleneanu
 
Manual curso taller adobe photoshop básico
Manual curso taller adobe photoshop básicoManual curso taller adobe photoshop básico
Manual curso taller adobe photoshop básicoMarco Antonio Jaén
 
Become a digital company - Case KPN / Xebia
Become a digital company - Case KPN / XebiaBecome a digital company - Case KPN / Xebia
Become a digital company - Case KPN / XebiaXebia Nederland BV
 
Japanese picture dictionary
Japanese picture dictionaryJapanese picture dictionary
Japanese picture dictionaryHikikomoris Tk
 
How To Install and Configure AWS CLI for Windows
How To Install and Configure AWS CLI for WindowsHow To Install and Configure AWS CLI for Windows
How To Install and Configure AWS CLI for WindowsVCP Muthukrishna
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Ippon
 
Connected Cars Are the Next Must Have Consumer Electronics Device
Connected Cars Are the Next Must Have Consumer Electronics DeviceConnected Cars Are the Next Must Have Consumer Electronics Device
Connected Cars Are the Next Must Have Consumer Electronics DeviceCisco Jasper
 

Andere mochten auch (8)

Edgar Degas: Creating Ballet Lines
Edgar Degas: Creating Ballet LinesEdgar Degas: Creating Ballet Lines
Edgar Degas: Creating Ballet Lines
 
Manual curso taller adobe photoshop básico
Manual curso taller adobe photoshop básicoManual curso taller adobe photoshop básico
Manual curso taller adobe photoshop básico
 
Become a digital company - Case KPN / Xebia
Become a digital company - Case KPN / XebiaBecome a digital company - Case KPN / Xebia
Become a digital company - Case KPN / Xebia
 
Japanese picture dictionary
Japanese picture dictionaryJapanese picture dictionary
Japanese picture dictionary
 
How To Install and Configure AWS CLI for Windows
How To Install and Configure AWS CLI for WindowsHow To Install and Configure AWS CLI for Windows
How To Install and Configure AWS CLI for Windows
 
Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016Quoi de neuf pour JHipster en 2016
Quoi de neuf pour JHipster en 2016
 
Connected Cars Are the Next Must Have Consumer Electronics Device
Connected Cars Are the Next Must Have Consumer Electronics DeviceConnected Cars Are the Next Must Have Consumer Electronics Device
Connected Cars Are the Next Must Have Consumer Electronics Device
 
Jasper, Internet of Things
Jasper, Internet of ThingsJasper, Internet of Things
Jasper, Internet of Things
 

Ähnlich wie Robotics Portfolio

MAE 106 Final Project Report
MAE 106 Final Project ReportMAE 106 Final Project Report
MAE 106 Final Project ReportDaniella Lopez
 
roboGolf-CIT-research-congress
roboGolf-CIT-research-congressroboGolf-CIT-research-congress
roboGolf-CIT-research-congressRaffy Lauglaug
 
IRJET- Robo Goalkeeper
IRJET- Robo GoalkeeperIRJET- Robo Goalkeeper
IRJET- Robo GoalkeeperIRJET Journal
 
“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”
“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”
“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”IOSR Journals
 
Independent design project
Independent design projectIndependent design project
Independent design projectFabian Okidi
 
Design book[1]
Design book[1]Design book[1]
Design book[1]nzende
 
Design and 3D Print of an Explorer Robot
Design and 3D Print of an Explorer RobotDesign and 3D Print of an Explorer Robot
Design and 3D Print of an Explorer Robotmeijjournal
 
DESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOTDESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOTmeijjournal
 
DESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOTDESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOTmeijjournal
 
GDC2011 - Implementation and Application of the Real-Time Helper-Joint System
GDC2011 - Implementation and Application of the Real-Time Helper-Joint SystemGDC2011 - Implementation and Application of the Real-Time Helper-Joint System
GDC2011 - Implementation and Application of the Real-Time Helper-Joint SystemJubok Kim
 
Automated Laser Reflection Report
Automated Laser Reflection ReportAutomated Laser Reflection Report
Automated Laser Reflection ReportNan Li
 
Game Engine Overview
Game Engine OverviewGame Engine Overview
Game Engine OverviewSharad Mitra
 

Ähnlich wie Robotics Portfolio (20)

Aris_Robotics
Aris_RoboticsAris_Robotics
Aris_Robotics
 
Report
ReportReport
Report
 
EGRE 364
EGRE 364EGRE 364
EGRE 364
 
Final Paper
Final PaperFinal Paper
Final Paper
 
MAE 106 Final Project Report
MAE 106 Final Project ReportMAE 106 Final Project Report
MAE 106 Final Project Report
 
roboGolf-CIT-research-congress
roboGolf-CIT-research-congressroboGolf-CIT-research-congress
roboGolf-CIT-research-congress
 
40120130406016
4012013040601640120130406016
40120130406016
 
IRJET- Robo Goalkeeper
IRJET- Robo GoalkeeperIRJET- Robo Goalkeeper
IRJET- Robo Goalkeeper
 
“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”
“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”
“Rover - Remote Operated Vehicle for Extraction and Reconnaissance”
 
Independent design project
Independent design projectIndependent design project
Independent design project
 
Design book[1]
Design book[1]Design book[1]
Design book[1]
 
Me 405 final report
Me 405 final reportMe 405 final report
Me 405 final report
 
Design and 3D Print of an Explorer Robot
Design and 3D Print of an Explorer RobotDesign and 3D Print of an Explorer Robot
Design and 3D Print of an Explorer Robot
 
DESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOTDESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOT
 
DESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOTDESIGN AND 3D PRINT OF AN EXPLORER ROBOT
DESIGN AND 3D PRINT OF AN EXPLORER ROBOT
 
5218meij01.pdf
5218meij01.pdf5218meij01.pdf
5218meij01.pdf
 
Selabot Swarm
Selabot Swarm Selabot Swarm
Selabot Swarm
 
GDC2011 - Implementation and Application of the Real-Time Helper-Joint System
GDC2011 - Implementation and Application of the Real-Time Helper-Joint SystemGDC2011 - Implementation and Application of the Real-Time Helper-Joint System
GDC2011 - Implementation and Application of the Real-Time Helper-Joint System
 
Automated Laser Reflection Report
Automated Laser Reflection ReportAutomated Laser Reflection Report
Automated Laser Reflection Report
 
Game Engine Overview
Game Engine OverviewGame Engine Overview
Game Engine Overview
 

Robotics Portfolio

  • 1. Robotics Portfolio Raphael Chang 2014 FRC Robot CAD Model Render
  • 2. 2014 Hexagonal Drive Base and Bumpers During the 2014 FRC season, our robot’s biggest weakness was its susceptibility to being “T-boned”, or being pinned from the side by another robot by friction between the bumpers. This effect can be seen here. I decided to pursue a solution to this problem. There are two factors that could reduce the friction preventing the robot’s movement, the angle of effect of the frictional force, and the coefficient of friction between the bumpers. Frame Geometry By changing the angle of the sides of the frame, there are three factors that improve the situation. The friction force parallel and opposing the traction force would be reduced, because the friction is no longer parallel to the traction. The normal force between the bumpers is also reduced, because there is a component of the traction pulling away from the contact by the other robot. Some of the pushing force from the pinning robot would also add to the forward force of our robot, because the robot is no longer pushing perpendicularly. Because this project was done in the offseason, I chose to modify our current drive base rather than design a new one. Using Autodesk Inventor CAD, I found how much angle I could add to our current frame geometry without exceeding the frame perimeter limit of 112 inches. Ftraction1 Ftraction2Ffriction Ftraction1 Ffriction Ftraction2 Regular drive base Hexagonal drive base
  • 3. The maximum angle turned out to be around 11.7 degrees, which gave our robot 104% of its original traction force. This meant that any robot T-boning us would not only have no effect, but the other robot would actually be helping us drive away! To manufacture the bumpers, which were made of wood, I used a box joint to join two pieces of wood together at an angle. I used Autodesk Inventor to model the bumper wood before manufacturing to get the correct angles for the cuts. Low-friction Fabric Another way to reduce friction was by changing the material of the fabric covering our bumpers. Doing some research, I found that sail cloth had a very low coefficient of friction. Performing a static friction test comparing the original material with the new sail cloth, I found that the coefficient of friction with the sail cloth was 3 times lower than the original. I had our new bumpers covered in this sail cloth, and the results were impressive. Here is a video showing the final result. The completed angled bumpers
  • 4. Ball Manipulation Software The 2014 FRC game involved passing a game ball to other robots on our alliance. Control of the ball during matches was also very important in this game. To assist our drivers in handling the ball, I wrote code in C++ using three sensors, an IR proximity sensor, a gear tooth sensor, and the drivetrain encoders. Ball Collection and Detection Using an IR proximity sensor behind the bumper, my code automatically spun the rollers until a ball was detected to have been collected over the bumper. Whenever the proximity sensor detected that the ball had slipped out of the robot, the rollers quickly spun the ball back into the robot. This allowed us to always have control of the ball so the driver could focus on controlling the rest of the robot. Dribbling with Speed Control In autonomous mode, we had to move two balls at the same time, one inside the robot, and one behind it on the ground. To maintain control of the ball on the ground without collecting into the robot, my code read the drivetrain encoder values and set the collector roller motor power so that the surface speed of the rollers matched the ground speed of the robot. Controlling Passing Speed Independently of Driving Speed A gear tooth sensor and the drivetrain encoders are used to control the ground speed of the ball when passing. Similar to dribbling, the drivetrain encoders were used to set the roller motor power so that the robot ground velocity offset the roller velocity. For increased accuracy, an additional gear tooth sensor on the rollers was used to detect when the rollers were spinning at the desired speed by measuring the passing rate of the gear teeth. The collector arm was then lifted, leaving the ball at the desired ground speed independent of driving speed. This was especially spectacular when the robot drops the ball still on the ground even while driving at full speed.
  • 5. Crank Geometry Our 2014 robot had to launch a 2 foot diameter game ball into a 7 foot high goal, and we designed our robot to do so from 15 feet away. We used two 400 pound compression springs to get us the required energy. To compress these springs, we used a two-stage crank rotated by a worm gearbox. The second (gray) and third (yellow) linkages are pulled in the first stage (1 and 2), until the second linkage is caught by a peg (3). In the second stage, the rotation continues (4) until the linkages are over center and the shooter releases (5). Here is a video of the crank in action.
  • 6. I worked on calculating the geometry of the linkages of the crank. The geometry had to both compress the springs the right amount and also minimize the torque on the gearbox by the springs so that we could use a lower reduction and reload faster. Using CAD, I created a sketch of the linkages that also calculated the torque required at various points to overcome the spring’s force at that compression. The torque increased as the springs were compressed further. The geometry sketch could be dragged around to show the torque at different points of the pull. The first linkage's length is the diameter of the solid green circle. The second linkage is attached to that green circle, and the third link is attached to that going up to the shooter arm. The images above show the crank in its second stage. I then realized that the peak torque could be minimized if I made the length of the first linkage longer and the second linkage shorter different while keeping the total length the same. Because torque was force times radius, the larger radius and the smaller spring force in the first stage and the smaller radius and the larger spring force in the second stage would make the torques balance. This modification resulted in a 100 lb-in torque reduction for the gearbox, allowing us to reload 3 seconds faster.
  • 7. Automatic Ball Tracking As a side project, I worked on a vision program to allow the robot to automatically track the game ball and drive towards it to pick it up. I used a Kinect, which could give me depth images in addition to RGB images. This allowed me to easily find the location of the ball in 3D space. This is the overall process of the program: 1. Convert Kinect depth image to 3D point cloud. Using the OpenNI library, I captured both the RGB and depth images. I then used the library to convert the depth image into a 3D point cloud. 2. Use RANSAC to filter out ground plane.` RANSAC (Random Sample Consensus) is an algorithm that finds a model that contains the most inliers out of a set of points. It works by iteratively selecting a random set of few points, fitting a model to them, calculating the number of points that are outliers to that model, and then repeating and taking the model with the minimum number of outliers. I used this algorithm to find the ground plane, which was the most prominent plane in the point cloud. These points were removed from the cloud, leaving only the objects.
  • 8. 3. Isolate objects using 3D blob detection. Using a blob detection algorithm that works in 3 dimensions, blobs of points were separated into distinct objects. One of these objects would be the ball. 4. Take blobs with highest percentage of blue and red pixels as blue and red ball, respectively. Matching the points in the point cloud with their respective pixels from the RGB image, the blobs with the highest percentage of blue and red pixels were taken as the blue and red balls, respectively, because the balls were solid red and blue. 5. Find average coordinate of blobs. The average coordinate of all the points in each blob was used as the location of each ball. 6. Convert coordinate from camera space to robot space using ground plane. The coordinates above were relative to the camera. I used matrices to convert the points from camera space to robot space, using the projection of the camera onto the ground plane as the new origin. 7. Drive towards ball location. The drivetrain position control loop used the ball location as the desired setpoint, and actively corrected itself every cycle to move towards the current location of the ball.
  • 9. Codebase Framework In 2013, our software had many automated routines, such as the climb and autonomous. The codebase was badly structured for these routines, causing the code for the routines to be complicated and unreadable, and thus hard to maintain. Addressing this problem in the 2014 C++ codebase, I created a framework that made automation structured and easy to maintain. The framework was event-driven, meaning that each automation routine would be started and aborted by events, such as the pressing or releasing of a joystick button. Each automation routine was a subclass of the Automation class, and each event was a subclass of the Event class. During construction, automation classes could be linked to start and abort events, making it very easy to change how routines are started and aborted. The Automation class had three main functions, StartAutomation, AbortAutomation, and Update. StartAutomation was called the cycle the start event fired, and AbortAutomation was called the cycle the abort event fired. The Update method did the main processing of the routine, including control of parts of the robot. This structure made adding and modifying automation routines easy and understandable. Subclasses of the Automation and Event classes in the 2014 codebase
  • 10. The entire framework was controlled by the Brain class, which this flowchart describes.
  • 11. 2013 Automated Climb Sequence The 2013 FRC game involved climbing up a pyramid, and we designed a robot that could climb up two rungs to the second level. I wrote the complex software routine to automate the sequence. The robot had a winch pawl that could be powered by a single motor to reel the line in and out, and it could also be powered by a power take-off (PTO) from the drivetrain to get full power when lifting the weight of the robot. The PTO was engaged by a servo motor. My code used a state machine that involved a gear tooth sensor and the drivetrain encoders. The gear tooth sensor measured the distance travelled by the winch pawl motor, and the drivetrain encoders measured the distance travelled by the drivetrain. When the PTO was engaged, the winch pawl motor had to be run in sync with the drivetrain. Winch lines Upper hooks Arms Lower hooks CAD model of the 2013 robot with parts of the climber labeled. The lower hooks were later redesigned, and the upper hooks were reversed.
  • 12. This is the overall sequence of the routine, using a state machine: 1. Pneumatically actuate the lower hooks up, and simultaneously reel the line out a specific amount to prepare for later. Pause the routine to allow the driver to line up to the first rung. 2. When a button is pressed, lower the lower hooks to pull the robot to the first level. 3. Reel out the line further to engage the upper hooks to the second rung. 4. When the driver ensures the hooks are engaged and presses a button, the lower hooks release and the robot hangs by the upper hooks, ready to pull. 5. The PTO engages and the drivetrain and winch pawl motor reel the line in at the same time, pulling the robot up to the second level. With this automation, the entire routine can be completed in the last 20 seconds of a match, with only 3 button presses by the driver. Here is a video of this routine in action.
  • 13. Shooter Loading Routine Our 2013 robot had to shoot discs into goals after picking them off the ground, so our robot had a storage container to store four discs at a time. To load the discs from the storage into the flywheel shooter, we had a pneumatic pusher with a wedge at the end. To automatically load discs into the shooter, I wrote a state machine involving a proximity sensor and the Hall Effect sensors on the shooter flywheel. When the wedge moved back, the discs would jump up, so my code had to wait for the discs to fall back down before moving the wedge forward and pushing one disc into the shooter. The proximity sensor detected if the discs were settled and the Hall Effect sensors measured the speed of the shooter. This was the overall state machine: 1. Move the pusher back, and wait for the proximity sensor to detect that the discs have jumped. 2. Wait for the discs to fall back down, triggering the proximity sensor. 3. Move the pusher forward, and wait for the shooter flywheel speed to drop, indicating that the disc entered the shooter. 4. Repeat the process until all four discs in the storage are fired. This auto-fire routine allowed our robot to fire all four discs in approximately 2.5 seconds. Here is a detailed video showing this routine.
  • 14. Goal Detection In the 2013 FRC game, the goals had reflective tape around them to allow teams to write vision code to detect the location of the goals. I wrote computer vision code in C++ to calculate the location of the goal and automatically align the robot to it. The camera I used was a PS3Eye camera with the infrared filter removed. I attached a ring of infrared LED lights around it to light up the reflective targets. This ensured that the only image present would be the reflection from the goal. This is the overall process of the program. To calculate the location of the goal in the image, I used the phase correlation algorithm. Using a template image of the goal, the algorithm would find the location of the closest match of that template on the input image. The algorithm ran the Fast Fourier Transform on the template and input images and calculated the phase correlation between the images. When the Inverse Fourier Transform was run on the phase correlated image, the location of the brightest point was the location of the goal. Final ResultInverse Fourier Transform Input Image Template Image Camera The image is acquired from a PS3 Eye camera with the IR filter removed. External Processor The image is sent to a Foxconn computer, and the image is to find the location of the target. Robot Processor The location of the goal is sent to the main processor, which is used to position the robot to the correct location.
  • 15. 2012 Key Detection One of the features in the FRC 2012 game was a “key” that robots could line up to for shooting basketballs. One of my first software projects on the team was to write a vision program that automatically lined the robot up to the edge of the key. Overall Process for Positioning on the Key Detecting the Key Thresholded Image & Histogram - The same process is also applied to the blue channel so that we can detect both keys. - The red and blue pixels that pass the thresholds are added to a counter, which is converted to a percentage of the entire image. - The percentage is used to determine whether the robot is on the edge of the key. Input Image & Histogram - The red channel peaks at the same value for both white and red pixels, so thresholding red values would not work. - The values of the other channels are lower for red pixels (compared to the same for white pixels), so using a difference algorithm (thresholding differences between the red and the other channels) would only accept red pixels above a certain threshold. Red Pixels Red Pixels Red Pixels Only Camera The image is acquired from a webcam. BeagleBoard The image is sent to a processor called the BeagleBoard, and the image is processed (see below) to get information about the key. Robot Processor The processed data is sent to the main processor to control the robot position to stop at the edge of the key. Original Image Thresholded Image Red Pixels Red Pixels White Pixels White Pixels Red & White Pixels
  • 16. Team Website As the webmaster of the team in my sophomore year, I decided to rewrite the team website at http://lynbrookrobotics.com from scratch. Instead of using WordPress like it previously did, I wrote a custom content management system that could also manage our membership list and organize rides for team events. I designed the theme for our website using HTML and CSS, and wrote the back-end code using PHP and MySQL. I also designed many of the banner images on the home page, and rewrote a lot of outdated content throughout the website. Our new team website design and content was commended by many other teams.
  • 17. Additional Sources Papers I wrote for some of my projects: Detecting the Key (2012) - http://lynbrookrobotics.com/resourcefiles/whitepages/2012/Key%20Detection.pdf Lining Up to the Goal (2013) - http://lynbrookrobotics.com/resourcefiles/whitepages/2013/AutoAimDocument.pdf Manipulating the Ball (2014) - http://lynbrookrobotics.com/resourcefiles/whitepages/2014/BallManipulation.pdf Hexagonal Drive Base and Bumpers (2014) - http://lynbrookrobotics.com/resourcefiles/whitepages/2014/HexagonalDriveBase.pdf Source code for some of my projects: Automatic Ball Tracking (2014) - https://dl.dropboxusercontent.com/u/76375046/BallTracking.rar Goal Detection (2013) - https://dl.dropboxusercontent.com/u/76375046/AutoAim.rar Videos of my projects in action on our robots: Hexagonal Drive Frame and Bumpers (2014) - http://youtu.be/eKcOGrCJX24 Automatic Ball Catch (2014) - http://youtu.be/R6odjjIuDBU Dropping Ball Still on Ground (2014) - http://youtu.be/3vdnbtxrBGc Automated Climb Sequence (2013) - http://youtu.be/23uxOb8Iwko Autonomous Mode Routine (2013) - http://youtu.be/3615Vo_b2Nc Shooter Loading Routine (2013) - http://youtu.be/o-IbhKo36-s 2011 Robot Arm Control Loop (2012) - http://youtu.be/w30u4442c20 Promotional videos I made for our robots: 2012 Season Highlights - http://youtu.be/XJYD4rgPWGU 2012 CalGames Offseason Competition Highlights - http://youtu.be/ws2bLb_TVbY 2013 Robot “Reveal” - http://youtu.be/jmdET56tukM 2013 Season Highlights - http://youtu.be/w79l4VhjrD0 2013 Offseason Competition Highlights - http://youtu.be/yCBjZ0s0kAo 2014 Robot “Reveal” - http://youtu.be/92IbHU0Z76I 2014 Season Highlights - http://youtu.be/6LP_wzg0UKI 2014 Offseason Competition Highlights - http://youtu.be/zd-kX49NzuM Team Website (created in 2012): http://lynbrookrobotics.com