View Full Version : Help for a beginner
musicalpets
19-04-2013, 23:43
Hey guys! I'm relatively new to coding and I decided to learn some more before next year.
I've learned mostly simple stuff for "regular" java coding, like if-then-else, while, how to print lines, variables, etc.
How do I apply this to coding a robot?
The biggest thing to realize is that programming for a robot has a different mindset most of the time than a desktop application.
Unlike a desktop application you are usually not doing one set of instructions in a set order then exiting the program. You usually have a "control loop". The code should maintain the state of the robot every so often, taking in inputs such as sensors, joysticks, etc, and send outputs such as giving motors power, activating pneumatics, etc.
I would definitely try to build a testing board to play with if you have the materials available to you.
There are a lot of templated things available for you in the WPILib (such as the SimpleRobot, IterativeRobot, and CommandBasedRobot templates). The FRC plugins also come packaged with a multitude of example projects that I suggest poking through and trying to understand.
http://wpilib.screenstepslive.com/s/3120/m/7885
tuXguy15
20-04-2013, 17:21
Here is a list of things i went through to learn java for FRC.
http://www.youtube.com/watch?v=4vYij44HWfo
http://www.youtube.com/watch?v=_LU5UhxsrCA
http://www.youtube.com/watch?v=PYsmIhvKmdo
http://www.youtube.com/watch?v=5Uz1yldz2FE
http://www.youtube.com/watch?v=AkEdmYjPEOU
http://wpilib.screenstepslive.com/s/3120/m/7885
http://robotics.francisparker.org/javadoc/
http://first.wpi.edu/FRC/frcjava.html
http://first.wpi.edu/Images/CMS/First/Getting_Started_with_Java_for_FRC.pdf
http://first.wpi.edu/Images/CMS/First/WPI_Robotics_Library_Users_Guide.pdf
musicalpets
01-05-2013, 22:29
Thanks so much for your help! Unfortunately I haven't been able to gain access to a test board, but I've been given permission to use an older robot.
I can get it to move forward autonomously for as long as I want...that's about it. How can I code simple autonomous, like going in a box?
tuXguy15
01-05-2013, 22:32
Are you using the RobotDrive feature or no?
tuXguy15
01-05-2013, 22:58
Here is a very stripped down version of our autonomous. This shoots the frisbees.
// Int
int maxShootCount;
int currShootCount;
public void autonomousInit() {
maxShootCount = 6; //Does 6 Shots Just In Case Of Jam
currShootCount = 0; //Starts At 0 Shots
systimer.start();
systimer.reset();
}
/**
* This function is called periodically during autonomous
*/
public void autonomousPeriodic() {
double currentTime = systimer.get();
if (currentTime < 3) {
jaguar3.set(0.64); //Turn on shooter jags
jaguar4.set(0.64); //Turn on shooter jags
} else if (currentTime >= 3 && currentTime < 10) {
if(currShootCount < maxShootCount) //If our current shot count is less than the max(6 shot max) then do the below code
{
solenoid3.set(true); //Activate Frisbee Launcher
solenoid4.set(false); //Activate Frisbee Launcher
Timer.delay(0.5);
solenoid3.set(false); //Deactivate Frisbee Launcher
solenoid4.set(true); //Deactivate Frisbee Launcher
solenoid5.set(true); //Activate Frisbee Dropper
solenoid6.set(false); //Activate Frisbee Dropper
Timer.delay(0.4);
solenoid5.set(false); //Deactivate Frisbee Dropper
solenoid6.set(true); //Deactivate Frisbee Dropper
Timer.delay(0.5);
}
currShootCount++; //Add on a count when code cycles through each time until it hits 2 shots
} else if (currentTime >= 10 && currentTime < 10.5) {
jaguar3.set(0); //Turn off shooter jags
jaguar4.set(0); //Turn off shooter jags
robotDrive.drive(1, 0); //Drive Forward Full Speed
} else if (currentTime >= 10.5 && currentTime < 11.2) {
robotDrive.drive(0.0); //Stop driving
Solenoid7.set(false); //this puts the shooter down
Solenoid8.set(true); //this puts the shooter down
} else if (currentTime >= 11.2 && currentTime < 15) {
solenoid1.set(true); //puts the robot in low gear
solenoid2.set(false); //puts the robot in low gear
robotDrive.drive(-1, 0); //Drives backwards full speed
} else (currentTime = 15) {
robotDrive.drive(0, 0); //stops driving
solenoid1.set(false); //puts the robot in high gear for teleop
solenoid2.set(true); //puts the robot in high gear for teleop
}
}
Hope this helps you with some ideas. If you need any explanation, I will do the best i can to explain.
musicalpets
01-05-2013, 23:38
Yes, I'm using RobotDrive.
Thank you for the sample code!
Another quick question- how do I read the API exactly? (This one http://robotics.francisparker.org/javadoc/ ) Yes, I'm very new to this, but I'm determined to become an able coder by the beginning of the upcoming year.
tuXguy15
02-05-2013, 15:45
Don't worry this is my first year doing java for my team and it worked out great. I can try to explain the API to you the best i can. It basically has everything that the wpi library has to help or tell you what features are there and how to use them. Like for jaguar. If you find the jaguar on there it says:
Constructor Summary
Jaguar(int channel)
Constructor that assumes the default digital module.
Jaguar(int slot, int channel)
Constructor that specifies the digital module.
So i dont need to specify a slot when im constructing this. So in my code it is
Jaguar jaguar1 = new "Jaguar(1)"; The quotations dont go in the code they are to show you what the API says to do to construct it.
void set(double speed)
Set the PWM value.
for this i can do if(joystick1.getRawButton(1)) {
jaguar1.set(0.64); //the jaguar values are -1 to 1 and 0 is no output
} else {
jagaur1.set(0.0);
}
I dont know if this helped you at all or not. Hopefully it did.
vBulletin® v3.6.4, Copyright ©2000-2017, Jelsoft Enterprises Ltd.