Hi There,
Â
I'm not sure if others have noticed this, or maybe I'm just not super familiar with how this should work, but it appears that my system is not operating as a "closed loop" robot. The encoders do not appear to provide real-time updates, for example, if the e-stop is pressed and a joint is manually moved. I've ensured that all encoders are correctly wired by using the "test encoders" program.
Â
This problem can be demonstrated by auto-calibrating the robot, pressing the e-stop, moving the arm, releasing the e-stop, then re-homing using the "home" program. A closed-loop system would theoretically "remember" where home is relative to the updated position, but the system does not in this case.
Â
Is this expected behavior, or do you think there's a problem with the code?
The encoders being just incremental - I have the code in the sketch monitor the encoders throughout a commanded move and verify that the commanded motor steps were achieved to catch any crashes or missed steps but its not monitoring at idle. I might look at adding a subroutine to continuously monitor the encoders at an idle state for the case you mention that the robot gets moved when the drivers are not powered. The code for all of this completely changed when I went from the PC handling all the kinematics (AR3) to having the teensy handle all the kinematics (AR4).
Thanks for the reply! This helps a lot with my understanding and makes a lot of sense why it was developed this way.
I happen to have some CUI absolute encoders lying around from another robotics project - I may look into implementing these as well to maintain a closed loop through power cycles that could potentially negate the need for limit switches.
It would definitely be great to have some functionality beyond monitoring, like also some error correction. A button which would correct the coordinate system when so chosen. Maybe on a per axis basis also.
And maybe a reckless mode, for correcting on the fly for when you gotta move fast and don't care about safety.