@@ -7,12 +7,48 @@ function PartialRelativeBaseSensor(; name)
77 equations = [frame_a. f .~ zeros (3 ) |> collect
88 frame_a. tau .~ zeros (3 ) |> collect
99 frame_b. f .~ zeros (3 ) |> collect
10- frame_b. tau .~ zeros (3 ) |> collect
11- frame_resolve. f .~ zeros (3 ) |> collect
12- frame_resolve. tau .~ zeros (3 ) |> collect]
10+ frame_b. tau .~ zeros (3 ) |> collect]
1311 compose (ODESystem (equations, t; name), frame_a, frame_b)
1412end
1513
14+ function BasicRelativePosition (; name, resolve_frame)
15+ @named prb = PartialRelativeBaseSensor ()
16+ @unpack frame_a, frame_b = prb
17+ systems = @named begin
18+ r_rel = RealOutput (nout = 3 )
19+ end
20+
21+ d = collect (frame_b. r_0 - frame_a. r_0)
22+ eqs = if resolve_frame === :frame_a
23+ collect (r_rel. u) .~ resolve2 (ori (frame_a), d)
24+ elseif resolve_frame === :frame_b
25+ collect (r_rel. u) .~ resolve2 (ori (frame_b), d)
26+ elseif resolve_frame === :world
27+ collect (r_rel. u) .~ d
28+ else
29+ error (" resolve_frame must be :world, :frame_a or :frame_b, you provided $resolve_frame , which makes me sad." )
30+ end
31+
32+ extend (compose (ODESystem (eqs, t; name), r_rel), prb)
33+ end
34+
35+ function RelativePosition (; name, resolve_frame = :frame_a )
36+
37+ systems = @named begin
38+ frame_a = Frame ()
39+ frame_b = Frame ()
40+ relativePosition = BasicRelativePosition (; resolve_frame)
41+ r_rel = RealOutput (nout = 3 )
42+ end
43+
44+ eqs = [
45+ connect (relativePosition. frame_a, frame_a)
46+ connect (relativePosition. frame_b, frame_b)
47+ connect (relativePosition. r_rel, r_rel)
48+ ]
49+ compose (ODESystem (eqs, t; name), frame_a, frame_b, r_rel, relativePosition)
50+ end
51+
1652function PartialAbsoluteSensor (; name, n_out)
1753 @named begin
1854 frame_a = Frame ()
@@ -82,17 +118,6 @@ function CutForce(; name, resolve_frame = :frame_a)
82118 extend (compose (ODESystem (eqs, t; name), force), pcfbs)
83119end
84120
85- function RelativePosition (; name, resolve_frame = :frame_a )
86- @named begin prs = PartialRelativeBaseSensor (; name) end
87-
88- @unpack frame_a, frame_b = prs
89-
90- equations = [frame_a. r_0 .~ frame_b. r_0 |> collect
91- ori (frame_a) ~ ori (frame_b)
92- zeros (3 ) .~ frame_a. r_0 - frame_b. r_0 |> collect]
93- extend (compose (ODESystem (equations, t; name), frame_a, frame_b), prs)
94- end
95-
96121function RelativeAngles (; name, sequence = [1 , 2 , 3 ])
97122 @named begin
98123 frame_a = Frame ()
0 commit comments