We are running multiple Clawbots to teach Carnegie Mellons’s robotic curriculum. Seems like when we start the robots move forward, they often jerk slightly to one side, as if one wheel/motor is either getting more power or that the other wheel is slightly delayed. This sets the bot off on a slight angle after which it runs straight. We’ve looked for friction points and we’ve even rebuilt several of them, with no luck. We lower the velocity down as low as 10% and then we won’t see this, but that can’t be the way they are designed to be run. Any suggestions would be much appreciated!
I believe that your robots are setting off at a slight angle because of uneven weight distribution. Because of uneven weight distribution, one side will have better traction on the ground as there is more weight to hold it down. When you use your robot at a high enough velocity to drive forward, the robot is lifted off of the ground slightly because of the sudden change. Since one side is held down better than the other, it would most likely get more movement during the initial acceleration. You can fix this by slowly accelerating your robot to a higher speed instead of going max speed at once. It’s the same principle as the acceleration of the car. If you push the gas pedal all the way down at once, you can feel your body being pressed against the seat because your body hasn’t reached the car’s velocity yet. It’s the same as the weight distribution. The velocity hasn’t reached all of the robot yet, and that causes the robot to jerk up slightly.
Robot I’m assuming you’re using:
Now, you’ve discovered a use of PID or motion algorithms. Since you notice that the issue is not prevalent when you start on a low velocity, why not start on a low velocity and slowly accelerate to avoid a dramatic change in velocity? You can program a loop to accelerate the robot based on how far it’s travelled. So if the distance is 0, you can assign it a velocity of 10 and slowly increase it as the robot goes further. Finally, you can also decelerate your robot using the same principle but relative to the distance between the bot and the target distance/point. This acceleration and deceleration of a robot is called motion profiling if I’m not mistaken. Feel free to ask any questions and look on other relevant topics for ways to do this.
Make sure the wheels are turned the same way. They are directional and have different friction profiles depending on rotation. In the pic shown the wheels are actually turned opposite ways.