Stap 2: De standaardcode doorlopen
Nu laat gaan naar het leuke deel, de werkelijke programmering! Dubbelklik op MyRobot.cpp in de Projectverkenner. Vóór u bevindt zich nu een werkprogramma dat de robot in arcade modus tijdens de teleoperated periode rijden zal. Laten we snel doorlopen naar de code om te begrijpen wat er gaande is tot nu toe.
#include “WPILib.h”
Deze lijn voegt alle WPILib functies en klassen in uw code. Deze moet u als u wilt iets nuttigs te doen met uw robot. Naast het opnemen van WPILib, zal dit een gunstige omvatten ook string.h en iostream.
class RobotDemo : public IterativeRobot<br>{
Dit begint de klasse met de naam RobotDemo. U kunt omzetten in 'RobotDemo' iets anders, maar je hoeft alleen om ervoor te zorgen dat elk exemplaar van 'RobotDemo' in het bestand wordt gewijzigd in uw nieuwe naam zo goed. De dubbele punt betekent dat IterativeRobot een bovenliggende klasse van RobotDemo is en RobotDemo alle methoden van IterativeRobot overerft. Dit is later belangrijk voor ons.
RobotDrive myRobot; Joystick stick;
Dit definieert twee particuliere variabelen: myRobot en stok. myRobot bevat alle functies voor het besturen van uw robot en de stok variabele houdt uiteraard de functies voor lezing input van de joystick.
myRobot.setExpiration(0.1);
Hiermee stelt u een verlooptijd in seconden voor de motoren in de klasse RobotDrive. Als waakhond van de motor niet binnen deze termijn voeden is, zal het aannemen dat uw robot programma heeft bevroren en automatisch de motoren stopt. 0,1 seconden moet worden genoeg tijd, maar als u visie verwerking uitvoeren zijn of sommige andere cpu-intensieve taak en de motoren zijn stoppen wanneer zij niet worden geacht te zijn, kunt u de verlooptijd verhogen.
this->SetPeriod(0);
Hiermee stelt u de tijd tussen aanroepen van periodieke functies in seconden. Als ingesteld op nul, het synchroniseert met de controlegegevens van de stuurprogramma-station (die eindigt aanroepen van de functie over elke 0.02 seconden). Als deze functie niet wordt aangeroepen, wordt standaard op 0.0, dus deze lijn vriendelijk van nutteloos is.
RobotDemo : myRobot(1,2), stick(1)
Dit is een lijst van de initialisatie. Zoals de opmerking voorstelt, moet ze in de volgorde dat u hen gedeclareerd geïnitialiseerd. De parameters voor myRobot zijn: het nummer van de poort voor uw robot motor gevolgd door het nummer van de poort voor uw robot de juiste motor is links. Hierbij wordt ervan uitgegaan dat u Jaguars als motor controllers gebruikt. De parameter voor stick is het nummer van de joystick. U kunt zien wat dit is door te gaan naar de? tabblad van uw DriverStation en kijken naar de positie van uw joystick in de lijst. Het standaardnummer van de joystick is 1.
void RobotDemo::RobotInit() {}
Een functie die door WPILib wordt aangeroepen wanneer de robot is ingeschakeld, het is slechts eenmaal aangeroepen, waardoor het een zeker plaats voor het initialiseren van variabelen en dynamische geheugen toewijzen.
void RobotDemo::AutonomousInit() {}<br>void RobotDemo::TeleopInit() {}<br>void RobotDemo::TestInit() {}
Deze functies worden automatisch aangeroepen door WPILib wanneer de modus van de robot wordt gewijzigd, hetzij door het stuurprogramma station of de FMS (veld Messaging System) de init functie met de naam van de nieuwe modus wordt genoemd. Alle autonome code wordt meestal geschreven in de AutonomousInit functie.
void RobotDemo::DisabledInit() {}
DisabledInit volgt niet de regels van de andere modus initialisatie functies. DisabledInit heet alleen de eerste keer dat de robot is uitgeschakeld. Dit komt waarschijnlijk omdat de robot zal alleen worden uitgeschakeld zodra tijdens een daadwerkelijke spel.
void RobotDemo::DisabledPeriodic() {}<br>void RobotDemo::AutonomousPeriodic{}<br>void RobotDemo::TeleopPeriodic() {} void RobotDemo::TestPeriodic() {}
Deze functies zullen worden geroepen ongeveer 50 keer per tweede, terwijl in de juiste modus (tenzij u noemde dat -> SetPeriod() met een parameter dan 0,02 of 0, in welk geval de periodieke functies zal worden genoemd (1/periode) keer per seconde).
Een belangrijke opmerking over init en periodieke functies: de periodieke functies voor een modus zal niet worden uitgevoerd als de initialisatie functie is voltooid. Bijvoorbeeld, als je iets als dit:
void RobotDemo::AutomousInit() {<br> while(true) {<br> cout << "I like dogs" << endl;<br> }<br>}<br>void RobotDemo::AutonomousPeriodic() {<br> cout << "But cats are better" << endl;<br>}
Je robot zal continu output dat het houdt van honden, en zelfs toen verliet in autonome modus voor een lange tijd het zal niet de uitgang van het feit dat katten beter zijn. Langlopende code in uw initialisatie functies mogelijk niet dit voor de hand liggende, maar dit is altijd een belangrijk punt om op te letten tijdens het programmeren van uw robot.
};
Deze beugel Hiermee sluit u de klasse RobotDemo. Het einde van een klasse is een van de enkele gevallen waarin u een puntkomma na iets achter een vierkante haak. Vergeet niet dit.
START_ROBOT_CLASS(RobotDemo);
Dit moet altijd de laatste coderegel in het bestand MyRobot.cpp. Het is een macro die is gedefinieerd in RobotBase.h en de rest van de WPILib vertelt dat de klasse van uw RobotDemo is de klasse die het gaan gebruiken moet om te bellen van de init-functies, periodieke functies, enz. Zonder deze lijn, zult u waarschijnlijk een codefout No Robot krijgen wanneer u het naar de cRIO distribueert.