|
79 | 79 | connect(fixed.frame, revolute.frame_a), |
80 | 80 | connect(revolute.frame_b, fixed_translation.frame_a), |
81 | 81 | connect(fixed_translation.frame_b, body.frame), |
82 | | - connect(abs_pos_sensor.frame_a, body.frame), |
83 | | - # TODO: the following equations shouldn't be necessary |
84 | | - body.ω ~ revolute.ω, |
85 | | - fixed.frame.fy ~ -body.fy, |
86 | | - fixed.frame.fx ~ -body.fx, |
| 82 | + connect_sensor(abs_pos_sensor.frame_a, body.frame)..., |
87 | 83 | ] |
88 | 84 |
|
89 | 85 | @named model = ODESystem(eqs, |
|
98 | 94 | abs_pos_sensor, |
99 | 95 | ]) |
100 | 96 | sys = structural_simplify(model) |
101 | | - prob = ODEProblem(sys, [0.0], tspan, []; jac = true) |
| 97 | + u0 = [0.0, ω, 0.0] |
| 98 | + prob = ODEProblem(sys, u0, tspan, []; jac = true) |
102 | 99 | sol = solve(prob, Rodas5P()) |
103 | 100 |
|
104 | 101 | # phi |
@@ -135,22 +132,21 @@ end |
135 | 132 | @named rel_a_sensor2 = RelativeAcceleration(; resolve_in_frame) |
136 | 133 |
|
137 | 134 | connections = [ |
138 | | - connect(body1.frame, abs_pos_sensor.frame_a), |
139 | | - connect(abs_v_sensor.frame_a, body1.frame), |
140 | | - connect(abs_a_sensor.frame_a, body1.frame), |
141 | | - connect(rel_pos_sensor1.frame_a, body1.frame), |
142 | | - connect(rel_v_sensor1.frame_a, body1.frame), |
143 | | - connect(rel_pos_sensor1.frame_b, base.frame), |
144 | | - connect(rel_v_sensor1.frame_b, base.frame), |
145 | | - connect(rel_pos_sensor2.frame_b, body1.frame), |
146 | | - connect(rel_v_sensor2.frame_b, body1.frame), |
147 | | - connect(rel_pos_sensor2.frame_a, body2.frame), |
148 | | - connect(rel_v_sensor2.frame_a, body2.frame), |
149 | | - connect(rel_a_sensor1.frame_a, body1.frame), |
150 | | - connect(rel_a_sensor1.frame_b, base.frame), |
151 | | - connect(rel_a_sensor2.frame_a, body1.frame), |
152 | | - connect(rel_a_sensor2.frame_b, body2.frame), |
153 | | - [s ~ 0 for s in (body1.phi, body2.phi, body1.fx, body1.fy, body2.fx, body2.fy)]..., |
| 135 | + connect_sensor(body1.frame, abs_pos_sensor.frame_a)..., |
| 136 | + connect_sensor(body1.frame, abs_v_sensor.frame_a)..., |
| 137 | + connect_sensor(body1.frame, abs_a_sensor.frame_a)..., |
| 138 | + connect_sensor(body1.frame, rel_pos_sensor1.frame_a)..., |
| 139 | + connect_sensor(base.frame, rel_pos_sensor1.frame_b)..., |
| 140 | + connect_sensor(body1.frame, rel_pos_sensor2.frame_a)..., |
| 141 | + connect_sensor(body2.frame, rel_pos_sensor2.frame_b)..., |
| 142 | + connect_sensor(base.frame, rel_v_sensor1.frame_a)..., |
| 143 | + connect_sensor(body1.frame, rel_v_sensor1.frame_b)..., |
| 144 | + connect_sensor(body1.frame, rel_v_sensor2.frame_a)..., |
| 145 | + connect_sensor(body2.frame, rel_v_sensor2.frame_b)..., |
| 146 | + connect_sensor(body1.frame, rel_a_sensor1.frame_a)..., |
| 147 | + connect_sensor(base.frame, rel_a_sensor1.frame_b)..., |
| 148 | + connect_sensor(body1.frame, rel_a_sensor2.frame_a)..., |
| 149 | + connect_sensor(body2.frame, rel_a_sensor2.frame_b)..., |
154 | 150 | ] |
155 | 151 |
|
156 | 152 | @named model = ODESystem(connections, |
|
195 | 191 |
|
196 | 192 | # velocity after t seconds v = g * t, so the relative y-velocity between body1 and the base is |
197 | 193 | # equal to the absolute y-velocity of body1 |
198 | | - @test sol[abs_v_sensor.v_y.u][end] ≈ -sol[rel_v_sensor1.rel_v_y.u][end] ≈ g * tspan[end] |
| 194 | + @test sol[abs_v_sensor.v_y.u][end] ≈ sol[rel_v_sensor1.rel_v_y.u][end] ≈ g * tspan[end] |
199 | 195 |
|
200 | 196 | # the relative y-velocity between body1 and body2 is zero |
201 | 197 | @test sol[rel_v_sensor2.rel_v_y.u][end] == 0 |
|
0 commit comments