Engineering Notebook fgc2022 r2045
Engineering Notebook fgc2022 r2045
1. TEAM SUMMARY
Team Indonesia R2045 is a youth robotic team based in Depok, West Java which will
take part in FIRST Global Challenge 2022, competing and collaborating with over 180+
teams representing their own countries. R2045 members of the team have different
passions, in which some of them are, designing, engineering, science, arts and of
course we share the same big passion. The passion to make the world a better place,
by inspiring other youths to have a passion in STEAM. So the world will benefit from the
advancement of technical works. But most importantly, to help Indonesia master
technology and embrace Indonesia’s 100 year of independence. Therefore, an initiative
in shaping the golden generation of Indonesia in welcoming its 100 Years of
independence, was initiated by the school, and codenamed “R2045”, The Rendezvous
2045. All R2045 members will be expected to assist, develop, improve technological
progress in Indonesia, and help create projects that will help Indonesia in the future.
Our team is a dynamic group of high schoolers that was formed together due to a
common passion for robotics. Throughout the season, we’ve made a lot of progress in
terms of experience and overall bonding with each other.
The team experiences a Project-based way of learning, one of the best approaches to
STEAM education, as it allows team members to understand real problems, design,
test solutions, analyze and communicate their insight and new findings/innovation. This
approach gives a link between real problem solving, and appreciate the relevancy of
their work to the world around them. In this project, programming and innovative
exploitations, all STEAM aspects as well as team work collaboration, creativity and
entrepreneurial skills and social sciences are blended. We are grateful for the
Challenge given by FIRST Global, and we thank you for having made our life
meaningful, feel engaged, connected to purpose, and able to connect our gifts and
passions with our highest values.
1
2. PROBLEM EXPLORATION
2.1. GAME DESCRIPTION
The first 2 minutes when the game starts, 240 imaginary black balls of carbon dioxide
will be released to be taken by the intake robots of alliances and work together to put
as many black balls into the sink as possible. Or, the alliance team robot can also put
carbon into the compressor in the corner of the arena. Team players/controllers can
also help put carbon into the sink, or pass it into the robot's intake. Points are scored at
a height of 1 cm as the carbon fills the sink.
In the last 30 seconds, the game is divided into 2 alliance countries. Then, the robot
secures color indicator balls from the human player, then returns to the sink platform
area. If the robot enters the platform, the team's points increases by 0.25 or robot
must be hung on a bar located on the sink. If the robot hangs on the lowest sink (low
bar), points will be added by 0.25, middle bars 0.75, and the highest bar gets a point
increase of 1.0
2
2.4. STRATEGIC CONSIDERATION
Hanging the high bar and medium bar to win and get a higher multiplier and scoring by
putting as many black balls into the carbon sink is the way to win the match. We could
go directly to the securing indicator and climbing to higher bar without putting any balls
to the sink just to win the match, but if we do that we might win the match but the point
gain is low, since the ranking point will be taken from average of score points, then as
a whole we will have lower ranking matches due to low score points.
Taking this into consideration, our strategy starts off by collecting the balls, storing it
into a bucket, then after the bucket is full, lifts it and drops the balls into the sink. If time
permits we could do twice ball dropping otherwise the the collecting balls can continue
and scoring by send balls to sink by shooting it. Then secure the indicator and finally
climb the high bar to get the highest score possible.
3
3. DESIGN PROCESS
After knowing the requirements and objectives of the design as well as the limitations
and the constraints of the design, the team starts deploying brainstorming to develop
ideas and solutions in order to meet the requirements and objectives. This is
accomplished in a group setting. The possible solutions are sketches by hand which
enables them to tap their creative side. When ideas of each part were matured and the
best promising ideas were selected and combined, the sketches were translated into
3D CAD, using Fusion 360 by Autodesk.
Further on, after designs were sketched and drawn on 3D, the team assembled the
parts of the FGC 2022 kits in a system level design, made prototypes, and then
developed programs for robot movements and mechanism using onBot Java. All parts
of the design were materialized towards prototyping as well as in full robot assembly.
The team tested the part mechanism first before it went in a complete system. The
iteration comes after the test, in refining number mechanisms and in the coding
algorithm. The team progresses as the final design begins to take shape, and finally
the team carries out the match test 2.5 minutes drill on the final solution to be analyzed
and reviewed its performance against the target.
4
4.1. IDEAS DEVELOPMENT FOR DRIVEBASE SUBFUNCTION
The drivetrain consists of a series of parts that work together to transfer the rotational
power that's produced in the motors to the wheels. By doing so, the wheels begin to
turn, and the robot moves. We proposed a number of drivebase configurations, here
are three configurations out of many that we made for Carbon Capture ;
1 DUAL MOTORS
WITH OMNI WHEEL
2 DUAL MOTOR
GEARS AND CHAIN
WITH COMBINATION
OF OMNI WHEELS
AND GRIP WHEEL
3 FOUR MOTORS
WITH INDEPENDENT
WHEELS
Figure 7. Speed calculation on Flat Surface Figure 8. Speed calculation on Angled Surface
5
4.2. IDEAS DEVELOPMENT FOR INTAKE SUBFUNCTION
Intakes are one of the most common, versatile, and useful mechanisms in Robotics.
Intakes manipulate small regular-shaped game objects, such as balls to be secured or
possessed by the robot. In targeting to pick up and store 20 balls in a 40 seconds
herewith our design proposal combines the intake and lifter into the storage. Here are
three designs that we made in the table below ;
1 ROTATION
WHEEL
2 PULLEY
3 CAPTURE AND
LIFTER SWINGER
.
Figure 10. & Figure 11. Intake Speed Calculation
6
4.3. IDEAS DEVELOPMENT FOR SHOOTER SUBFUNCTION
A shooter scores game pieces from a distance. Many mechanisms can be deployed to
create a shooter. With a target of shooting 20 balls in 30 seconds and 2,5 m high ,
several design ideas for the shooter are proposed. Three of them which were expanded
upon ;
1 SINGLE
FLYWHEEL
2 DUAL FLYWHEEL
3 DUAL FLYWHEEL
WITH OPPOSITE
ROTATION
1 SINGLE LINEAR
MOTION
LIFTING
MECHANISM
2 DUAL LINEAR
MOTION
LIFTING
MECHANISM
8
4.5. IDEAS DEVELOPMENT FOR ROBOT LIFTER SUBFUNCTION
A climber may be used for the robot to climb in the endgame for scoring points. Robots
may climb using ropes, bars, and sometimes traverse along the bar. There are many
ways to design a lifter and here are three ideas in this table below ;
1 4 BAR
LINKAGE
2 LINEAR
MOTION
3 CABLE
HANGER
9
4.6. IDEAS DEVELOPMENT FOR SECURING INDICATOR SUBFUNCTION
A pre-positioned indicator may be secured by one robot from each regional alliance
when the match starts. We integrated the system onto our lifter / dropper. Wiith that in
mind, we developed four ideas on securing the indicator.
1 DESIGN 1
2 DESIGN 2
3 DESIGN 3
DESIGN 4
5. SELECTION OF IDEAS
With 2-4 ideas for each sub-function, plenty of combined solutions can be developed
by mixing all the solutions.
10
Combining the drivetrain, with intake collecting and storing balls in the bucket, lifting
the bucket and storing the balls in the sink, then shooting the ball to the sink. As the
idea is to achieve the highest score by all possible means, i.e. shooting, dropping,
human player shooting, then the robot is designed to be able to shoot as well as
dropping balls into the sink.
6. BUILDING PROTOTYPE
The primary goal of prototyping is to test, record results, and improve the concept.
Using the 2022 FGC Kit, we are able to build the design into a prototype, the chains
were cut and linked back appropriately, extrusions and wheels were assembled to form
the drive train. The intake was built by assembling the hex shafts, wheels, with
sprockets and chains. Similarly the shooter was built using extrusion, wheel and a
motor, the lifter assembly was built using 18 extrusion and linear motion mechanism
kits and finally the bucket was built using a stitched corrugated plastic sheet given.
Figure 22. Wiring design on robot solution Figure 23. Design on control of robot solution
11
6.3. PROGRAMMING
After designing and assembling the parts by following the design. The team built the
prototype, developed flowcharts and programs for the robots movements and
mechanism. All parts of the design were then materialized towards prototyping as well
as in full robot assembly. The main program was divided into 4 subsystems ;
1. Drivetrain Subsystem
2. Intake Subsystem
3. Shooter Subsystem
4. Lifter Subsystem
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.hardware.DcMotorSimple;
import java.util.Locale;
import org.firstinspires.ftc.robotcore.external.navigation.Orientation;
import org.firstinspires.ftc.robotcore.external.navigation.AxesReference;
import org.firstinspires.ftc.robotcore.external.navigation.AxesOrder;
import com.qualcomm.hardware.bosch.BNO055IMU;
import org.firstinspires.ftc.robotcore.external.navigation.AngleUnit;
import com.qualcomm.robotcore.hardware.DcMotorEx;
import com.qualcomm.robotcore.hardware.Servo;
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.util.ElapsedTime;
import com.qualcomm.robotcore.util.Range;
@TeleOp(name="TEAM4", group="TEAM4")
double power = 0;
double xAimAngle = .5;
double indexerPos = 0.5;
double leftEnc = 0;
double rightEnc = 0;
double Heading = 0;
double Circumference = 9 * Math.PI;
double x_Pos = 0;
double y_Pos = 0;
12
leftMotor.setMode(DcMotor.RunMode.RESET_ENCODERS);
leftMotor.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
rightMotor.setMode(DcMotor.RunMode.RESET_ENCODERS);
rightMotor.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
leftMotor.setDirection(DcMotorSimple.Direction.FORWARD);
rightMotor.setDirection(DcMotorSimple.Direction.REVERSE);
intakeMotor.setDirection(DcMotorSimple.Direction.REVERSE);
FwMotor.setDirection(DcMotorSimple.Direction.REVERSE);
telemetry.addData("Status", "Initialized");
xAim.setPosition(xAimAngle);
rGuide.setPosition(1);
lGuide.setPosition(0);
}
@Override
public void start() {
rGuide.setPosition(0.3);
lGuide.setPosition(0.6);
@Override
public void loop() {
angles = imu.getAngularOrientation(AxesReference.INTRINSIC, AxesOrder.ZYX, AngleUnit.DEGREES);
// DRIVETRAIN
double leftPower;
double rightPower;
leftMotor.setPower(leftPower);
rightMotor.setPower(rightPower);
// FLYWHEEL
FwMotor.setVelocityPIDFCoefficients(10, 3, 0, 0);
if (gamepad2.a == true){
FwMotor.setVelocity((4200/60)*28);
xAim.setPosition(0.64);
} else if (gamepad2.b == true){
FwMotor.setVelocity((4100/60)*28);
xAim.setPosition(0.6);
} else if (gamepad2.x == true){
FwMotor.setVelocity((4000/60)*28);
xAim.setPosition(0.5);
} else {
FwMotor.setVelocity(0);
xAim.setPosition(0.5);
}
// FEEDER
if(gamepad2.right_trigger >= 0.5){
Feeder.setPosition(0.8);
} else {
Feeder.setPosition(0.57);
}
indexer.setPosition(indexerPos);
// INTAKE
if(gamepad1.right_bumper){
intakeMotor.setPower(0.7);
} else if(gamepad1.left_bumper){
intakeMotor.setPower(-0.5);
} else {
intakeMotor.setPower(0);
}
if(gamepad2.right_trigger == 1){
rGuide.setPosition(0.3);
lGuide.setPosition(0.6);
} else if(gamepad2.left_trigger == 1){
rGuide.setPosition(1);
lGuide.setPosition(0);
}
// hanger
if (gamepad2.dpad_up) {
telescopicMotor.setPower(1);
} else if (gamepad2.dpad_down) {
telescopicMotor.setPower(-1);
} else {
telescopicMotor.setPower(0);
}
if (gamepad2.dpad_right) {
hangerMotor.setPower(1);
} else if (gamepad2.dpad_left) {
hangerMotor.setPower(-1);
} else {
hangerMotor.setPower(0);
}
hangerSupport.setPower(gamepad1.right_stick_x);
//odometry
// Z AXIS AIMING
double degrees = zAim.getCurrentPosition() * 0.216;
if(gamepad2.y){
zAim.setTargetPosition((int)(aimAngle / 0.216));
zAim.setMode(DcMotor.RunMode.RUN_TO_POSITION);
zAim.setVelocity(500);
} else {
13
zAim.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
zAim.setPower(gamepad2.right_stick_x);
// zAim.setPower(gamepad1.right_stick_y);
// formatting
String formatAngle(AngleUnit angleUnit, double angle) {
return formatDegrees(AngleUnit.DEGREES.fromUnit(angleUnit, angle));
}
7. PERFORMANCE TESTING
Performance testings were carried out for individual subsystems as well as the full
model assembling. By testing and analyzing the performance of the robot models, the
team learns how to plan the experiment and exercise problem solving simultaneously
to fix the problems and get them into the target. As the objectives of the robot have
been stated out so the performance test will easily be correlated to these objectives.
14
is too fast, the rope get tight and bends the lifter forward and might which causes the
relocation of the center of gravity which might topple the robot. We experienced this
and cause the whole lifting structure broke and fell down.
Figure 26. & Figure 27. The torn part of the Slider Plates
8. DESIGN REFINEMENTS
8.1. ROBOT MECHANISM REFINEMENT
15
INTAKE We make the position of first roller just a slightly
a bit lower than the ball diameter and the roller
able to move free go up down as the ball pass
through it and we added a 2m Distance Sensor in
the intake to tell us if the ball has been collected,
this helps the drivers to collect the balls if the
intake is out of the drivers viewpoint at ease.
LIFTER While using bolts from the Linear Motion Kit V2, it
MECHANISM: was discovered that the bolts were easily bent
LINEAR and offsetted the bearing, causing the linear
MOTION KIT V2 movement to be stuck.
We refined it by adding an extra bolt to disperse
the load and propose a new double-screwed
bearing system, along with a customized rope
protector with symmetrical positioning for the
slider. The screws now have second support,
thanks to the double-screwed system. The
bearing has smoother and more room for
movement. The risk of the rope snapping is
greatly reduce
16
8.2. ALGORITHMS REFINEMENTS
Some modification in the coding algorithm followed the change in mechanism, as well
as addition of features to optimize the performance of the robot.
ALGORITHMS DESCRIPTION
DUAL ROBOT The robot was programmed using the built-in OnBot Java from the control
CONTROLER
hub; it was first controlled with one joystick controller for early testing of
each subsystem. After everything is all set, the controls get split into 2
players. The robot was too fast which makes it difficult for the driver to
precisely position the robot when dropping, hanging or securing the
indicator. So the solution was to create 2 speed profiles, the robot now
normally runs on 50% power to maneuver around, and the left trigger can
be pressed to enable maximum speed.
RUMBLE In the System Operator’s control, there was a problem where the
FEATURE OF operator could not tell whether the hanger had been locked or not. The
JOYSTICK problem was solved by utilizing the rumble feature inside the joystick
CONTROLLER controller, every time the button to unlock and lock the hanger manually is
AUTOMATIC pressed, it will vibrate once, and if the auto-lock button is pressed, it will
LOCKING vibrate twice, once the magnetic switch detects the magnet, the servo will
SYSTEM WITH lock the hanger and the operator will be informed by a vibration in the
SERVO controller 3 times.
PID PID allows more precise control of a driving motor by predicting the
CONTROLLER moment the motor speed will go higher than the desired value and
adjusts the power accordingly to reach the desired speed, maximizing
efficiency and accuracy.
ODOMETRY Odometry uses some simple math to calculate the distance the robot has
traveled through and can be used to automatically adjust the angle of our
shooter without human intervention and with higher consistency.
17
9. FINAL DESIGN
For our final design we decided to settle with a features combination of drivetrain, intake
mechanism, bucket storage system, shooting mechanism , bucket lifting and dropping,
securing indicator and robot climbs and hanging system. Here each is shown in detail.
9.1. DRIVETRAIN
The drivetrain is a H tank drive layout but with four omni wheels
powered by two hex HD motors with gearbox ratio of 5x3 and two
small omni wheels powered by a single hex motor in the middle for
better slide movement. The drivetrain moves with 1,5 m/s and 0,3
m/s in sliding. 6 motors (3 for movement and 3 for lifter) are located
at the bottom to create a firm center of gravity.
18
9.2. INTAKE
For the intake, we used a combination of small and large traction
wheels as well as compliant wheels. The wheels are confined by
brackets tied with surgical tubing to collect the balls more efficiently
which is controlled by a corehex motor. Linear Speed of intake with two
row ball intake with 0.5 m/s intake per row.
9.3. SHOOTER
For the shooter, we used two standard flywheels and takes advantage
of aiming on one axis for more predictability and precision when
shooting. During the testing it was noted that its capable of shooting 1
ball/s.
The dropper uses the storage system with the lifter system allowing
it to dump large amounts of balls at once into the sink. The storage
system also doubles as storage for the shooter allowing the
shooter to be fed without having to grab the balls every time when
shooting. 27 balls can be contained inside the bucket.
19
Figure 29. Final Design on electrical and control of robot solution
9.7. PROGRAMMING
20
Figure 31. Final Design of DRYOMATIKA THE CARBON SINKERS
21
10. OUR ART WORK DESIGNS DURING FGC 2022
22
Figure 35 Pit Banners design
23
11. OUTREACH
During the Engineering session of FTC 2022-2023 kick off, R2045 presented the
R2045 dream to bring FIRST to Indonesia, there were 8 FTC teams presented, and
most of them are rookies. We announced an FTC exhibition and a scrimmage in
November in Jogja and December in Jakarta. Wishfully we are having our official
nation FTC competition by next year 2023. And R2045 will be the main team to do the
outreach and the training for a new team.
Figure 37. FTC team present their support to R2045 Team Indonesia
24
12. CONCLUDING REMARKS
The design, build, test and iteration have been carried out by the R2045 team
Indonesia in order to come up with a robotic configuration solution that is capable of
meeting the requirements of design and objectives of the games. In the full 2.5 minutes
the robot starts off by collecting the balls, storing it into a bucket, then after the bucket
is full, lifts the bucket into a 2.5 meters high sink, and drops the balls into the sink.
Then, the bucket climbs down until half way bucket lifting, to collect balls and send the
balls to a second storage to be directed to the intake of shooting, the trigger was
deployed to balls to sink by shooting it. When match end is arriving, quickly secure the
indicator and finally climb the high bar to get the highest score possible.
R2045 team is extremely diverse from the many different students from different ethnic
groups there are on our team from across Indonesia. All with different ideas and
interests, unite, to design together, build together, and innovate together. Diversity on
our team helps create ideas that are unique and special, because even if we are
different, our interest in STEAM unites us.
More than Robots, for more than 3 months we have practical contact with and
observation of facts of FIRST’sⓇ core values. We found out that most of the team
uphold the values. Team collaboration in online meetings, helping each other to
improve each other, do coo-pertition to become a better person and reach their
potential. We also noted how hard the team prepared their proposal as well as
presenting business proposals to the sponsor and we remarked how the team worked
in their spare time to do the outreach, spread STEAM and give back to their community
and present it to those younger than themselves.
It was clear that we learnt a lot during working in FIRSTⓇ Global Challenge, the beauty
of becoming problem solvers by employing our gifted reasoning, critical thinking and
creativity, During our process of creating the robot. We learnt to be collaborative
problem solvers working collaboratively and communicating between us, we also learnt
how to master the tools of working in the future such ICT, computer programming,
Robotics and becoming a good global professional.
Thank you FIRSTⓇ GLOBAL for such an awesome challenge and project for us. We
are really grateful and honored to have a chance to be the FIRSTⓇ GLOBAL
participants, preparing us to be technology leaders in the future. It strengthening our
mission to bring FIRSTⓇ Robotic Activities to Indonesia, so many young Indonesians
get benefit from these activities, and hopefully the Next FIRST Global Challenge can be
held in Indonesia. Where we could offer the world participants the warm hospitality of
Indonesia.
25
x
26
13.
14.
27