Programmera en Robot FRC (2 / 9 steg)
Steg 2: Gå igenom standardkoden
Nu kan komma till roligt delen, den faktiska programmeringen! Dubbelklicka på MyRobot.cpp i Projektutforskaren. Framför dig nu är ett fungerande program som kommer att driva roboten i arcade mode under perioden teleoperated. Låt oss snabbt gå igenom koden för att förstå vad som pågår så långt.
#include "WPILib.h"
Denna line lägger alla WPILib funktioner och klasser i koden. Du behöver dessa om du vill göra något nyttigt med din robot. Förutom införandet av WPILib, kommer detta bekvämt även string.h och iostream.
klass RobotDemo: offentliga IterativeRobot < br > {
Detta börjar den klass som kallas RobotDemo. Du kan ändra "RobotDemo" till något annat, men du måste bara se till att alla förekomster av "RobotDemo" i filen ändras till ditt nya namn också. Tjocktarmen innebär att IterativeRobot är en överordnad klass av RobotDemo och RobotDemo ärver alla metoder från IterativeRobot. Detta är viktigt för oss senare.
RobotDrive myRobot;
Joystick hålla;
Detta definierar två privata variabler: myRobot och stick. myRobot innehåller alla funktioner för att köra din robot och stick variabeln uppenbarligen har funktioner för att läsa indata från styrspak.
myRobot.setExpiration(0.1);
Detta anger ett förfallodatum tid i sekunder för motorerna i klassen RobotDrive. Om motorns vakthund inte är mata inom denna tid, kommer det antar att din robot-programmet har fryst och stannar automatiskt motorerna. 0,1 sekunder bör finnas gott om tid, men om du kör vision bearbetning eller några andra cpu intensiv aktivitet och motorerna stoppa när de inte ska vara, prova att öka tiden.
This -> SetPeriod(0);
Anger tid mellan anrop till periodiska funktioner i sekunder. Om satt till noll, det kommer att synkroniseras med drivrutinen station kontrolldata (som slutar upp att anropa funktionen om varje 0,02 sekunder). Om denna funktion inte är kallas, används 0,0, så denna är ganska värdelös.
RobotDemo: myRobot(1,2), stick(1)
Detta är en initiering lista. Som kommentaren antyder, måste de initieras i den ordning att du förklarade dem. Parametrarna för myRobot är: portnummer för din robot vänstra motor följt av portnumret för din robot rätt motor. Detta förutsätter att du använder jaguarer som motor registeransvariga. Parametern för stick är antalet joystick. Du kan se vad detta är genom att gå till den? flik av din DriverStation och tittar på styrspaken position i listan. Joystick standardvärdet är 1.
void RobotDemo::RobotInit() {}
En funktion som kallas av WPILib när roboten är aktiverat, det bara kallas en gång, vilket gör det en säker plats att initiera variabler och fördela dynamiskt minne.
void RobotDemo::AutonomousInit() {} < br > void RobotDemo::TeleopInit() {} < br > void RobotDemo::TestInit() {}
Dessa funktioner kallas automatiskt av WPILib när roboten är ändrats, antingen genom driver stationen eller FMS (fältet Messaging System) anropas funktionen init med namnet på det nya läget. Vanligtvis skrivs alla autonoma koden i funktionen AutonomousInit.
void RobotDemo::DisabledInit() {}
DisabledInit följer inte reglerna för de andra LÄGESfunktionerna initiering. DisabledInit kallas endast första gången som roboten är inaktiverad. Detta beror mest troligt roboten inaktiveras endast en gång under en verklig spel.
void RobotDemo::DisabledPeriodic() {} < br > void RobotDemo::AutonomousPeriodic {} < br > void RobotDemo::TeleopPeriodic() {}
void RobotDemo::TestPeriodic() {}
Dessa funktioner kommer att kallas ca 50 gånger per andra tag i lämpligt läge (om inte du kallade denna -> SetPeriod() med en parameter än 0,02 eller 0, i vilket fall de periodiska funktionerna kommer att kallas (1/period) gånger per sekund).
En viktig anmärkning om init och periodiska funktioner: de periodiska funktionerna för en läge kommer inte köra om funktionen initieringen är klar. Till exempel, om du har något sånt här:
void RobotDemo::AutomousInit() {< br > while(true) {< br > cout << "Jag gillar hundar" << oä; < br >} < br >} < br > void RobotDemo::AutonomousPeriodic() {< br > cout << "Men katter är bättre" << oä; < br >}
Din robot kommer kontinuerligt ut att det gillar hundar, och även när lämnade i autonoma läge under lång tid kommer det inte ut att katter är bättre. Lång tid att köra kod i din initiering funktioner kanske inte detta, men det är alltid en viktig fråga att se upp för medan programmering din robot.
};
Detta fäste stänger klassen RobotDemo. I slutet av en klass är en av de några situationer där du behöver ett semikolon efter efter en hakparentes. Glöm inte att ta med detta.
START_ROBOT_CLASS(RobotDemo);
Detta bör alltid den sista raden i koden i filen MyRobot.cpp. Det är ett makro som är definierade i RobotBase.h och berättar resten av WPILib att din RobotDemo klass är den klass som den ska använda för att anropa init funktion, periodiska funktioner, etc. Utan denna linje, kommer du förmodligen få ett nr Robot kod fel när du distribuerar det till cRIO.