Relative kinematic quantities between frame_a and frame_b are determined and provided at the output signal connector y in packed format in the order
For example, if parameters get_v_rel and get_w_rel are true and all other get_XXX parameters are false, then y contains 6 elements:
y = relative velocity y = relative angular velocity
In the following figure the animation of a RelativeSensor component is shown. The light blue coordinate system is frame_a, the dark blue coordinate system is frame_b, and the yellow arrow is the animated sensor.
If parameter resolveInFrame_a = true, then the provided relative kinematic vectors of frame_b with respect to frame_a are resolved before differentiation in frame_a. If this parameter is false, the relative kinematic vectors are resolved before differentiation in frame_b. If frame_resolve is connected to another frame, then the kinematic vector as defined above and/or its required derivatives are resolved in frame_resolve. Note, derivatives of relative kinematic quantities are always performed with respect to frame_a (resolveInFrame_a = true) or with respect to frame_b (resolveInFrame_a = false). The resulting vector is then resolved in frame_resolve, if this connector is connected.
For example, if frame_resolve is not connected and if resolveInFrame_a = false, and get_v = true, then
y = v_rel = der(r_rel)
is returned (r_rel = resolve2(frame_b.R, frame_b.r_0 - frame_a.r0)), i.e., the derivative of the relative distance from frame_a to frame_b, resolved in frame_b. If frame_resolve is connected, then
y = v_rel = resolve2(frame_resolve.R, der(r_rel))
is returned, i.e., the previous relative velocity vector is additionally resolved in frame_resolve.
Note, the cut-force and the cut-torque in frame_resolve are always zero, whether frame_resolve is connected or not.
If get_angles = true, the 3 angles to rotate frame_a into frame_b along the axes defined by parameter sequence are returned. For example, if sequence = {3,1,2} then frame_a is rotated around angles[1] along the z-axis, afterwards it is rotated around angles[2] along the x-axis, and finally it is rotated around angles[3] along the y-axis and is then identical to frame_b. The 3 angles are returned in the range
-p <= angles[i] <= p
There are two solutions for "angles[1]" in this range. Via parameter guessAngle1 (default = 0) the returned solution is selected such that |angles[1] - guessAngle1| is minimal. The relative transformation matrix between frame_a and frame_b may be in a singular configuration with respect to "sequence", i.e., there is an infinite number of angle values leading to the same relative transformation matrix. In this case, the returned solution is selected by setting angles[1] = guessAngle1. Then angles[2] and angles[3] can be uniquely determined in the above range.
Note, that parameter sequence has the restriction that only values 1,2,3 can be used and that sequence[1] ≠ sequence[2] and sequence[2] ≠ sequence[3]. Often used values are:
sequence = {1,2,3} // Cardan angle sequence = {3,1,3} // Euler angle sequence = {3,2,1} // Tait-Bryan angle sequence
Exact definition of the returned quantities (r_rel_ab, R_rel_ab, w_rel_ab are defined below the enumeration):
using the auxiliary quantities
and resolved in the following frame
frame_resolve is | resolveInFrame_a = | vector is resolved in |
---|---|---|
connected | true | frame_resolve |
connected | false | frame_resolve |
not connected | true | frame_a |
not connected | false | frame_b |