Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   How to go about making tankDrive and ArcadeDrive methods (http://www.chiefdelphi.com/forums/showthread.php?t=95250)

kinganu123 05-18-2011 10:46 AM

How to go about making tankDrive and ArcadeDrive methods
 
So I'm a new programmer for my team and we program in Java. I already know Java programming language and i get the basics of FRC robotics programming. However our main programmer wants me to be able to make the tank drive and arcade drive methods instead of just knowing how to call them. I'm not allowed to look at the methods FRC provides so I was wondering whats the best way to go about making those methods on my own

Ether 05-18-2011 11:57 AM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by kinganu123 (Post 1062208)
I'm not allowed to look at the methods FRC provides so I was wondering whats the best way to go about making those methods on my own

Before anyone answers, how much help are you "allowed" to solicit from contributors here on Chief Delphi ? We want to help, but we don't want to interfere with the assignment you've been given.



SuperBK 05-18-2011 12:16 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Right, see what you can figure out. Read the sticks and turn on motors indivdually. Start with tank drive.

mwtidd 05-18-2011 12:17 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Start by looking into the Jaguar or Victor classes respective to the speed controllers you have.

A hint, tank drive directly maps joysticks to speed controllers.

Arcade drive is a little trickier, but here's a hint. To turn the robot you send a positive value to one speed controller and a negative to the other. To go in a direction you send the same value to both controllers. Remember your max value is 1 too, so you may want to consider that if you really want to impress :).

Jared Russell 05-18-2011 01:02 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
When doing these sorts of problems, I like to make a table. What are my inputs? (Joystick positions). What are my outputs? (Motor PWM values). What are the "points" for which I have well behavior (for example, when your sticks aren't being touched you probably want to set your motors to 0 speed)?

Once you have this data down in front of you, the relationship between inputs and outputs can be analyzed and you can derive mathematical functions relating them.

kinganu123 05-18-2011 01:44 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by Ether (Post 1062219)
Before anyone answers, how much help are you "allowed" to solicit from contributors here on Chief Delphi ? We want to help, but we don't want to interfere with the assignment you've been given.


im pretty sure you can help me in any way other than actually giving me the code. The reason ive gotta do this is so I can mod the FRC classes should the need ever arise

kinganu123 05-18-2011 01:46 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by lineskier (Post 1062224)
Start by looking into the Jaguar or Victor classes respective to the speed controllers you have.

A hint, tank drive directly maps joysticks to speed controllers.

Arcade drive is a little trickier, but here's a hint. To turn the robot you send a positive value to one speed controller and a negative to the other. To go in a direction you send the same value to both controllers. Remember your max value is 1 too, so you may want to consider that if you really want to impress :).

We have four motors, would it still be the same for arcade drive and tank drive that way?

mwtidd 05-18-2011 03:13 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by kinganu123 (Post 1062234)
We have four motors, would it still be the same for arcade drive and tank drive that way?

Yes, what you will want to do is pair the right speed controllers and left speed controllers together. So anytime you send values to them they should be the same.

L1 left 1 (Jaguar)
R1 right 1
So S1 = speed 1 (variable)
S2 = Speed 2

L1 S1 R1 S2
L2 S1 R2 S2

Ether 05-18-2011 03:19 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by kinganu123 (Post 1062233)
im pretty sure you can help me in any way other than actually giving me the code. The reason ive gotta do this is so I can mod the FRC classes should the need ever arise

Tank drive is pretty straightforward. To go straight forward, drive the left and right wheels at the same (forward) speed. To turn right, add a little speed to the left wheel(s), and subtract the same amount from the right wheel(s). To turn left, add a little speed to the right wheel(s), and subtract the same amount from the left wheel(s)

[edit]
The above is actually a generic description for a skid steer vehicle.

For a "tank drive" interface to a skid-steer vehicle (where you are using only the Y axis of each of two joysticks) it is even easier. Just control the left wheel(s) with the left joystick Y-axis, and the right wheel(s) with the right joystick Y-axis.
[/edit]


mwtidd 05-18-2011 03:22 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by Ether (Post 1062248)
Tank drive is pretty straightforward. To go straight forward, drive the left and right wheels at the same (forward) speed. To turn right, add a little speed to the left wheel(s), and subtract the same amount from the right wheel(s).


Now the trick is to try to figure out how to make it scale correctly. When you add together 2 values the max # you can see is 2 but the max value you can set is 1. I will let you know though that dividing by 2 is not the answer because then full speed ahead is only a .5 :).

sorry this is in reference to an arcade drive.

are you driving this via joystick or via autonomous?

also you may want to create a drive class that contains 2 functions arcade drive and tank drive.

encapsulating the drive within its own class is good practice.

kinganu123 05-18-2011 05:29 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by lineskier (Post 1062249)
are you driving this via joystick or via autonomous?

also you may want to create a drive class that contains 2 functions arcade drive and tank drive.

encapsulating the drive within its own class is good practice.



I am driving via joystick but I dont have the robot or a driver station on my personal laptop to actually test it so thats kind of a problem, and ya my assignment is to pretty much make the drive class with those methods and when I know trig i gotta add mecanum to it, but thats next year.

mwtidd 05-18-2011 05:48 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by kinganu123 (Post 1062286)
I am driving via joystick but I dont have the robot or a driver station on my personal laptop to actually test it so thats kind of a problem, and ya my assignment is to pretty much make the drive class with those methods and when I know trig i gotta add mecanum to it, but thats next year.

Actually you can do mecanum without trig. Just like the arcade drive is figuring out how to sum up the motor in the right way based on the joystick input. It certainly isn't an overly efficient mecanum drive as scaling is an issue, but you can get the idea of it. I think its actually a good problem solving task to do the mecanum without trig :).

Actually doing an encoder based mecanum drive could be done without trig too. Its only when you start going field centric that you really need trig.

Also the trig isn't too bad either, you could find it online. Just treat the left joystick as a circle and find the angle and distance from center based on the 2 values.

x^2 + y^2 = magnitude^2

angle = arctan(y/x)

soh cah toa
sin = opposite over hypotenuse
cos = adjacent over hypotenuse
tan = opposite over adjacent

cos(angle)*mag = y mag
sin(angle)*mag = x mag

give all 4 motor the y mag

top right back left y mag + x mag
top left back right y mag - x mag
i may have the side flipped not sure :)

programming a mec via trig is a lot easier than doing it without it, that why i suggest you try doing it by taking all joystick values / 2 and setting the motors via that. its def possible. for scaling reasons i'd leave out rotation at first.

if your feeling really ambitious let a gyro set the rotation value and you just set the x and y.

kinganu123 05-18-2011 06:09 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by lineskier (Post 1062293)
Actually you can do mecanum without trig. Just like the arcade drive is figuring out how to sum up the motor in the right way based on the joystick input. It certainly isn't an overly efficient mecanum drive as scaling is an issue, but you can get the idea of it. I think its actually a good problem solving task to do the mecanum without trig :).

Actually doing an encoder based mecanum drive could be done without trig too. Its only when you start going field centric that you really need trig.

Also the trig isn't too bad either, you could find it online. Just treat the left joystick as a circle and find the angle and distance from center based on the 2 values.

x^2 + y^2 = magnitude^2

angle = arctan(y/x)

soh cah toa
sin = opposite over hypotenuse
cos = adjacent over hypotenuse
tan = opposite over adjacent

cos(angle)*mag = y mag
sin(angle)*mag = x mag

give all 4 motor the y mag

top right back left y mag + x mag
top left back right y mag - x mag
i may have the side flipped not sure :)

programming a mec via trig is a lot easier than doing it without it, that why i suggest you try doing it by taking all joystick values / 2 and setting the motors via that. its def possible. for scaling reasons i'd leave out rotation at first.

if your feeling really ambitious let a gyro set the rotation value and you just set the x and y.

Lol Ill save mecanum for later on though, so ya i kinda got the logic behind tank, what about arcade?

mwtidd 05-18-2011 07:11 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by kinganu123 (Post 1062301)
Lol Ill save mecanum for later on though, so ya i kinda got the logic behind tank, what about arcade?

Rotation is handled as plus or minus

Left is y. - x
Right is y+ x

They may be flipped

Once again remember scaling

Ether 05-18-2011 07:29 PM

Re: How to go about making tankDrive and ArcadeDrive methods
 
Quote:

Originally Posted by lineskier (Post 1062293)
programming a mec via trig is a lot easier than doing it without it,

FR = -Y - X -Z

FL = -Y +X +Z

RR = -Y +X -Z

RL = -Y -X +Z

How does trig make the above any easier ?


Quote:

for scaling reasons i'd leave out rotation at first.
Scaling is straightforward. Find the max absolute value of the 4 wheel speed commands above. If that max value exceeds the max command you want to send, then divide all 4 wheelspeeds by it.




All times are GMT -5. The time now is 08:49 AM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi