Dynamixel Servo for "Schottel" Type Marine Thruster

Hi,

I am currently designing/building a “Rotortug”-type marine robot. It is moved around by 3 “Schottel” type thrusters, which can be continuously rotated over a full 360+° degree range.

For manual mode, a standard R/C transmitter should be used to control the thrusters directly, like the thrusters in this video (between 0:45-1:15):

Unfortunately standard R/C servos can not move 360° and beyond, so I am looking for Dynamixel servos (especially the XL430-250T). They are advertised as being “multi-turn” capable, which sonds quite good, but I am looking more for a “endless-turn” type of capability. I have already connected ROS to the R/C receiver and can receive the stick positions.

I am actually looking through the SDK (I do my coding in C++) , but I am not sure if the “endless-turn” capability I need is already in there (it seems to be something like multi-turn, but no quite it).

Anybody out there who knows how to use Dynamixel XL’s in this fashion?`

Thanks in advance, any help is appreciated…

Kai

Hi Kai,

That’s a cool robot. It sounds like you should talk to the sales team at Robotis. If such a product exists on the Dynamixel product line I am sure they can point you to it. To be perfectly honest this sounds like something that is either doesn’t really exist or is really expensive due to connector and cabling constraints. Have you done some research to see if this even exists?

The XL430-W250T servos are often used for wheels, including on the Turtlebot 3, so they almost certainly can turn forever.

The XL430-W250T servos are often used for wheels, including on the Turtlebot 3, so they almost certainly can turn forever

That is true, but it seems from the SDK that in “wheel mode” you can command the velocity of the motion but not a target angle. Maybe one could poll for the current angle, but that would bypass the nice “ramps” the XL430 is capable of following during movement for a target angle.

Not sure if I understand your problem, but I guess you want to rotate your thrusters endlessly to a position? Did you try the “Extended Position Control Mode”. From the documentation it can do up to 512 turns. Seems to be enough for many applications.

From the documentation it can do up to 512 turns. Seems to be enough for many applications.

Thank you. Yes, I saw that. Problem with that seems to be:

  1. I start at 0°
  2. I rotate to e.g. 350° clockwise (CW)
  3. I rotate further an additional 25° CW

What I look for is an angle of 15° (“modulo 360”), but multi turn seems to add up and gives 375°.

This becomes a problem if I do several successive CW moves (finaly resulting e.g. in 3600°) and then send 0° as a goal angle. The servo now does 10 turns counterclockwise (CCW).

if the servo moves 375 degree, then set a constant Circ to 375 and use it instead of 360 in your calculations, or use movement = angle * ( 1 / Circ ) ; Better yet use Radians instead of degrees. While the manufacturer claimed 360+ of movement they probably did not gear it exactly right where 360 of instruction equals 360 of movement.

After further studying the SDK, the solution may be easier than I initialy thought:

The core problem is, that after a few turns in, what is called, “multi-turn” mode, the servo may think its (relative) position is e.g. 3615° when it is in fact at an absolute(!) position of 15°.

Now there’s a sentence regarding the “Present Position” being reset to absolut when switching modes in the documentation:

Present Position(132) will be reset to an absolute position value within one full rotation in following cases. Note that Present Position(132) value that is reset to an absolute value can differ by the set Homing Offset(20) value.:

  1. When Operating Mode(11) switches to Position Control Mode , Present Position(132) will be reset to an absolute position value within a full rotation.
  2. When torque is turned on in Position Control Mode , Present Position(132) will be reset to an absolute position value within one full rotation.
  3. Turning on the power supply or using Reboot Instruction.

So maybe this works:

  1. Operate in “normal mode”
  2. When being at (absolute) 350° and wanting to go CW to (absolute) 15° [a turn the servo would do CCW in this mode], turn to “multi-turn” mode
  3. Rotate in “multi-turn” mode to (relative) 375° CW.
  4. Reset mode to “normal mode”, (relative) position of 375° is reset to absolute 15°

Remaining problem is, how fast such a mode change is. If it’s instantaneous, this scheme may work…

The U2D2 (together with the Power Hub) arrived and my thruster moved for the first time:

(Hint: it may seem that the thruster moves in the wrong direction, but since it’s of the “pusher” type the pointy end of the pod has to point to where the stick is moved)

I created a ROS node for the thruster steering, which subscribes to a topic of Azimuth/Thrust values coming from a stick of the R/C transmitter, so I am able to “point” the truster in a direction and control the thrust it propelles into that direction.

Moving the thruster with the Dynamixel SDK was, up to this point, easy but I have yet to tackle the problem of the servo “winding-up” in multi-turn mode. I first made the mistake of not “clear”-ing the servo before reconnecting. After playing around for some time I disconnected and then when reconnecting and sending a 0° goal position, the thruster “unwound” ~10 revolutions.

Next step: Resetting to absolute angles after some turns…

With help from the Dynamixel forum, I’ve built something that works.

I used this as a guideline and implemented a solution, which, after some turns wound up, clears the Present Position value to an absolute value within one rotation (0-4095).

But: the “clear” instruction can only be sent after the servo motion is stopped. To achieve this, the code mentioned above introduces a small (~300ms) delay before sending the “clear”, which I consider something I would prefer to avoid.

If I could wish for something, I would love to see the ability to “point” the servo in a direction being part of the Dynamixel firmware, maybe a dedicated “Drive Mode” or a flag in the “Position Goal” in terms of “move to new position in direction of smallest angle difference”.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.