(This isn’t really about your specific implementation in particular, but I’ve been meaning to write this post about better driver control for a bit and it ended up here. Your team’s setup is dope!)
I’ve put a lot of thought into this, and relatively little work, and here are the things I’ve found have been the most dramatic driver control improvements for relatively little effort.
First is abandoning tank drive - Tank drive is not well designed for the driving tasks FRC drivers are attempting to accomplish. It is bad at driving in a straight line (particularly at any speed under max), it is just okay at turning in arcs, and in general it requires drivers to think less about what they want the robot to do and more about how they think the machine can do it.
Second is separating throttle (linear velocity) and rotation (angular velocity). This is the main flaw with the default setup of “arcade drive” and why people turn away from what’s frankly an otherwise better system. Putting these on the same joystick just makes both of them less precise, especially when you often need combinations of both inputs for fine control.
The third thing I’ve found is to remove a sense of direction from throttle control. This isn’t as important as the other two things, depending on the driver, but it can make a huge difference. For this year, we had a robot with openings on both sides, where different parts of the robot would be the “front” depending on the context of the game. When the joystick was used as throttle, what was front and what was back was constantly mixed up. By instead using both triggers as throttle (one positive one negative), we essentially created a “gear side throttle” and “hopper side throttle”, which removed thinking about the orientation of the robot from the equation entirely.
All of the other cool stuff, is great, and makes for huge improvements, but takes more intelligence and effort. This above is the “low hanging fruit”.