We have been starting to use sensors on our robot, which really helped last year. We used banner sensors to quickly speed our shooter wheels up to the correct speed and then keep them up at speed so that we could quickly and accurately shoot multiple shots. Recently we have added encoders and gyros onto our 2013 robot so that our programmers can learn how to program a more complex auton.
Ideally we would like to have two autons. One of them should have the robot start and the back, center of the pyramid and then drive back to block the 2 center frisbees after we shoot our frisbees. Ideally, we would like to do this with only encoder feedback(KISS). The second auto should have the robot start from the back right of the pyramid, move back a little, turn, and then drive back to block the center frisbees. We would like to learn how to program this with both encoder and gyro feedback.
We have encoder giving us feedback already, and gyros will soon be able to give us feedback too. I was wondering if someone could give us guidance on how to program autonomous modes like these(psuedocode would be nice too).
We used the bangbang algorithm. It was stable enough for us, and was 150 rpms under setpoint at the worst. I am not the main programmer, but as far as I know it runs at the same iteration speed as the rest of our code. I’ll make sure to ask at our next meeting though.
We are running a 6wd with cheesy drive(one joystick is throttle, the other controls our turning)
I think with a skid-steer drivetrain your best bet would be a combination of driving in straight line segments plus rotating-in-place. You’d want to figure out where your center of rotation is and factor that into the calculations.
So for example…
Given:
a) The center of rotation of your robot is located at field coordinates (0,0), and
b) The robot is oriented at an angle A[sub]0[/sub] degrees clockwise from the +Y axis of the field coordinate system, where the +Y axis is straight downfield (away from the driver station), and
c) When autonomous starts, you want to drive to field coordinates (X[sub]1[/sub],Y[sub]1[/sub]) and then to (X[sub]2[/sub],Y[sub]2[/sub]), and
d) When you get to (X[sub]2[/sub],Y[sub]2[/sub]) you want to orient the robot to angle A[sub]2[/sub]
Proceed as follows:
When autonomous starts, set the gyro reading to A[sub]0[/sub], then
Rotate-in-place until the gyro angle equals (180/pi)*atan2(-X[sub]1[/sub],-Y[sub]1[/sub])+180 degrees, then
Drive straight a distance sqrt(X[sub]1[/sub]2+Y[sub]1[/sub]2), then
Rotate-in-place until the gyro angle equals (180/pi)*atan2(-(X[sub]2[/sub]-X[sub]1[/sub]),-(Y[sub]2[/sub]-Y[sub]1[/sub]))+180 degrees, then
Drive straight a distance sqrt((X[sub]2[/sub]-X[sub]1[/sub])2+(Y[sub]2[/sub]-Y[sub]1[/sub])2), then
Rotate-in-place until the gyro angle equals A[sub]2[/sub] degrees