AL5D real dimensions?

Hi,

I found online: https://community.robotshop.com/blog/show/how-to-choose-a-lynxmotion-robotic-arm and in some posts: Dimensions of the robotarm AL5D that the elbow to wrist dimension of the robot is 7.375" (18,7325cm). I build my own library with this information, and I was not able to get correct robot movements. I’m always few centimers off the destination point.

After trying with 2 different formulas I started to suspect the measurements and tried to figure them. Measuring the distance from the center of the axe nut on the elbow to the center of the axe nut on the wrist, with 2 different rulers, I find with both something around 18,3cm. The distance shoulder to elbow seems to be correct.

So I have 2 questions here.

  1. How is the 7.375" measured? Is that nut center to nut center?
  2. Is that possible that the documenter values are not accurate? Or can it come from the way I built the arm?

Thanks.

Another option is that my steps per degree is not correct. To have 15cm between the shoulder axe and the wrist axe, I need to have 52.79 degrees. To go from 0° to 90° we need 1000 steps. So we need 11.11 steps per degree. Means that to get a 52.79° angle on my elbow, I need to go 587 steps from the middle point. My middle point is not exactly 1500. It’s 1533. But when I ask the motor to go 1533+587 steps, the wrist comes less than 10cm from the shoulder.

Are all the motors doing 11.11 steps per degree? Or I should calibrate mine to figure how man steps per degree it does? I can move the elbow to 0° and 90° (I have a laser level to make sure I have pretty good angles), count the steps and figure the steps per degree?

Does the following image help? The dimensions are listed at the bottom.
Everything is measured from the center of each axis of rotation.
Can you provide a few photos of your arm? Do you have a wrist rotate servo?
If you have 3D CAD software, we offer the parts needed to create it virtually.

Regarding the motion, it’s critical that the servo be zeroed before it’s fixed to a bracket. Sending an all 1500us pulse should position the bracket between the shoulder and elbow perfectly vertically, and the brackets between the elbow and wrist perfectly horizontal. You can adjust the zeros via the SSC-32U and Lynxterm (or sending the proper offset commands). All servos used in the arm should provide 180 degrees of rotation for 2500us pulse range (from 500us to 2500us with 1500us as center). It sounds like the centers and offsets might be the issue.

Thanks for the reply cbenson. The picture indeed shows the length should be 7.375. So I tried to take a picture for you, and figure something. first, here are the pictures.


The first shows that I have a bit less that 18.5 cm. It’s a bit hard to hold the ruler in one hand and the phone in the other. So I’m not 100% sure about the accuracy.
Second pictures shows the arm. Overall, I think it does very well.

Now. What I figure is that if I measure from the other side of the arm, I’m way closer to the 18.7cm… Seems that I need to check some screws… So let’s park this aspect for now. Seems that I was the one being wrong (I was expecting that :wink: )

Regarding the offset position (33us in my case), I take care of that in my application. All movements are based of that position. Si I don’t do 1500 - angle but getMedianPosition(servo#) - angle. That way I don’t have to trigger the offset command every time I restart the robot (multiple times a day). I think at the end it’s the same. Might have been easier to do the offset, but all code is already done, so not a big deal.

Now, the question of the number of us per degree stays the same. 1000us for 90 degrees is 11.11us per degree. However I get way better accuracy with 10us per degree and I think it’s even more accurate with just a bit less. 9.51 seems to give me very precise distance. So what is the best number, and how do we find it? Does it depends on the servo? Is that linear?

Thanks.

That way I don’t have to trigger the offset command every time I restart the robot (multiple times a day)

You don’t actually need to do that if you write to the SSC-32U and Lynxterm as the offsets are stored in memory. Nevertheless, you’ve found a workable solution so no reason to change.

The relationship between the pulse width and the position is linear. However, keep in mind the arm uses hobby RC servos which incorporate a mechanical positiometer for tracking position. These are inexpensive and not highly accurate. Combined with the backlash in the gears, the load etc., the relationship is rarely 1:1, and often to see motion, you need to provide a decent change in pulse width. RC servos however are what have allowed such tabletop arms to be possible.

Thanks cbenson. This makes total sense. I figure that moving by 1us doesn’t always move the motor. So when I’m calibrating at 90°, I do that multiple times, starting once a 95°, once at 85°.

Also, regarding the accuracy of the 11.11us per degree, I did a calibration at 0°, one at 90° and indeed, seems that it’s not necessarely alway straight 11.11us.

With all those numbers adjusted, I have been able to position the arm +/- 2mm from where I want. It’s not bad at all! I will keep working on my calibration process to try to achieve +/1 mm position. Using a laser level for calibration helps A LOT to get a very nice accuracy! I just have one last challenge with the arm but I will start a different thread about it.