Canada
Asked — Edited

Question With Release() Command

Greeting all, It has been a long while since I posted here. I have been working on my Inmoov whenever I can find time, which is not a lot, but slowly, very slowly progressing.

I now have a fully functional and completed torso with left arm and head. I am now starting the real fun; programming ! Yaaa !

The problem I am encountering at this time is the servo release() command. First, from what I read, on power-up, I must first set servo position, then servo speed. Then I can change servo position and/or speed at will. So far so good. Now, on some of my servos, I would like to release them to stop the "humming/buzzing" noise. I use the Release() command, but after using it in scripting, there is nothing I can do to get the servo to move at all. I know I am doing something fundamentally wrong, but can not figure it out.

Here is the sequence of action:

  • Power-up EZB-V4
  • Connect via wifi
  • Set servo limits in init script (connect)
  • Then, using the script console (or within the init script, or any scripting method), run the following commands:
    • Servo(d10,130) # Set servo position
    • ServoSpeed(d10,2) # Set servo speed These are required on startup. At this point, servo works fine. I can change position and speed at will without problem.
    • Release(d10) # Releases the servo. No noise
    • ServoSpeed(d10,3) # servo speed stays at 2, does not change to 3 (GetServoSpeed(d10) )
    • Servo(d10,75) # servo does not move (stays at previous 130 position). But can hear the "buzzing noise" No matter what I do, I can no longer move the servo position. Tried setting new servo position and servo speed, but no luck.

I have captured the screen and attached it.

Any idea anyone ?


ARC Pro

Upgrade to ARC Pro

Unleash your creativity with the power of easy robot programming using Synthiam ARC Pro

#1  

Screen capture wasn't uploaded. I would try adding a another servo position after the release as the servo now doesn't have a position. That might fix it. As for no movement after, perhaps that servo speed is too slow and less powerful to articulate the arm?

Canada
#2  

try

ServoSpeed(d10,0) sleep(25) ServoSpeed(d10,the speed you wish) Servo(d10,75)

the way I reset my servo:

ServoUp(D6,1 ) ServoSpeed( D6,0 ) sleep(100) ServoSpeed( D6,$fastSpeed )

PRO
USA
#3  

After a Release(d10)

do first a Servo(d10, #position) and only then ServoSpeed(d10, #speed)

#4  

Or you could replace the servo with a digital one. From what I understand, they don't make a buzzing noise. Also you might want to look into why it's buzzing in the first place. It could be under too much strain and too weak for the place in which it is being used. How hot is it getting when under load? Doing the release thing is just masking the symptoms of mechanical problems.

#5  

Sorry the screen capture did not upload.

@Aerius Tried that several time, but no luck. ?!?

@PTP Tried that several time, but no luck. ?!?

@WBS00001 I fully understand the reason why they are buzzing. Yes they are under some strain, but no overload. It is Inmoov design. But thanks for the feedback.

@all I don't have any problem using the AutoPosition control, and setting the servos to '0' (release). I was just hoping to have more control over releasing them from a scripting approach.

Still don't understand the problem though.

#6  

I have built a couple of inmoovs....you better get used to the buzzing...

Canada
#7  

Buzzing servo is not an option if the mechanical can hold the position!

time = distance / speed

sleep time = (servo initial position - servo final position) / (1/servo speed)

if ($DistanceD6 > 0 )
     Sleep ( 10 *   $DistanceD6 /( 1/(GetServoSpeed( D6 )+3 ))) ### Time = Distance / speed
     release(D6)
              
endif

The # (10*) and (+3) in formula is adjustment brought to the Inmoov.. For non modified servo different adj would be needed

Multitred allow to run this sleep time calculation while the servo is running. Then the release servo is apply.

#8  

Richard's last answer is completely unacceptable. You shouldn't have to "get used to it " and don't have to. I've also been disturbed by buzzing servos and release them when ever possible. By the way, digital servos are just as annoying because they produce a whine while trying to hold position or load.

Anyway, I've been struggling with this same issue of getting the servo to restart after release. I found that I need to avoid using the 0 while setting a servospeed. That seems to reset the release. I also have a little script I run when I want to restart a servo after release. Can't post it now because I'm at work. However you can download my project called B9 Control and look in the "Claws non loop" script located in the script manager. The first 3 or 4 lines reset that servo nicely. I'll also post it later tonight.

I'm sure there's a more elagent solution and I'm still looking for it. I'm not about to settle and "just get used to it ". If you or anyone else finds it please let us know.

EDIT: Aerius bet me to it. The script I mentioned above is really close to his. In fact it look better. I'll be looking closer at it later. Thanks! !;)