Legacy Forum: Preserving Nearly 20 Years of Community History - A Time Capsule of Discussions, Memories, and Shared Experiences.

High pitched sound coming out from servos

Bioloid robot kit from Korean company Robotis; CM5 controller block, AX12 servos..
13 postsPage 1 of 1
13 postsPage 1 of 1

High pitched sound coming out from servos

Post by inaki » Sun May 14, 2006 12:25 pm

Post by inaki
Sun May 14, 2006 12:25 pm

I am working with the Bioloid kit ARM example.

I have realized that when servos are in a static position they emit a high pitch sound (like a Beeeeep at high frequency). Are you experiencing anything like this with AX-12 servos ?

It is such annoying noise that I am putting off the CM-5 brick all the time.

I am not sure the noise comes from only one of the servos ar all of them.
I am working with the Bioloid kit ARM example.

I have realized that when servos are in a static position they emit a high pitch sound (like a Beeeeep at high frequency). Are you experiencing anything like this with AX-12 servos ?

It is such annoying noise that I am putting off the CM-5 brick all the time.

I am not sure the noise comes from only one of the servos ar all of them.
Last edited by inaki on Tue May 16, 2006 12:01 am, edited 1 time in total.
inaki
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 233
Joined: Sun Mar 06, 2005 1:00 am
Location: EH

Post by barbar » Mon May 15, 2006 8:10 pm

Post by barbar
Mon May 15, 2006 8:10 pm

I experience the same sound effect. I think it varies with the outside force on the servos. Experiment: If I "switch of" those servos (e.g. via motion editor) I get silence.

(Sorry for my Germenglish)
I experience the same sound effect. I think it varies with the outside force on the servos. Experiment: If I "switch of" those servos (e.g. via motion editor) I get silence.

(Sorry for my Germenglish)
barbar
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 87
Joined: Tue Apr 04, 2006 1:00 am
Location: Germany

Post by Gil » Mon May 15, 2006 8:12 pm

Post by Gil
Mon May 15, 2006 8:12 pm

I get that from my RN1 :?
I get that from my RN1 :?
Gil
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 56
Joined: Sat Apr 08, 2006 1:00 am

Post by Pev » Tue May 16, 2006 12:24 am

Post by Pev
Tue May 16, 2006 12:24 am

Same whining noise here (with the humanoid build anyway) think it may be the waist servo as it supprots all the weight of the upper torso cpu and batteries.

Pev
Same whining noise here (with the humanoid build anyway) think it may be the waist servo as it supprots all the weight of the upper torso cpu and batteries.

Pev
Carl
-------------------------
www.alt-view.co.uk
Pev
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 547
Joined: Sun Feb 26, 2006 1:00 am
Location: UK

Post by Pev » Tue May 16, 2006 9:05 am

Post by Pev
Tue May 16, 2006 9:05 am

Okay I take it back it is not the waist servo. Have tried disconnecting it and the whine continues - think it must be the load on the leg servos.....well I guess I can't engineer ou the legs lol.......

Pev
Okay I take it back it is not the waist servo. Have tried disconnecting it and the whine continues - think it must be the load on the leg servos.....well I guess I can't engineer ou the legs lol.......

Pev
Carl
-------------------------
www.alt-view.co.uk
Pev
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 547
Joined: Sun Feb 26, 2006 1:00 am
Location: UK

Workaround for noisy servo problem

Post by stevo3d » Fri May 19, 2006 7:21 pm

Post by stevo3d
Fri May 19, 2006 7:21 pm

Hello everyone. I'm a Bioloid user from the US. I'll keep my purchasing details minimal to avoid being rude to our RoboSavvy hosts. I bought my comprehensive kit from Australia in late March because that was the only english-speaking place I could find to purchase at the time and I didn't want to wait unknown months until Robotis finds a US distributor (still waiting for that). I'm very glad I did because I've been enjoying the kit very much despite the fact that I've experienced all the same problems I've read about here on the forum: The whining servos, the "positional glitches", and the same frustrations about wanting more information, robot definition files, and programming examples.

I've developed a work around to the whining AX-12 problem. Through experimentation I found that the whine was not coming from any one particular AX-12 servo. The sound is so high pitched that it is extremely difficult to localize. It turns out that the sound comes from many (or most) of the servos at once. I discovered a trick during the past month while I was experimenting with the command line motion editor, turning all the dynamixels on and off for posing of the humanoid.

The key is to stop the AX-12s from continuously trying to turn that extra degree or so to hit the goal position that they can't quite get to because of joint friction and the reduced torque near the goal position. The reduced torque is imposed by the compliance margin and slope to help protect the servos from shock (see page 16:Address 0x1A-0x1D in the AX-12 manual). When the AX-12s are turned off briefly and then back on they forget the goal position and don't try vainly to attain it anymore. They just try instead to hold their current position, which is what we normally want.

So what do we do with this knowledge? Make sure the robot will be in a stable position that doesn't require much, if any, servo torque to hold. For example, when the humanoid is standing (motion 3 in the humanoid demo). Then all you need to do is have your program send a broadcast to turn off all the dynamixels, wait a very short period of time (.1 second should do), and turn them all back on again. When the servos have reengaged their holding torque they'll be much quieter, if not totally silent. I added a little subroutine to do this in the humanoid demo program when it's just standing around waiting for input, like this (translated as best I can from the graphical language to text).

Code: Select all
[Label] SilenceServos
  LOAD All Dynamixel:Turn on/off 0
  LOAD CM-5 Timer <- 1
  [Label] SilenceServosPause
    If (CM-5 Timer != 0) THEN JUMP SilenceServosPause
  LOAD All Dynamixel:Turn on/off <- 1
  RETURN

It's critical to locate any calls to SilenceServos outside of any quickly repeating loops so your program doesn't continuously turn the servos off and on. If the subroutine were to be called repeatedly within a fast loop, the torque to the servos would be kept off effectively all the time because it turns out the processor would be spending just about all of its time in the SilenceServosPause loop. Calling SilenceServos right after a motion 3 (standing) is played but before returning to the main input loop works for me.

Unfortunately that only helps with programs and doesn't quiet the robot down while you are programming motions. The best you can do if the robot is in a fairly stable position is quickly turn all the servos off and then on again.

Robotis could (mostly) eliminate the whining problem by changing the programming of the AX-12 (via firmware update if that's possible?) so that if it gets within a degree or so of the goal position but can't quite attain it within a short timeframe, the AX-12 should give up and just hold its current position. That would also give a bonus of significantly increased battery life between charges. Whining servos consume a lot more power than quiet servos. Meanwhile, SilenceServos should help a bit.

Stay tuned. I have another idea for SilenceServos that should work with more finesse and speed, no temporary loss of torque, less picky placement in the program, and frees up the CM-5 timer for other uses.

Let me know if this helps and/or if anything is unclear.
Hello everyone. I'm a Bioloid user from the US. I'll keep my purchasing details minimal to avoid being rude to our RoboSavvy hosts. I bought my comprehensive kit from Australia in late March because that was the only english-speaking place I could find to purchase at the time and I didn't want to wait unknown months until Robotis finds a US distributor (still waiting for that). I'm very glad I did because I've been enjoying the kit very much despite the fact that I've experienced all the same problems I've read about here on the forum: The whining servos, the "positional glitches", and the same frustrations about wanting more information, robot definition files, and programming examples.

I've developed a work around to the whining AX-12 problem. Through experimentation I found that the whine was not coming from any one particular AX-12 servo. The sound is so high pitched that it is extremely difficult to localize. It turns out that the sound comes from many (or most) of the servos at once. I discovered a trick during the past month while I was experimenting with the command line motion editor, turning all the dynamixels on and off for posing of the humanoid.

The key is to stop the AX-12s from continuously trying to turn that extra degree or so to hit the goal position that they can't quite get to because of joint friction and the reduced torque near the goal position. The reduced torque is imposed by the compliance margin and slope to help protect the servos from shock (see page 16:Address 0x1A-0x1D in the AX-12 manual). When the AX-12s are turned off briefly and then back on they forget the goal position and don't try vainly to attain it anymore. They just try instead to hold their current position, which is what we normally want.

So what do we do with this knowledge? Make sure the robot will be in a stable position that doesn't require much, if any, servo torque to hold. For example, when the humanoid is standing (motion 3 in the humanoid demo). Then all you need to do is have your program send a broadcast to turn off all the dynamixels, wait a very short period of time (.1 second should do), and turn them all back on again. When the servos have reengaged their holding torque they'll be much quieter, if not totally silent. I added a little subroutine to do this in the humanoid demo program when it's just standing around waiting for input, like this (translated as best I can from the graphical language to text).

Code: Select all
[Label] SilenceServos
  LOAD All Dynamixel:Turn on/off 0
  LOAD CM-5 Timer <- 1
  [Label] SilenceServosPause
    If (CM-5 Timer != 0) THEN JUMP SilenceServosPause
  LOAD All Dynamixel:Turn on/off <- 1
  RETURN

It's critical to locate any calls to SilenceServos outside of any quickly repeating loops so your program doesn't continuously turn the servos off and on. If the subroutine were to be called repeatedly within a fast loop, the torque to the servos would be kept off effectively all the time because it turns out the processor would be spending just about all of its time in the SilenceServosPause loop. Calling SilenceServos right after a motion 3 (standing) is played but before returning to the main input loop works for me.

Unfortunately that only helps with programs and doesn't quiet the robot down while you are programming motions. The best you can do if the robot is in a fairly stable position is quickly turn all the servos off and then on again.

Robotis could (mostly) eliminate the whining problem by changing the programming of the AX-12 (via firmware update if that's possible?) so that if it gets within a degree or so of the goal position but can't quite attain it within a short timeframe, the AX-12 should give up and just hold its current position. That would also give a bonus of significantly increased battery life between charges. Whining servos consume a lot more power than quiet servos. Meanwhile, SilenceServos should help a bit.

Stay tuned. I have another idea for SilenceServos that should work with more finesse and speed, no temporary loss of torque, less picky placement in the program, and frees up the CM-5 timer for other uses.

Let me know if this helps and/or if anything is unclear.
Last edited by stevo3d on Tue Jun 06, 2006 4:19 am, edited 1 time in total.
Steve Munk
stevo3d
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 46
Joined: Fri May 19, 2006 1:00 am
Location: Fairbanks, Alaska, USA

Re: Workaround for noisy servo problem

Post by barbar » Fri May 19, 2006 7:51 pm

Post by barbar
Fri May 19, 2006 7:51 pm

stevo3d wrote:Let me know if this helps


It sure does. Splendid idea! And why didn't I think of it :?:

Good to have experienced people in here
stevo3d wrote:Let me know if this helps


It sure does. Splendid idea! And why didn't I think of it :?:

Good to have experienced people in here
barbar
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 87
Joined: Tue Apr 04, 2006 1:00 am
Location: Germany

Re: Workaround for noisy servo problem

Post by barbar » Fri May 19, 2006 8:05 pm

Post by barbar
Fri May 19, 2006 8:05 pm

by the way Steve ...

stevo3d wrote: the "positional glitches"


Have you found out any reason?
by the way Steve ...

stevo3d wrote: the "positional glitches"


Have you found out any reason?
barbar
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 87
Joined: Tue Apr 04, 2006 1:00 am
Location: Germany

Post by stevo3d » Fri May 19, 2006 8:26 pm

Post by stevo3d
Fri May 19, 2006 8:26 pm

No unfortunately I haven't found any explanation for the glitches. I read in another post that Robotis is aware of the problem and working on a fix.
No unfortunately I haven't found any explanation for the glitches. I read in another post that Robotis is aware of the problem and working on a fix.
Steve Munk
stevo3d
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 46
Joined: Fri May 19, 2006 1:00 am
Location: Fairbanks, Alaska, USA

Post by Pev » Fri May 19, 2006 8:32 pm

Post by Pev
Fri May 19, 2006 8:32 pm

Stevo3d,

Great info thanks - basically it has confirmed what I thought.

Have you got your humanoid walking yet?

Cheers

Pev
Stevo3d,

Great info thanks - basically it has confirmed what I thought.

Have you got your humanoid walking yet?

Cheers

Pev
Carl
-------------------------
www.alt-view.co.uk
Pev
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 547
Joined: Sun Feb 26, 2006 1:00 am
Location: UK

Post by stevo3d » Tue May 23, 2006 12:14 am

Post by stevo3d
Tue May 23, 2006 12:14 am

Have you got your humanoid walking yet?


No, not yet. Haven't spent a whole lot of time trying to though. So far the humanoid is able to take a single step fairly competently. Then I got distracted. :)

I made it stand on its head, do some leg waving, and return to standing. Also got it to reach up and hug a hand put in front of its face, touch its toes, and stand on one foot with other leg and arms way out to the sides.
Have you got your humanoid walking yet?


No, not yet. Haven't spent a whole lot of time trying to though. So far the humanoid is able to take a single step fairly competently. Then I got distracted. :)

I made it stand on its head, do some leg waving, and return to standing. Also got it to reach up and hug a hand put in front of its face, touch its toes, and stand on one foot with other leg and arms way out to the sides.
Steve Munk
stevo3d
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 46
Joined: Fri May 19, 2006 1:00 am
Location: Fairbanks, Alaska, USA

Improved SilenceServos

Post by stevo3d » Tue Jun 06, 2006 4:15 am

Post by stevo3d
Tue Jun 06, 2006 4:15 am

stevo3d wrote:Stay tuned. I have another idea for SilenceServos that should work with more finesse and speed, no temporary loss of torque, less picky placement in the program, and frees up the CM-5 timer for other uses.

As promised, I've made a significant improvement to the SilenceServos subroutine. See my long post above for details on what SilenceServos does. In this new version, instead of turning all the AX-12s off for a tenth of a second and turning them back on, it now uses a loop to set each servo's current position as its goal position. This has the benefits of much faster execution, the servo torque is never off (preventing gravity from changing joint positions), and the timer is not used, freeing it up for other purposes.

Code: Select all
[Label] SilenceServos
  LOAD ID <- 1
  [Label] SilenceServosLoop
    LOAD {Custom ID}ID:30 <- {Custom ID}ID:36
    COMPUTE ID = ID + 1
    IF (ID <= 19) THEN JUMP SilenceServosLoop
  RETURN


This routine requires a bit more setup than the old version. It assumes you have AX-12s numbered 1 thru 19 connected. If you have fewer or more AX-12s, then the number 19 in the IF statement may need to be changed. Like the old version, SilenceServos still can't be placed within a fast executing loop such as one that is scanning for sensor input. That will cause the robot to go limp.

So it's best to use it as suggested in the previous article. One change for the better is that this subroutine can be invoked after any movement is done playing, no longer just the ones that leave the robot in a stable position (one in which gravity would not quickly change the position of the robot if the servo torque were turned off). In the case of an unstable position the robot will be quieted as much as possible, but understandably the servos under load will still whine.

This version of SilenceServos is just as effective as (if not more effective than) the previous version at silencing the whining servos. It mimicks the behavior which I think Robotis should code directly into the firmware of the AX-12s or the CM-5s, to be performed shortly after each servo finishes moving.

I hope you find this improved code useful.
stevo3d wrote:Stay tuned. I have another idea for SilenceServos that should work with more finesse and speed, no temporary loss of torque, less picky placement in the program, and frees up the CM-5 timer for other uses.

As promised, I've made a significant improvement to the SilenceServos subroutine. See my long post above for details on what SilenceServos does. In this new version, instead of turning all the AX-12s off for a tenth of a second and turning them back on, it now uses a loop to set each servo's current position as its goal position. This has the benefits of much faster execution, the servo torque is never off (preventing gravity from changing joint positions), and the timer is not used, freeing it up for other purposes.

Code: Select all
[Label] SilenceServos
  LOAD ID <- 1
  [Label] SilenceServosLoop
    LOAD {Custom ID}ID:30 <- {Custom ID}ID:36
    COMPUTE ID = ID + 1
    IF (ID <= 19) THEN JUMP SilenceServosLoop
  RETURN


This routine requires a bit more setup than the old version. It assumes you have AX-12s numbered 1 thru 19 connected. If you have fewer or more AX-12s, then the number 19 in the IF statement may need to be changed. Like the old version, SilenceServos still can't be placed within a fast executing loop such as one that is scanning for sensor input. That will cause the robot to go limp.

So it's best to use it as suggested in the previous article. One change for the better is that this subroutine can be invoked after any movement is done playing, no longer just the ones that leave the robot in a stable position (one in which gravity would not quickly change the position of the robot if the servo torque were turned off). In the case of an unstable position the robot will be quieted as much as possible, but understandably the servos under load will still whine.

This version of SilenceServos is just as effective as (if not more effective than) the previous version at silencing the whining servos. It mimicks the behavior which I think Robotis should code directly into the firmware of the AX-12s or the CM-5s, to be performed shortly after each servo finishes moving.

I hope you find this improved code useful.
Steve Munk
stevo3d
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 46
Joined: Fri May 19, 2006 1:00 am
Location: Fairbanks, Alaska, USA

Another possible solution

Post by stevo3d » Wed Jun 07, 2006 9:36 pm

Post by stevo3d
Wed Jun 07, 2006 9:36 pm

Inaki posted another possible fix for the whining servo problem in this thread:

http://robosavvy.com/modules.php?name=F ... =1576#1576
Inaki posted another possible fix for the whining servo problem in this thread:

http://robosavvy.com/modules.php?name=F ... =1576#1576
Steve Munk
stevo3d
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 46
Joined: Fri May 19, 2006 1:00 am
Location: Fairbanks, Alaska, USA


13 postsPage 1 of 1
13 postsPage 1 of 1