The code implemented by my team had an x input from the joystick, a y input from the joystick, and a theta input. If the theta component was nonzero that meant that the robot's base needed to rotate. Theta was calculated by combining the input from the joystick with input from a yaw rate sensor that was on the base of the robot. This sensor measures the speed at which the base of the robot was rotating, this rotational velocity was then integrated to get the angle of the robot's base.
This system would correct the angle of the base if it drifted away from the intended value. This had the effect that if the base was pushed by an external force it would move back to the original orientation. It also meant that if the angle of the base changed while driving in a straight line it would correct back to the original orientation and the robot would move in a straight line.
Quote:
Originally Posted by adra
Or you just meant; when there exists a tiny little insignificant height change on the road (even on a flat surface), linear motion of system becomes impossible while 4 motors rotating with the same speed? And is this because wheels dont touch the surface with the same amount?
|
While this was not the entire thrust of my other post this is very true. We never found a surface flat enough to keep the robot moving in a straight line without closed loop control of the wheel.
In regards to your question of driving without a suspension. No we never used a drive that had PID control of the wheels without a suspension. However, we once had one motor partially fail and while the robot didn't move in a straight line very well, the control of the orientation of the base was still accurate. When pushed the base would still return to the original orientation, in fact it hid it so well that we had to test each motor individually before we could figure out which one wasn't responding correctly.
I hope that helps some.