Niggle Build

Re: Niggle Build

Postby Niggle » Thu Jul 03, 2014 4:30 am

OK. I've read your code and I hope it works well for you.

Yes. The shoulder heights (and the max arm lengths) should be constants. However, Nicholas' segmentize script modifies them to compensate for calibration issues. I will make a trial print using direct measurements instead of calibration values sometime in the next few days (long weekends have to be good for something) and post the results. However, I want to see repeatable touch point coordinates first.
Niggle
 
Posts: 84
Joined: Tue Feb 11, 2014 7:27 pm

Re: Niggle Build

Postby machinofacture » Thu Jul 03, 2014 10:26 pm

Correct me if I am wrong.

As the system gets worn, the only things that will change are the max arm extension and steps/mm of arm extension. You might develop backlash in the system, but that should be eliminated by tightening the string as it gets stretched out, which might then change the steps/mm. Thus I don't really see a need for having the shoulder heights as parameters.

Do you have washers installed in the bolts that the strings go around? I found I needed this because my strings were getting stuck in the little indent between the smooth part of the bolt and the threaded part, which shows a bit outside the nuts. I have observed that if my strings fall into this indent, then they become a lot harder to turn around the bolt, and even rip. So having some washers there might be critical.
machinofacture
 
Posts: 20
Joined: Tue Jun 17, 2014 12:02 am

Re: Niggle Build

Postby Niggle » Thu Jul 03, 2014 11:46 pm

Assume that the spools are not perfectly round.

This means that the steps/mm is not a constant (there are other sources of error that add to this effect).

This in turn means that the set of touch points do not describe a flat surface. If you were to transform the coordinates into Cartesian coordinates, variations in z would be obvious. (I should do this in calibrate.py).

Nicholas uses leastsq() to come up with values for max_arm_length and shoulder_height that define a plane that comes close to touching all of the defined touch points. (I should log the z variations for this imaginary plane too)

Segmentize then transforms Cartesian coordinates from the g-codes into the appropriate arm lengths to build the object on the imaginary plane.

In my build, at Nicholas's recommendation, the string bolts have nyloc nuts with the nylon insert faced the unthreaded part of the bolt. This keeps the string away from the threads so there are no jamming or cutting issues and thus no need for washers.

Your code uses shoulder radius and wrist radius which seem to me to be fixed values and thus unnecessary parameters. :D
Niggle
 
Posts: 84
Joined: Tue Feb 11, 2014 7:27 pm

Re: Niggle Build

Postby Niggle » Fri Jul 04, 2014 3:50 am

@Nicholas HELP!

These are my points
Code: Select all
POINTS=[(137.7, 137.7, 137.7),
(142.1, 135, 135),
(135, 142, 135),
(135, 135, 141.4),
(125, 145, 140.2),
(140.2, 125, 145),
(145, 139.4, 125),
(145, 125, 140),
(138.6, 145, 125),
(125, 139.3, 145),]


I inserted the 'print Z' in equations() like so
Code: Select all
#GET VALUES FOR EACH POINT TO SEE HOW CLOSE TO THE PLANE IT IS
def equations(p):
    SHOULDER_Z1,SHOULDER_Z2,SHOULDER_Z3,MAX_LENGTH_1,MAX_LENGTH_2,MAX_LENGTH_3=p
    m=[]
    for i in range(len(POINTS)):
        R1,R2,R3=MAX_LENGTH_1-POINTS[i][0],MAX_LENGTH_2-POINTS[i][1],MAX_LENGTH_3-POINTS[i][2]
        X,Y,Z=getxyz(R1,R2,R3)
        print Z
        d=SIZE*1.0
        i=SIZE/2.0
        j=SIZE*math.sqrt(3)/2.0
        q=[[0,0,SHOULDER_Z1,1],
           [d,0,SHOULDER_Z2,1],
           [i,j,SHOULDER_Z3,1],
           [X,Y,Z,1]]
        det=numpy.linalg.det(q)
        m.append(det**2)
    return m


The first iteration produced
Code: Select all
79.1190663915
79.3159563924
79.8411618131
79.0895607081
79.4936306296
79.3229761047
78.9659088809
79.1190663915
79.3159563924
79.8411618131


The last iteration produced
Code: Select all
138.760743338
140.231680321
140.677055867
139.757830352
138.911446735
138.440001278
142.049805293
138.760724423
140.231661201
140.677037245

which seem absurd.

The resulting, equally absurd, calibration values are
137.142024857
130.690305944
166.586937728
333.104011948
321.574143786
360.339198029

My direct measurements are roughly 60, 60, 60, 290, 290, 290

Can you explain what is going on?
Niggle
 
Posts: 84
Joined: Tue Feb 11, 2014 7:27 pm

Re: Niggle Build

Postby Nicholas Seward » Fri Jul 04, 2014 4:05 am

The least squares method can go off the rails some times. What other initial values do you give it?
Nicholas Seward
 
Posts: 738
Joined: Mon Nov 25, 2013 10:41 pm

Re: Niggle Build

Postby Niggle » Fri Jul 04, 2014 3:04 pm

The standard defaults - 70,70,70,300,300,300
The measured values are
61.6, 64.5, 67.0, 293.95, 290.12, 295.97
Last edited by Niggle on Fri Jul 04, 2014 5:05 pm, edited 1 time in total.
Niggle
 
Posts: 84
Joined: Tue Feb 11, 2014 7:27 pm

Re: Niggle Build

Postby Nicholas Seward » Fri Jul 04, 2014 3:58 pm

Change them to your rough measurement. The algo is only capable of doing small tweaks.
Nicholas Seward
 
Posts: 738
Joined: Mon Nov 25, 2013 10:41 pm

Re: Niggle Build

Postby Nicholas Seward » Fri Jul 04, 2014 4:00 pm

That and you need to make sure you have the correct steps/mm for each arm before you try Segmentize. Good luck.
Nicholas Seward
 
Posts: 738
Joined: Mon Nov 25, 2013 10:41 pm

Re: Niggle Build

Postby machinofacture » Sat Jul 05, 2014 6:22 am

Niggle wrote:Your code uses shoulder radius and wrist radius which seem to me to be fixed values and thus unnecessary parameters


Yes they are fixed but if the radii are different for each arm, then it affects the kinematics. I have them set to being the same value (because that's what I measured), so in my code they don't end up affecting the kinematics.

I agree, shoulder heights would affect the kinematics as well, so I should have them in. But that means the calibration should affect all of those values; the wrist and shoulder radii as well as the shoulder heights. Actually the radii could potentially be combined into one "radius offset" parameter for each arm, to go with the "shoulder height" which actually incorporates the height of the shoulders AND wrist joints (aka, deviation from the plane on which the wrist joints should be)

I hope that makes sense.

Also, if the spools are not round then your calibration should produce some kind of non-linear function for steps/mm rather than changing the shoulder heights. As well as changing the shoulder heights, perhaps.
machinofacture
 
Posts: 20
Joined: Tue Jun 17, 2014 12:02 am

Re: Niggle Build

Postby Niggle » Sat Jul 05, 2014 2:38 pm

@machinofacture
I think that you have forgotten one of the basic rules of geometry.
GUS.png
GUS.png (10.98 KiB) Viewed 73464 times

The green triangle defined by the shoulder and wrist joints is identical to the blue triangle because the length of the arm is the same and the angle between the line from the shoulder pivot to the tip of the hot end and the line through the shoulder and wrist joints is the same.

Notice that the blue triangle removes shoulder radius and wrist radius from the equation.
Niggle
 
Posts: 84
Joined: Tue Feb 11, 2014 7:27 pm

PreviousNext

Return to GUS Simpson

Who is online

Users browsing this forum: No registered users and 2 guests

cron