![]() |
Can't get motors to spin correct way.
We have successfully gotten our robot wheels (6 wheel tank drive, 2 motors on each side) to spin, however they are going the wrong way. We have tried inserting a negative in many places in our code, we have tried multiplying by -1 and nothing seems to work. With everything we tried, the wheels will still spin the wrong way (they will spin either way, but the joystick/spin is reversed). Here is that part of the code:
public void operatorControl() { chassis.setSafetyEnabled(true); while (isOperatorControl() && isEnabled()) { Joystick1 = leftStick.getAxis(Joystick.AxisType.kY); Joystick2 = rightStick.getAxis(Joystick.AxisType.kY); Originally we had this, but changed it to the above: Joystick1 = leftStick.getY(); Joystick2 = rightStick.getY(); //Left Side Motor Code, controlled by the left joystick(might need to switch direction) if ((Joystick1 < 0.1)&&(Joystick1 > -0.1)) { LeftMotors.set(0); } else { LeftMotors.set (Joystick1); } //Right Side Motor Code, controlled by the right joystick(might need to switch direction) if ((Joystick2 < 0.1)&&(Joystick2 > -0.1)) { RightMotors.set(0); } else { RightMotors.set(Joystick2); } } } |
Re: Can't get motors to spin correct way.
Personally: I've always found this to be the way to go.
Code:
value = leftStick.getRawAxis(1);note that the 1 in my code is the axis number. Usually, joysticks return the "x" axis as axis 0, the "y" axis as axis 1, and additional analog axes (thumb wheels, xbox controller triggers, etc) as 2, 3, 4, etc. |
Re: Can't get motors to spin correct way.
I think most of us reading that need a bit more context, namely what types all of those variables are and where you tried to make your changes that didn't work.
Particularly: 1. What is the type of LeftMotors and RightMotors? 2. What is the type of Joystick1 and Joystick2? If LeftMotors and RightMotors are a variant of a speed controller, and Joystick1 and Joystick2 are Joysticks, then code like this would work: LeftMotors.Set(Joystick1.GetY()); RightMotors.Set(Joystick2.GetY()); And if you needed to reverse the right motors you would replace with this: LeftMotors.Set(Joystick1.GetY()); RightMotors.Set(-1.0 * Joystick2.GetY()); But, like I said, a bit more context to your question would be helpful. |
Re: Can't get motors to spin correct way.
So is "value" just a variable in this? And what does the (1) do at the end?
|
Re: Can't get motors to spin correct way.
Have you tried looking for a generic drive function in your library. Such as tank or arcade drive? If you dont have these functions set one set of motors to a negative out put and leaving the other to a positive. Your function to remove the deadband of the controller looks good. however i would take it out until you get the motors to run in the right direction.
|
Re: Can't get motors to spin correct way.
I'm not sure if I get your question, but "Leftmotors" means 2 cim motors, controlled by Talons. Right, the opposite. I'm not sure what you mean by joystick type. Basically we have 2 joysticks, one for each side. We have the joysticks matched up to the right side, but getting them to go the right way is what we are having issues with.
|
Re: Can't get motors to spin correct way.
We used the tank drive template. We have tried inserting negatives everywhere we can think of (one at a time ofc) and also tried multiplying by -1. They still spin the same way regardless. Also, why should we remove the deadpan code, any reason?
|
Re: Can't get motors to spin correct way.
Quote:
Regarding the type, somewhere in your code you should have a block of declarations that look like this: Joystick Joystick1; Joystick Joystick2; Jaguar LeftMotors; Jaguar RightMotors; ...Or some such thing. Can you show us the declarations of those objects? Or, post your code so we can get a better picture. |
Re: Can't get motors to spin correct way.
Does this not work?
Code:
class Robot() extends SimpleRobot{ |
Re: Can't get motors to spin correct way.
obotDrive chassis = new RobotDrive(1, 2);
private final Joystick leftStick = new Joystick(1); private final Joystick rightStick = new Joystick(2); Talon LeftMotors = new Talon(1); Talon RightMotors = new Talon(2); private double Joystick1; private double Joystick2; |
Re: Can't get motors to spin correct way.
Quote:
Code:
chassis.TankDrive(leftStick,rightStick); |
Re: Can't get motors to spin correct way.
Quote:
From the other poster's comment, I think all you need is that first line where you instantiate a new RobotDrive. |
Re: Can't get motors to spin correct way.
Quote:
EDIT: Looking at the WPIlib reference, they're instantiated as Victors. you can also pass SpeedController objects to the RobotDrive constructor if you want something other than Victors. In this case, they could go: Code:
Talon leftDrive = new Talon(1); |
Re: Can't get motors to spin correct way.
While I see what you're saying, I don't think that's the issue. We can control the speed and on/off of the motors fine, and the direction. Forward on the joystick is moving the wheels backwards, and backwards on the JS is moving the wheels forwards.
|
Re: Can't get motors to spin correct way.
Have you verified the wiring?
|
Re: Can't get motors to spin correct way.
Quote:
RobotDrive chassis = new RobotDrive(1, 2); private final Joystick leftStick = new Joystick(1); private final Joystick rightStick = new Joystick(2); And then call this: chassis.TankDrive(leftStick, rightStick); If you then have a side spinning in the wrong direction, swap the MOTOR wiring on the Talon OUTPUT. (Don't swap the input wiring, as you'll fry the talon.) |
Re: Can't get motors to spin correct way.
Quote:
|
Re: Can't get motors to spin correct way.
Okay, we discussed reversing the output wires on the Talons, but our team members are worried that in inspection they will tell us we can't have red to negative and black to positive. Has anybody had to reverse hot/cold wires and gotten in trouble for it, or were inspectors okay with it?
|
Re: Can't get motors to spin correct way.
Quote:
MANY teams have the speed controller output polarities flipped on one side of the robot. |
Re: Can't get motors to spin correct way.
Quote:
However, I do recommend getting to the bottom of the software issue. It may be important for some other system in the near future. |
Re: Can't get motors to spin correct way.
Before this turns into another thread discussing the merits of inverting the motors physically or in code, it's already been done.
http://www.chiefdelphi.com/forums/sh...d.php?t=122186 |
Re: Can't get motors to spin correct way.
For what its worth, IIRC the TankDrive() method of the RobotDrive class automatically takes into account that you have to turn one side backwards.
|
Re: Can't get motors to spin correct way.
Thanks for the help, we ended up just flipping around the 2 PWM cables that are going out the the 4 talons and that fixed out problem. Side question: I know we need a different talon for each motor, but do we need a different PWM cable for each talon, or can we use PWM splitters?
|
Re: Can't get motors to spin correct way.
Quote:
|
| All times are GMT -5. The time now is 22:05. |
Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi