![Page 1: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/1.jpg)
2014 FRC Robot C++ and JAVA
Two languages saying the same thing but
differently!!!!
Presented By:
Frank Larkin
Lansdale Catholic Robotics, Team 272
Philadelphia PA, Dec. 2014
![Page 2: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/2.jpg)
Goals• Get a good understanding of what
the new control system can and cannot do.
• Get a good understanding of how to program in C++ and JAVA– Be able to create your own classes to
allow multiple threads for development.
• See different programming designs for the FRC robot.
• Learn how to get autonomous working
![Page 3: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/3.jpg)
How will we do it?• Eat donut holes and then lunch!• Discuss C++ and JAVA– No rat holing on theory. – Exchange cards, get phone numbers and
email• Review online resources– Forums, Wiki, bla bla• Review beta code to explore
possibilities– Get many flavors of the same thing. – Touches many of the approaches
available to you– See how other accomplished– Shamelessly steal their stuff.• Thought Games– I ask, you figure it out. Fun!!!! • Hands On– Play until it is time to leave.
![Page 4: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/4.jpg)
FRC Robot Hardware
• Google:FRC robot control system picture
• https://decibel.ni.com/content/docs/DOC-30419
• http://team358.org/files/programming/ControlSystem2015-2019/
![Page 5: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/5.jpg)
C++ and JAVA• Both languages are similar…
– Both are somewhat human readable.– Both follow a very similar syntax.– Both are object oriented
• Both allow you to declare variables– Integer, long, short, float, double
• All numbers that reserve different amounts of space. – Character, string
• A way to store letters and words. Not really used too much in robots but we can.
– Google: [language] operators• A million Internet sites discuss this topic.
• Both are extensible and use something called a class– Bundle all of a things, things into a
single thing.
– A class’s “things” can be public or they can be private. If private you use public methods to set values to them or get values from them.
– Classes can inherit other classes
![Page 6: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/6.jpg)
Programming Lexicon• Object
– Objects are definitions of things you can use in programming you robot. All objects have state and behavior. They define behavior with the outside world through methods.
• Class– A class is the blueprint from which individual objects are
created.
• Inheritance– Different kinds of objects often have a certain amount in
common with each other. Object-oriented programming allows classes to inherit commonly used state and behavior from other classes.
• Interface (Java only) (just another class in C++)– In its most common form, an interface is a group of related
methods with empty bodies.
• Variable– A way to associate some information with a name that we
can use in our programs. Some variables are created as static and once created cannot be changed.
• Package (Java only) (header file (.h) in C++)– A package is a namespace that organizes a set of related
classes and interfaces. Conceptually you can think of packages as being similar to different folders on your computer.
![Page 7: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/7.jpg)
Class Inheritance• One class can “inherit”
everything from another class
• People are several inherited classes.
• class mammal– Methods: GetAge(), SetAge(),
GetHeartBeat(“bpm”)
• class human extends mammal – Methods: GetName(), SetName()
• class student extends human– Methods: SetGrade(),
GetGrade()– Human.GetAge() still works.
![Page 8: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/8.jpg)
How Many Classes?
• http://www.wbrobotics.com/javadoc/index.html?edu/wpi/first/wpilibj/package-summary.html
• http://wpilib.screenstepslive.com/s/3120/m/7912
![Page 9: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/9.jpg)
FRC Class ExampleJoystick
Question??????• What “things” would you
expect from an object called a joystick?
![Page 10: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/10.jpg)
FRC Class ExampleJoystick
• What “things” would you expect from an object called a joystick?– Buttons
• Trigger• Top• Other user buttons
– Various Axis controllers• X = side to side• Y = forward and back• Z = twist or variable level
![Page 11: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/11.jpg)
KISS
• Class variables – Public – Everyone can get to them. – Private – You decide who gest to them
using set and get.
…a dazzling triumph for aerospace designer and maverick genius Burt Rutan. ... SpaceShipOne' s "pressuriza- tion" system is essentially a couple of corks.
![Page 12: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/12.jpg)
Motor Basics: Java Examples
import edu.wpi.first.wpilibj.Jaguar;import edu.wpi.first.wpilibj.Victor;import edu.wpi.first.wpilibj.Relay;
// creating a Jaguar referenceJaguar motor1 = new Jaguar(1); // default digital module, channel 1// setting the desired speed (range of - 1.0 to 1.0)motor1.set(0.5);
// creating a Victor referenceVictor motor2 = new Victor(2); // default digital module, channel 2// setting the desired speed (range of - 1.0 to 1.0)motor2.set(0.25);
// creating a Relay reference// allowing forward direction only// default digital module, channel 1Relay motor3 = new Relay(1, kForward);;// setting the motor to on and offmotor3.set(kOn);motor3.set(kOff);
![Page 13: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/13.jpg)
Motor Basics: C++ Examples
#include “WPILib.h”;#include <Jaguar.h>;#include <Victor.h>;#include <Relay.h>;
// creating a Jaguar reference// default digital module, Jaguar *motor1 = new Jaguar(1); //channel 1// setting the desired speed (range of - 1.0 to 1.0)motor1- >Set(0.5);
// creating a Victor referenceVictor *motor2 = new Victor(2); //channel 2// setting the desired speed (range of - 1.0 to 1.0)motor2- >Set(0.25);
// creating a Relay reference, // allowing forward direction only// default digital moduleRelay *motor3 = new Relay(1, Relay::kForward); // channel 1// setting the motor to on and offmotor3- >Set(Relay::kOn);motor3- >Set(Relay::kOff);
![Page 14: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/14.jpg)
Sensor Basics: Java Examples
import edu.wpi.first.wpilibj.AnalogChannel;import edu.wpi.first.wpilibj.DigitalInput;
// Create a reference to an analog sensor// default analog module, channel 1AnalogChannel sensor1 = new AnalogChannel(1);
// Get the average voltage from the analog sensordouble voltage = sensor1.getAverageVoltage();
// Create a reference to a digital sensor// default digital module, channel 1DigitalInput sensor2 = new DigitalInput(1);
// Get the value from the sensorboolean value = sensor2.get();
![Page 15: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/15.jpg)
Sensor Basics: C++ Examples
#include <AnalogChannel.h>#include <DigitalInput.h>
// Create variable pointers for sensorsAnalogChannel *sensor1;DigitalInput *sensor2;
// Initialize the analog sensor// default analog module, channel 1sensor1 = new AnalogChannel(1);
// Get the average voltage from the analog sensorfloat voltage = sensor1->GetAverageVoltage();
// Create a reference to a digital sensor// default digital module, channel 1sensor2 = new DigitalInput(1);
// Get the value from the sensorUINT32 value = sensor2->Get();
![Page 16: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/16.jpg)
Differences between C++ and JAVA
• Java – Import
• Brings in external packages or classes to make it available to your code.
• C++– #include
• Preprocessor directive that brings in external definitions to make them available to your code
• Actual code is recompiled into libraries and linked in later
– C++ Variables must be declared and then initialized (2 steps)
– What is this ?? • ->
![Page 17: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/17.jpg)
C++• Pointers vs Local Declarations
– Pointers – References to things in memory• Possibly looks cleaner• How most examples are being done.
– Declarations – The things in memory• No need for pointers but a little more complicated
– Why do I care?• You will see code described both ways. Do not be afraid
embrace them.
• Declaration Section:class IterativeDemo : public IterativeRobot
// Declare variable for the robot drive systemServo *p_servo;
Note: * means this is a pointer!
• Initialization Section:IterativeDemo(void)
printf("IterativeDemo Constructor Started\n");p_servo = new Servo(5);
• Usage:p_servo->Set(.50); p_servo->Set(p_leftStick->GetZ());
![Page 18: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/18.jpg)
Declared Example• Declaration Section:class IterativeDemo : public IterativeRobot
// Declare variable for the robot drive systemServo m_servo;Joystick m_leftStick;Joystick m_RightStick;Joystick m_OperatorStick;
• Initialization Section:IterativeDemo(void) : servo(5), leftStick(), rightStick(),
operatorStick()
• Usage:m_servo.Set( leftStick.GetZ() );
• How do I keep it all straight?– Liberal use of variable prefixes can help.
• p_servo, p_leftJoystick; = pointers• i_count = integer (not a pointer)• ip_speed = integer pointer (may never see this).• f_motorPower = floating point variable• M_stuff = member variable (used in many beta
examples)– This should scare you…..
• p_servo.Set(5);
![Page 19: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/19.jpg)
Death By Pointer
• Java uses pointers under the covers. http://javadude.com/articles/passbyvalue.htm
Java makes sure you cannot hurt yourself.
• What happens if you do it wrong?– It will compile– The Driver Station will show Ok– It will not run.– “Slow Blinking LED of Doom!”
![Page 20: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/20.jpg)
Death By Pointer• Startup of program on cRIO
Exception current instruction address: 0x012eb5c8Machine Status Register: 0x0000b032Data Access Register: 0x537fb81bCondition Register: 0x20000048Data storage interrupt Register: 0x40000000Task: 0x1307e98 "FRCRobotTask"0x1307e98 (FRCRobotTask): task 0x1307e98 has had a
failure and has been stopped.
0x1307e98 (FRCRobotTask): fatal kernel task-level exception!
Welcome to LabVIEW Real-Time 8.5.1Indicator Mode changed... Slow Blink
• Driver Station shows correctly
• Do not panic over the slow blink of death!– May be a pointer issue. Do a code review
looking for illegal use of pointers.p_servo.Set(0.0); // p_ indicates pointer!!!p_servo->Set(0.0); // correct
![Page 21: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/21.jpg)
Good Boot Up
• Startup of program on cRIO
Resync command from DS...Resync command from DS...Enabled!Booting watchdog!Indicator Mode changed... Steady OnWPILib was compiled from SVN revision 1330:1345Spawned FRCRobotTask (0x12f7b70)RobotIterativeBase Constructor StartRobotIterativeBase Constructor FinishIterativeDemo Constructor StartedIterativeDemo Constructor CompletedRobotIterativeBase StartCompetition() CommencedTeleop_Init() completed
Welcome to LabVIEW Real-Time 8.5.1
![Page 22: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/22.jpg)
Making It All WorkInputs with Java
// Declaration and Initialization in one step
DriverStation m_Dstation = new DriverStation.getInstance();
Joystick m_DriverStick = new Joystick(1);
Joystick m_OperatorStick = new Joystick(2);
// Use
float f_DYAxis = m_DriverStick.getY();
float f_DXAxis = m_DriverStick.getX();
float f_DTrigger = m_DriverStick.getTrigger();
int i_AutoMode = m_Dstation.getAnalog(1);
![Page 23: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/23.jpg)
Making It All WorkInputs with C++
// Declaration
DriverStation *p_DStation;
Joystick *p_DriverStick;
Joystick *p_OperatorStick;
int i_AutoMode;
float f_DYAxis, f_DXAxis; f_DTrigger;
// Initialization
p_DriverStick = new Joystick(1);
p_OperatorStick = new Joystick(2);
// Use
f_DYAxis = p_DriverStick->GetY();
f_DXAxis = p_DriverStick->GetX();
f_DTrigger = p_DriverStick->GetTrigger();
i_AutoMode = p_Dstation.GetAnalog(1);
Later inputs are fed to outputs.
![Page 24: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/24.jpg)
Making It Work• Floating point power
ranges– Percentage of power
• Stated as range is -1.0 to 1.0 with 0.0 being stop.
– Forward and Back are relative• 2 motors side by side set to (1.0)
are running at full power. But what direction?
– All relative to the motors position, gearing, wheels surface top vs. bottom
– Joysticks Y axis • Backwards to what you might
think?• Push forward get a value of -1.0. • Pull back get 1.0
![Page 25: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/25.jpg)
Inputs to Outputs
• Inputs are fed to outputs– JAVA
m_LeftDriveMotor.set(f_DYaxis)
– C++p_LeftDriveMotor->Set(f_DYaxis)
• What about the right motor?
![Page 26: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/26.jpg)
Inputs to Outputs
• Right Motor– opposite side of the robot– Will normally have to go in
opposite direction to match left motor.
– JAVAm_LeftDriveMotor.set(f_DYaxis)
m_RightDriveMotor.set(-f_DYaxis)
– C++p_LeftDriveMotor->Set(f_DYaxis)
p_RightDriveMotor->Set(-f_DYaxis)
![Page 27: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/27.jpg)
Cooking The Inputs
• Sometimes we “cook” the inputs– Joystick gives us percentage of
power. 1.0 to -1.0
float tmp = my_joystick.getY();
– Squaring: multiply input by itself
driverY = tmp * tmp;
– Qubing: multiplying input 3 times
driverY = tmp * tmp * tmp;
• What will this do?
![Page 28: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/28.jpg)
Cooking The Inputs
![Page 29: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/29.jpg)
Discoveries• Simple math is your friend!• Joystick “twist” comes in a
GetZ()– Range 1.0 to -1.0– What does this do?
my.f_Power = ((-my.p_LeftDriverStick->GetZ() / 2) + 0.5);
• Use excel to help figure out value ranges
![Page 30: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/30.jpg)
Robot Class Types• SimpleRobot
– A simple robot base class that knows the standard FRC competition states (disabled, autonomous, or operator controlled).
– You can build a simple robot program off of this by overriding the robotinit(), disabled(), autonomous() and operatorControl() methods.
– The startCompetition() method will calls these methods (sometimes repeatedly). depending on the state of the competition.
– Alternatively you can override the robotMain() method and manage all aspects of the robot yourself.
• Google: frc2168 FRC robot
![Page 31: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/31.jpg)
Robot Class Types• IterativeRobot (JAVA)
– implements a specific type of Robot Program framework, extending the RobotBase class.
– The IterativeRobot class is intended to be subclassed by a user creating a robot program. This class is intended to implement the "old style" default code.
import edu.wpi.first.wpilibj.IterativeRobot;
public class MyRobot extends IterativeRobot
public void robotInit() …
public void disabledInit() …
public void disabledContinuous() …
public void disabledPeriodic() …
public void autonomousInit() …
public void autonomousContinuous() …
public void autonomousPeriodic() …
public void teleopInit() …
public void teleopContinuous() …
public void teleopPeriodic() …
![Page 32: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/32.jpg)
Robot Class Types• IterativeRobot (C++)class My2011Robot : public IterativeRobot
// data member declarations …
public:
MyRobot(void) // constructor
void RobotInit() // initialization
void DisabledInit() …
void DisabledContinious() …
void DisabledPeriodic() …
void AutonomousInit() …
void AutonomousContinious () …
void AutonomousPeriodic() …
void TeleopInit() …
void TeleopContinious () …
void TeleopPeriodic() …
// team-specific methods …
;
START_ROBOT_CLASS(My2011Robot);
![Page 33: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/33.jpg)
Robot Class Types• IterativeRobot
– FMS tells code which mode be in at any time, disabled, autonomous or teleop.
– Code runs in fast loop• Too fast for sensors• Continuous routines are called in
every loop, good or bad?
– 50 times per second code drops into appropriate Periodic function. (Called polling)
• F-117 only polls 40 times per second!
– When FMS switches state, init function is run only once.
– When robot first boots up what state are we in?
![Page 34: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/34.jpg)
LC Approach• Variables
– Put all your variables into structure (C++) or a class (Java).
– input – All your input variables– sensors – All non-driver station
sensors– fbw – Fly by wire. Inputs are
manipulated and saved in bfw structure
– Output – all outputs
• Major Code sections– GetDSInputs()
• Read in and cook DS variables into fbw variables
– GetRobotSensorInputs()• Read in all non DS sensors
– Robot Think()• Decide what to do. Manipulate
inputs to FBW variables– ProcessOutputs()
• Update outputs with fbw variables
![Page 35: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/35.jpg)
LC ApproachTeleoperated
void LC2013::TeleopPeriodic(void)
// feed the user watchdog at every period
GetWatchdog().Feed();
GetDSInputs();
GetRobotSensorInputs();
RobotThink();
ProcessOutputs();
// increment the number of teleop periodic loops completed
tele_periodic_loops++;
![Page 36: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/36.jpg)
LC ApproachAutonomous
void LC2013::AutonomousPeriodic(void)
// feed the user watchdog at every period
GetWatchdog().Feed();
m_autoPeriodicLoops++;
autoStatus.i_AutoLoops++;
ZeroDSInputs();// zero out inputs
GetRobotSensorInputs();// ask the robot what it sees
// figure out and run what auto program to set fbw values
AutoDispatcher();
RobotThink();// allow processing of settings just like normal
ProcessOutputs();// set the outputs
PrintDiag(1);// force diag to show autonomous.
![Page 37: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/37.jpg)
Look At Other’s Code
• Google: frc399 james-bot– Many classes– Autonomous
![Page 38: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/38.jpg)
Batch Files• Use batch files to quickly
change computer ethernet connection. – You must know what your
connection is called.
![Page 39: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/39.jpg)
netsh Command• netsh – used to set network
parametersCommand: netsh /? To see
parameters
• Example: Set interface to Crio
Note: In the example above the netsh command is on the same line!
@echo offecho Setting the Ip to CRIO network 10.2.72.6.
netsh interface ip set address name="Local Area Connection" static 10.2.72.6 255.0.0.0
pause
![Page 40: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/40.jpg)
Many batches• Set to camera
• Set to DHCP
Note: All the above commands are set on the same batch line.
netsh interface ip set address name="Local Area Connection" dhcp
netsh interface ip set address name="Local Area Connection" static 10.2.72.3 255.0.0.0
![Page 41: 2014 FRC Robot C++ and JAVA Two languages saying the same thing but differently!!!! Presented By: Frank Larkin Lansdale Catholic Robotics, Team 272 Philadelphia](https://reader030.vdocument.in/reader030/viewer/2022032722/56649cda5503460f949a47d8/html5/thumbnails/41.jpg)
Final ThoughtUnlike baseball crying is allowed in
software development… but …
…when you’re done, get back and make it work!