Issues with continuous servo motor and servo shield


I have two continuous servo motors attached to a servo shield sing the example code: servo shield file. I find that setting the servo speed using the servo.position() function does not accurately map to the speed of the servo and is mapped differently between the two servos. I.e. on one servo, servo.position(0,72) is stationary whilst on the other it is achieved by servo.position(1,74). It becomes difficult to match the speed of one servo to another. Is there any possible fix as I have tried different board, servos and shield modules to no avail?

The continuous servos used are the Feetech FS90R for reference

Hi, the camera will output the same PWM to each servo but you have to calibrate each one. I.e. it’s the servo itself that’s the issue. Do not expect the same values to each servo will result in the same output. Unless you bought extremely high quality servos they typically have very inaccurate circuits that control their feedback systems.

Thanks for your reply Kwabena.

Quick question however, If the issue is with the servo circuit, why is it that it works fine with an arduino? I thought they also output the same PWM to each servo too?

Hi, the actually servo pulses generated by the Arduino versus the OpenMV Cam may be different. You have to calibrate this.

What is calibration? Basically, there’s going to be an offset and scale value per servo that you need to apply. One way to find these values is to find the min/max inputs that give you the behavior you want. The offset is then the min value and the scale is the max-min.