Tank drive on Xbox Controller

I’m having difficulty getting a tank drive up and running on an Xbox controller. For some reason, it won’t detect the right stick.

according to the driver station, our right stick Y axis is axis 5. My code is as follows:

self.leftstick = wpilib.Joystick(0,1)
self.rightstick = wpilib.Joystick(0,5)

The drive code is the very simple
self.myRobot.tankDrive(self.leftStick, self.rightStick)

The left stick works fine. Right stick doesn’t even appear. Is there something I’m missing?

For us, the way the right stick worked was by doing self.joystick.getRawAxis(x) and self.joystick.getRawAxis(y) IN the teleop period. Our self.joystick was defined as self.joystick = wpilib.Joystick(0) IN the robotinit().

Replace the X and Y in the arguments with 5 or whatever number that shows up in your dashboard.

Exactly what we tried, however still no response. I can see the 5 axis moving in the driver station, but when we sim it, nothing. Our team is still slapping together their drive train, so I’m hoping this will change on a standard bot.

The simulation only supports 4 axis at the moment. It should be pretty straightforward to add a fifth axis, could you file a bug on pyfrc’s github?

Also, the robotpy-wpilib-utilities has an XBoxController class, you may find that useful.

well hot dang, that’s exactly what I needed to hear before we bashed our heads in trying to figure out what the heck we were doing wrong!

I’ll look into this class, it could be very helpful!

Any luck getting the tank drive to work? We have been able to get it working with the left stick y axis but not the right stick y axis. None of the available axes seem to respond to that input.

On the robot or on the simulator? The real robot should work on up to 12 axes – if that doesn’t work, let me know.

On the simulator, if you upgrade pyfrc to the latest version it will support all of the axes and POV for a xbox controller.

We have had limited access to the drive base until this evening. So we will try that and hope that it works. Thanks for the clarification. I will forward it on to our programmer.

Sorry, just got to this. Been a busy week.

The tank drive code works great, using getRawAxis(1) for the left stick, and getRawAxis(5) for the right.

however, the sim still does not detect the right axis. This was a fresh install pulled from pip, so I’m wondering if the github code isn’t integrated into the pip install at this time?

Important part is that it drives though! Now I just need to figure out how to make it drive…easier. The sticks having such small amounts of travel mean it’s very easy to not have them be perfectly in sync, meaning our robot drifts right or left instead of driving straight. any suggestions?

Great.

however, the sim still does not detect the right axis. This was a fresh install pulled from pip, so I’m wondering if the github code isn’t integrated into the pip install at this time?

What version of pyfrc do you have installed – when you run the sim, it shows the version in the title bar of the window. I just did a clean install of 2016.1.5 from pip, and the axis shows up. Screenshot attached – is that what you see? Note how there are 6 axis + a POV.

Important part is that it drives though! Now I just need to figure out how to make it drive…easier. The sticks having such small amounts of travel mean it’s very easy to not have them be perfectly in sync, meaning our robot drifts right or left instead of driving straight. any suggestions?

Use a bigger joystick instead. :stuck_out_tongue:

An often used solution is to square the inputs to make them less sensitive at lower speeds. RobotDrive.tankDrive accepts a parameter ‘squaredInputs’ that will do this if you set it to true. Other people use xbox controllers, I suggest searching CD (not just python, but Java and C++ too) to see what kinds of solutions others have employed to solve this problem.

Screenshot from 2016-01-22 10-24-33.png


Screenshot from 2016-01-22 10-24-33.png