FRC Java Programming – Presentation Only

FRC JAVA
PRESENTED BY TEAM UP NEXT – FIRST TEAM 3528
TEAMUPNEXT.COM
PRELUDE
IN THE BEGINNING…
EXPECTATIONS
• This session assumes some Java knowledge or that you’re pursuing that
knowledge soon
• You cannot learn a programming language in 3 hours
• To be a great programmer on your FRC team it is crucial you gain knowledge
of the electrical and controls
• Learning to code is difficult but rewarding
ADVICE
• Don’t be afraid to experiment, to explore, to try things, to learn things on your
own
• CAVEAT: Triple check your code when running it on a robot or in a live test
environment
• Run robot code for the first time with motors disconnected and observe (even
measure) the speed controller outputs
MORE ADVICE
• Learn the Controls!
• Controls people make better FRC Coders
ACT I
PURE JAVA
WHAT IS JAVA?
• Java is an object oriented programming language that compiles its programs
to byte code and executes within a Java virtual machine.
• The Java virtual machine enables the program to be (theoretically)
architecture agnostic.
WHY USE JAVA?
• Provides a simpler approach to multi- architecture programming.
• To some degree provides a portable platform to run executable code.
• Due to Java’s ability to port the virtual machine to multiple architecture’s, Java
is found in devices ranging from toasters, TV’s, mobile phones, cameras, blueray players and more.
THE BASICS OF JAVA
• Java programs are objects which are instances of a class or classes.
• Java programs are essentially created by compiling through the Java Development Kit (jdk)
• Java supports the following primitive data-types:
•
•
•
•
•
•
•
boolean (true / false)
byte (-127-- 128)
integer (-2,147,483,648 -- 2,147,483,647)
long (-2^63 -- 2^63 -1)
float (32 bit)
double (64 bit)
char (16 bit Unicode)
HOW SIMPLE IS IT TO WRITE A JAVA PROGRAM?
WHAT DO I NEED?
• The Java Runtime Environment – JRE
• The Java Development Kit – JDK
• Minimally a text editor such as notepad. Those beginning may want an IDE such as
•
•
•
•
•
Eclipse
NetBeans
IntelliJ
Jcreator
JBuilder
JAVA PROGRAMMING
• Source code for a Java program (or class), the un-compiled program, is
typically stored in text files ending with the extension .java.
• Compiled Java classes (or programs) are stored using the file extension .class.
• Sometimes the source packages are stored in executable formats with the
extension .jar. Typically they are executed through the following command
“java –jar <jarname>”.
THE BASIC PROCESS OF DESIGNING A JAVA
PROGRAM (IN SUMMARY)
• Code
• Compile (through the JDK)
• Execute (through the Java VM)
WHAT DOES A SIMPLE JAVA PROGRAM LOOK LIKE?
Program Code
Output – Command Window
import java.lang.*;
Hello world!
public class myProgram {
public static void main(String[] args) {
System.out.println(“Hello world!”);
}
}
DEFINING VARIABLES AND CONSTANTS
• Variable(data type) => attribute name ;
• int x;
• float y;
• char z;
• Constant => final attribute name = value;
• final int THISYEAR = 2011;
JAVA SYNTAX USAGE
• Simple assignments listed above by using the = sign or small expression.
• int e = 1;
• String str = “Hello”;
• int j = 1 + e;
• Invoking procedures
• Procedure name (Optional parameters)
• printMyName(nameIn);
• printMyName();
JAVA SYNTAX – MATH OPERATORS
•
•
•
•
•
•
•
•
+ for addition
- for subtraction
* for multiplication
/ for division
% (modulus) the remainder after division
Math.sqrt(x) the square root of a number x.
Math.abs(x) the absolute value of a number x.
Math.sin(x), Math.cos(x), Math.tan(x)
JAVA SYNTAX – COMPARISON OPERATORS
• Comparison operators will return true (when a value falls within the comparison parameter) or false when it
does not.
• < less than
• <= less than or equal to
• == equal to
• >= greater than or equal to
• > greater than
• != not equal
• To help compare ranges you can use the following statements with in your statements.
• && implies AND
• || implies OR
JAVA SYNTAX
• Compound syntax
•
Selection statements
• if
• if / else
• switch / case
•
Repetition / iteration
• while
• do / while
• for
JAVA SYNTAX - CONTINUED
• Methods are procedures that are called upon can take a parameter, but are
required to return a data value.
• Attribute functionname (parameter list)
• int addOneToX(int x) { x = x+1; return x; }
• String helloName(String nameIn) {
return “Hello “ + nameIn; }
JAVA SYNTAX - ARRAYS
• Arrays are collections of a single data-type either in a single dimension or a
multi-dimension.
• Array sizes are declared before the array can be used.
• Things can be placed into a direct index and thus can be retrieved through
that index.
ARRAY - SAMPLE
•
•
•
•
•
int myNumbers[] = new Int[4];
myNumbers[0] = 4;
myNumbers[1] = 2;
myNumbers[2] = 3;
myNumbers[3] = 5;
• System.out.println(myNumbers[0]);
• -----------Output-------------• 4
OTHER JAVA STATEMENTS
• Exceptions – Occur when a input or error in processing occurs in which the
program (or in rare circumstances) the java virtual machine is unable to cope
with.
• In a “perfect world”, make sure that inputs are within in processing range and/or datatype.
• Or use a try / catch statement.
OVER JAVA STATEMENTS
• Casting – The ability to force a data type into another data type. This is
different from parsing or converting.
• Take and integer num1 and a double num2. Convert num1 to num2.
• double num2 = (double) num1;
• int num1 = (int)num2;
• In a class scenario.
• Jaguar rotateMtr = (Jaguar)getSpeedController();
JAVA STORES LIBRARIES INTO CLASSES WHICH ARE
STORED INTO PACKAGES.
• Typically called through the import command.
• import java.lang.*;
• import java.io.*;
• import java.net.*;
WHAT IS A CLASS AND HOW IS IT USED?
• “A class is an unstructured type that encapsulates a fixed number of data
components (data members) along with the functions (called member functions
or methods) that manipulate them.” - CST 271 Notes.
CLASS EXAMPLE
• Take a house for example. What describes a house?
•
•
•
•
•
•
Size
Number of bedrooms
Number of bathrooms
Address
Color
Does it have a garage…? If so how big is it?
CLASS – HOUSE EXAMPLE
public class house {
public String color;
public String address;
public double totalSize = 0.0;
public int numberOfBedrooms = 0;
public int numberOfBathrooms = 0;
public boolean doesGarageExist = false;
public double sizeOfGarage = 0.0;
//End variable declaration.
public house() {
//This is the constructor for the object.
}
public String returnSumary() {
String out = “The house at “ + this.address + “\n”;
out += “has “ + this.numberOfBedrooms + “ number of bedrooms\n”;
out += “ and “ + this.numberOfBathrooms + “ number of bathrooms\n”;
if(this.doesGarageExist) {
out += “This house contains a “ + this.sizeOfGarage + “ sq. feet
}
out += “The house color is “ + this.color + “\n”;
out += “The house contains “ + this.totalSize + “ square feet”;
return out;
}
}
garage\n”;
IMPLEMENT AN INSTANCE OF THE HOUSE CLASS
Code
Output
public static class houseProgram {
public static void main( String args[] ){
house myHouse = new house();
myHouse.color = “pink”;
myHouse.totalSize = 1200.5;
myHouse.numberOfBedrooms = 3;
myHouse.doesGarageExist = true;
myHouse.sizeOfGarage = 12.0;
myHouse.address = “123 Main Street”;
System.out.print(
myHouse.returnSummary() );
}
}
The house at 123 Main Street.
has 3 bedrooms
and 2 bathrooms.
The house contains a 12.0 sq. feet garage.
The house color is pink.
The house contains 1200.5 square feet.
CLASS INHERITANCE
• Class inheritance is the process of extending a parent class.
• Example creating a mansion class which extends from the house class
• public class mansion extends house
• In this fashion, methods and certain variables from the parent class are
brought into the mansion class. You can build upon those or override them.
JAVA VARIABLE/PROCEDURE/FUNCTION/CLASS
RESTRICTIONS
Can be
accessed from
the same
class
Can be
accessed from
the same
package
Can be
Can be
accessed from accessed from
any child
any class
class
(default)
Yes
Yes
No
No
private
Yes
No
No
No
protected
Yes
Yes
Yes
No
public
Yes
Yes
Yes
yes
ECLIPSE INSTALL DEMO
RESOURCES
• http://teamupnext.com/java
• Bucky’s Room
• Beginner: https://buckysroom.org/videos.php?cat=31
• Intermediate: https://buckysroom.org/videos.php?cat=25
• Udemy (Java Tutorial for Complete Beginners)
• https://www.udemy.com/java-tutorial/#/
MORE RESOURCES
• The official Java tutorials
• http://docs.oracle.com/javase/tutorial/
• Purdue (CS 18000 - Problem Solving and Object Oriented Programming)
• https://www.cs.purdue.edu/news/Onlinecourse.html
• https://selfservice.mypurdue.purdue.edu/prod/bzwsrch.p_catalog_detail?subject=CS&te
rm=CURRENT&cnbr=18000
ACT II
FIRST JAVA
FRC JAVA ROBOTICS – WHAT YOU WILL NEED
• ? (lots of unknowns for 2015)
• Java SE (JDK 8):
• http://www.oracle.com/technetwork/java/javase/downloads/index.html
• Eclipse (Luna – Java EE):
• http://eclipse.org/downloads
• FRC Java Plugin from WPILIB
• ? (unknown until kickoff)
FRC JAVA – BASE CLASSES AND MORE
• SimpleRobot (now SampleRobot)
• IterativeRobot
• All roads lead to BaseRobot
• Command Based (model - not a base class)
SIMPLE/SAMPLE ROBOT
• The SimpleRobot class is the simplest to understand as most of the state flow is directly visible
in your program
• Your robot program overrides:
• operatorControl()
• autonomous()
• Methods that are called by the base at the appropriate time.
• NOTE: These methods are called only called once each time the robot enters the appropriate mode and
are not automatically terminated.
• Your code in the operatorControl method must contain a loop that checks the robot mode in
order to keep running and taking new input from the Driver Station.
SIMPLE ROBOT DEMO
ITERATIVE ROBOT
• The Iterative Robot base class assists with the most common code structure by handling the state transitions and
looping in the base class instead of in the robot code. For each state (autonomous, teleop, disabled, test) there
are two methods that are called:
• Init methods
• The init method for a given state is called each time the corresponding state is entered (for example, a transition from disa bled to
teleop will call teleopInit()). Any initialization code or resetting of variables between modes should be placed here.
• Periodic methods
• The periodic method for a given state is called each time the robot receives a Driver Station packet in the corresponding sta te,
approximately every 20ms. This means that all of the code placed in each periodic method should finish executing in 20ms or less.
•
The idea is to put code here that gets values from the driver station and updates the motors. You can read the joysticks and other
driverstation inputs more often, but you’ll only get the previous value until a new update is received. By synchronizing with the
received updates your program will put less of a load on the cRIO CPU leaving more time for other tasks such as camera
processing.
ITERATIVE ROBOT DEMO
COMMAND BASED
• While not strictly a base class, the Command based robot model is a method for
creating larger programs, more easily, that are easier to extend.
• There is built in support with a number of classes to make it easy to design your
robot, build subsystems, and control interactions between the robot and the operator
interface.
• In addition it provides a simple mechanism for writing autonomous programs. The
command based model is described in detail in the Command Based Programming
manual.
SUBSYSTEMS
• Subsystems are classes that extend “Substem”
• Subsystems model your robot
• DriveTrain
• Arm
• Shooter
• Subsystems contain the code that does stuff
• Subsystems contain / reference the objects that represent your controls
COMMANDS
• Commands are classes that extend “Command”
• Commands are shells that run based on operator or other inputs or decisions
• Commands require subsystems
• Command call code in subsystems
COMMAND GROUPS
• Command Groups are classes that extend “CommandGroup”
• Command Groups are simply groups of commands
• Command Groups act like commands
• Commands in a command group can be run two ways:
• Series
• Parallel
• Very useful for autonomous
OI == OPERATOR INTERFACE
• OI is where your human interface objects go
• Joysticks
• Joystick Buttons
• OI is also where SmartDashboard lives
• In OI, buttons are mapped to commands
ROBOT MAP
• RobotMap is a class that instantiates all your robot controls objects
• Class objects define your physical controls
• RobotMap is referenced when you need to access one of these objects
• The init() method is where the objects are instantiated
ROBOT CLASS
• The Robot class extends IterativeRobot
• The robotInit() method is where it all starts:
• Each subsystem is brought into existence (instantiated)
• The OI is instantiated
• autonomousInit()
• Sets up the autonomous command to run – put it on the queue
• Turn off motor safety
• autonomousPeriodic()
• Runs the scheduler which runs the commands
ROBOT CLASS CONTINUED
• teleopInit()
• Cancel autonomous
• Initialized the robot for teleop
• Turn on Motor Safety
• teleopPeriodic()
• Runs the scheduler which runs the commands
COMMAND BASED: ROBOT BUILDER DEMO
• Our Robot
• DriveTrain
• Two Speed Controllers
• Tank Drive
• Leftstick and Rightstick on xbox controller
• Elevator
• Spike Relay
• Limit Switch
• Joystick Button
UP NEXT 2014 CODE WALKTHROUGH
• Just the hightlights
DEBUGGING
• Debugger
• Println’s
ADDING A PRINTLN TO THE CODE
• At any point in the java program, you can add a:
System.out.println();
• This will allow you to print messages, variable contents, or other useful info to
the console output
RESOURCES
• http://teamupnext.com/java
• http://wpilib.screenstepslive.com
ACT III
RECOMMENDATIONS AND TOOLS
SOURCE CODE VERSION CONTROL
• Highly recommend using a version control system:
•
•
•
•
GIT (our favorite)
Subversion
CVS
Jazz SCM
• Good way to keep backups of your code
• Useful for reverting to previous versions
• Multi Developers
MINIMALLY…
• Backup your code often
• Use cloud storage:
•
•
•
•
Dropbox
Box
Google Drive
OneDrive (formerly SkyDrive)
COMMENTS AND DOCUMENTATION
• Useful Comments are essential
• Document your Controls
• Joystick mappings
• Control channels
• Pneumatics layout
USEFUL TOOLS
• notepad++
• net console
• putty
• Github client
• Git for Windows (git scm)
KNOW WHICH CODE IS RUNNING
• This scenarios catches more people
•
•
•
•
•
You coding away, you push your code, your flux capacitor still doesn’t work
More coding
More pushing code
Nothing
Runs away screaming!
• Are you absolutely sure your running the code you think you’re running
• Save your sanity
• Always put a println at the top of your code just after the robot initializes
• We use something like: System.out.println("====> JeffBot <====");
• Make it a habit to always look for this after pushing code
2015 JAVA: ME TO SE – TEAM 694
• http://www.slideshare.net/boyarsky/java-5-through-8-and-eclipse
2015 CONTROLS – TEAM 358
• http://www.team358.org/files/programming/ControlSystem2015-2019/
QUESTIONS?
• We’re always happy to help:
• http://teamupnext.com/contact-us
• Many other great teams use Java
• [email protected]
THE END
THANK YOU!