Need help with a creative solution for deducing joint position given motor position

I’m developing a robot arm as a learning project, using an arduino, and stepper motors instead of servos. Each motor has an encoder on the back of it so I can read the position of the motor shaft.

I would like to be able to store the joint position information in EEPROM at the end of every jog, so that if I shut the robot down and move some joints while it’s powered off, the Arduino will be able to “discover” the new joint positions when it starts up.

For positions of the motors, this is pretty trivial, but the problem is that almost all of these joints have gear trains on them. That means that the motor shaft position is only part of the equation for the final joint position. I have all the gear ratio numbers, but I don’t have a way to discover the position of the “output” shaft after power up.

In other words, for a (e.g.) 50:1 gear ratio, there are fifty possible joint positions for every motor position. If you manually move the joint while the arduino is powered off, I don’t know how to discover the joint position once I’ve read the new motor position.

Is anyone aware of creative solutions to accomplish this in software, without putting an encoder on the output shaft? My Holy Grail is to basically “zero” each joint once during calibration, then never (or rarely) have to worry about it again.

submitted by /u/xoxota99
[link] [comments]