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).