Tuning Setup
Prepare your robot for tuning and verify basic functionality
Before You Start
- VingVing Robot installed - Library added to your project
- RobotConfig created - Motor names and directions configured
- FTC Dashboard set up - For visualization (recommended)
- Fully charged battery - Consistent power for accurate measurements
- Open space - At least 6x6 feet for testing
Copy the Tuning OpMode
VingVing Robot includes a comprehensive Tuning OpMode with all necessary tools. Copy it to your TeamCode:
package org.firstinspires.ftc.teamcode;
import com.vingvingrobot.follower.Follower;
import com.vingvingrobot.telemetry.SelectableOpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
@TeleOp(name = "Tuning", group = "VingVingRobot")
public class Tuning extends SelectableOpMode {
public static Follower follower;
public Tuning() {
super("Select a Tuning OpMode", s -> {
s.folder("Localization", l -> {
l.add("Localization Test", LocalizationTest::new);
l.add("Forward Tuner", ForwardTuner::new);
l.add("Lateral Tuner", LateralTuner::new);
l.add("Turn Tuner", TurnTuner::new);
});
s.folder("Automatic", a -> {
a.add("Forward Velocity Tuner", ForwardVelocityTuner::new);
a.add("Lateral Velocity Tuner", LateralVelocityTuner::new);
a.add("Forward Zero Power Acceleration", ForwardZPATuner::new);
a.add("Lateral Zero Power Acceleration", LateralZPATuner::new);
});
s.folder("Manual", p -> {
p.add("Translational Tuner", TranslationalTuner::new);
p.add("Heading Tuner", HeadingTuner::new);
p.add("Drive Tuner", DriveTuner::new);
p.add("Centripetal Tuner", CentripetalTuner::new);
});
s.folder("Tests", t -> {
t.add("Line", Line::new);
t.add("Triangle", Triangle::new);
t.add("Circle", Circle::new);
});
});
}
@Override
public void onSelect() {
if (follower == null) {
follower = RobotConfig.createFollower(hardwareMap);
}
follower.setStartingPose(new Pose());
Drawing.init();
}
}
// Add individual tuning OpModes below...
// See the full example in Quickstart-master/TeamCode📁 Full Tuning.java Example: Find the complete implementation inQuickstart-master/TeamCode/.../vingVingRobot/Tuning.java
Recommended Tuning Order
Follow this sequence for best results:
Localization Test
Verify that your localizer is tracking position correctly. Push the robot manually and check that coordinates update properly on dashboard.
Localization Guide →Automatic Velocity Tuning
Run Forward and Lateral Velocity Tuners to measure your robot's maximum speeds. Then run Zero-Power Acceleration Tuners to measure natural deceleration.
Automatic Tuning →PID Tuning
Tune Translational, Heading, Drive, and Centripetal PID controllers. Start with default values and adjust based on robot behavior.
PID Tuning →Testing
Run Line, Triangle, and Circle tests to verify your tuning. The robot should follow paths smoothly and accurately.
Testing Guide →Common Setup Issues
Robot moves in wrong direction▼
Check motor directions in RobotConfig:
- If robot goes backward when it should go forward, reverse all motor directions
- If robot turns left when it should turn right, swap left/right motor directions
- Test each motor individually to verify correct wiring
Position tracking is incorrect▼
Localizer configuration issues:
- Verify encoder directions match physical installation
- Check ticks-to-inches multipliers with manual tuning
- Ensure IMU (if used) is properly calibrated
- Confirm odometry pod offsets are measured correctly
Dashboard not showing robot▼
Dashboard visualization troubleshooting:
- Make sure Drawing.init() is called before using dashboard
- Verify Drawing.sendPacket() is called in your loop
- Check that you're connected to correct IP address
- Ensure FTC Dashboard dependency is installed
Ready to Tune!
Your robot is set up and ready for tuning. Start with localization testing.
Start Localization Testing →