CutMount
Zero-clearance mount that rigidly constrains selected directions and prescribes zero reaction in the released ones.
Per direction (translations along the frame_a axes; rotations about the frame_a axes):
locked (default): kinematic constraint (zero relative motion), reaction unknown
released: the reaction component is prescribed to ZERO; the relative motion in that direction must be constrained by the rest of the mechanism — use only inside closed kinematic loops.
Release exactly the redundant reaction directions of a statically indeterminate mounting (cf. RevolutePlanarLoopConstraint): the released reactions are the self-equilibrating preload components of the redundant assembly, and zero is the correct value for a stress-free assembly.
Like RevolutePlanarLoopConstraint, this component does not propagate an orientation root: both frames must already be rooted via other paths. The relative coordinates of this mount cannot be initialized.
This component extends from PartialTwoFrames
Usage
MultibodyComponents.CutMount()
Parameters:
| Name | Description | Units | Default value |
|---|---|---|---|
x_locked | Lock relative translation along frame_a x | – | true |
y_locked | Lock relative translation along frame_a y | – | true |
z_locked | Lock relative translation along frame_a z | – | true |
rx_locked | Lock relative rotation about x | – | true |
ry_locked | Lock relative rotation about y | – | true |
rz_locked | Lock relative rotation about z | – | true |
Connectors
frame_a- Frame3D is the fundamental 3D connector used for 6DOF motion. Most components have one or severalFrame
connectors that can be connected together (Frame3D)
frame_b- Frame3D is the fundamental 3D connector used for 6DOF motion. Most components have one or severalFrame
connectors that can be connected together (Frame3D)
Variables
| Name | Description | Units |
|---|---|---|
r_rel_a | Relative position frame_a -> frame_b, resolved in frame_a | m |
res_rot | Orientation residues between frame_a and frame_b | – |
f_b_a | frame_b cut force resolved in frame_a | – |
Behavior
Dict{MIME{Symbol("text/plain")}, String} with 1 entry: MIME type text/plain => "Error displaying result"
Source
"""
Zero-clearance mount that rigidly constrains selected directions and prescribes
zero reaction in the released ones.
Per direction (translations along the frame_a axes; rotations about the frame_a
axes):
- locked (default): kinematic constraint (zero relative motion), reaction unknown
- released: the reaction component is prescribed to ZERO; the relative motion in
that direction must be constrained by the rest of the mechanism — use only
inside closed kinematic loops.
Release exactly the redundant reaction directions of a statically indeterminate
mounting (cf. `RevolutePlanarLoopConstraint`): the released reactions are the
self-equilibrating preload components of the redundant assembly, and zero is the
correct value for a stress-free assembly.
Like `RevolutePlanarLoopConstraint`, this component does not propagate an
orientation root: both frames must already be rooted via other paths. The
relative coordinates of this mount cannot be initialized.
"""
component CutMount
extends PartialTwoFrames()
"Lock relative translation along frame_a x"
structural parameter x_locked::Boolean = true
"Lock relative translation along frame_a y"
structural parameter y_locked::Boolean = true
"Lock relative translation along frame_a z"
structural parameter z_locked::Boolean = true
"Lock relative rotation about x"
structural parameter rx_locked::Boolean = true
"Lock relative rotation about y"
structural parameter ry_locked::Boolean = true
"Lock relative rotation about z"
structural parameter rz_locked::Boolean = true
"Relative position frame_a -> frame_b, resolved in frame_a"
variable r_rel_a::Position[3]
"Orientation residues between frame_a and frame_b"
variable res_rot::Real[3]
"frame_b cut force resolved in frame_a"
variable f_b_a::Real[3]
relations
r_rel_a = resolve2(frame_a.R, frame_b.r_0 - frame_a.r_0)
res_rot = residue(frame_a.R, frame_b.R)
f_b_a = resolve_relative(frame_b.f, frame_b.R, frame_a.R)
if x_locked
0 = r_rel_a[1]
else
0 = frame_a.f[1]
end
if y_locked
0 = r_rel_a[2]
else
0 = frame_a.f[2]
end
if z_locked
0 = r_rel_a[3]
else
0 = frame_a.f[3]
end
if rx_locked
0 = res_rot[1]
else
0 = frame_a.tau[1]
end
if ry_locked
0 = res_rot[2]
else
0 = frame_a.tau[2]
end
if rz_locked
0 = res_rot[3]
else
0 = frame_a.tau[3]
end
# Newton's third law across the (near-coincident) interface
[0, 0, 0] = frame_a.f + f_b_a
[0, 0, 0] = frame_a.tau + resolve_relative(frame_b.tau, frame_b.R, frame_a.R) + cross(r_rel_a, f_b_a)
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/CutMount.svg"}}}
endFlattened Source
"""
Zero-clearance mount that rigidly constrains selected directions and prescribes
zero reaction in the released ones.
Per direction (translations along the frame_a axes; rotations about the frame_a
axes):
- locked (default): kinematic constraint (zero relative motion), reaction unknown
- released: the reaction component is prescribed to ZERO; the relative motion in
that direction must be constrained by the rest of the mechanism — use only
inside closed kinematic loops.
Release exactly the redundant reaction directions of a statically indeterminate
mounting (cf. `RevolutePlanarLoopConstraint`): the released reactions are the
self-equilibrating preload components of the redundant assembly, and zero is the
correct value for a stress-free assembly.
Like `RevolutePlanarLoopConstraint`, this component does not propagate an
orientation root: both frames must already be rooted via other paths. The
relative coordinates of this mount cannot be initialized.
"""
component CutMount
frame_a = Frame3D() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": -50, "y1": 450, "x2": 50, "y2": 550, "rot": 0}
},
"tags": []
}
}
frame_b = Frame3D() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": 950, "y1": 450, "x2": 1050, "y2": 550, "rot": 0}
},
"tags": []
}
}
"Lock relative translation along frame_a x"
structural parameter x_locked::Boolean = true
"Lock relative translation along frame_a y"
structural parameter y_locked::Boolean = true
"Lock relative translation along frame_a z"
structural parameter z_locked::Boolean = true
"Lock relative rotation about x"
structural parameter rx_locked::Boolean = true
"Lock relative rotation about y"
structural parameter ry_locked::Boolean = true
"Lock relative rotation about z"
structural parameter rz_locked::Boolean = true
"Relative position frame_a -> frame_b, resolved in frame_a"
variable r_rel_a::Position[3]
"Orientation residues between frame_a and frame_b"
variable res_rot::Real[3]
"frame_b cut force resolved in frame_a"
variable f_b_a::Real[3]
relations
r_rel_a = resolve2(frame_a.R, frame_b.r_0 - frame_a.r_0)
res_rot = residue(frame_a.R, frame_b.R)
f_b_a = resolve_relative(frame_b.f, frame_b.R, frame_a.R)
if x_locked
0 = r_rel_a[1]
else
0 = frame_a.f[1]
end
if y_locked
0 = r_rel_a[2]
else
0 = frame_a.f[2]
end
if z_locked
0 = r_rel_a[3]
else
0 = frame_a.f[3]
end
if rx_locked
0 = res_rot[1]
else
0 = frame_a.tau[1]
end
if ry_locked
0 = res_rot[2]
else
0 = frame_a.tau[2]
end
if rz_locked
0 = res_rot[3]
else
0 = frame_a.tau[3]
end
# Newton's third law across the (near-coincident) interface
[0, 0, 0] = frame_a.f + f_b_a
[0, 0, 0] = frame_a.tau + resolve_relative(frame_b.tau, frame_b.R, frame_a.R) + cross(r_rel_a, f_b_a)
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/CutMount.svg"}}}
endTest Cases
No test cases defined.
Related
Examples
Experiments
Analyses