@@ -7,12 +7,48 @@ function PartialRelativeBaseSensor(; name)
7
7
equations = [frame_a. f .~ zeros (3 ) |> collect
8
8
frame_a. tau .~ zeros (3 ) |> collect
9
9
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]
13
11
compose (ODESystem (equations, t; name), frame_a, frame_b)
14
12
end
15
13
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
+
16
52
function PartialAbsoluteSensor (; name, n_out)
17
53
@named begin
18
54
frame_a = Frame ()
@@ -82,17 +118,6 @@ function CutForce(; name, resolve_frame = :frame_a)
82
118
extend (compose (ODESystem (eqs, t; name), force), pcfbs)
83
119
end
84
120
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
-
96
121
function RelativeAngles (; name, sequence = [1 , 2 , 3 ])
97
122
@named begin
98
123
frame_a = Frame ()
0 commit comments