USER FORUM

*(you are viewing a thread; or go back to
list of threads)*

**strandbeest incidental malformed legs**

*(by cmpxchg)*

Hi,

Attached an interactive 6 legged 'strandbeest' / theo janssen linkage made with solvespace 3.1. It can walk by draging the rotating the remaining DOF near center around the center, in any plane - very cool that this works in solvespace!

However, the third plane with last 2 legs, g007 has the same constraints, but was locked up due to unfavorable decisions during motion, made by the modified newton method solver that perhaps got a 'too large step' and then starting flipping things around.

Can my model be changed to prevent this ?

1) no software changes, just model changes

How could I add constraints to make this work favourabily?

2) thinking of software changes to solve this intuitively

Add new constraint types:

- A constraint for not-crossing-green helper lines in the 2D plane (tickbox for group?)

- Positive or negative angles in a plane, or a positive relation between two angles relative to a workplane in a 180-degree range ? Complex multiply two vectors with shared point, and check if result doesn't change sign etc...

I understand that the number 'dof' (degrees of freedom) might loose its current meaning, with such addition. Or is there another way or metric to describe this?

cmpxchg

Attached an interactive 6 legged 'strandbeest' / theo janssen linkage made with solvespace 3.1. It can walk by draging the rotating the remaining DOF near center around the center, in any plane - very cool that this works in solvespace!

However, the third plane with last 2 legs, g007 has the same constraints, but was locked up due to unfavorable decisions during motion, made by the modified newton method solver that perhaps got a 'too large step' and then starting flipping things around.

Can my model be changed to prevent this ?

1) no software changes, just model changes

How could I add constraints to make this work favourabily?

2) thinking of software changes to solve this intuitively

Add new constraint types:

- A constraint for not-crossing-green helper lines in the 2D plane (tickbox for group?)

- Positive or negative angles in a plane, or a positive relation between two angles relative to a workplane in a 180-degree range ? Complex multiply two vectors with shared point, and check if result doesn't change sign etc...

I understand that the number 'dof' (degrees of freedom) might loose its current meaning, with such addition. Or is there another way or metric to describe this?

cmpxchg

**(no subject)**

*(by Andrew)*

You could add linkages to limit the motion of a point. Two hinged lines, with one end anchored and the other attached to the point to be controlled limit its motion to the total length either side of the anchor.

Looking at the Strand beast, a ground line, and a lines between that and the feet to limit how far from the ground that the can go looks like it will solve your problem, by limiting the height the foot can reach.

That is linkages can be used as a control mechanisms for motion, without representing a component of the model.

Looking at the Strand beast, a ground line, and a lines between that and the feet to limit how far from the ground that the can go looks like it will solve your problem, by limiting the height the foot can reach.

That is linkages can be used as a control mechanisms for motion, without representing a component of the model.

**(no subject)**

*(by ruevs)*

**adding a no_crossed_helperlines constraint for the solver**

*(by cmpxchg)*

Perhaps another way of 'fixing' this is to make step-size of circle-dragged point smaller. A few other of solvespace peertube videos advise to drag slowly.

I see there is already some code that makes different solving decisions for dragged points:

System::SolveLeastSquares()

...

// Scale the columns; this scale weights the parameters for the least

// squares solve, so that we can encourage the solver to make bigger

// changes in some parameters, and smaller in others.

mat.scale = VectorXd::Ones(mat.n);

for(int c = 0; c < mat.n; c++) {

if(IsDragged(mat.param[c])) {

// It's least squares, so this parameter doesn't need to be all

// that big to get a large effect.

...

But ideally I would like the 'no_crossed_helperlines' a tickbox feature of each group, and adapt it. If I would attempt to code something like this, where should I begin?

I see there is already some code that makes different solving decisions for dragged points:

System::SolveLeastSquares()

...

// Scale the columns; this scale weights the parameters for the least

// squares solve, so that we can encourage the solver to make bigger

// changes in some parameters, and smaller in others.

mat.scale = VectorXd::Ones(mat.n);

for(int c = 0; c < mat.n; c++) {

if(IsDragged(mat.param[c])) {

// It's least squares, so this parameter doesn't need to be all

// that big to get a large effect.

...

But ideally I would like the 'no_crossed_helperlines' a tickbox feature of each group, and adapt it. If I would attempt to code something like this, where should I begin?

**Post a reply to this comment:**