Dynamixel Potentiometer Lifetime Problem Solved

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

Dynamixel Potentiometer Lifetime Problem Solved

Post by befi » Mon Jan 25, 2010 9:55 pm

Post by befi
Mon Jan 25, 2010 9:55 pm

Hi there

Those of you who are working a lot with the servo motors of Robotis will probably know the following problem:

- After some time of usage the potentiometers for determining the angle of the axis are getting more and more inaccurate



This results in a very bad 'closed loop control' of the servo position. This is often indicated by tremble if the margins are too tight.

In many applications the motor moves around a fixed point. This is where most probably the potentiometer will be worn out.




The most obvious solution to this problem is the replacement of the potentiometer. BUT: As every servo is calibrated to the specific potentiomenter, a replacement would result in an uncalibrated motor. Also the problem would sooner or later reoccur.


Therefore we developed a new approach by replacing the potentiometer with a contactless sensor for determining the angle of the axis. As this would also lead to an uncalibrated system, we found a way of recalibratiing the servo motor so that it behaves exactly like an original motor. This was proven by angular measurements and also by using this type of servo as a 'drop-in' replacement in a humanoid robot without changing any line of code.


Our solution leads to the folliwing advantages:


- Lifetime of the servo isn't anymore limited by the wearout of the potentiometer. The only possible sources of mechanical errors left are the motor and the gears (which are in fact very relieable)

- Servos stay calibrated over their total lifetime

- Outworn servos can be reused by exchanging the potentiometer with the contactless sensor. After that the accuracy is the same as a brand new servo

- The angular range can be extended from 300 degrees to almost 360 degrees
In fact can be freely defined between 0 to ~360 degrees

- The servos are using the original firmware
There are absolutly no compatibility issues

- Applicable to RX-28 and RX-64 models




We are thinking of offering a service where you can send us your (outworn or not) servos and we apply our changes so that their lifetime is nearly infinite. This will of course be much cheaper than buying a new servo.



With this post we would like to see how much you are interested in such a service.


Please respond to this message and give your opinions / feedback!



Greetings,
befi.
Hi there

Those of you who are working a lot with the servo motors of Robotis will probably know the following problem:

- After some time of usage the potentiometers for determining the angle of the axis are getting more and more inaccurate



This results in a very bad 'closed loop control' of the servo position. This is often indicated by tremble if the margins are too tight.

In many applications the motor moves around a fixed point. This is where most probably the potentiometer will be worn out.




The most obvious solution to this problem is the replacement of the potentiometer. BUT: As every servo is calibrated to the specific potentiomenter, a replacement would result in an uncalibrated motor. Also the problem would sooner or later reoccur.


Therefore we developed a new approach by replacing the potentiometer with a contactless sensor for determining the angle of the axis. As this would also lead to an uncalibrated system, we found a way of recalibratiing the servo motor so that it behaves exactly like an original motor. This was proven by angular measurements and also by using this type of servo as a 'drop-in' replacement in a humanoid robot without changing any line of code.


Our solution leads to the folliwing advantages:


- Lifetime of the servo isn't anymore limited by the wearout of the potentiometer. The only possible sources of mechanical errors left are the motor and the gears (which are in fact very relieable)

- Servos stay calibrated over their total lifetime

- Outworn servos can be reused by exchanging the potentiometer with the contactless sensor. After that the accuracy is the same as a brand new servo

- The angular range can be extended from 300 degrees to almost 360 degrees
In fact can be freely defined between 0 to ~360 degrees

- The servos are using the original firmware
There are absolutly no compatibility issues

- Applicable to RX-28 and RX-64 models




We are thinking of offering a service where you can send us your (outworn or not) servos and we apply our changes so that their lifetime is nearly infinite. This will of course be much cheaper than buying a new servo.



With this post we would like to see how much you are interested in such a service.


Please respond to this message and give your opinions / feedback!



Greetings,
befi.
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by i-Bot » Mon Jan 25, 2010 11:29 pm

Post by i-Bot
Mon Jan 25, 2010 11:29 pm

I think you are going to have to to a lot more to establish your credibility in this forum before folks will send you their RX servos ! Maybe you can post some more technical detail of your modification?

Robotis are already very good on support and repair, especially for these high end servos.
I think you are going to have to to a lot more to establish your credibility in this forum before folks will send you their RX servos ! Maybe you can post some more technical detail of your modification?

Robotis are already very good on support and repair, especially for these high end servos.
i-Bot offline
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 1142
Joined: Wed May 17, 2006 1:00 am

Post by befi » Tue Jan 26, 2010 12:19 am

Post by befi
Tue Jan 26, 2010 12:19 am

My credibility should not be a problem since I am a team member of the team "FUmanoid" (second place in Robocup Graz 2009 humanoid leage) which can be easily confirmed by the creator of HaViMo ( http://robosavvy.com/site/index.php?opt ... Itemid=137 ) and others.

And yes, I am aware of the excellent service from Robotis. But all they can offer is a replacement of the potentiometer. This means that the problem will occur again sooner or later. And as a participant of several Robocup competitions, I know very well that it appears most often at the wrong time ;)

Except for the calibration there is not so much detail to reveal. I use an off the shelf rotary encoder. I hope i will be able to post some pictures of the hardware modification tomorrow.
My credibility should not be a problem since I am a team member of the team "FUmanoid" (second place in Robocup Graz 2009 humanoid leage) which can be easily confirmed by the creator of HaViMo ( http://robosavvy.com/site/index.php?opt ... Itemid=137 ) and others.

And yes, I am aware of the excellent service from Robotis. But all they can offer is a replacement of the potentiometer. This means that the problem will occur again sooner or later. And as a participant of several Robocup competitions, I know very well that it appears most often at the wrong time ;)

Except for the calibration there is not so much detail to reveal. I use an off the shelf rotary encoder. I hope i will be able to post some pictures of the hardware modification tomorrow.
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by befi » Tue Jan 26, 2010 11:20 am

Post by befi
Tue Jan 26, 2010 11:20 am

Here you'll find the pictures of our Rx-64 mod:


Original hardware: Image

Modified hardware: Image
Here you'll find the pictures of our Rx-64 mod:


Original hardware: Image

Modified hardware: Image
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by hamid_m » Tue Jan 26, 2010 11:27 am

Post by hamid_m
Tue Jan 26, 2010 11:27 am

Hi everyone,

I confirm Befi's identity. He is a member of my team and has done a great job to solve the problem we had for a while with the servos.

It is really sad. Just after you are finished with the software development, one or more servos start to vibrate. This is then slowly transfered to all other servos and after a while you have a totally useless robot. :(

I hope his solution can also help others.

Best regards,
Hamid.
Hi everyone,

I confirm Befi's identity. He is a member of my team and has done a great job to solve the problem we had for a while with the servos.

It is really sad. Just after you are finished with the software development, one or more servos start to vibrate. This is then slowly transfered to all other servos and after a while you have a totally useless robot. :(

I hope his solution can also help others.

Best regards,
Hamid.
hamid_m offline
Savvy Roboteer
Savvy Roboteer
Posts: 133
Joined: Thu May 03, 2007 4:56 pm

Post by i-Bot » Tue Jan 26, 2010 11:45 am

Post by i-Bot
Tue Jan 26, 2010 11:45 am

That's very high credibility on this forum. Thx to you both for posting.

The pictures of the modification look really clever and very well executed.

Most of the RX servos are in college and Universities, so I guess most interest will come from there. I wish I could afford the RXs and the modification myself!

Do you modify the code in the servo ? I know Limor was interested to talk with people who had done that for one of his projects.
That's very high credibility on this forum. Thx to you both for posting.

The pictures of the modification look really clever and very well executed.

Most of the RX servos are in college and Universities, so I guess most interest will come from there. I wish I could afford the RXs and the modification myself!

Do you modify the code in the servo ? I know Limor was interested to talk with people who had done that for one of his projects.
i-Bot offline
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 1142
Joined: Wed May 17, 2006 1:00 am

Post by Bullit » Tue Jan 26, 2010 1:42 pm

Post by Bullit
Tue Jan 26, 2010 1:42 pm

It looks like you are using Austriamicrosystems AS5046.

http://austriamicrosystems.com/eng/Products/Magnetic-Encoders/Rotary-Encoders/AS5046

I'm curious how are you mounting the magnet on the main shaft?
It looks like you are using Austriamicrosystems AS5046.

http://austriamicrosystems.com/eng/Products/Magnetic-Encoders/Rotary-Encoders/AS5046

I'm curious how are you mounting the magnet on the main shaft?
Bullit offline
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 291
Joined: Wed May 31, 2006 1:00 am
Location: Near robot

Post by befi » Tue Jan 26, 2010 2:07 pm

Post by befi
Tue Jan 26, 2010 2:07 pm

i-Bot wrote:Do you modify the code in the servo ? I know Limor was interested to talk with people who had done that for one of his projects.


First versions required a changed firmware but we found a solution for doing all the adaptions without changing the firmware. This implies that we now have an in-depth knowledge of the robotis firmware ;)




Bullit wrote:It looks like you are using Austriamicrosystems AS5046.

http://austriamicrosystems.com/eng/Prod ... ers/AS5046

I'm curious how are you mounting the magnet on the main shaft?



It's true that I'm using a sensor from AM, currently the AS5043. The mounting is done by a custom part for the RX-64 which replaces the original plastic part. Since all parts are now integrated in our Robots I am not able to show you a picture. For the RX-28 the construction allows to mount the magnets directly onto the axis.
i-Bot wrote:Do you modify the code in the servo ? I know Limor was interested to talk with people who had done that for one of his projects.


First versions required a changed firmware but we found a solution for doing all the adaptions without changing the firmware. This implies that we now have an in-depth knowledge of the robotis firmware ;)




Bullit wrote:It looks like you are using Austriamicrosystems AS5046.

http://austriamicrosystems.com/eng/Prod ... ers/AS5046

I'm curious how are you mounting the magnet on the main shaft?



It's true that I'm using a sensor from AM, currently the AS5043. The mounting is done by a custom part for the RX-64 which replaces the original plastic part. Since all parts are now integrated in our Robots I am not able to show you a picture. For the RX-28 the construction allows to mount the magnets directly onto the axis.
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by Doms » Tue Jan 26, 2010 3:26 pm

Post by Doms
Tue Jan 26, 2010 3:26 pm

Hi Bennet, hi Hamid,

this is Dorian form the Darmstadt Dribblers.
First of all congratulations on this very nice solution!
As you know, we are experiencing the same servo problems.
But we have not gone as far in modding as you have!
Our main focus is on improving the servo firmware.

But I have a question about your solution.

Since you are not modifying the firmware, I assume you are doing the 'calibration' on the sensor to make it's analog output signal 'emulate' the one of the original potentiometer.

My understanding of the original firmware suggests, that Robotis is calibrating an upper and lower limit of the ADC input for the 0 resp. 300 degree positions of the poti.
These limits typically are around 30 and 980 (if I recall correctly) reducing the available values to about 980 - 30 = 950.
Since the ADC of the Atmega8 is only 10 bits and the servo position is also reported in 10 bits (0..1023) the remaining 950 values of the ADC have to be mapped onto the 1024 values of the servo position.
From talking to Robotis engineers and some experiments I found that this mapping does not seem to be linear.

Have you made similar experiments? And what are the results?
How do you cope with the non-linear mapping in the Robotis firmware, since your new sensor is probably linear?

Thanks by the way for offering your solution to others!
Have you already though about a price for the modding?

We are very sorry to hear that we wont see you at the German Open!
So best of luck with your preparations for Singapore!

Cheers,
Dorian
Hi Bennet, hi Hamid,

this is Dorian form the Darmstadt Dribblers.
First of all congratulations on this very nice solution!
As you know, we are experiencing the same servo problems.
But we have not gone as far in modding as you have!
Our main focus is on improving the servo firmware.

But I have a question about your solution.

Since you are not modifying the firmware, I assume you are doing the 'calibration' on the sensor to make it's analog output signal 'emulate' the one of the original potentiometer.

My understanding of the original firmware suggests, that Robotis is calibrating an upper and lower limit of the ADC input for the 0 resp. 300 degree positions of the poti.
These limits typically are around 30 and 980 (if I recall correctly) reducing the available values to about 980 - 30 = 950.
Since the ADC of the Atmega8 is only 10 bits and the servo position is also reported in 10 bits (0..1023) the remaining 950 values of the ADC have to be mapped onto the 1024 values of the servo position.
From talking to Robotis engineers and some experiments I found that this mapping does not seem to be linear.

Have you made similar experiments? And what are the results?
How do you cope with the non-linear mapping in the Robotis firmware, since your new sensor is probably linear?

Thanks by the way for offering your solution to others!
Have you already though about a price for the modding?

We are very sorry to hear that we wont see you at the German Open!
So best of luck with your preparations for Singapore!

Cheers,
Dorian
Doms offline
Newbie
Newbie
Posts: 5
Joined: Wed Oct 15, 2008 2:38 pm

Post by befi » Tue Jan 26, 2010 4:07 pm

Post by befi
Tue Jan 26, 2010 4:07 pm

Hi Dorian

It seems as you have also gone very far in analyzing the servos!

In fact there are two calibration methods inside the servo. One is the linear method you mentioned (using the UP und DOWN calibration and another hidden parameter), the other is a bit more complicated and is indeed not linear. AFAIK all our servos (RX-28 and RX-64) are using the non-linear method.

And you are right, the sensor from Austria Microsystems is linear. It does not offer a method for calibrating its charactaristic.
Because of that, we used a method to 'trick' the robotis calibration to work together with these sensors.

We haven't yet put a price tag on our modification as the price will depend a lot on the demand. But it will definetly be just a fraction of the price for a new servo.


We hope for you that there will be some interesting opponents for you at the German Open (even if the probability is fairly low... ). But I'm looking forward for our next encounter!


Bye,
Bennet.
Hi Dorian

It seems as you have also gone very far in analyzing the servos!

In fact there are two calibration methods inside the servo. One is the linear method you mentioned (using the UP und DOWN calibration and another hidden parameter), the other is a bit more complicated and is indeed not linear. AFAIK all our servos (RX-28 and RX-64) are using the non-linear method.

And you are right, the sensor from Austria Microsystems is linear. It does not offer a method for calibrating its charactaristic.
Because of that, we used a method to 'trick' the robotis calibration to work together with these sensors.

We haven't yet put a price tag on our modification as the price will depend a lot on the demand. But it will definetly be just a fraction of the price for a new servo.


We hope for you that there will be some interesting opponents for you at the German Open (even if the probability is fairly low... ). But I'm looking forward for our next encounter!


Bye,
Bennet.
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by befi » Fri Mar 12, 2010 12:52 pm

Post by befi
Fri Mar 12, 2010 12:52 pm

For the question about mounting the magnet on the shaft:

Image

The big one is for the RX64, the small one for the RX28.


I'm making the calibration software open source. This helps you to freely chose the middle-position of the servo and also the angular range.

In our experiments we saw that especially the original RX28 servos are very bad calibrated. The typical angular range error was about 25°.
By using our solution each servo behaves exactly like every other servo. They reach exactly the 300° angular range and keep it.
For the question about mounting the magnet on the shaft:

Image

The big one is for the RX64, the small one for the RX28.


I'm making the calibration software open source. This helps you to freely chose the middle-position of the servo and also the angular range.

In our experiments we saw that especially the original RX28 servos are very bad calibrated. The typical angular range error was about 25°.
By using our solution each servo behaves exactly like every other servo. They reach exactly the 300° angular range and keep it.
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by Bullit » Fri Mar 12, 2010 1:28 pm

Post by Bullit
Fri Mar 12, 2010 1:28 pm

Very interesting.
Please point us to your open source.
Very interesting.
Please point us to your open source.
Bullit offline
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 291
Joined: Wed May 31, 2006 1:00 am
Location: Near robot

Post by befi » Fri Mar 12, 2010 1:54 pm

Post by befi
Fri Mar 12, 2010 1:54 pm

Ok I think I wasn't clear enough. The calibration program only works with servos I have modified with the Austria Microsystems sensor. The program is completly useless for standard servos. Therefore I will only deliver it with the modified servos. For giving an impression how the calibration works:

Image

You set the servo position to 0, 511 and 1023 and note the respective angles. After that it's just a single click for calibrating the servo.
Ok I think I wasn't clear enough. The calibration program only works with servos I have modified with the Austria Microsystems sensor. The program is completly useless for standard servos. Therefore I will only deliver it with the modified servos. For giving an impression how the calibration works:

Image

You set the servo position to 0, 511 and 1023 and note the respective angles. After that it's just a single click for calibrating the servo.
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Post by Bullit » Fri Mar 12, 2010 2:02 pm

Post by Bullit
Fri Mar 12, 2010 2:02 pm

I would be interested in looking at your open source to better understand what it is you are doing.
I would be interested in looking at your open source to better understand what it is you are doing.
Bullit offline
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 291
Joined: Wed May 31, 2006 1:00 am
Location: Near robot

Post by befi » Fri Mar 12, 2010 2:55 pm

Post by befi
Fri Mar 12, 2010 2:55 pm

I won't publish it yet because there are some things to do. Mainly cleaning up the code and GUI. Maybe monday a version for publishing will be ready.
But for feeding your curiosity I post the interesting part:

Code: Select all
def write_calib_click(self, widget, data=None):
      DEG_PER_STEP = 360.0 / SENSOR_STEPS
      ANG_MES0 = float(self.p2ang0.get_text())
      ANG_MES1023 = float(self.p2ang1023.get_text())
      ANG_OFFSET_MES = float(self.p2midang.get_text())


      DEG_RANGE_MEASURED = ANG_MES1023 - ANG_MES0

      if DEG_RANGE_MEASURED < 0:
         DEG_RANGE_MEASURED += 360

      if DEG_RANGE_MEASURED < 200:
         dia = gtk.Dialog("Did you accidentally swap the two angles?")
         dia.add_button("Did you accidentally swap the two angles? (0 and 1023)", 0)
         dia.show()
         return

      DEG_RANGE_ERROR = DEG_RANGE_MEASURED - DEG_RANGE_WANTED

      STEP_RANGE_ERROR = DEG_RANGE_ERROR / 2 / DEG_PER_STEP


      CALIB_DOWN = int(CALIB_DOWN_DEFAULT + STEP_RANGE_ERROR)
      CALIB_UP = int(CALIB_UP_DEFAULT - STEP_RANGE_ERROR)
      CALIB_OFFSET = int(1024 - ANG_OFFSET_MES / DEG_PER_STEP)


      self.servo1.reset_servo()


      print "DEG_RANGE_MEASURED ", DEG_RANGE_MEASURED, " DEG_RANGE_ERROR ", DEG_RANGE_ERROR, " STEP_RANGE_ERROR", STEP_RANGE_ERROR, " CALIB_OFFSET ", CALIB_OFFSET
I won't publish it yet because there are some things to do. Mainly cleaning up the code and GUI. Maybe monday a version for publishing will be ready.
But for feeding your curiosity I post the interesting part:

Code: Select all
def write_calib_click(self, widget, data=None):
      DEG_PER_STEP = 360.0 / SENSOR_STEPS
      ANG_MES0 = float(self.p2ang0.get_text())
      ANG_MES1023 = float(self.p2ang1023.get_text())
      ANG_OFFSET_MES = float(self.p2midang.get_text())


      DEG_RANGE_MEASURED = ANG_MES1023 - ANG_MES0

      if DEG_RANGE_MEASURED < 0:
         DEG_RANGE_MEASURED += 360

      if DEG_RANGE_MEASURED < 200:
         dia = gtk.Dialog("Did you accidentally swap the two angles?")
         dia.add_button("Did you accidentally swap the two angles? (0 and 1023)", 0)
         dia.show()
         return

      DEG_RANGE_ERROR = DEG_RANGE_MEASURED - DEG_RANGE_WANTED

      STEP_RANGE_ERROR = DEG_RANGE_ERROR / 2 / DEG_PER_STEP


      CALIB_DOWN = int(CALIB_DOWN_DEFAULT + STEP_RANGE_ERROR)
      CALIB_UP = int(CALIB_UP_DEFAULT - STEP_RANGE_ERROR)
      CALIB_OFFSET = int(1024 - ANG_OFFSET_MES / DEG_PER_STEP)


      self.servo1.reset_servo()


      print "DEG_RANGE_MEASURED ", DEG_RANGE_MEASURED, " DEG_RANGE_ERROR ", DEG_RANGE_ERROR, " STEP_RANGE_ERROR", STEP_RANGE_ERROR, " CALIB_OFFSET ", CALIB_OFFSET
befi offline
Robot Builder
Robot Builder
Posts: 8
Joined: Mon Jan 25, 2010 8:47 pm

Next
Next
19 postsPage 1 of 21, 2
19 postsPage 1 of 21, 2
cron