RelativeSensor
Combined, toggleable relative-motion sensor between two frame connectors.
r_rel/angles/w_rel are resolved directly in resolve_in_frame. v_rel/a_rel/z_rel are first differentiated in resolve_in_frame, then separately rotated into resolve_in_frame_after_differentiation (defaults to resolve_in_frame, i.e. a no-op rotation by default) – this differs from the standalone RelativeVelocity, which always differentiates in frame_a regardless of its own resolve_in_frame.
Usage
MultibodyComponents.RelativeSensor()
Parameters:
| Name | Description | Units | Default value |
|---|---|---|---|
resolve_in_frame | – | ResolveInFrame.FrameA() | |
resolve_in_frame_after_differentiation | Frame in which v_rel/a_rel/z_rel are resolved after differentiation | – | resolve_in_frame |
sequence | Axis sequence used for angles (only meaningful when get_angles = true) | – | [1, 2, 3] |
get_r_rel | Output the relative position r_rel | – | false |
get_v_rel | Output the relative velocity v_rel | – | false |
get_a_rel | Output the relative acceleration a_rel | – | false |
get_w_rel | Output the relative angular velocity w_rel | – | false |
get_z_rel | Output the relative angular acceleration z_rel | – | false |
get_angles | Output the relative Euler/Cardan angles | – | false |
need_pos | Whether the relative-position chain is needed by r_rel, v_rel, or a_rel | – | ((get_r_rel...(get_a_rel) |
need_angvel | Whether the relative-angular-velocity chain is needed by w_rel or z_rel | – | (get_w_rel)...(get_z_rel) |
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)
frame_resolve- Frame3D is the fundamental 3D connector used for 6DOF motion. Most components have one or severalFrame
connectors that can be connected together (Frame3D)
r_rel_x- This connector represents a real signal as an output from a component (RealOutput)r_rel_y- This connector represents a real signal as an output from a component (RealOutput)r_rel_z- This connector represents a real signal as an output from a component (RealOutput)v_rel_x- This connector represents a real signal as an output from a component (RealOutput)v_rel_y- This connector represents a real signal as an output from a component (RealOutput)v_rel_z- This connector represents a real signal as an output from a component (RealOutput)a_rel_x- This connector represents a real signal as an output from a component (RealOutput)a_rel_y- This connector represents a real signal as an output from a component (RealOutput)a_rel_z- This connector represents a real signal as an output from a component (RealOutput)w_rel_x- This connector represents a real signal as an output from a component (RealOutput)w_rel_y- This connector represents a real signal as an output from a component (RealOutput)w_rel_z- This connector represents a real signal as an output from a component (RealOutput)z_rel_x- This connector represents a real signal as an output from a component (RealOutput)z_rel_y- This connector represents a real signal as an output from a component (RealOutput)z_rel_z- This connector represents a real signal as an output from a component (RealOutput)angle_1- This connector represents a real signal as an output from a component (RealOutput)angle_2- This connector represents a real signal as an output from a component (RealOutput)angle_3- This connector represents a real signal as an output from a component (RealOutput)
Variables
| Name | Description | Units |
|---|---|---|
v_rel0_x | der(r_rel), resolved in resolve_in_frame (feeds v_rel and a_rel) | m/s |
v_rel0_y | m/s | |
v_rel0_z | m/s | |
a_rel0_x | der(v_rel0), resolved in resolve_in_frame | m/s2 |
a_rel0_y | m/s2 | |
a_rel0_z | m/s2 | |
z_rel0_x | der(w_rel), resolved in resolve_in_frame | rad/s2 |
z_rel0_y | rad/s2 | |
z_rel0_z | rad/s2 |
Behavior
Source
"""
Combined, toggleable relative-motion sensor between two frame connectors.
`r_rel`/`angles`/`w_rel` are resolved directly in `resolve_in_frame`.
`v_rel`/`a_rel`/`z_rel` are first differentiated in `resolve_in_frame`, then
separately rotated into `resolve_in_frame_after_differentiation` (defaults to
`resolve_in_frame`, i.e. a no-op rotation by default) -- this differs from the
standalone `RelativeVelocity`, which always differentiates in frame_a
regardless of its own `resolve_in_frame`.
"""
component RelativeSensor
frame_a = Frame3D() {
"Dyad": {"placement": {"diagram": {"x1": -50, "y1": 460, "x2": 50, "y2": 540}}}
}
frame_b = Frame3D() {
"Dyad": {"placement": {"diagram": {"x1": 950, "y1": 460, "x2": 1050, "y2": 540}}}
}
frame_resolve = Frame3D() if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve) {
"Dyad": {"placement": {"diagram": {"x1": 450, "y1": -50, "x2": 550, "y2": 50}}}
}
r_rel_x = RealOutput() if get_r_rel {
"Dyad": {
"placement": {"diagram": {"x1": 20, "y1": 950, "x2": 100, "y2": 1030, "rot": 90}}
}
}
r_rel_y = RealOutput() if get_r_rel {
"Dyad": {
"placement": {"diagram": {"x1": 20, "y1": 1030, "x2": 100, "y2": 1110, "rot": 90}}
}
}
r_rel_z = RealOutput() if get_r_rel {
"Dyad": {
"placement": {"diagram": {"x1": 20, "y1": 1110, "x2": 100, "y2": 1190, "rot": 90}}
}
}
v_rel_x = RealOutput() if get_v_rel {
"Dyad": {
"placement": {"diagram": {"x1": 190, "y1": 950, "x2": 270, "y2": 1030, "rot": 90}}
}
}
v_rel_y = RealOutput() if get_v_rel {
"Dyad": {
"placement": {"diagram": {"x1": 190, "y1": 1030, "x2": 270, "y2": 1110, "rot": 90}}
}
}
v_rel_z = RealOutput() if get_v_rel {
"Dyad": {
"placement": {"diagram": {"x1": 190, "y1": 1110, "x2": 270, "y2": 1190, "rot": 90}}
}
}
a_rel_x = RealOutput() if get_a_rel {
"Dyad": {
"placement": {"diagram": {"x1": 360, "y1": 950, "x2": 440, "y2": 1030, "rot": 90}}
}
}
a_rel_y = RealOutput() if get_a_rel {
"Dyad": {
"placement": {"diagram": {"x1": 360, "y1": 1030, "x2": 440, "y2": 1110, "rot": 90}}
}
}
a_rel_z = RealOutput() if get_a_rel {
"Dyad": {
"placement": {"diagram": {"x1": 360, "y1": 1110, "x2": 440, "y2": 1190, "rot": 90}}
}
}
w_rel_x = RealOutput() if get_w_rel {
"Dyad": {
"placement": {"diagram": {"x1": 530, "y1": 950, "x2": 610, "y2": 1030, "rot": 90}}
}
}
w_rel_y = RealOutput() if get_w_rel {
"Dyad": {
"placement": {"diagram": {"x1": 530, "y1": 1030, "x2": 610, "y2": 1110, "rot": 90}}
}
}
w_rel_z = RealOutput() if get_w_rel {
"Dyad": {
"placement": {"diagram": {"x1": 530, "y1": 1110, "x2": 610, "y2": 1190, "rot": 90}}
}
}
z_rel_x = RealOutput() if get_z_rel {
"Dyad": {
"placement": {"diagram": {"x1": 700, "y1": 950, "x2": 780, "y2": 1030, "rot": 90}}
}
}
z_rel_y = RealOutput() if get_z_rel {
"Dyad": {
"placement": {"diagram": {"x1": 700, "y1": 1030, "x2": 780, "y2": 1110, "rot": 90}}
}
}
z_rel_z = RealOutput() if get_z_rel {
"Dyad": {
"placement": {"diagram": {"x1": 700, "y1": 1110, "x2": 780, "y2": 1190, "rot": 90}}
}
}
angle_1 = RealOutput() if get_angles {
"Dyad": {
"placement": {"diagram": {"x1": 870, "y1": 950, "x2": 950, "y2": 1030, "rot": 90}}
}
}
angle_2 = RealOutput() if get_angles {
"Dyad": {
"placement": {"diagram": {"x1": 870, "y1": 1030, "x2": 950, "y2": 1110, "rot": 90}}
}
}
angle_3 = RealOutput() if get_angles {
"Dyad": {
"placement": {"diagram": {"x1": 870, "y1": 1110, "x2": 950, "y2": 1190, "rot": 90}}
}
}
rel_pos = RelativePosition(resolve_in_frame = resolve_in_frame) if need_pos {
"Dyad": {"placement": {"diagram": {"x1": 450, "x2": 550, "y1": 450, "y2": 550}}}
}
rel_angvel = RelativeAngularVelocity(resolve_in_frame = resolve_in_frame) if need_angvel {
"Dyad": {"placement": {"diagram": {"x1": 200, "x2": 300, "y1": 500, "y2": 600}}}
}
rel_ang = RelativeAngles(sequence = sequence) if get_angles {
"Dyad": {"placement": {"diagram": {"x1": 500, "x2": 600, "y1": 200, "y2": 300}}}
}
v_transform = TransformRelativeVector(frame_r_in = resolve_in_frame, frame_r_out = resolve_in_frame_after_differentiation) if get_v_rel {
"Dyad": {"placement": {"diagram": {"x1": 450, "x2": 550, "y1": 700, "y2": 800}}}
}
a_transform = TransformRelativeVector(frame_r_in = resolve_in_frame, frame_r_out = resolve_in_frame_after_differentiation) if get_a_rel {
"Dyad": {"placement": {"diagram": {"x1": 700, "x2": 800, "y1": 450, "y2": 550}}}
}
z_transform = TransformRelativeVector(frame_r_in = resolve_in_frame, frame_r_out = resolve_in_frame_after_differentiation) if get_z_rel {
"Dyad": {"placement": {"diagram": {"x1": 200, "x2": 300, "y1": 250, "y2": 350}}}
}
structural parameter resolve_in_frame::ResolveInFrame = ResolveInFrame.FrameA()
"Frame in which v_rel/a_rel/z_rel are resolved after differentiation"
structural parameter resolve_in_frame_after_differentiation::ResolveInFrame = resolve_in_frame
"Axis sequence used for `angles` (only meaningful when get_angles = true)"
structural parameter sequence::Integer[3] = [1, 2, 3]
"Output the relative position r_rel"
structural parameter get_r_rel::Boolean = false
"Output the relative velocity v_rel"
structural parameter get_v_rel::Boolean = false
"Output the relative acceleration a_rel"
structural parameter get_a_rel::Boolean = false
"Output the relative angular velocity w_rel"
structural parameter get_w_rel::Boolean = false
"Output the relative angular acceleration z_rel"
structural parameter get_z_rel::Boolean = false
"Output the relative Euler/Cardan angles"
structural parameter get_angles::Boolean = false
"Whether the relative-position chain is needed by r_rel, v_rel, or a_rel"
final structural parameter need_pos::Boolean = get_r_rel or get_v_rel or get_a_rel
"Whether the relative-angular-velocity chain is needed by w_rel or z_rel"
final structural parameter need_angvel::Boolean = get_w_rel or get_z_rel
"der(r_rel), resolved in resolve_in_frame (feeds v_rel and a_rel)"
variable v_rel0_x::Velocity if get_v_rel or get_a_rel
variable v_rel0_y::Velocity if get_v_rel or get_a_rel
variable v_rel0_z::Velocity if get_v_rel or get_a_rel
"der(v_rel0), resolved in resolve_in_frame"
variable a_rel0_x::Acceleration if get_a_rel
variable a_rel0_y::Acceleration if get_a_rel
variable a_rel0_z::Acceleration if get_a_rel
"der(w_rel), resolved in resolve_in_frame"
variable z_rel0_x::AngularAcceleration if get_z_rel
variable z_rel0_y::AngularAcceleration if get_z_rel
variable z_rel0_z::AngularAcceleration if get_z_rel
relations
if need_pos
connect(frame_a, rel_pos.frame_a)
connect(frame_b, rel_pos.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve)
connect(frame_resolve, rel_pos.frame_resolve)
end
end
if get_r_rel
r_rel_x = rel_pos.r_rel_x
r_rel_y = rel_pos.r_rel_y
r_rel_z = rel_pos.r_rel_z
end
if need_angvel
connect(frame_a, rel_angvel.frame_a)
connect(frame_b, rel_angvel.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve)
connect(frame_resolve, rel_angvel.frame_resolve)
end
end
if get_w_rel
w_rel_x = rel_angvel.w_rel_x
w_rel_y = rel_angvel.w_rel_y
w_rel_z = rel_angvel.w_rel_z
end
if get_angles
connect(frame_a, rel_ang.frame_a)
connect(frame_b, rel_ang.frame_b)
angle_1 = rel_ang.angle_1
angle_2 = rel_ang.angle_2
angle_3 = rel_ang.angle_3
end
if get_v_rel or get_a_rel
v_rel0_x = der(rel_pos.r_rel_x)
v_rel0_y = der(rel_pos.r_rel_y)
v_rel0_z = der(rel_pos.r_rel_z)
end
if get_v_rel
connect(frame_a, v_transform.frame_a)
connect(frame_b, v_transform.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve)
connect(frame_resolve, v_transform.frame_resolve)
end
v_transform.r_in_x = v_rel0_x
v_transform.r_in_y = v_rel0_y
v_transform.r_in_z = v_rel0_z
v_rel_x = v_transform.r_out_x
v_rel_y = v_transform.r_out_y
v_rel_z = v_transform.r_out_z
end
if get_a_rel
a_rel0_x = der(v_rel0_x)
a_rel0_y = der(v_rel0_y)
a_rel0_z = der(v_rel0_z)
connect(frame_a, a_transform.frame_a)
connect(frame_b, a_transform.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve)
connect(frame_resolve, a_transform.frame_resolve)
end
a_transform.r_in_x = a_rel0_x
a_transform.r_in_y = a_rel0_y
a_transform.r_in_z = a_rel0_z
a_rel_x = a_transform.r_out_x
a_rel_y = a_transform.r_out_y
a_rel_z = a_transform.r_out_z
end
if get_z_rel
z_rel0_x = der(rel_angvel.w_rel_x)
z_rel0_y = der(rel_angvel.w_rel_y)
z_rel0_z = der(rel_angvel.w_rel_z)
connect(frame_a, z_transform.frame_a)
connect(frame_b, z_transform.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve)
connect(frame_resolve, z_transform.frame_resolve)
end
z_transform.r_in_x = z_rel0_x
z_transform.r_in_y = z_rel0_y
z_transform.r_in_z = z_rel0_z
z_rel_x = z_transform.r_out_x
z_rel_y = z_transform.r_out_y
z_rel_z = z_transform.r_out_z
end
metadata {
"Dyad": {
"icons": {"default": "dyad://MultibodyComponents/TwoFrameSensor.svg"},
"labels": [
{
"label": "$(instance)",
"x": 500,
"y": 150,
"rot": 0,
"attrs": {"font-size": "140"}
},
{"label": "rel sensor", "x": 500, "y": 680, "rot": 0}
]
}
}
endFlattened Source
"""
Combined, toggleable relative-motion sensor between two frame connectors.
`r_rel`/`angles`/`w_rel` are resolved directly in `resolve_in_frame`.
`v_rel`/`a_rel`/`z_rel` are first differentiated in `resolve_in_frame`, then
separately rotated into `resolve_in_frame_after_differentiation` (defaults to
`resolve_in_frame`, i.e. a no-op rotation by default) -- this differs from the
standalone `RelativeVelocity`, which always differentiates in frame_a
regardless of its own `resolve_in_frame`.
"""
component RelativeSensor
frame_a = Frame3D() {
"Dyad": {"placement": {"diagram": {"x1": -50, "y1": 460, "x2": 50, "y2": 540}}}
}
frame_b = Frame3D() {
"Dyad": {"placement": {"diagram": {"x1": 950, "y1": 460, "x2": 1050, "y2": 540}}}
}
frame_resolve = Frame3D() if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve) {
"Dyad": {"placement": {"diagram": {"x1": 450, "y1": -50, "x2": 550, "y2": 50}}}
}
r_rel_x = RealOutput() if get_r_rel {
"Dyad": {
"placement": {"diagram": {"x1": 20, "y1": 950, "x2": 100, "y2": 1030, "rot": 90}}
}
}
r_rel_y = RealOutput() if get_r_rel {
"Dyad": {
"placement": {"diagram": {"x1": 20, "y1": 1030, "x2": 100, "y2": 1110, "rot": 90}}
}
}
r_rel_z = RealOutput() if get_r_rel {
"Dyad": {
"placement": {"diagram": {"x1": 20, "y1": 1110, "x2": 100, "y2": 1190, "rot": 90}}
}
}
v_rel_x = RealOutput() if get_v_rel {
"Dyad": {
"placement": {"diagram": {"x1": 190, "y1": 950, "x2": 270, "y2": 1030, "rot": 90}}
}
}
v_rel_y = RealOutput() if get_v_rel {
"Dyad": {
"placement": {"diagram": {"x1": 190, "y1": 1030, "x2": 270, "y2": 1110, "rot": 90}}
}
}
v_rel_z = RealOutput() if get_v_rel {
"Dyad": {
"placement": {"diagram": {"x1": 190, "y1": 1110, "x2": 270, "y2": 1190, "rot": 90}}
}
}
a_rel_x = RealOutput() if get_a_rel {
"Dyad": {
"placement": {"diagram": {"x1": 360, "y1": 950, "x2": 440, "y2": 1030, "rot": 90}}
}
}
a_rel_y = RealOutput() if get_a_rel {
"Dyad": {
"placement": {"diagram": {"x1": 360, "y1": 1030, "x2": 440, "y2": 1110, "rot": 90}}
}
}
a_rel_z = RealOutput() if get_a_rel {
"Dyad": {
"placement": {"diagram": {"x1": 360, "y1": 1110, "x2": 440, "y2": 1190, "rot": 90}}
}
}
w_rel_x = RealOutput() if get_w_rel {
"Dyad": {
"placement": {"diagram": {"x1": 530, "y1": 950, "x2": 610, "y2": 1030, "rot": 90}}
}
}
w_rel_y = RealOutput() if get_w_rel {
"Dyad": {
"placement": {"diagram": {"x1": 530, "y1": 1030, "x2": 610, "y2": 1110, "rot": 90}}
}
}
w_rel_z = RealOutput() if get_w_rel {
"Dyad": {
"placement": {"diagram": {"x1": 530, "y1": 1110, "x2": 610, "y2": 1190, "rot": 90}}
}
}
z_rel_x = RealOutput() if get_z_rel {
"Dyad": {
"placement": {"diagram": {"x1": 700, "y1": 950, "x2": 780, "y2": 1030, "rot": 90}}
}
}
z_rel_y = RealOutput() if get_z_rel {
"Dyad": {
"placement": {"diagram": {"x1": 700, "y1": 1030, "x2": 780, "y2": 1110, "rot": 90}}
}
}
z_rel_z = RealOutput() if get_z_rel {
"Dyad": {
"placement": {"diagram": {"x1": 700, "y1": 1110, "x2": 780, "y2": 1190, "rot": 90}}
}
}
angle_1 = RealOutput() if get_angles {
"Dyad": {
"placement": {"diagram": {"x1": 870, "y1": 950, "x2": 950, "y2": 1030, "rot": 90}}
}
}
angle_2 = RealOutput() if get_angles {
"Dyad": {
"placement": {"diagram": {"x1": 870, "y1": 1030, "x2": 950, "y2": 1110, "rot": 90}}
}
}
angle_3 = RealOutput() if get_angles {
"Dyad": {
"placement": {"diagram": {"x1": 870, "y1": 1110, "x2": 950, "y2": 1190, "rot": 90}}
}
}
rel_pos = RelativePosition(resolve_in_frame = resolve_in_frame) if need_pos {
"Dyad": {"placement": {"diagram": {"x1": 450, "x2": 550, "y1": 450, "y2": 550}}}
}
rel_angvel = RelativeAngularVelocity(resolve_in_frame = resolve_in_frame) if need_angvel {
"Dyad": {"placement": {"diagram": {"x1": 200, "x2": 300, "y1": 500, "y2": 600}}}
}
rel_ang = RelativeAngles(sequence = sequence) if get_angles {
"Dyad": {"placement": {"diagram": {"x1": 500, "x2": 600, "y1": 200, "y2": 300}}}
}
v_transform = TransformRelativeVector(frame_r_in = resolve_in_frame, frame_r_out = resolve_in_frame_after_differentiation) if get_v_rel {
"Dyad": {"placement": {"diagram": {"x1": 450, "x2": 550, "y1": 700, "y2": 800}}}
}
a_transform = TransformRelativeVector(frame_r_in = resolve_in_frame, frame_r_out = resolve_in_frame_after_differentiation) if get_a_rel {
"Dyad": {"placement": {"diagram": {"x1": 700, "x2": 800, "y1": 450, "y2": 550}}}
}
z_transform = TransformRelativeVector(frame_r_in = resolve_in_frame, frame_r_out = resolve_in_frame_after_differentiation) if get_z_rel {
"Dyad": {"placement": {"diagram": {"x1": 200, "x2": 300, "y1": 250, "y2": 350}}}
}
structural parameter resolve_in_frame::ResolveInFrame = ResolveInFrame.FrameA()
"Frame in which v_rel/a_rel/z_rel are resolved after differentiation"
structural parameter resolve_in_frame_after_differentiation::ResolveInFrame = resolve_in_frame
"Axis sequence used for `angles` (only meaningful when get_angles = true)"
structural parameter sequence::Integer[3] = [1, 2, 3]
"Output the relative position r_rel"
structural parameter get_r_rel::Boolean = false
"Output the relative velocity v_rel"
structural parameter get_v_rel::Boolean = false
"Output the relative acceleration a_rel"
structural parameter get_a_rel::Boolean = false
"Output the relative angular velocity w_rel"
structural parameter get_w_rel::Boolean = false
"Output the relative angular acceleration z_rel"
structural parameter get_z_rel::Boolean = false
"Output the relative Euler/Cardan angles"
structural parameter get_angles::Boolean = false
"Whether the relative-position chain is needed by r_rel, v_rel, or a_rel"
final structural parameter need_pos::Boolean = get_r_rel or get_v_rel or get_a_rel
"Whether the relative-angular-velocity chain is needed by w_rel or z_rel"
final structural parameter need_angvel::Boolean = get_w_rel or get_z_rel
"der(r_rel), resolved in resolve_in_frame (feeds v_rel and a_rel)"
variable v_rel0_x::Velocity if get_v_rel or get_a_rel
variable v_rel0_y::Velocity if get_v_rel or get_a_rel
variable v_rel0_z::Velocity if get_v_rel or get_a_rel
"der(v_rel0), resolved in resolve_in_frame"
variable a_rel0_x::Acceleration if get_a_rel
variable a_rel0_y::Acceleration if get_a_rel
variable a_rel0_z::Acceleration if get_a_rel
"der(w_rel), resolved in resolve_in_frame"
variable z_rel0_x::AngularAcceleration if get_z_rel
variable z_rel0_y::AngularAcceleration if get_z_rel
variable z_rel0_z::AngularAcceleration if get_z_rel
relations
if need_pos
connect(frame_a, rel_pos.frame_a)
connect(frame_b, rel_pos.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve)
connect(frame_resolve, rel_pos.frame_resolve)
end
end
if get_r_rel
r_rel_x = rel_pos.r_rel_x
r_rel_y = rel_pos.r_rel_y
r_rel_z = rel_pos.r_rel_z
end
if need_angvel
connect(frame_a, rel_angvel.frame_a)
connect(frame_b, rel_angvel.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve)
connect(frame_resolve, rel_angvel.frame_resolve)
end
end
if get_w_rel
w_rel_x = rel_angvel.w_rel_x
w_rel_y = rel_angvel.w_rel_y
w_rel_z = rel_angvel.w_rel_z
end
if get_angles
connect(frame_a, rel_ang.frame_a)
connect(frame_b, rel_ang.frame_b)
angle_1 = rel_ang.angle_1
angle_2 = rel_ang.angle_2
angle_3 = rel_ang.angle_3
end
if get_v_rel or get_a_rel
v_rel0_x = der(rel_pos.r_rel_x)
v_rel0_y = der(rel_pos.r_rel_y)
v_rel0_z = der(rel_pos.r_rel_z)
end
if get_v_rel
connect(frame_a, v_transform.frame_a)
connect(frame_b, v_transform.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve)
connect(frame_resolve, v_transform.frame_resolve)
end
v_transform.r_in_x = v_rel0_x
v_transform.r_in_y = v_rel0_y
v_transform.r_in_z = v_rel0_z
v_rel_x = v_transform.r_out_x
v_rel_y = v_transform.r_out_y
v_rel_z = v_transform.r_out_z
end
if get_a_rel
a_rel0_x = der(v_rel0_x)
a_rel0_y = der(v_rel0_y)
a_rel0_z = der(v_rel0_z)
connect(frame_a, a_transform.frame_a)
connect(frame_b, a_transform.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve)
connect(frame_resolve, a_transform.frame_resolve)
end
a_transform.r_in_x = a_rel0_x
a_transform.r_in_y = a_rel0_y
a_transform.r_in_z = a_rel0_z
a_rel_x = a_transform.r_out_x
a_rel_y = a_transform.r_out_y
a_rel_z = a_transform.r_out_z
end
if get_z_rel
z_rel0_x = der(rel_angvel.w_rel_x)
z_rel0_y = der(rel_angvel.w_rel_y)
z_rel0_z = der(rel_angvel.w_rel_z)
connect(frame_a, z_transform.frame_a)
connect(frame_b, z_transform.frame_b)
if case(resolve_in_frame, ResolveInFrame.FrameResolve) or case(resolve_in_frame_after_differentiation, ResolveInFrame.FrameResolve)
connect(frame_resolve, z_transform.frame_resolve)
end
z_transform.r_in_x = z_rel0_x
z_transform.r_in_y = z_rel0_y
z_transform.r_in_z = z_rel0_z
z_rel_x = z_transform.r_out_x
z_rel_y = z_transform.r_out_y
z_rel_z = z_transform.r_out_z
end
metadata {
"Dyad": {
"icons": {"default": "dyad://MultibodyComponents/TwoFrameSensor.svg"},
"labels": [
{
"label": "$(instance)",
"x": 500,
"y": 150,
"rot": 0,
"attrs": {"font-size": "140"}
},
{"label": "rel sensor", "x": 500, "y": 680, "rot": 0}
]
}
}
endTest Cases
No test cases defined.
Related
Examples
Experiments
Analyses