by stevo3d » Fri May 19, 2006 7:21 pm
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