Moving Autonomously
Arguably the most fundamental task with regard to creating a good autonomous routine is ensuring consistent and accurate movement of the chassis. Robotic autonomous movement is an unsolved problem even among professional engineers, so it is obviously a difficult task. OkapiLib makes it easy to get reasonably accurate autonomous movements.
The basis for this autonomous movement is the ChassisController class. Take a look at its API for more detailed info on it. We'll use a ChassisControllerIntegrated for this tutorial; using the V5 motors' onboard PID makes setup a much quicker and easier process (No PID tuning needed!).
Let's start by creating the ChassisControllerIntegrated with drive motors in ports 1 and 2:
std::shared_ptr<ChassisController> chassis = ChassisControllerBuilder() .withMotors(1, -2) // Green gearset, 4 in wheel diam, 11.5 in wheel track .withDimensions(AbstractMotor::gearset::green, {{4_in, 11.5_in}, imev5GreenTPR}) .build();
Now that we've created a ChassisController, let's start moving around. There are two fundamental movement types: moveDistance and turnAngle, for moving forward/backward and turning on a point.
// Move 1 meter to the first goal chassis->moveDistance(1_m); // Turn 90 degrees to face second goal chassis->turnAngle(90_deg); // Drive 1 and a half feet toward second goal chassis->moveDistance(1.5_ft);