<InPhase>
peeps[zen]: To be used with View, Animate.
<InPhase>
peeps[zen]: Essentially, rather than do the hard math, just let the language do the work.
<peeps[zen]>
nice, very concise. but its only for robot arm style or "chain-like" linkages, where one end is fixed. the challenge would be something that understands arbitrary links between movable parts
<InPhase>
It follows the same recursive principle of course, just with some other cases to support.
<peeps[zen]>
how do you recurse through a linkage with potential loops?
<InPhase>
Including axial rotational joints (wrists), that's just one more case. The logic works from the outside in.
<InPhase>
Well this is not for loops.
<peeps[zen]>
right, its for chains only
<peeps[zen]>
or directed graph more technically?
<peeps[zen]>
directed acyclic graph
<InPhase>
The problem with loops is that to do it, you need to define what's a driver angle and what the free-floating angles are.
<InPhase>
And if you do too many free-floating angles, it's not single-valued.
<InPhase>
For some of those the value is only defined as a function of the history.
<InPhase>
Sometimes you need inertia tracking, for example, to get the valid value.
<peeps[zen]>
er, i guess not DAGs but only trees, if making analogies to graph theory
<InPhase>
So it becomes viable when you lock down the constraints a little better. :)
<peeps[zen]>
as a first step, i was trying to think if i could calculate the degrees of freedom which some arbitrary planar linkage system would have
<peeps[zen]>
InPhase: inertia tracking sounds like something that would be necessary only if the system exhibited some singularity
<ali1234>
if you have linkages between multiple objects and nothing is fixed, that's rigid body dynamics
<ali1234>
aka "game engine physics"
<peeps[zen]>
i think i would require at least one fixed point for a connected system
<ali1234>
and we know how notorious those are for exploding and just generally acting weird
<ali1234>
having a fixed point makes it much simpler
<ali1234>
then it is just IK
<peeps[zen]>
is it inverse though?
<ali1234>
well, it's like scope said
<ali1234>
it's inverse if you know where you want the not-fixed end to be, and you want to calculate all the rotations required to get there
<peeps[zen]>
right, i want to be able to input an angle to some linkage as a function of $t and just draw where the effector goes.
<ali1234>
well that's just a matter of nesting the transformations, which is easy in openscad
<ali1234>
or any 3d tool really
<peeps[zen]>
no i need to solve if the motion is constrained by some of the linkages though
<ali1234>
constrained by the environment, or by the range of motion?
<peeps[zen]>
and some systems may be more than a single input angle
<peeps[zen]>
range of motion
<ali1234>
so you just clamp the input to the range
<ali1234>
or raise/return an error if it is out of range
<ali1234>
hmm okay this is a bit more complicated because it isn't a tree :)
<peeps[zen]>
that's what I've been saying!
<ali1234>
for this you do need a solver similar to what IK does
<ali1234>
an important point about that example is that it has multiple results depending on the starting configuration
<ali1234>
for example the rotation around A can be anything as shown in the image
<ali1234>
but the rotation shown at B isn't the full story, C could go down, which would make another, disconnected pink blob
<ali1234>
there is no way to move between those configurations. and they can even overlap
ur5us has quit [Ping timeout: 250 seconds]
LordOfBikes has quit [Ping timeout: 250 seconds]
walterwhip has joined #openscad
LordOfBikes has joined #openscad
ur5us has joined #openscad
<InPhase>
peeps[zen]: For the example in your last link, that's fairly well constrained because position D is direct from the rotation, but in fact, point C is double-valued. You have to additionally constrain it to only be above AB. If it starts above AB, it can never move below, but if it starts below, it can never move above (i.e., history matters).
<InPhase>
peeps[zen]: Hopefully that illustrates what I was trying to say above about needing a way to specify additional constraints. This will impede the desire to make a fully generalized solution in a history-free language.
<InPhase>
You can still do it, but you need some probably sloppy way to write it out, or your generalization will involve something like function literals so you can process those sorts of constraints.
lf94 has left #openscad [WeeChat 3.5]
lf94 has joined #openscad
walterwhip has quit [Quit: My MacBook Air has gone to sleep. ZZZzzz…]
<peeps[zen]>
there's also a link to some python code which I haven't tried yet
<InPhase>
That will do it for some arrangements.
<InPhase>
It will fail you for complicated assemblies where the consistent trajectory case flips between those conditions because the whole apparatus to which it must be applied is rotating around due to motion of the pieces to which it is attached.
<InPhase>
But again, whenever you lock down the problem space, it gets easier to specify.
<InPhase>
Also, that's a very nice looking walker. :)
<teepee>
joseph_: how's the dev env working? do you think it makes sense to integrate this into the main docker repo, or maybe have a separate pointer to this setup?
juri_ has quit [Ping timeout: 250 seconds]
<joseph_>
teepee: Thanks for asking. Actually I have encountered one issue so far. Upon previewing/rendering any model, I get "ERROR: boost::filesystem::create_directories: Invalid argument\nWARNING: Cannot create backup path:"
<teepee>
hmm, that uses the XDG setup, maybe that's not configured
<teepee>
ah, no, just using $HOME
peepsalot has joined #openscad
<joseph_>
teepee: I have a partial memory that maybe I dealt with this type of issue before in a different project. But I do not remember the solution. Perhaps it was a package to install inside the container, or a new volume that needs to be created. The error does not prevent rendering, but we would want to fix it before making my configuration official
<Scopeuk>
worth checking the enviroment has set up a home enviromental variable?
<peepsalot>
joseph_: backups go into the path ~/.local/share/OpenSCAD/backups
<peepsalot>
i would guess there's some permissions issue involved. eg you ran it as root once, then not as root
<teepee>
right, it could be either missing $HOME or permissing problem
<peepsalot>
1. see if that path exists, 2. see who owns it and what the permissions are
<teepee>
if the env variable is not set, it might try to use /.local/... which would be a problem
<peepsalot>
or maybe [working directory]/.local ? just a wild guess
juri_ has joined #openscad
ali1234 has quit [Remote host closed the connection]
ali1234 has joined #openscad
snakedGT has joined #openscad
snaked has quit [Read error: Connection reset by peer]