Lately I have been thinking about ways to do accurate position tracking that works with any Holonomic drive train. I was looking on the Forum when I found this thread. It says using separate wheels with encoders to track forward and sideways movement. I began to think how I could make it better and include how many degrees you have rotated. I then brainstormed and came up with a solution.
It is basically what they are describing, but in the center and with omni-wheels. Two wheels that are sideways of each other and on the same axle (not direct but connected) opposite of each other will track forward movement. Two wheels that are vertical of each other and on the same axle (not direct but connected) opposite of each other will track sideways movement.
The fact that they are connected like this prevents the device from turning, an encoder on this will track how much you have rotated.
So this tracks how far you move in any direction, and how far you have turned all using encoders. You can use this info to improve your autonomous, or anything you may need it for.
If you have any further questions, just reply with your question. Any feedback, improvements, and even explanations on why this can’t work are accepted. I just ask you to be kind about it.
If I understand correctly, the goal of the system is to determine the rotation of the robot using encoders, right?
If that’s the case, then the original 3 wheel encoder setup you referenced earlier in your post is already able to measure rotation. As the robot turns, the left and right encoder wheels will spin in opposite directions, and this measurement can be used to determine the orientation of the robot. You can imagine a circle with the two encoders diametrically opposite, and then the ticks measured by the encoders will be an arc length of that circle. Then, simply find the ratio of the arc length to the total circumference to determine the degrees rotated.
This system is simpler and will likely result in less friction than the solution you’ve proposed, so absent any other benefits (I don’t see any, maybe I’m missing something :P), I would probably stick with just the 3 encoder wheels setup.
The difference between that one and this one is that this one tracks directional movement, as well as rotational movement. So the goal of my system is to determine the overall position, as well as the degrees rotated, instead of just for degrees rotated.
I haven’t seen that thread, but thanks for bringing it to my attention. I will look at it later.
Affine Translation is the term you want to research. It tells the order of which you need to account for things in keeping a true position of your robot. Luckily you will have a robot that does not change shape for its wheels so scalign and shear can be eliminated.
" Any 2D affine transformation can be decomposed into a rotation, followed by a scaling, followed by a shearing, and followed by a translation"
Order matters is the short answer. You can research why.
You will want account for rotation first and then compute the translation to get a new X, Y coordinate as well as new heading.
@Cody where is your code that did this? I can’t find it in a search.
Yes, he is looking at using the rotation from the wheel encoder for the rotations and then getting displacement. So instead of the gyro telling me how much to take out of the wheel for rotation, figure out the rotation from the encoder sensors.
Although Affine Translation is something I will look into, @Cody was right. From what you described (correct me I’m wrong), Affine Translation is when you take how far you’ve gone, and rotates the endpoint by how many degrees turned. Since this device doesn’t turn with the robot, the x-y values it provides don’t need to be rotated. The degrees are tracked for accurate turning.
This means it tracks the x-y relative to the field, not the robot. There for the values don’t need to be rotated.