For a certain robotic application (actually for the FTC challenge this year) our team is performing an operation where a servo-driven arm could potentially be forced into an unknown position. We are using NXT+Tetrix.
Since this could damage a powered servo working against this forced position (servo holding arm weight on fixed base is now trying to move heavy base relative to fixed arm), we are thinking about somehow de-powering our servos (or servo controller), in order to get the servos to "relax" and accept the mechanically-forced position.
Originally, we were thinking of having our RobotC code determine the physical position of a given servo and set its desired position to there every loop, limiting how much a servo would try to fight the movement, but to our dismay, ServoValue[fooServo]
actually gives us the setpoint, and not the physical location (due to the servo being unable to provide this information).
We also considered setting ServoChangeRate[fooServo]
to 1(the minimal value) but this only changes the rate of the target location changing relative to the previous target.
So, we're concluding that the only way to really do this is to fully depower the servos. Is this possible on NXT/Tetrix with RobotC?
A few notes:
I realized as well that one could suggest to rig an encoder(associated with a Tetrix motor that does not need an encoder) onto the rotating area. That actually would not work for mechanical constraints.
I looked into setting
PWM enable
as shown here but am not sure how to send the i2c commands needed. If someone could clue me in to how these commands would be sent in terms of c code, that would be very helpful.