Asked
— Edited
@DJ and Jeremie.
I've been setting up some servos, and I've noticed that the servo release using (for example), Servo(D5,0), the zero is now being treated as a servo holding position as it was before the introduction of zero being a servo release.
I am using the latest ARC version, (2015.09.00), and it was working a few weeks back. I also tried it on a new project with just a single script control, using different ports and EZ-Robot HD servos... same thing.
Any ideas and has anyone else noticed this?
0 in Auto Position indeed releases the servo
That must have been what I was using. Thanks again DJ, and sorry for reporting it as a bug report. My bad. eyeroll
On a slightly unrelated note, would it be possible to add a reset servo speed command in to the EZ-Script menu or a Cheat Sheet command?
@SteveG Yes, that's what it was. It was the problem you helped me to solve. I was using Autopositioner to do some movements and hitting zero did indeed cause a servo release. I didn't really realize it at the time since the robot was sitting and there was no weight on the servo in question. Worse yet, when the position went above 0 again, even just to one, it caused a violent jerk to some (I guess) random position. And that was the real problem. Too bad though. Being able to release some servos when applicable could be a good power saving technique. But the re-powering is murder.
Nonetheless, it's interesting to know that only happens when using Autopositioner. Still, I think I'll continue to stay away from ever going down to zero, period. Seems like the the most prudent route.
To expand on what @wbs is talking about, it's important to know this fact. Servos draw equally the same power holding a position as they do released - if there is no need to hold a position.
I'll be more specific. If a servo was released and it moved under the weight of the robot, that is because it needs the power to hold the position. If you were asking to release a servo to save power, it would therefor move.
Now, if a servo was released and it didn't move under the weight of the robot, then it means it's using the same power as if it was released. Again, a servo ONLY uses power when it needs to hold a position under weight. And holding a position with no weight will not use any power.
So asking to release a servo to save power is counter intuitive because if the robot can holds its position without the servo released, then it's not using any more power with the servo held in position.
The only disadvantage to releasing a servo to save power is losing its position - because a servo doesn't use power of it doesn't need too. It only uses power to hold a position.
@WBS.
Yeah, I remember that Auto Position issue you had. But I was using servo release on another project for quite a while before that in a project, but recently deleted it as I no longer use it as the robot has since been dismantled (or should I say gutted) for my latest project. Anyway thanks for the reminder though.
@DJ.
Thanks for the explanation... very interesting and good to know. The main reason I use servo release, is if a servo is not holding any real weight and moves something else such as a retrable sliding arm with a linkage for example, I release it when it is not needed to stop the sometimes irritating and sometimes loud buzzing servos can make, especially when a servo is only occasionally used. My belief was that if these were buzzing then power is being applied and releasing the servo would save on that power which is not needed, and prolong the life of the servo over time. That was my thought on it anyway.
That's why I like the idea of servo release and why I think that having a script command to reset the servo for when it need to move would be a great idea. This would also be good for the example @WBS outlined. I know someone else asked about this a while back but there was no response. Would it be possible to add a servo reset command, DJ?
If the servo is buzzing, then it's using power because it's holding weight. If you release a servo, it may stop buzzing but it is also not holding the exact position that was requested. If the small difference isn't a big deal to you, then there's no need to worry to use servorelease. And if the weight of the attachment isn't moving the servo, also no need to worry to use servorelease.
What would a servo reset command do?
@DJ.
Thanks for getting back to me. Yeah, using my current project as an example, I have servos sliding horizontal retractable arms. One of them is bigger that the others and when it retracts to its resting position its buzzes a little due to the length of the linkage. Adjusting the values either does not fully retract or goes a bit to far but always buzzes. At this point it's not holding anything important so exact servo position is not a problem and that's where the release comes in. It kills the buzzing and though it would save a little on power when not in use.
In regards to the reset servo command, it would do the same as the reset servo tab in the ARC ribbon menu, resetting the servo (or chosen servos) after a release. Having it as a script command, it could be added in to a script without having to press the servo reset tab in the menu (basically, a Cheat Sheet command to the reset servo tab). I know Richard R mentioned this thread post #9 a while ago in this thread for his Inmoov projects.
At least that's the idea.
I absolutely hate the sound of buzzing servos and feel your pain. There's a few other things you can do. Switch over to analog servos. They usually are much quieter. Switch over to DC motors with hbridge and pot for feedback. They are very quiet and strong. Get rid of the curcuit board in the servo and use a ultrasonic switching motor controller instead. I've used all three of these methods in my B9 with great and quiet results.