Pololu Robotics & Electronics
Menu
My account Comments or questions? About Pololu Contact Ordering information Distributors

Pololu Forum

2 servos for same joint need to operate in opposite directions

I have four maestro controllers for 4 manipulator arms that have two servos on link one as you can see in the picture below:

There are three motors in the picture, the base motor that rorartyes the base, and the two motors to left and right constitute together joint 1. moving together link 1, let’s call them M1a and M1b.

The thing is that M1a and M1b MUST move in opposite directions to achieve movement, and EXACTLY in the same amount.

The program MaestroControlCenter doesn’t appear to have an option to chain two motors like that. Is there another way? The ting with MaestroControlCenter will force a motor to the center when activated and will burn one or both motors.

Is the source to MaestroControlCenter available?

I thought of something like (in pseudocode):

 // if x is the desired position on M1a

setMultipleTargets (fl, x, GetCurrentPosition (fl, 2) - (x-GetCurrentPosition (fl, 1))

But the problem with my maestro is that only return values for position on startup for channel 0, and all other channels need to set a position before they return a current position value. Is there a fix for that?

Many thanks for any help

David

Hello.

The Maestro Control Center does not have an option for linking two servo channels together like that, and we do not distribute the source code for the Maestro Control Center. However, that is something that you should be able to handle in your software. How are you planning on controlling the Maestro (e.g. script, USB from a PC, separate microcontroller)?

The sliders in the “Status” tab of the Maestro Control Center do not allow you to specify the target before enabling the channel; however, if you are controlling the target though a script, USB, or TTL serial, setting the target of a disabled channel will enable the channel with the target position.

The “Get Position” command will return 0 if the specified channel is currently disabled; there is no way of reading the last known set target before the channel was disabled.

One way to link the servos in the way you are describing is to write a script that is constantly reading the position of one channel and sending the second channel to the inverse of that. This would make it so any time you command the first servo to go to a position, the second servo is automatically updated too (which would allow you to use the slider in the “Status” tab as well).

Alternatively, you could calculate the desired position for both servos in your software and send them back-to-back.

Brandon

Thanks Brandon.

I had a very difficult time with this, because this kind of servomotor is imprecise and inconsistent, and the paired motors for the single joint were crating rotational force to the link in a random way, impacting negatively the manipulation precision of the arm.

Wanted to update the thread

David