|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
| Thread Tools |
Rating:
|
Display Modes |
|
#1
|
|||
|
|||
|
Single Joystick Tank Drive
Hi all,
I'm programming for rookie team. I barely have any experience with Java or robotics for that matter. My goal is to make the robot drive with a single joystick in differential "tank" drive. Here's the schematic that I found that would be ideal... http://web.goodrobot.com/blog/wp-con.../tankdrive.png I'm using Iterative robot template. Any help would be greatttly appreciated! J |
|
#2
|
|||
|
|||
|
Re: Single Joystick Tank Drive
the only thing i can think of is you do something like this
Code:
...tankDrive(leftstick,leftstick) |
|
#3
|
||||||
|
||||||
|
Re: Single Joystick Tank Drive
What you are describing is similar to (or maybe identical) to arcade drive, which is already built in.
This would result in the robot going forward and backwards with the left stick y axis, but never turning. Last edited by Joe Ross : 28-01-2011 at 19:56. |
|
#4
|
|||
|
|||
|
Re: Single Joystick Tank Drive
I can't find the related documentation/source (I'll keep looking and revise my answer as necessary), but it's probably not possible to do with the pre-made TankDrive class. And actually, I see more in common with the ArcadeDrive and your desired style than Tank.
I would say that you'll either need to find some code a previous team wrote or extend Tank/ArcadeDrive (or just starting from scratch, it'll end up being a combination of both, really). And take the ArcadeDrive code but set the two sets of motors depending on the combination of x,y values. |
|
#5
|
||||
|
||||
|
Re: Single Joystick Tank Drive
Quote:
Try this: // Xj,Yj are the joystick readings L = -Yj+Xj; R = -Yj-Xj; max=abs(L); if(max<abs(R)) max=abs(R); if(max>1){L/=max; R/=max;} send "L" to the left wheels and "R" to the right wheels Last edited by Ether : 28-01-2011 at 21:28. Reason: allow full power |
|
#6
|
||||
|
||||
|
Re: Single Joystick Tank Drive
As far as I can tell from your description, you are describing Arcade drive exactly. It takes an x and y axis, and outputs to 2 or 4 motors similar to tank drive.
In other word, full left on the joystick would make the right side go full forward, and left side go full backwards. Full right would make right go full backward, and left go full forwards. And so on. |
|
#7
|
||||
|
||||
|
Re: Single Joystick Tank Drive
Quote:
Some drivers find the following a bit more intuitive to drive: if(Yj<=0){L=-Yj+Xj; R=-Yj-Xj;} else {L= -Yj-Xj; R=-Yj+Xj;} max=abs(L); if(max<abs(R))max=abs(R); if(max>1){L/=max; R/=max;} send "L" to the left wheels and "R" to the right wheels |
|
#8
|
|||
|
|||
|
Re: Single Joystick Tank Drive
Use the arcade drive method in Joystick. It will do EXACTLY what you want it to do.
|
|
#9
|
|||
|
|||
|
Re: Single Joystick Tank Drive
Thanks for the responses!
I got it working with Code:
m_robotDrive.arcadeDrive(m_driveStick.getY(), m_driveStick.getX()); Right now it goes forward, back, turns on the spot and strafes forward perfectly. But if trying to pull the joystick back-left, the left motor is working 100% backwards, which essentially moves the robot's back to the right. If pulling back-right, the right motor is working 100% backwards, which moves the robot back to the left. Intuitively when trying to do that, you'd expect it to work like a car would, turning left would make the back go left.. I would like to change that so drivers could have it more intuitively. I will post when/if I figure it out. Again, thanks everyone for taking the time. J |
|
#10
|
||||
|
||||
|
Re: Single Joystick Tank Drive
Quote:
|
|
#11
|
|||
|
|||
|
Re: Single Joystick Tank Drive
I was trying to work around that using
Code:
double m_y = m_driveStick.getY();
double m_x = m_driveStick.getX();
if (m_y >= 0) //the Y axis is inverted, so going forward is negative number
m_x = 0-m_x; //inverting X value
m_robotDrive.arcadeDrive(m_y, m_x);
Ether, it looks like your solution Quote:
I tried something like if m_y >= -0.3, but it results in motors rapidly switching directions if starting slowly.. Another possible solution would be treating anything within .2 or so from the axis as 0.. but it doesn't seem like the best way of doing it either. Thanks in advance, j. |
|
#12
|
||||
|
||||
|
Re: Single Joystick Tank Drive
Quote:
|
|
#13
|
|||
|
|||
|
Re: Single Joystick Tank Drive
Yup
|
|
#14
|
||||
|
||||
|
Re: Single Joystick Tank Drive
Try a different joystick.
|
|
#15
|
||||
|
||||
|
Re: Single Joystick Tank Drive
I believe you can also go into the windows control panel, find the Game Controllers adapter and use it to center the joystick (ie, the joystick reads 0,0 when centered).
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|