1 /*
2 * Copyright (C) 2019 Alberto Irurueta Carro (alberto@irurueta.com)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.irurueta.navigation.inertial.estimators;
17
18 import com.irurueta.algebra.AlgebraException;
19 import com.irurueta.algebra.Matrix;
20 import com.irurueta.algebra.Utils;
21 import com.irurueta.navigation.frames.CoordinateTransformation;
22 import com.irurueta.navigation.frames.NEDFrame;
23 import com.irurueta.navigation.frames.NEDPosition;
24 import com.irurueta.navigation.frames.NEDVelocity;
25 import com.irurueta.navigation.geodesic.Constants;
26 import com.irurueta.navigation.inertial.BodyKinematics;
27 import com.irurueta.units.*;
28
29 /**
30 * Estimates body kinematics (specific force applied to a body and its angular rate) with respect and resolved
31 * along north, east, and down.
32 * This implementation is based on the equations defined in "Principles of GNSS, Inertial, and Multisensor
33 * Integrated Navigation Systems, Second Edition" and on the companion software available at:
34 * <a href="https://github.com/ymjdz/MATLAB-Codes/blob/master/Kinematics_NED.m">
35 * https://github.com/ymjdz/MATLAB-Codes/blob/master/Kinematics_NED.m
36 * </a>
37 */
38 public class NEDKinematicsEstimator {
39
40 /**
41 * Earth rotation rate expressed in radians per second (rad/s).
42 */
43 public static final double EARTH_ROTATION_RATE = Constants.EARTH_ROTATION_RATE;
44
45 /**
46 * Scaling threshold.
47 */
48 private static final double SCALING_THRESHOLD = 2e-5;
49
50 /**
51 * Alpha threshold.
52 */
53 private static final double ALPHA_THRESHOLD = 1e-8;
54
55 /**
56 * Number of rows.
57 */
58 private static final int ROWS = 3;
59
60 /**
61 * Estimates body kinematics (specific force applied to a body and its angular rates)
62 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
63 *
64 * @param timeInterval time interval between epochs expressed in seconds (s).
65 * @param c body-to-NED coordinate transformation.
66 * @param oldC previous body-to-NED coordinate transformation.
67 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
68 * north, east, and down and expressed in meters per second (m/s).
69 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
70 * north, east, and down and expressed in meters per second (m/s).
71 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
72 * north, east, and down and expressed in meters per second (m/s).
73 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
74 * along north, east, and down and expressed in meters per second (m/s).
75 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
76 * along north, east, and down and expressed in meters per second (m/s).
77 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
78 * along north, east, and down and expressed in meters per second (m/s).
79 * @param latitude current latitude expressed in radians (rad).
80 * @param height current height expressed in meters (m).
81 * @param oldLatitude previous latitude expressed in radians (rad).
82 * @param oldHeight previous height expressed in meters (m).
83 * @param result instance where estimated body kinematics will be stored.
84 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
85 * matrices are not NED frame valid.
86 */
87 public void estimate(
88 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
89 final double vn, final double ve, final double vd,
90 final double oldVn, final double oldVe, final double oldVd,
91 final double latitude, final double height, final double oldLatitude, final double oldHeight,
92 final BodyKinematics result) {
93 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
94 oldLatitude, oldHeight, result);
95 }
96
97 /**
98 * Estimates body kinematics (specific force applied to a body and its angular rates)
99 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
100 *
101 * @param timeInterval time interval between epochs.
102 * @param c body-to-NED coordinate transformation.
103 * @param oldC previous body-to-NED coordinate transformation.
104 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
105 * north, east, and down and expressed in meters per second (m/s).
106 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
107 * north, east, and down and expressed in meters per second (m/s).
108 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
109 * north, east, and down and expressed in meters per second (m/s).
110 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
111 * along north, east, and down and expressed in meters per second (m/s).
112 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
113 * along north, east, and down and expressed in meters per second (m/s).
114 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
115 * along north, east, and down and expressed in meters per second (m/s).
116 * @param latitude current latitude expressed in radians (rad).
117 * @param height current height expressed in meters (m).
118 * @param oldLatitude previous latitude expressed in radians (rad).
119 * @param oldHeight previous height expressed in meters (m).
120 * @param result instance where estimated body kinematics will be stored.
121 * @throws IllegalArgumentException if provided time interval is negative or coordinate
122 */
123 public void estimate(
124 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
125 final double vn, final double ve, final double vd,
126 final double oldVn, final double oldVe, final double oldVd,
127 final double latitude, final double height, final double oldLatitude, final double oldHeight,
128 final BodyKinematics result) {
129 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
130 oldLatitude, oldHeight, result);
131 }
132
133 /**
134 * Estimates body kinematics (specific force applied to a body and its angular rates)
135 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
136 *
137 * @param timeInterval time interval between epochs expressed in seconds (s).
138 * @param c body-to-NED coordinate transformation.
139 * @param oldC previous body-to-NED coordinate transformation.
140 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
141 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
142 * down.
143 * @param latitude current latitude expressed in radians (rad).
144 * @param height current height expressed in meters (m).
145 * @param oldLatitude previous latitude expressed in radians (rad).
146 * @param oldHeight previous height expressed in meters (m).
147 * @param result instance where estimated body kinematics will be stored.
148 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
149 * matrices are not NED frame valid.
150 */
151 public void estimate(
152 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
153 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
154 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
155 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
156 result);
157 }
158
159 /**
160 * Estimates body kinematics (specific force applied to a body and its angular rates)
161 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
162 *
163 * @param timeInterval time interval between epochs.
164 * @param c body-to-NED coordinate transformation.
165 * @param oldC previous body-to-NED coordinate transformation.
166 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
167 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
168 * down.
169 * @param latitude current latitude expressed in radians (rad).
170 * @param height current height expressed in meters (m).
171 * @param oldLatitude previous latitude expressed in radians (rad).
172 * @param oldHeight previous height expressed in meters (m).
173 * @param result instance where estimated body kinematics will be stored.
174 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
175 * matrices are not NED frame valid.
176 */
177 public void estimate(
178 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
179 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
180 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
181 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
182 result);
183 }
184
185 /**
186 * Estimates body kinematics (specific force applied to a body and its angular rates)
187 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
188 *
189 * @param timeInterval time interval between epochs expressed in seconds (s).
190 * @param c body-to-NED coordinate transformation.
191 * @param oldC previous body-to-NED coordinate transformation.
192 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
193 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
194 * down.
195 * @param latitude current latitude.
196 * @param height current height.
197 * @param oldLatitude previous latitude.
198 * @param oldHeight previous height.
199 * @param result instance where estimated body kinematics will be stored.
200 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
201 * matrices are not NED frame valid.
202 */
203 public void estimate(
204 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
205 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
206 final Angle oldLatitude, final Distance oldHeight, final BodyKinematics result) {
207 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
208 result);
209 }
210
211 /**
212 * Estimates body kinematics (specific force applied to a body and its angular rates)
213 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
214 *
215 * @param timeInterval time interval between epochs expressed in seconds (s).
216 * @param c body-to-NED coordinate transformation.
217 * @param oldC previous body-to-NED coordinate transformation.
218 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
219 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
220 * down.
221 * @param latitude current latitude.
222 * @param height current height.
223 * @param oldLatitude previous latitude.
224 * @param oldHeight previous height.
225 * @param result instance where estimated body kinematics will be stored.
226 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
227 * matrices are not NED frame valid.
228 */
229 public void estimate(
230 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
231 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
232 final Angle oldLatitude, final Distance oldHeight, final BodyKinematics result) {
233 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
234 result);
235 }
236
237 /**
238 * Estimates body kinematics (specific force applied to a body and its angular rates)
239 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
240 *
241 * @param timeInterval time interval between epochs expressed in seconds (s).
242 * @param c body-to-NED coordinate transformation.
243 * @param oldC previous body-to-NED coordinate transformation.
244 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
245 * north, east, and down and expressed in meters per second (m/s).
246 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
247 * north, east, and down and expressed in meters per second (m/s).
248 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
249 * north, east, and down and expressed in meters per second (m/s).
250 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
251 * along north, east, and down and expressed in meters per second (m/s).
252 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
253 * along north, east, and down and expressed in meters per second (m/s).
254 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
255 * along north, east, and down and expressed in meters per second (m/s).
256 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
257 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
258 * @param result instance where estimated body kinematics will be stored.
259 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
260 * matrices are not NED frame valid.
261 */
262 public void estimate(
263 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
264 final double vn, final double ve, final double vd,
265 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
266 final NEDPosition oldPosition, final BodyKinematics result) {
267 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
268 }
269
270 /**
271 * Estimates body kinematics (specific force applied to a body and its angular rates)
272 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
273 *
274 * @param timeInterval time interval between epochs.
275 * @param c body-to-NED coordinate transformation.
276 * @param oldC previous body-to-NED coordinate transformation.
277 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
278 * north, east, and down and expressed in meters per second (m/s).
279 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
280 * north, east, and down and expressed in meters per second (m/s).
281 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
282 * north, east, and down and expressed in meters per second (m/s).
283 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
284 * along north, east, and down and expressed in meters per second (m/s).
285 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
286 * along north, east, and down and expressed in meters per second (m/s).
287 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
288 * along north, east, and down and expressed in meters per second (m/s).
289 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
290 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
291 * @param result instance where estimated body kinematics will be stored.
292 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
293 * matrices are not NED frame valid.
294 */
295 public void estimate(
296 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
297 final double vn, final double ve, final double vd,
298 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
299 final NEDPosition oldPosition, final BodyKinematics result) {
300 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
301 }
302
303 /**
304 * Estimates body kinematics (specific force applied to a body and its angular rates)
305 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
306 *
307 * @param timeInterval time interval between epochs expressed in seconds (s).
308 * @param c body-to-NED coordinate transformation.
309 * @param oldC previous body-to-NED coordinate transformation.
310 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
311 * north, east, and down.
312 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
313 * north, east, and down.
314 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
315 * north, east, and down.
316 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
317 * along north, east, and down.
318 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
319 * along north, east, and down.
320 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
321 * along north, east, and down.
322 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
323 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
324 * @param result instance where estimated body kinematics will be stored.
325 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
326 * matrices are not NED frame valid.
327 */
328 public void estimate(
329 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
330 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
331 final NEDPosition position, final NEDPosition oldPosition, final BodyKinematics result) {
332 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
333 }
334
335 /**
336 * Estimates body kinematics (specific force applied to a body and its angular rates)
337 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
338 *
339 * @param timeInterval time interval between epochs.
340 * @param c body-to-NED coordinate transformation.
341 * @param oldC previous body-to-NED coordinate transformation.
342 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
343 * north, east, and down.
344 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
345 * north, east, and down.
346 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
347 * north, east, and down.
348 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
349 * along north, east, and down.
350 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
351 * along north, east, and down.
352 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
353 * along north, east, and down.
354 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
355 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
356 * @param result instance where estimated body kinematics will be stored.
357 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
358 * matrices are not NED frame valid.
359 */
360 public void estimate(
361 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
362 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
363 final NEDPosition position, final NEDPosition oldPosition, final BodyKinematics result) {
364 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
365 }
366
367 /**
368 * Estimates body kinematics (specific force applied to a body and its angular rates)
369 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
370 *
371 * @param timeInterval time interval between epochs expressed in seconds (s).
372 * @param c body-to-NED coordinate transformation.
373 * @param oldC previous body-to-NED coordinate transformation.
374 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
375 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
376 * down.
377 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
378 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
379 * @param result instance where estimated body kinematics will be stored.
380 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
381 * matrices are not NED frame valid.
382 */
383 public void estimate(
384 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
385 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
386 final NEDPosition oldPosition, final BodyKinematics result) {
387 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, position, oldPosition, result);
388 }
389
390 /**
391 * Estimates body kinematics (specific force applied to a body and its angular rates)
392 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
393 *
394 * @param timeInterval time interval between epochs.
395 * @param c body-to-NED coordinate transformation.
396 * @param oldC previous body-to-NED coordinate transformation.
397 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
398 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
399 * down.
400 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
401 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
402 * @param result instance where estimated body kinematics will be stored.
403 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
404 * matrices are not NED frame valid.
405 */
406 public void estimate(
407 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
408 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
409 final NEDPosition oldPosition, final BodyKinematics result) {
410 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, position, oldPosition, result);
411 }
412
413 /**
414 * Estimates body kinematics (specific force applied to a body and its angular rates)
415 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
416 *
417 * @param timeInterval time interval between epochs expressed in seconds (s).
418 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
419 * @param oldC previous body-to-NED coordinate transformation.
420 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
421 * along north, east, and down and expressed in meters per second (m/s).
422 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
423 * along north, east, and down and expressed in meters per second (m/s).
424 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
425 * along north, east, and down and expressed in meters per second (m/s).
426 * @param oldLatitude previous latitude expressed in radians (rad).
427 * @param oldHeight previous height expressed in meters (m).
428 * @param result instance where estimated body kinematics will be stored.
429 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
430 * matrices are not NED frame valid.
431 */
432 public void estimate(
433 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
434 final double oldVn, final double oldVe, final double oldVd,
435 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
436 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight, result);
437 }
438
439 /**
440 * Estimates body kinematics (specific force applied to a body and its angular rates)
441 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
442 *
443 * @param timeInterval time interval between epochs.
444 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
445 * @param oldC previous body-to-NED coordinate transformation.
446 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
447 * along north, east, and down and expressed in meters per second (m/s).
448 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
449 * along north, east, and down and expressed in meters per second (m/s).
450 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
451 * along north, east, and down and expressed in meters per second (m/s).
452 * @param oldLatitude previous latitude expressed in radians (rad).
453 * @param oldHeight previous height expressed in meters (m).
454 * @param result instance where estimated body kinematics will be stored.
455 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
456 * matrices are not NED frame valid.
457 */
458 public void estimate(
459 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
460 final double oldVn, final double oldVe, final double oldVd,
461 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
462 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight, result);
463 }
464
465 /**
466 * Estimates body kinematics (specific force applied to a body and its angular rates)
467 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
468 *
469 * @param timeInterval time interval between epochs expressed in seconds (s).
470 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
471 * @param oldC previous body-to-NED coordinate transformation.
472 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
473 * down.
474 * @param oldLatitude previous latitude expressed in radians (rad).
475 * @param oldHeight previous height expressed in meters (m).
476 * @param result instance where estimated body kinematics will be stored.
477 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
478 * matrices are not NED frame valid.
479 */
480 public void estimate(
481 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
482 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight,
483 final BodyKinematics result) {
484 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
485 }
486
487 /**
488 * Estimates body kinematics (specific force applied to a body and its angular rates)
489 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
490 *
491 * @param timeInterval time interval between epochs.
492 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
493 * @param oldC previous body-to-NED coordinate transformation.
494 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
495 * down.
496 * @param oldLatitude previous latitude expressed in radians (rad).
497 * @param oldHeight previous height expressed in meters (m).
498 * @param result instance where estimated body kinematics will be stored.
499 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
500 * matrices are not NED frame valid.
501 */
502 public void estimate(
503 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
504 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight,
505 final BodyKinematics result) {
506 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
507 }
508
509 /**
510 * Estimates body kinematics (specific force applied to a body and its angular rates)
511 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
512 *
513 * @param timeInterval time interval between epochs expressed in seconds (s).
514 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
515 * @param oldC previous body-to-NED coordinate transformation.
516 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
517 * down.
518 * @param oldLatitude previous latitude.
519 * @param oldHeight previous height.
520 * @param result instance where estimated body kinematics will be stored.
521 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
522 * matrices are not NED frame valid.
523 */
524 public void estimate(
525 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
526 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight,
527 final BodyKinematics result) {
528 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
529 }
530
531 /**
532 * Estimates body kinematics (specific force applied to a body and its angular rates)
533 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
534 *
535 * @param timeInterval time interval between epochs.
536 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
537 * @param oldC previous body-to-NED coordinate transformation.
538 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
539 * down.
540 * @param oldLatitude previous latitude.
541 * @param oldHeight previous height.
542 * @param result instance where estimated body kinematics will be stored.
543 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
544 * matrices are not NED frame valid.
545 */
546 public void estimate(
547 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
548 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight,
549 final BodyKinematics result) {
550 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
551 }
552
553 /**
554 * Estimates body kinematics (specific force applied to a body and its angular rates)
555 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
556 *
557 * @param timeInterval time interval between epochs expressed in seconds (s).
558 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
559 * @param oldC previous body-to-NED coordinate transformation.
560 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
561 * along north, east, and down and expressed in meters per second (m/s).
562 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
563 * along north, east, and down and expressed in meters per second (m/s).
564 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
565 * along north, east, and down and expressed in meters per second (m/s).
566 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
567 * @param result instance where estimated body kinematics will be stored.
568 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
569 * matrices are not NED frame valid.
570 */
571 public void estimate(
572 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
573 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition,
574 final BodyKinematics result) {
575 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
576 }
577
578 /**
579 * Estimates body kinematics (specific force applied to a body and its angular rates)
580 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
581 *
582 * @param timeInterval time interval between epochs.
583 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
584 * @param oldC previous body-to-NED coordinate transformation.
585 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
586 * along north, east, and down and expressed in meters per second (m/s).
587 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
588 * along north, east, and down and expressed in meters per second (m/s).
589 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
590 * along north, east, and down and expressed in meters per second (m/s).
591 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
592 * @param result instance where estimated body kinematics will be stored.
593 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
594 * matrices are not NED frame valid.
595 */
596 public void estimate(
597 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
598 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition,
599 final BodyKinematics result) {
600 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
601 }
602
603 /**
604 * Estimates body kinematics (specific force applied to a body and its angular rates)
605 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
606 *
607 * @param timeInterval time interval between epochs expressed in seconds (s).
608 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
609 * @param oldC previous body-to-NED coordinate transformation.
610 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
611 * along north, east, and down.
612 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
613 * along north, east, and down.
614 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
615 * along north, east, and down.
616 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
617 * @param result instance where estimated body kinematics will be stored.
618 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
619 * matrices are not NED frame valid.
620 */
621 public void estimate(
622 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
623 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition,
624 final BodyKinematics result) {
625 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
626 }
627
628 /**
629 * Estimates body kinematics (specific force applied to a body and its angular rates)
630 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
631 *
632 * @param timeInterval time interval between epochs expressed in seconds (s).
633 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
634 * @param oldC previous body-to-NED coordinate transformation.
635 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
636 * along north, east, and down.
637 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
638 * along north, east, and down.
639 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
640 * along north, east, and down.
641 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
642 * @param result instance where estimated body kinematics will be stored.
643 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
644 * matrices are not NED frame valid.
645 */
646 public void estimate(
647 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
648 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition,
649 final BodyKinematics result) {
650 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
651 }
652
653 /**
654 * Estimates body kinematics (specific force applied to a body and its angular rates)
655 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
656 *
657 * @param timeInterval time interval between epochs expressed in seconds (s).
658 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
659 * @param oldC previous body-to-NED coordinate transformation.
660 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
661 * down.
662 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
663 * @param result instance where estimated body kinematics will be stored.
664 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
665 * matrices are not NED frame valid.
666 */
667 public void estimate(
668 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
669 final NEDVelocity oldVelocity, final NEDPosition oldPosition, final BodyKinematics result) {
670 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldPosition, result);
671 }
672
673 /**
674 * Estimates body kinematics (specific force applied to a body and its angular rates)
675 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
676 *
677 * @param timeInterval time interval between epochs.
678 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
679 * @param oldC previous body-to-NED coordinate transformation.
680 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
681 * down.
682 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
683 * @param result instance where estimated body kinematics will be stored.
684 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
685 * matrices are not NED frame valid.
686 */
687 public void estimate(
688 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
689 final NEDVelocity oldVelocity, final NEDPosition oldPosition, final BodyKinematics result) {
690 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldPosition, result);
691 }
692
693 /**
694 * Estimates body kinematics (specific force applied to a body and its angular rates)
695 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
696 *
697 * @param timeInterval time interval between epochs expressed in seconds (s).
698 * @param c body-to-NED coordinate transformation.
699 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
700 * north, east, and down and expressed in meters per second (m/s).
701 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
702 * north, east, and down and expressed in meters per second (m/s).
703 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
704 * north, east, and down and expressed in meters per second (m/s).
705 * @param latitude current latitude expressed in radians (rad).
706 * @param height current height expressed in meters (m).
707 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
708 * @param result instance where estimated body kinematics will be stored.
709 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
710 * matrices are not NED frame valid.
711 */
712 public void estimate(
713 final double timeInterval, final CoordinateTransformation c,
714 final double vn, final double ve, final double vd, final double latitude, final double height,
715 final NEDFrame oldFrame, final BodyKinematics result) {
716 estimateKinematics(timeInterval, c, vn, ve, vd, latitude, height, oldFrame, result);
717 }
718
719 /**
720 * Estimates body kinematics (specific force applied to a body and its angular rates)
721 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
722 *
723 * @param timeInterval time interval between epochs.
724 * @param c body-to-NED coordinate transformation.
725 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
726 * north, east, and down and expressed in meters per second (m/s).
727 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
728 * north, east, and down and expressed in meters per second (m/s).
729 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
730 * north, east, and down and expressed in meters per second (m/s).
731 * @param latitude current latitude expressed in radians (rad).
732 * @param height current height expressed in meters (m).
733 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
734 * @param result instance where estimated body kinematics will be stored.
735 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
736 * matrices are not NED frame valid.
737 */
738 public void estimate(
739 final Time timeInterval, final CoordinateTransformation c,
740 final double vn, final double ve, final double vd, final double latitude, final double height,
741 final NEDFrame oldFrame, final BodyKinematics result) {
742 estimateKinematics(timeInterval, c, vn, ve, vd, latitude, height, oldFrame, result);
743 }
744
745 /**
746 * Estimates body kinematics (specific force applied to a body and its angular rates)
747 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
748 *
749 * @param timeInterval time interval between epochs expressed in seconds (s).
750 * @param c body-to-NED coordinate transformation.
751 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
752 * @param latitude current latitude expressed in radians (rad).
753 * @param height current height expressed in meters (m).
754 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
755 * @param result instance where estimated body kinematics will be stored.
756 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
757 * matrices are not NED frame valid.
758 */
759 public void estimate(
760 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
761 final double latitude, final double height, final NEDFrame oldFrame, final BodyKinematics result) {
762 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
763 }
764
765 /**
766 * Estimates body kinematics (specific force applied to a body and its angular rates)
767 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
768 *
769 * @param timeInterval time interval between epochs.
770 * @param c body-to-NED coordinate transformation.
771 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
772 * @param latitude current latitude expressed in radians (rad).
773 * @param height current height expressed in meters (m).
774 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
775 * @param result instance where estimated body kinematics will be stored.
776 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
777 * matrices are not NED frame valid.
778 */
779 public void estimate(
780 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
781 final double latitude, final double height, final NEDFrame oldFrame, final BodyKinematics result) {
782 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
783 }
784
785 /**
786 * Estimates body kinematics (specific force applied to a body and its angular rates)
787 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
788 *
789 * @param timeInterval time interval between epochs expressed in seconds (s).
790 * @param c body-to-NED coordinate transformation.
791 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
792 * @param latitude current latitude.
793 * @param height current height.
794 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
795 * @param result instance where estimated body kinematics will be stored.
796 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
797 * matrices are not NED frame valid.
798 */
799 public void estimate(
800 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
801 final Angle latitude, final Distance height, final NEDFrame oldFrame, final BodyKinematics result) {
802 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
803 }
804
805 /**
806 * Estimates body kinematics (specific force applied to a body and its angular rates)
807 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
808 *
809 * @param timeInterval time interval between epochs.
810 * @param c body-to-NED coordinate transformation.
811 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
812 * @param latitude current latitude.
813 * @param height current height.
814 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
815 * @param result instance where estimated body kinematics will be stored.
816 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
817 * matrices are not NED frame valid.
818 */
819 public void estimate(
820 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity, final Angle latitude,
821 final Distance height, final NEDFrame oldFrame, final BodyKinematics result) {
822 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
823 }
824
825 /**
826 * Estimates body kinematics (specific force applied to a body and its angular rates)
827 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
828 *
829 * @param timeInterval time interval between epochs expressed in seconds (s).
830 * @param c body-to-NED coordinate transformation.
831 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
832 * north, east, and down and expressed in meters per second (m/s).
833 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
834 * north, east, and down and expressed in meters per second (m/s).
835 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
836 * north, east, and down and expressed in meters per second (m/s).
837 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
838 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
839 * @param result instance where estimated body kinematics will be stored.
840 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
841 * matrices are not NED frame valid.
842 */
843 public void estimate(
844 final double timeInterval, final CoordinateTransformation c,
845 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame,
846 final BodyKinematics result) {
847 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
848 }
849
850 /**
851 * Estimates body kinematics (specific force applied to a body and its angular rates)
852 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
853 *
854 * @param timeInterval time interval between epochs.
855 * @param c body-to-NED coordinate transformation.
856 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
857 * north, east, and down and expressed in meters per second (m/s).
858 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
859 * north, east, and down and expressed in meters per second (m/s).
860 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
861 * north, east, and down and expressed in meters per second (m/s).
862 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
863 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
864 * @param result instance where estimated body kinematics will be stored.
865 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
866 * matrices are not NED frame valid.
867 */
868 public void estimate(
869 final Time timeInterval, final CoordinateTransformation c,
870 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame,
871 final BodyKinematics result) {
872 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
873 }
874
875 /**
876 * Estimates body kinematics (specific force applied to a body and its angular rates)
877 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
878 *
879 * @param timeInterval time interval between epochs expressed in seconds (s).
880 * @param c body-to-NED coordinate transformation.
881 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
882 * north, east, and down.
883 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
884 * north, east, and down.
885 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
886 * north, east, and down.
887 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
888 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
889 * @param result instance where estimated body kinematics will be stored.
890 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
891 * matrices are not NED frame valid.
892 */
893 public void estimate(
894 final double timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
895 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
896 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
897 }
898
899 /**
900 * Estimates body kinematics (specific force applied to a body and its angular rates)
901 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
902 *
903 * @param timeInterval time interval between epochs.
904 * @param c body-to-NED coordinate transformation.
905 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
906 * north, east, and down.
907 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
908 * north, east, and down.
909 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
910 * north, east, and down.
911 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
912 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
913 * @param result instance where estimated body kinematics will be stored.
914 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
915 * matrices are not NED frame valid.
916 */
917 public void estimate(
918 final Time timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
919 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
920 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
921 }
922
923 /**
924 * Estimates body kinematics (specific force applied to a body and its angular rates)
925 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
926 *
927 * @param timeInterval time interval between epochs expressed in seconds (s).
928 * @param c body-to-NED coordinate transformation.
929 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
930 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
931 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
932 * @param result instance where estimated body kinematics will be stored.
933 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
934 * matrices are not NED frame valid.
935 */
936 public void estimate(
937 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
938 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
939 estimateKinematics(timeInterval, c, velocity, position, oldFrame, result);
940 }
941
942 /**
943 * Estimates body kinematics (specific force applied to a body and its angular rates)
944 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
945 *
946 * @param timeInterval time interval between epochs.
947 * @param c body-to-NED coordinate transformation.
948 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
949 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
950 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
951 * @param result instance where estimated body kinematics will be stored.
952 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
953 * matrices are not NED frame valid.
954 */
955 public void estimate(
956 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
957 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
958 estimateKinematics(timeInterval, c, velocity, position, oldFrame, result);
959 }
960
961 /**
962 * Estimates body kinematics (specific force applied to a body and its angular rates)
963 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
964 *
965 * @param timeInterval time interval between epochs expressed in seconds (s).
966 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
967 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
968 * @param result instance where estimated body kinematics will be stored.
969 * @throws IllegalArgumentException if provided time interval is negative.
970 */
971 public void estimate(
972 final double timeInterval, final NEDFrame frame, final NEDFrame oldFrame, final BodyKinematics result) {
973 estimateKinematics(timeInterval, frame, oldFrame, result);
974 }
975
976 /**
977 * Estimates body kinematics (specific force applied to a body and its angular rates)
978 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
979 *
980 * @param timeInterval time interval between epochs.
981 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
982 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
983 * @param result instance where estimated body kinematics will be stored.
984 * @throws IllegalArgumentException if provided time interval is negative.
985 */
986 public void estimate(
987 final Time timeInterval, final NEDFrame frame, final NEDFrame oldFrame, final BodyKinematics result) {
988 estimateKinematics(timeInterval, frame, oldFrame, result);
989 }
990
991 /**
992 * Estimates body kinematics (specific force applied to a body and its angular rates)
993 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
994 *
995 * @param timeInterval time interval between epochs expressed in seconds (s).
996 * @param c body-to-NED coordinate transformation.
997 * @param oldC previous body-to-NED coordinate transformation.
998 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
999 * north, east, and down.
1000 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1001 * north, east, and down.
1002 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1003 * north, east, and down.
1004 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1005 * along north, east, and down.
1006 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1007 * along north, east, and down.
1008 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1009 * along north, east, and down.
1010 * @param latitude current latitude expressed in radians (rad).
1011 * @param height current height expressed in meters (m).
1012 * @param oldLatitude previous latitude expressed in radians (rad).
1013 * @param oldHeight previous height expressed in meters (m).
1014 * @param result instance where estimated body kinematics will be stored.
1015 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1016 * matrices are not NED frame valid.
1017 */
1018 public void estimate(
1019 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1020 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
1021 final double latitude, final double height, final double oldLatitude, final double oldHeight,
1022 final BodyKinematics result) {
1023 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1024 oldLatitude, oldHeight, result);
1025 }
1026
1027 /**
1028 * Estimates body kinematics (specific force applied to a body and its angular rates)
1029 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1030 *
1031 * @param timeInterval time interval between epochs.
1032 * @param c body-to-NED coordinate transformation.
1033 * @param oldC previous body-to-NED coordinate transformation.
1034 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1035 * north, east, and down.
1036 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1037 * north, east, and down.
1038 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1039 * north, east, and down.
1040 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1041 * along north, east, and down.
1042 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1043 * along north, east, and down.
1044 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1045 * along north, east, and down.
1046 * @param latitude current latitude expressed in radians (rad).
1047 * @param height current height expressed in meters (m).
1048 * @param oldLatitude previous latitude expressed in radians (rad).
1049 * @param oldHeight previous height expressed in meters (m).
1050 * @param result instance where estimated body kinematics will be stored.
1051 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1052 * matrices are not NED frame valid.
1053 */
1054 public void estimate(
1055 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1056 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
1057 final double latitude, final double height, final double oldLatitude, final double oldHeight,
1058 final BodyKinematics result) {
1059 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1060 oldLatitude, oldHeight, result);
1061 }
1062
1063 /**
1064 * Estimates body kinematics (specific force applied to a body and its angular rates)
1065 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1066 *
1067 * @param timeInterval time interval between epochs expressed in seconds (s).
1068 * @param c body-to-NED coordinate transformation.
1069 * @param oldC previous body-to-NED coordinate transformation.
1070 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1071 * north, east, and down and expressed in meters per second (m/s).
1072 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1073 * north, east, and down and expressed in meters per second (m/s).
1074 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1075 * north, east, and down and expressed in meters per second (m/s).
1076 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1077 * along north, east, and down and expressed in meters per second (m/s).
1078 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1079 * along north, east, and down and expressed in meters per second (m/s).
1080 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1081 * along north, east, and down and expressed in meters per second (m/s).
1082 * @param latitude current latitude.
1083 * @param height current height expressed in meters (m).
1084 * @param oldLatitude previous latitude.
1085 * @param oldHeight previous height expressed in meters (m).
1086 * @param result instance where estimated body kinematics will be stored.
1087 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1088 * matrices are not NED frame valid.
1089 */
1090 public void estimate(
1091 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1092 final double vn, final double ve, final double vd,
1093 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
1094 final Angle oldLatitude, final double oldHeight, final BodyKinematics result) {
1095 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1096 oldLatitude, oldHeight, result);
1097 }
1098
1099 /**
1100 * Estimates body kinematics (specific force applied to a body and its angular rates)
1101 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1102 *
1103 * @param timeInterval time interval between epochs.
1104 * @param c body-to-NED coordinate transformation.
1105 * @param oldC previous body-to-NED coordinate transformation.
1106 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1107 * north, east, and down and expressed in meters per second (m/s).
1108 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1109 * north, east, and down and expressed in meters per second (m/s).
1110 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1111 * north, east, and down and expressed in meters per second (m/s).
1112 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1113 * along north, east, and down and expressed in meters per second (m/s).
1114 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1115 * along north, east, and down and expressed in meters per second (m/s).
1116 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1117 * along north, east, and down and expressed in meters per second (m/s).
1118 * @param latitude current latitude.
1119 * @param height current height expressed in meters (m).
1120 * @param oldLatitude previous latitude.
1121 * @param oldHeight previous height expressed in meters (m).
1122 * @param result instance where estimated body kinematics will be stored.
1123 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1124 * matrices are not NED frame valid.
1125 */
1126 public void estimate(
1127 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1128 final double vn, final double ve, final double vd,
1129 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
1130 final Angle oldLatitude, final double oldHeight, final BodyKinematics result) {
1131 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1132 oldLatitude, oldHeight, result);
1133 }
1134
1135 /**
1136 * Estimates body kinematics (specific force applied to a body and its angular rates)
1137 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1138 *
1139 * @param timeInterval time interval between epochs expressed in seconds (s).
1140 * @param c body-to-NED coordinate transformation.
1141 * @param oldC previous body-to-NED coordinate transformation.
1142 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1143 * north, east, and down and expressed in meters per second (m/s).
1144 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1145 * north, east, and down and expressed in meters per second (m/s).
1146 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1147 * north, east, and down and expressed in meters per second (m/s).
1148 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1149 * along north, east, and down and expressed in meters per second (m/s).
1150 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1151 * along north, east, and down and expressed in meters per second (m/s).
1152 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1153 * along north, east, and down and expressed in meters per second (m/s).
1154 * @param latitude current latitude expressed in radians (rad).
1155 * @param height current height.
1156 * @param oldLatitude previous latitude expressed in radians (rad).
1157 * @param oldHeight previous height.
1158 * @param result instance where estimated body kinematics will be stored.
1159 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1160 * matrices are not NED frame valid.
1161 */
1162 public void estimate(
1163 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1164 final double vn, final double ve, final double vd,
1165 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
1166 final double oldLatitude, final Distance oldHeight, final BodyKinematics result) {
1167 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1168 oldLatitude, oldHeight, result);
1169 }
1170
1171 /**
1172 * Estimates body kinematics (specific force applied to a body and its angular rates)
1173 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1174 *
1175 * @param timeInterval time interval between epochs.
1176 * @param c body-to-NED coordinate transformation.
1177 * @param oldC previous body-to-NED coordinate transformation.
1178 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1179 * north, east, and down and expressed in meters per second (m/s).
1180 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1181 * north, east, and down and expressed in meters per second (m/s).
1182 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1183 * north, east, and down and expressed in meters per second (m/s).
1184 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1185 * along north, east, and down and expressed in meters per second (m/s).
1186 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1187 * along north, east, and down and expressed in meters per second (m/s).
1188 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1189 * along north, east, and down and expressed in meters per second (m/s).
1190 * @param latitude current latitude expressed in radians (rad).
1191 * @param height current height.
1192 * @param oldLatitude previous latitude expressed in radians (rad).
1193 * @param oldHeight previous height.
1194 * @param result instance where estimated body kinematics will be stored.
1195 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1196 * matrices are not NED frame valid.
1197 */
1198 public void estimate(
1199 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1200 final double vn, final double ve, final double vd,
1201 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
1202 final double oldLatitude, final Distance oldHeight, final BodyKinematics result) {
1203 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1204 oldLatitude, oldHeight, result);
1205 }
1206
1207 /**
1208 * Estimates body kinematics (specific force applied to a body and its angular rates)
1209 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1210 *
1211 * @param timeInterval time interval between epochs expressed in seconds (s).
1212 * @param c body-to-NED coordinate transformation.
1213 * @param oldC previous body-to-NED coordinate transformation.
1214 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1215 * north, east, and down.
1216 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1217 * north, east, and down.
1218 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1219 * north, east, and down.
1220 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1221 * along north, east, and down.
1222 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1223 * along north, east, and down.
1224 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1225 * along north, east, and down.
1226 * @param latitude current latitude.
1227 * @param height current height.
1228 * @param oldLatitude previous latitude.
1229 * @param oldHeight previous height.
1230 * @param result instance where estimated body kinematics will be stored.
1231 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1232 * matrices are not NED frame valid.
1233 */
1234 public void estimate(
1235 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1236 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
1237 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight,
1238 final BodyKinematics result) {
1239 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1240 oldLatitude, oldHeight, result);
1241 }
1242
1243 /**
1244 * Estimates body kinematics (specific force applied to a body and its angular rates)
1245 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1246 *
1247 * @param timeInterval time interval between epochs.
1248 * @param c body-to-NED coordinate transformation.
1249 * @param oldC previous body-to-NED coordinate transformation.
1250 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1251 * north, east, and down.
1252 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1253 * north, east, and down.
1254 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1255 * north, east, and down.
1256 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1257 * along north, east, and down.
1258 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1259 * along north, east, and down.
1260 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1261 * along north, east, and down.
1262 * @param latitude current latitude.
1263 * @param height current height.
1264 * @param oldLatitude previous latitude.
1265 * @param oldHeight previous height.
1266 * @param result instance where estimated body kinematics will be stored.
1267 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1268 * matrices are not NED frame valid.
1269 */
1270 public void estimate(
1271 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1272 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
1273 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight,
1274 final BodyKinematics result) {
1275 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1276 oldLatitude, oldHeight, result);
1277 }
1278
1279 /**
1280 * Estimates body kinematics (specific force applied to a body and its angular rates)
1281 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1282 *
1283 * @param timeInterval time interval between epochs expressed in seconds (s).
1284 * @param c body-to-NED coordinate transformation.
1285 * @param oldC previous body-to-NED coordinate transformation.
1286 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1287 * north, east, and down and expressed in meters per second (m/s).
1288 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1289 * north, east, and down and expressed in meters per second (m/s).
1290 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1291 * north, east, and down and expressed in meters per second (m/s).
1292 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1293 * along north, east, and down and expressed in meters per second (m/s).
1294 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1295 * along north, east, and down and expressed in meters per second (m/s).
1296 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1297 * along north, east, and down and expressed in meters per second (m/s).
1298 * @param latitude current latitude expressed in radians (rad).
1299 * @param height current height expressed in meters (m).
1300 * @param oldLatitude previous latitude expressed in radians (rad).
1301 * @param oldHeight previous height expressed in meters (m).
1302 * @return a new body kinematics instance.
1303 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1304 * matrices are not NED frame valid.
1305 */
1306 public BodyKinematics estimateAndReturnNew(
1307 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1308 final double vn, final double ve, final double vd,
1309 final double oldVn, final double oldVe, final double oldVd, final double latitude, final double height,
1310 final double oldLatitude, final double oldHeight) {
1311 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1312 oldLatitude, oldHeight);
1313 }
1314
1315 /**
1316 * Estimates body kinematics (specific force applied to a body and its angular rates)
1317 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1318 *
1319 * @param timeInterval time interval between epochs.
1320 * @param c body-to-NED coordinate transformation.
1321 * @param oldC previous body-to-NED coordinate transformation.
1322 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1323 * north, east, and down and expressed in meters per second (m/s).
1324 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1325 * north, east, and down and expressed in meters per second (m/s).
1326 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1327 * north, east, and down and expressed in meters per second (m/s).
1328 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1329 * along north, east, and down and expressed in meters per second (m/s).
1330 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1331 * along north, east, and down and expressed in meters per second (m/s).
1332 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1333 * along north, east, and down and expressed in meters per second (m/s).
1334 * @param latitude current latitude expressed in radians (rad).
1335 * @param height current height expressed in meters (m).
1336 * @param oldLatitude previous latitude expressed in radians (rad).
1337 * @param oldHeight previous height expressed in meters (m).
1338 * @return a new body kinematics instance.
1339 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1340 * matrices are not NED frame valid.
1341 */
1342 public BodyKinematics estimateAndReturnNew(
1343 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1344 final double vn, final double ve, final double vd,
1345 final double oldVn, final double oldVe, final double oldVd, final double latitude, final double height,
1346 final double oldLatitude, final double oldHeight) {
1347 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
1348 oldLatitude, oldHeight);
1349 }
1350
1351 /**
1352 * Estimates body kinematics (specific force applied to a body and its angular rates)
1353 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1354 *
1355 * @param timeInterval time interval between epochs expressed in seconds (s).
1356 * @param c body-to-NED coordinate transformation.
1357 * @param oldC previous body-to-NED coordinate transformation.
1358 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1359 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1360 * down.
1361 * @param latitude current latitude expressed in radians (rad).
1362 * @param height current height expressed in meters (m).
1363 * @param oldLatitude previous latitude expressed in radians (rad).
1364 * @param oldHeight previous height expressed in meters (m).
1365 * @return a new body kinematics instance.
1366 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1367 * matrices are not NED frame valid.
1368 */
1369 public BodyKinematics estimateAndReturnNew(
1370 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1371 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
1372 final double oldLatitude, final double oldHeight) {
1373 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, velocity, oldVelocity, latitude, height,
1374 oldLatitude, oldHeight);
1375 }
1376
1377 /**
1378 * Estimates body kinematics (specific force applied to a body and its angular rates)
1379 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1380 *
1381 * @param timeInterval time interval between epochs.
1382 * @param c body-to-NED coordinate transformation.
1383 * @param oldC previous body-to-NED coordinate transformation.
1384 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1385 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1386 * down.
1387 * @param latitude current latitude expressed in radians (rad).
1388 * @param height current height expressed in meters (m).
1389 * @param oldLatitude previous latitude expressed in radians (rad).
1390 * @param oldHeight previous height expressed in meters (m).
1391 * @return a new body kinematics instance.
1392 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1393 * matrices are not NED frame valid.
1394 */
1395 public BodyKinematics estimateAndReturnNew(
1396 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1397 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
1398 final double oldLatitude, final double oldHeight) {
1399 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, velocity, oldVelocity, latitude, height,
1400 oldLatitude, oldHeight);
1401 }
1402
1403 /**
1404 * Estimates body kinematics (specific force applied to a body and its angular rates)
1405 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1406 *
1407 * @param timeInterval time interval between epochs expressed in seconds (s).
1408 * @param c body-to-NED coordinate transformation.
1409 * @param oldC previous body-to-NED coordinate transformation.
1410 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1411 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1412 * down.
1413 * @param latitude current latitude.
1414 * @param height current height.
1415 * @param oldLatitude previous latitude.
1416 * @param oldHeight previous height.
1417 * @return a new body kinematics instance.
1418 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1419 * matrices are not NED frame valid.
1420 */
1421 public BodyKinematics estimateAndReturnNew(
1422 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1423 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
1424 final Angle oldLatitude, final Distance oldHeight) {
1425 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, velocity, oldVelocity, latitude, height,
1426 oldLatitude, oldHeight);
1427 }
1428
1429 /**
1430 * Estimates body kinematics (specific force applied to a body and its angular rates)
1431 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1432 *
1433 * @param timeInterval time interval between epochs.
1434 * @param c body-to-NED coordinate transformation.
1435 * @param oldC previous body-to-NED coordinate transformation.
1436 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1437 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1438 * down.
1439 * @param latitude current latitude.
1440 * @param height current height.
1441 * @param oldLatitude previous latitude.
1442 * @param oldHeight previous height.
1443 * @return a new body kinematics instance.
1444 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1445 * matrices are not NED frame valid.
1446 */
1447 public BodyKinematics estimateAndReturnNew(
1448 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1449 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
1450 final Angle oldLatitude, final Distance oldHeight) {
1451 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, velocity, oldVelocity, latitude, height,
1452 oldLatitude, oldHeight);
1453 }
1454
1455 /**
1456 * Estimates body kinematics (specific force applied to a body and its angular rates)
1457 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1458 *
1459 * @param timeInterval time interval between epochs expressed in seconds (s).
1460 * @param c body-to-NED coordinate transformation.
1461 * @param oldC previous body-to-NED coordinate transformation.
1462 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1463 * north, east, and down and expressed in meters per second (m/s).
1464 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1465 * north, east, and down and expressed in meters per second (m/s).
1466 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1467 * north, east, and down and expressed in meters per second (m/s).
1468 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1469 * along north, east, and down and expressed in meters per second (m/s).
1470 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1471 * along north, east, and down and expressed in meters per second (m/s).
1472 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1473 * along north, east, and down and expressed in meters per second (m/s).
1474 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
1475 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1476 * @return a new body kinematics instance.
1477 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1478 * matrices are not NED frame valid.
1479 */
1480 public BodyKinematics estimateAndReturnNew(
1481 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1482 final double vn, final double ve, final double vd,
1483 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
1484 final NEDPosition oldPosition) {
1485 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position,
1486 oldPosition);
1487 }
1488
1489 /**
1490 * Estimates body kinematics (specific force applied to a body and its angular rates)
1491 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1492 *
1493 * @param timeInterval time interval between epochs.
1494 * @param c body-to-NED coordinate transformation.
1495 * @param oldC previous body-to-NED coordinate transformation.
1496 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1497 * north, east, and down and expressed in meters per second (m/s).
1498 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1499 * north, east, and down and expressed in meters per second (m/s).
1500 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1501 * north, east, and down and expressed in meters per second (m/s).
1502 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1503 * along north, east, and down and expressed in meters per second (m/s).
1504 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1505 * along north, east, and down and expressed in meters per second (m/s).
1506 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1507 * along north, east, and down and expressed in meters per second (m/s).
1508 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
1509 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1510 * @return a new body kinematics instance.
1511 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1512 * matrices are not NED frame valid.
1513 */
1514 public BodyKinematics estimateAndReturnNew(
1515 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1516 final double vn, final double ve, final double vd,
1517 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
1518 final NEDPosition oldPosition) {
1519 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position,
1520 oldPosition);
1521 }
1522
1523 /**
1524 * Estimates body kinematics (specific force applied to a body and its angular rates)
1525 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1526 *
1527 * @param timeInterval time interval between epochs expressed in seconds (s).
1528 * @param c body-to-NED coordinate transformation.
1529 * @param oldC previous body-to-NED coordinate transformation.
1530 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1531 * north, east, and down.
1532 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1533 * north, east, and down.
1534 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1535 * north, east, and down.
1536 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1537 * along north, east, and down.
1538 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1539 * along north, east, and down.
1540 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1541 * along north, east, and down.
1542 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
1543 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1544 * @return a new body kinematics instance.
1545 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1546 * matrices are not NED frame valid.
1547 */
1548 public BodyKinematics estimateAndReturnNew(
1549 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1550 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
1551 final NEDPosition position, final NEDPosition oldPosition) {
1552 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position,
1553 oldPosition);
1554 }
1555
1556 /**
1557 * Estimates body kinematics (specific force applied to a body and its angular rates)
1558 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1559 *
1560 * @param timeInterval time interval between epochs.
1561 * @param c body-to-NED coordinate transformation.
1562 * @param oldC previous body-to-NED coordinate transformation.
1563 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1564 * north, east, and down.
1565 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1566 * north, east, and down.
1567 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1568 * north, east, and down.
1569 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1570 * along north, east, and down.
1571 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1572 * along north, east, and down.
1573 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1574 * along north, east, and down.
1575 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
1576 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1577 * @return a new body kinematics instance.
1578 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1579 * matrices are not NED frame valid.
1580 */
1581 public BodyKinematics estimateAndReturnNew(
1582 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1583 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
1584 final NEDPosition position, final NEDPosition oldPosition) {
1585 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position,
1586 oldPosition);
1587 }
1588
1589 /**
1590 * Estimates body kinematics (specific force applied to a body and its angular rates)
1591 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1592 *
1593 * @param timeInterval time interval between epochs expressed in seconds (s).
1594 * @param c body-to-NED coordinate transformation.
1595 * @param oldC previous body-to-NED coordinate transformation.
1596 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1597 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1598 * down.
1599 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
1600 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1601 * @return a new body kinematics instance.
1602 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1603 * matrices are not NED frame valid.
1604 */
1605 public BodyKinematics estimateAndReturnNew(
1606 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1607 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
1608 final NEDPosition oldPosition) {
1609 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, velocity, oldVelocity, position, oldPosition);
1610 }
1611
1612 /**
1613 * Estimates body kinematics (specific force applied to a body and its angular rates)
1614 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1615 *
1616 * @param timeInterval time interval between epochs.
1617 * @param c body-to-NED coordinate transformation.
1618 * @param oldC previous body-to-NED coordinate transformation.
1619 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1620 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1621 * down.
1622 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
1623 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1624 * @return a new body kinematics instance.
1625 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1626 * matrices are not NED frame valid.
1627 */
1628 public BodyKinematics estimateAndReturnNew(
1629 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
1630 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
1631 final NEDPosition oldPosition) {
1632 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, velocity, oldVelocity, position, oldPosition);
1633 }
1634
1635 /**
1636 * Estimates body kinematics (specific force applied to a body and its angular rates)
1637 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1638 *
1639 * @param timeInterval time interval between epochs expressed in seconds (s).
1640 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1641 * @param oldC previous body-to-NED coordinate transformation.
1642 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1643 * along north, east, and down and expressed in meters per second (m/s).
1644 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1645 * along north, east, and down and expressed in meters per second (m/s).
1646 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1647 * along north, east, and down and expressed in meters per second (m/s).
1648 * @param oldLatitude previous latitude expressed in radians (rad).
1649 * @param oldHeight previous height expressed in meters (m).
1650 * @return a new body kinematics instance.
1651 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1652 * matrices are not NED frame valid.
1653 */
1654 public BodyKinematics estimateAndReturnNew(
1655 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1656 final double oldVn, final double oldVe, final double oldVd,
1657 final double oldLatitude, final double oldHeight) {
1658 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight);
1659 }
1660
1661 /**
1662 * Estimates body kinematics (specific force applied to a body and its angular rates)
1663 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1664 *
1665 * @param timeInterval time interval between epochs.
1666 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1667 * @param oldC previous body-to-NED coordinate transformation.
1668 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1669 * along north, east, and down and expressed in meters per second (m/s).
1670 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1671 * along north, east, and down and expressed in meters per second (m/s).
1672 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1673 * along north, east, and down and expressed in meters per second (m/s).
1674 * @param oldLatitude previous latitude expressed in radians (rad).
1675 * @param oldHeight previous height expressed in meters (m).
1676 * @return a new body kinematics instance.
1677 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1678 * matrices are not NED frame valid.
1679 */
1680 public BodyKinematics estimateAndReturnNew(
1681 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1682 final double oldVn, final double oldVe, final double oldVd,
1683 final double oldLatitude, final double oldHeight) {
1684 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight);
1685 }
1686
1687 /**
1688 * Estimates body kinematics (specific force applied to a body and its angular rates)
1689 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1690 *
1691 * @param timeInterval time interval between epochs expressed in seconds (s).
1692 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1693 * @param oldC previous body-to-NED coordinate transformation.
1694 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1695 * down.
1696 * @param oldLatitude previous latitude expressed in radians (rad).
1697 * @param oldHeight previous height expressed in meters (m).
1698 * @return a new body kinematics instance.
1699 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1700 * matrices are not NED frame valid.
1701 */
1702 public BodyKinematics estimateAndReturnNew(
1703 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1704 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight) {
1705 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight);
1706 }
1707
1708 /**
1709 * Estimates body kinematics (specific force applied to a body and its angular rates)
1710 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1711 *
1712 * @param timeInterval time interval between epochs.
1713 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1714 * @param oldC previous body-to-NED coordinate transformation.
1715 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1716 * down.
1717 * @param oldLatitude previous latitude expressed in radians (rad).
1718 * @param oldHeight previous height expressed in meters (m).
1719 * @return a new body kinematics instance.
1720 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1721 * matrices are not NED frame valid.
1722 */
1723 public BodyKinematics estimateAndReturnNew(
1724 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1725 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight) {
1726 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight);
1727 }
1728
1729 /**
1730 * Estimates body kinematics (specific force applied to a body and its angular rates)
1731 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1732 *
1733 * @param timeInterval time interval between epochs expressed in seconds (s).
1734 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1735 * @param oldC previous body-to-NED coordinate transformation.
1736 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1737 * down.
1738 * @param oldLatitude previous latitude.
1739 * @param oldHeight previous height.
1740 * @return a new body kinematics instance.
1741 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1742 * matrices are not NED frame valid.
1743 */
1744 public BodyKinematics estimateAndReturnNew(
1745 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1746 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight) {
1747 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight);
1748 }
1749
1750 /**
1751 * Estimates body kinematics (specific force applied to a body and its angular rates)
1752 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1753 *
1754 * @param timeInterval time interval between epochs.
1755 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1756 * @param oldC previous body-to-NED coordinate transformation.
1757 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1758 * down.
1759 * @param oldLatitude previous latitude.
1760 * @param oldHeight previous height.
1761 * @return a new body kinematics instance.
1762 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1763 * matrices are not NED frame valid.
1764 */
1765 public BodyKinematics estimateAndReturnNew(
1766 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1767 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight) {
1768 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight);
1769 }
1770
1771 /**
1772 * Estimates body kinematics (specific force applied to a body and its angular rates)
1773 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1774 *
1775 * @param timeInterval time interval between epochs expressed in seconds (s).
1776 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1777 * @param oldC previous body-to-NED coordinate transformation.
1778 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1779 * along north, east, and down and expressed in meters per second (m/s).
1780 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1781 * along north, east, and down and expressed in meters per second (m/s).
1782 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1783 * along north, east, and down and expressed in meters per second (m/s).
1784 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1785 * @return a new body kinematics instance.
1786 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1787 * matrices are not NED frame valid.
1788 */
1789 public BodyKinematics estimateAndReturnNew(
1790 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1791 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition) {
1792 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition);
1793 }
1794
1795 /**
1796 * Estimates body kinematics (specific force applied to a body and its angular rates)
1797 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1798 *
1799 * @param timeInterval time interval between epochs.
1800 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1801 * @param oldC previous body-to-NED coordinate transformation.
1802 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1803 * along north, east, and down and expressed in meters per second (m/s).
1804 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1805 * along north, east, and down and expressed in meters per second (m/s).
1806 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1807 * along north, east, and down and expressed in meters per second (m/s).
1808 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1809 * @return a new body kinematics instance.
1810 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1811 * matrices are not NED frame valid.
1812 */
1813 public BodyKinematics estimateAndReturnNew(
1814 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1815 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition) {
1816 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition);
1817 }
1818
1819 /**
1820 * Estimates body kinematics (specific force applied to a body and its angular rates)
1821 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1822 *
1823 * @param timeInterval time interval between epochs expressed in seconds (s).
1824 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1825 * @param oldC previous body-to-NED coordinate transformation.
1826 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1827 * along north, east, and down.
1828 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1829 * along north, east, and down.
1830 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1831 * along north, east, and down.
1832 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1833 * @return a new body kinematics instance.
1834 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1835 * matrices are not NED frame valid.
1836 */
1837 public BodyKinematics estimateAndReturnNew(
1838 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1839 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition) {
1840 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition);
1841 }
1842
1843 /**
1844 * Estimates body kinematics (specific force applied to a body and its angular rates)
1845 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1846 *
1847 * @param timeInterval time interval between epochs.
1848 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1849 * @param oldC previous body-to-NED coordinate transformation.
1850 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
1851 * along north, east, and down.
1852 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
1853 * along north, east, and down.
1854 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
1855 * along north, east, and down.
1856 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1857 * @return a new body kinematics instance.
1858 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1859 * matrices are not NED frame valid.
1860 */
1861 public BodyKinematics estimateAndReturnNew(
1862 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1863 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition) {
1864 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition);
1865 }
1866
1867 /**
1868 * Estimates body kinematics (specific force applied to a body and its angular rates)
1869 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1870 *
1871 * @param timeInterval time interval between epochs expressed in seconds (s).
1872 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1873 * @param oldC previous body-to-NED coordinate transformation.
1874 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1875 * down.
1876 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1877 * @return a new body kinematics instance.
1878 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1879 * matrices are not NED frame valid.
1880 */
1881 public BodyKinematics estimateAndReturnNew(
1882 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1883 final NEDVelocity oldVelocity, final NEDPosition oldPosition) {
1884 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVelocity, oldPosition);
1885 }
1886
1887 /**
1888 * Estimates body kinematics (specific force applied to a body and its angular rates)
1889 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1890 *
1891 * @param timeInterval time interval between epochs.
1892 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
1893 * @param oldC previous body-to-NED coordinate transformation.
1894 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
1895 * down.
1896 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
1897 * @return a new body kinematics instance.
1898 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1899 * matrices are not NED frame valid.
1900 */
1901 public BodyKinematics estimateAndReturnNew(
1902 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
1903 final NEDVelocity oldVelocity, final NEDPosition oldPosition) {
1904 return estimateKinematicsAndReturnNew(timeInterval, frame, oldC, oldVelocity, oldPosition);
1905 }
1906
1907 /**
1908 * Estimates body kinematics (specific force applied to a body and its angular rates)
1909 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1910 *
1911 * @param timeInterval time interval between epochs expressed in seconds (s).
1912 * @param c body-to-NED coordinate transformation.
1913 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1914 * north, east, and down and expressed in meters per second (m/s).
1915 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1916 * north, east, and down and expressed in meters per second (m/s).
1917 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1918 * north, east, and down and expressed in meters per second (m/s).
1919 * @param latitude current latitude expressed in radians (rad).
1920 * @param height current height expressed in meters (m).
1921 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
1922 * @return a new body kinematics instance.
1923 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1924 * matrices are not NED frame valid.
1925 */
1926 public BodyKinematics estimateAndReturnNew(
1927 final double timeInterval, final CoordinateTransformation c,
1928 final double vn, final double ve, final double vd, final double latitude, final double height,
1929 final NEDFrame oldFrame) {
1930 return estimateKinematicsAndReturnNew(timeInterval, c, vn, ve, vd, latitude, height, oldFrame);
1931 }
1932
1933 /**
1934 * Estimates body kinematics (specific force applied to a body and its angular rates)
1935 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1936 *
1937 * @param timeInterval time interval between epochs.
1938 * @param c body-to-NED coordinate transformation.
1939 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
1940 * north, east, and down and expressed in meters per second (m/s).
1941 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
1942 * north, east, and down and expressed in meters per second (m/s).
1943 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
1944 * north, east, and down and expressed in meters per second (m/s).
1945 * @param latitude current latitude expressed in radians (rad).
1946 * @param height current height expressed in meters (m).
1947 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
1948 * @return a new body kinematics instance.
1949 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1950 * matrices are not NED frame valid.
1951 */
1952 public BodyKinematics estimateAndReturnNew(
1953 final Time timeInterval, final CoordinateTransformation c,
1954 final double vn, final double ve, final double vd, final double latitude, final double height,
1955 final NEDFrame oldFrame) {
1956 return estimateKinematicsAndReturnNew(timeInterval, c, vn, ve, vd, latitude, height, oldFrame);
1957 }
1958
1959 /**
1960 * Estimates body kinematics (specific force applied to a body and its angular rates)
1961 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1962 *
1963 * @param timeInterval time interval between epochs expressed in seconds (s).
1964 * @param c body-to-NED coordinate transformation.
1965 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1966 * @param latitude current latitude expressed in radians (rad).
1967 * @param height current height expressed in meters (m).
1968 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
1969 * @return a new body kinematics instance.
1970 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1971 * matrices are not NED frame valid.
1972 */
1973 public BodyKinematics estimateAndReturnNew(
1974 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
1975 final double latitude, final double height, final NEDFrame oldFrame) {
1976 return estimateKinematicsAndReturnNew(timeInterval, c, velocity, latitude, height, oldFrame);
1977 }
1978
1979 /**
1980 * Estimates body kinematics (specific force applied to a body and its angular rates)
1981 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
1982 *
1983 * @param timeInterval time interval between epochs.
1984 * @param c body-to-NED coordinate transformation.
1985 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
1986 * @param latitude current latitude expressed in radians (rad).
1987 * @param height current height expressed in meters (m).
1988 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
1989 * @return a new body kinematics instance.
1990 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
1991 * matrices are not NED frame valid.
1992 */
1993 public BodyKinematics estimateAndReturnNew(
1994 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
1995 final double latitude, final double height, final NEDFrame oldFrame) {
1996 return estimateKinematicsAndReturnNew(timeInterval, c, velocity, latitude, height, oldFrame);
1997 }
1998
1999 /**
2000 * Estimates body kinematics (specific force applied to a body and its angular rates)
2001 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2002 *
2003 * @param timeInterval time interval between epochs expressed in seconds (s).
2004 * @param c body-to-NED coordinate transformation.
2005 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2006 * @param latitude current latitude.
2007 * @param height current height.
2008 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2009 * @return a new body kinematics instance.
2010 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2011 * matrices are not NED frame valid.
2012 */
2013 public BodyKinematics estimateAndReturnNew(
2014 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
2015 final Angle latitude, final Distance height, final NEDFrame oldFrame) {
2016 return estimateKinematicsAndReturnNew(timeInterval, c, velocity, latitude, height, oldFrame);
2017 }
2018
2019 /**
2020 * Estimates body kinematics (specific force applied to a body and its angular rates)
2021 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2022 *
2023 * @param timeInterval time interval between epochs.
2024 * @param c body-to-NED coordinate transformation.
2025 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2026 * @param latitude current latitude.
2027 * @param height current height.
2028 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2029 * @return a new body kinematics instance.
2030 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2031 * matrices are not NED frame valid.
2032 */
2033 public BodyKinematics estimateAndReturnNew(
2034 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
2035 final Angle latitude, final Distance height, final NEDFrame oldFrame) {
2036 return estimateKinematicsAndReturnNew(timeInterval, c, velocity, latitude, height, oldFrame);
2037 }
2038
2039 /**
2040 * Estimates body kinematics (specific force applied to a body and its angular rates)
2041 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2042 *
2043 * @param timeInterval time interval between epochs expressed in seconds (s).
2044 * @param c body-to-NED coordinate transformation.
2045 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2046 * north, east, and down and expressed in meters per second (m/s).
2047 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2048 * north, east, and down and expressed in meters per second (m/s).
2049 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2050 * north, east, and down and expressed in meters per second (m/s).
2051 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2052 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2053 * @return a new body kinematics instance.
2054 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2055 * matrices are not NED frame valid.
2056 */
2057 public BodyKinematics estimateAndReturnNew(
2058 final double timeInterval, final CoordinateTransformation c,
2059 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame) {
2060 return estimateKinematicsAndReturnNew(timeInterval, c, vn, ve, vd, position, oldFrame);
2061 }
2062
2063 /**
2064 * Estimates body kinematics (specific force applied to a body and its angular rates)
2065 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2066 *
2067 * @param timeInterval time interval between epochs.
2068 * @param c body-to-NED coordinate transformation.
2069 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2070 * north, east, and down and expressed in meters per second (m/s).
2071 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2072 * north, east, and down and expressed in meters per second (m/s).
2073 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2074 * north, east, and down and expressed in meters per second (m/s).
2075 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2076 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2077 * @return a new body kinematics instance.
2078 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2079 * matrices are not NED frame valid.
2080 */
2081 public BodyKinematics estimateAndReturnNew(
2082 final Time timeInterval, final CoordinateTransformation c,
2083 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame) {
2084 return estimateKinematicsAndReturnNew(timeInterval, c, vn, ve, vd, position, oldFrame);
2085 }
2086
2087 /**
2088 * Estimates body kinematics (specific force applied to a body and its angular rates)
2089 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2090 *
2091 * @param timeInterval time interval between epochs expressed in seconds (s).
2092 * @param c body-to-NED coordinate transformation.
2093 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2094 * north, east, and down.
2095 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2096 * north, east, and down.
2097 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2098 * north, east, and down.
2099 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2100 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2101 * @return a new body kinematics instance.
2102 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2103 * matrices are not NED frame valid.
2104 */
2105 public BodyKinematics estimateAndReturnNew(
2106 final double timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
2107 final NEDPosition position, final NEDFrame oldFrame) {
2108 return estimateKinematicsAndReturnNew(timeInterval, c, vn, ve, vd, position, oldFrame);
2109 }
2110
2111 /**
2112 * Estimates body kinematics (specific force applied to a body and its angular rates)
2113 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2114 *
2115 * @param timeInterval time interval between epochs.
2116 * @param c body-to-NED coordinate transformation.
2117 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2118 * north, east, and down.
2119 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2120 * north, east, and down.
2121 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2122 * north, east, and down.
2123 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2124 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2125 * @return a new body kinematics instance.
2126 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2127 * matrices are not NED frame valid.
2128 */
2129 public BodyKinematics estimateAndReturnNew(
2130 final Time timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
2131 final NEDPosition position, final NEDFrame oldFrame) {
2132 return estimateKinematicsAndReturnNew(timeInterval, c, vn, ve, vd, position, oldFrame);
2133 }
2134
2135 /**
2136 * Estimates body kinematics (specific force applied to a body and its angular rates)
2137 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2138 *
2139 * @param timeInterval time interval between epochs expressed in seconds (s).
2140 * @param c body-to-NED coordinate transformation.
2141 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2142 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2143 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2144 * @return a new body kinematics instance.
2145 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2146 * matrices are not NED frame valid.
2147 */
2148 public BodyKinematics estimateAndReturnNew(
2149 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
2150 final NEDPosition position, final NEDFrame oldFrame) {
2151 return estimateKinematicsAndReturnNew(timeInterval, c, velocity, position, oldFrame);
2152 }
2153
2154 /**
2155 * Estimates body kinematics (specific force applied to a body and its angular rates)
2156 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2157 *
2158 * @param timeInterval time interval between epochs.
2159 * @param c body-to-NED coordinate transformation.
2160 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2161 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2162 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2163 * @return a new body kinematics instance.
2164 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2165 * matrices are not NED frame valid.
2166 */
2167 public BodyKinematics estimateAndReturnNew(
2168 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
2169 final NEDPosition position, final NEDFrame oldFrame) {
2170 return estimateKinematicsAndReturnNew(timeInterval, c, velocity, position, oldFrame);
2171 }
2172
2173 /**
2174 * Estimates body kinematics (specific force applied to a body and its angular rates)
2175 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2176 *
2177 * @param timeInterval time interval between epochs expressed in seconds (s).
2178 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
2179 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2180 * @return a new body kinematics instance.
2181 * @throws IllegalArgumentException if provided time interval is negative.
2182 */
2183 public BodyKinematics estimateAndReturnNew(
2184 final double timeInterval, final NEDFrame frame, final NEDFrame oldFrame) {
2185 return estimateKinematicsAndReturnNew(timeInterval, frame, oldFrame);
2186 }
2187
2188 /**
2189 * Estimates body kinematics (specific force applied to a body and its angular rates)
2190 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2191 *
2192 * @param timeInterval time interval between epochs.
2193 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
2194 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
2195 * @return a new body kinematics instance.
2196 * @throws IllegalArgumentException if provided time interval is negative.
2197 */
2198 public BodyKinematics estimateAndReturnNew(
2199 final Time timeInterval, final NEDFrame frame, final NEDFrame oldFrame) {
2200 return estimateKinematicsAndReturnNew(timeInterval, frame, oldFrame);
2201 }
2202
2203 /**
2204 * Estimates body kinematics (specific force applied to a body and its angular rates)
2205 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2206 *
2207 * @param timeInterval time interval between epochs expressed in seconds (s).
2208 * @param c body-to-NED coordinate transformation.
2209 * @param oldC previous body-to-NED coordinate transformation.
2210 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2211 * north, east, and down.
2212 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2213 * north, east, and down.
2214 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2215 * north, east, and down.
2216 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2217 * along north, east, and down.
2218 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2219 * along north, east, and down.
2220 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2221 * along north, east, and down.
2222 * @param latitude current latitude expressed in radians (rad).
2223 * @param height current height expressed in meters (m).
2224 * @param oldLatitude previous latitude expressed in radians (rad).
2225 * @param oldHeight previous height expressed in meters (m).
2226 * @return a new body kinematics instance.
2227 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2228 * matrices are not NED frame valid.
2229 */
2230 public BodyKinematics estimateAndReturnNew(
2231 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2232 final Speed vn, final Speed ve, final Speed vd,
2233 final Speed oldVn, final Speed oldVe, final Speed oldVd,
2234 final double latitude, final double height, final double oldLatitude, final double oldHeight) {
2235 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2236 oldLatitude, oldHeight);
2237 }
2238
2239 /**
2240 * Estimates body kinematics (specific force applied to a body and its angular rates)
2241 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2242 *
2243 * @param timeInterval time interval between epochs.
2244 * @param c body-to-NED coordinate transformation.
2245 * @param oldC previous body-to-NED coordinate transformation.
2246 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2247 * north, east, and down.
2248 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2249 * north, east, and down.
2250 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2251 * north, east, and down.
2252 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2253 * along north, east, and down.
2254 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2255 * along north, east, and down.
2256 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2257 * along north, east, and down.
2258 * @param latitude current latitude expressed in radians (rad).
2259 * @param height current height expressed in meters (m).
2260 * @param oldLatitude previous latitude expressed in radians (rad).
2261 * @param oldHeight previous height expressed in meters (m).
2262 * @return a new body kinematics instance.
2263 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2264 * matrices are not NED frame valid.
2265 */
2266 public BodyKinematics estimateAndReturnNew(
2267 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2268 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
2269 final double latitude, final double height, final double oldLatitude, final double oldHeight) {
2270 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2271 oldLatitude, oldHeight);
2272 }
2273
2274 /**
2275 * Estimates body kinematics (specific force applied to a body and its angular rates)
2276 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2277 *
2278 * @param timeInterval time interval between epochs expressed in seconds (s).
2279 * @param c body-to-NED coordinate transformation.
2280 * @param oldC previous body-to-NED coordinate transformation.
2281 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2282 * north, east, and down and expressed in meters per second (m/s).
2283 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2284 * north, east, and down and expressed in meters per second (m/s).
2285 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2286 * north, east, and down and expressed in meters per second (m/s).
2287 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2288 * along north, east, and down and expressed in meters per second (m/s).
2289 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2290 * along north, east, and down and expressed in meters per second (m/s).
2291 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2292 * along north, east, and down and expressed in meters per second (m/s).
2293 * @param latitude current latitude.
2294 * @param height current height expressed in meters (m).
2295 * @param oldLatitude previous latitude.
2296 * @param oldHeight previous height expressed in meters (m).
2297 * @return a new body kinematics instance.
2298 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2299 * matrices are not NED frame valid.
2300 */
2301 public BodyKinematics estimateAndReturnNew(
2302 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2303 final double vn, final double ve, final double vd,
2304 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
2305 final Angle oldLatitude, final double oldHeight) {
2306 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2307 oldLatitude, oldHeight);
2308 }
2309
2310 /**
2311 * Estimates body kinematics (specific force applied to a body and its angular rates)
2312 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2313 *
2314 * @param timeInterval time interval between epochs.
2315 * @param c body-to-NED coordinate transformation.
2316 * @param oldC previous body-to-NED coordinate transformation.
2317 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2318 * north, east, and down and expressed in meters per second (m/s).
2319 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2320 * north, east, and down and expressed in meters per second (m/s).
2321 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2322 * north, east, and down and expressed in meters per second (m/s).
2323 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2324 * along north, east, and down and expressed in meters per second (m/s).
2325 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2326 * along north, east, and down and expressed in meters per second (m/s).
2327 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2328 * along north, east, and down and expressed in meters per second (m/s).
2329 * @param latitude current latitude.
2330 * @param height current height expressed in meters (m).
2331 * @param oldLatitude previous latitude.
2332 * @param oldHeight previous height expressed in meters (m).
2333 * @return a new body kinematics instance.
2334 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2335 * matrices are not NED frame valid.
2336 */
2337 public BodyKinematics estimateAndReturnNew(
2338 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2339 final double vn, final double ve, final double vd,
2340 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
2341 final Angle oldLatitude, final double oldHeight) {
2342 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2343 oldLatitude, oldHeight);
2344 }
2345
2346 /**
2347 * Estimates body kinematics (specific force applied to a body and its angular rates)
2348 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2349 *
2350 * @param timeInterval time interval between epochs expressed in seconds (s).
2351 * @param c body-to-NED coordinate transformation.
2352 * @param oldC previous body-to-NED coordinate transformation.
2353 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2354 * north, east, and down and expressed in meters per second (m/s).
2355 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2356 * north, east, and down and expressed in meters per second (m/s).
2357 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2358 * north, east, and down and expressed in meters per second (m/s).
2359 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2360 * along north, east, and down and expressed in meters per second (m/s).
2361 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2362 * along north, east, and down and expressed in meters per second (m/s).
2363 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2364 * along north, east, and down and expressed in meters per second (m/s).
2365 * @param latitude current latitude expressed in radians (rad).
2366 * @param height current height.
2367 * @param oldLatitude previous latitude expressed in radians (rad).
2368 * @param oldHeight previous height.
2369 * @return a new body kinematics instance.
2370 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2371 * matrices are not NED frame valid.
2372 */
2373 public BodyKinematics estimateAndReturnNew(
2374 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2375 final double vn, final double ve, final double vd,
2376 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
2377 final double oldLatitude, final Distance oldHeight) {
2378 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2379 oldLatitude, oldHeight);
2380 }
2381
2382 /**
2383 * Estimates body kinematics (specific force applied to a body and its angular rates)
2384 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2385 *
2386 * @param timeInterval time interval between epochs.
2387 * @param c body-to-NED coordinate transformation.
2388 * @param oldC previous body-to-NED coordinate transformation.
2389 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2390 * north, east, and down and expressed in meters per second (m/s).
2391 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2392 * north, east, and down and expressed in meters per second (m/s).
2393 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2394 * north, east, and down and expressed in meters per second (m/s).
2395 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2396 * along north, east, and down and expressed in meters per second (m/s).
2397 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2398 * along north, east, and down and expressed in meters per second (m/s).
2399 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2400 * along north, east, and down and expressed in meters per second (m/s).
2401 * @param latitude current latitude expressed in radians (rad).
2402 * @param height current height.
2403 * @param oldLatitude previous latitude expressed in radians (rad).
2404 * @param oldHeight previous height.
2405 * @return a new body kinematics instance.
2406 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2407 * matrices are not NED frame valid.
2408 */
2409 public BodyKinematics estimateAndReturnNew(
2410 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2411 final double vn, final double ve, final double vd,
2412 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
2413 final double oldLatitude, final Distance oldHeight) {
2414 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2415 oldLatitude, oldHeight);
2416 }
2417
2418 /**
2419 * Estimates body kinematics (specific force applied to a body and its angular rates)
2420 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2421 *
2422 * @param timeInterval time interval between epochs expressed in seconds (s).
2423 * @param c body-to-NED coordinate transformation.
2424 * @param oldC previous body-to-NED coordinate transformation.
2425 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2426 * north, east, and down.
2427 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2428 * north, east, and down.
2429 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2430 * north, east, and down.
2431 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2432 * along north, east, and down.
2433 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2434 * along north, east, and down.
2435 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2436 * along north, east, and down.
2437 * @param latitude current latitude.
2438 * @param height current height.
2439 * @param oldLatitude previous latitude.
2440 * @param oldHeight previous height.
2441 * @return a new body kinematics instance.
2442 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2443 * matrices are not NED frame valid.
2444 */
2445 public BodyKinematics estimateAndReturnNew(
2446 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2447 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
2448 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight) {
2449 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2450 oldLatitude, oldHeight);
2451 }
2452
2453 /**
2454 * Estimates body kinematics (specific force applied to a body and its angular rates)
2455 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2456 *
2457 * @param timeInterval time interval between epochs.
2458 * @param c body-to-NED coordinate transformation.
2459 * @param oldC previous body-to-NED coordinate transformation.
2460 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2461 * north, east, and down.
2462 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2463 * north, east, and down.
2464 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2465 * north, east, and down.
2466 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2467 * along north, east, and down.
2468 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2469 * along north, east, and down.
2470 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2471 * along north, east, and down.
2472 * @param latitude current latitude.
2473 * @param height current height.
2474 * @param oldLatitude previous latitude.
2475 * @param oldHeight previous height.
2476 * @return a new body kinematics instance.
2477 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2478 * matrices are not NED frame valid.
2479 */
2480 public BodyKinematics estimateAndReturnNew(
2481 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2482 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
2483 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight) {
2484 return estimateKinematicsAndReturnNew(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2485 oldLatitude, oldHeight);
2486 }
2487
2488 /**
2489 * Estimates body kinematics (specific force applied to a body and its angular rates)
2490 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2491 *
2492 * @param timeInterval time interval between epochs expressed in seconds (s).
2493 * @param c body-to-NED coordinate transformation.
2494 * @param oldC previous body-to-NED coordinate transformation.
2495 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2496 * north, east, and down and expressed in meters per second (m/s).
2497 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2498 * north, east, and down and expressed in meters per second (m/s).
2499 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2500 * north, east, and down and expressed in meters per second (m/s).
2501 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2502 * along north, east, and down and expressed in meters per second (m/s).
2503 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2504 * along north, east, and down and expressed in meters per second (m/s).
2505 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2506 * along north, east, and down and expressed in meters per second (m/s).
2507 * @param latitude current latitude expressed in radians (rad).
2508 * @param height current height expressed in meters (m).
2509 * @param oldLatitude previous latitude expressed in radians (rad).
2510 * @param oldHeight previous height expressed in meters (m).
2511 * @param result instance where estimated body kinematics will be stored.
2512 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2513 * matrices are not NED frame valid.
2514 */
2515 public static void estimateKinematics(
2516 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2517 final double vn, final double ve, final double vd,
2518 final double oldVn, final double oldVe, final double oldVd, final double latitude, final double height,
2519 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
2520
2521 if (timeInterval < 0.0 || !NEDFrame.isValidCoordinateTransformation(c)
2522 || !NEDFrame.isValidCoordinateTransformation(oldC)) {
2523 throw new IllegalArgumentException();
2524 }
2525
2526 if (timeInterval > 0.0) {
2527 try {
2528 // From (2.123), determine the angular rate of the NED frame
2529 // with respect the ECI frame, resolved about NED
2530 final var omegaIen = new Matrix(ROWS, 1);
2531 omegaIen.setElementAtIndex(0, EARTH_ROTATION_RATE * Math.cos(oldLatitude));
2532 omegaIen.setElementAtIndex(2, -EARTH_ROTATION_RATE * Math.sin(oldLatitude));
2533
2534 // From (5.44), determine the angular rate of the NED frame
2535 // with respect the NED frame, resolved about NED
2536 final var oldRadiiOfCurvature = RadiiOfCurvatureEstimator.estimateRadiiOfCurvatureAndReturnNew(
2537 oldLatitude);
2538 final var oldRn = oldRadiiOfCurvature.getRn();
2539 final var oldRe = oldRadiiOfCurvature.getRe();
2540
2541 final var radiiOfCurvature = RadiiOfCurvatureEstimator.estimateRadiiOfCurvatureAndReturnNew(latitude);
2542 final var rn = radiiOfCurvature.getRn();
2543 final var re = radiiOfCurvature.getRe();
2544
2545 final var oldOmegaEnN = new Matrix(ROWS, 1);
2546 oldOmegaEnN.setElementAtIndex(0, oldVe / (oldRe + oldHeight));
2547 oldOmegaEnN.setElementAtIndex(1, -oldVn / (oldRn + oldHeight));
2548 oldOmegaEnN.setElementAtIndex(2, -oldVe * Math.tan(oldLatitude) / (oldRe + oldHeight));
2549
2550 final var omegaEnN = new Matrix(ROWS, 1);
2551 omegaEnN.setElementAtIndex(0, ve / (re + height));
2552 omegaEnN.setElementAtIndex(1, -vn / (rn + height));
2553 omegaEnN.setElementAtIndex(2, -ve * Math.tan(latitude) / (re + height));
2554
2555 // Obtain coordinate transformation matrix from the old attitude (with
2556 // respect the inertial frame) to the new using (5.77)
2557 final var cbn = c.getMatrix();
2558 cbn.transpose();
2559
2560 final var omega = omegaIen.addAndReturnNew(omegaEnN.multiplyByScalarAndReturnNew(0.5));
2561 omega.add(oldOmegaEnN.multiplyByScalarAndReturnNew(0.5));
2562 final var skew1 = Utils.skewMatrix(omega);
2563 skew1.multiplyByScalar(timeInterval);
2564
2565 final var tmp1 = Matrix.identity(ROWS, ROWS);
2566 tmp1.subtract(skew1);
2567
2568 final var oldCbn = oldC.getMatrix();
2569 cbn.multiply(tmp1);
2570 cbn.multiply(oldCbn);
2571 // cbn contains transformation matrix from the old to the new attitude (cOldNew)
2572
2573 // Calculate the approximate angular rate with respect an inertial frame
2574 final var alphaIbb = new Matrix(ROWS, 1);
2575 alphaIbb.setElementAtIndex(0,
2576 0.5 * (cbn.getElementAt(1, 2) - cbn.getElementAt(2, 1)));
2577 alphaIbb.setElementAtIndex(1,
2578 0.5 * (cbn.getElementAt(2, 0) - cbn.getElementAt(0, 2)));
2579 alphaIbb.setElementAtIndex(2,
2580 0.5 * (cbn.getElementAt(0, 1) - cbn.getElementAt(1, 0)));
2581
2582 // Calculate and apply the scaling factor
2583 final var temp = Math.acos(0.5 * (Utils.trace(cbn) - 1.0));
2584 if (temp > SCALING_THRESHOLD) {
2585 // Scaling is 1 if temp is less than this
2586 alphaIbb.multiplyByScalar(temp / Math.sin(temp));
2587 }
2588
2589 // Calculate the angular rate
2590 final var angularRateX = alphaIbb.getElementAtIndex(0) / timeInterval;
2591 final var angularRateY = alphaIbb.getElementAtIndex(1) / timeInterval;
2592 final var angularRateZ = alphaIbb.getElementAtIndex(2) / timeInterval;
2593
2594 // Calculate the specific force resolved about NED-frame axes
2595 // From (5.54)
2596 final var tmp2 = new Matrix(ROWS, 1);
2597 tmp2.setElementAtIndex(0, (vn - oldVn) / timeInterval);
2598 tmp2.setElementAtIndex(1, (ve - oldVe) / timeInterval);
2599 tmp2.setElementAtIndex(2, (vd - oldVd) / timeInterval);
2600
2601 final var gravity = NEDGravityEstimator.estimateGravityAndReturnNew(oldLatitude, oldHeight);
2602 final var g = gravity.asMatrix();
2603
2604 final var oldVebn = new Matrix(ROWS, 1);
2605 oldVebn.setElementAtIndex(0, oldVn);
2606 oldVebn.setElementAtIndex(1, oldVe);
2607 oldVebn.setElementAtIndex(2, oldVd);
2608
2609 final var skew2 = Utils.skewMatrix(oldOmegaEnN.addAndReturnNew(
2610 omegaIen.multiplyByScalarAndReturnNew(2.0)));
2611 skew2.multiply(oldVebn);
2612
2613 tmp2.subtract(g);
2614 tmp2.add(skew2);
2615 // tmp2 now contains specific force resolved about NED (fIbn)
2616
2617 // Calculate the average body-to-NED coordinate transformation
2618 // matrix over the update interval using (5.84) and (5.86)
2619 final var magAlpha = Utils.normF(alphaIbb);
2620 final var skewAlpha = Utils.skewMatrix(alphaIbb);
2621
2622 oldOmegaEnN.add(omegaIen);
2623 final var tmp3 = Utils.skewMatrix(oldOmegaEnN);
2624 tmp3.multiplyByScalar(0.5);
2625 tmp3.multiply(oldCbn);
2626
2627 if (magAlpha > ALPHA_THRESHOLD) {
2628 final var magAlpha2 = magAlpha * magAlpha;
2629 final var value1 = (1.0 - Math.cos(magAlpha)) / magAlpha2;
2630 final var value2 = (1.0 - Math.sin(magAlpha) / magAlpha) / magAlpha2;
2631
2632 final var tmp4 = skewAlpha.multiplyByScalarAndReturnNew(value1);
2633 final var tmp5 = skewAlpha.multiplyByScalarAndReturnNew(value2);
2634 tmp5.multiply(skewAlpha);
2635
2636 final var tmp6 = Matrix.identity(ROWS, ROWS);
2637 tmp6.add(tmp4);
2638 tmp6.add(tmp5);
2639
2640 oldCbn.multiply(tmp6);
2641 }
2642
2643 oldCbn.subtract(tmp3);
2644 // oldCbn now contains average body-to-NED (aveCbn)
2645
2646 // Transform specific force to body-frame resolving axes using (5.81)
2647 final var fIbb = Utils.inverse(oldCbn);
2648 fIbb.multiply(tmp2);
2649
2650 final var specificForceX = fIbb.getElementAtIndex(0);
2651 final var specificForceY = fIbb.getElementAtIndex(1);
2652 final var specificForceZ = fIbb.getElementAtIndex(2);
2653
2654 // save result data
2655 result.setSpecificForceCoordinates(specificForceX, specificForceY, specificForceZ);
2656 result.setAngularRateCoordinates(angularRateX, angularRateY, angularRateZ);
2657
2658 } catch (final AlgebraException ignore) {
2659 // never happens
2660 }
2661 } else {
2662 // If time interval is zero, set angular rate and specific force to zero
2663 result.setSpecificForceCoordinates(0.0, 0.0, 0.0);
2664 result.setAngularRateCoordinates(0.0, 0.0, 0.0);
2665 }
2666 }
2667
2668 /**
2669 * Estimates body kinematics (specific force applied to a body and its angular rates)
2670 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2671 *
2672 * @param timeInterval time interval between epochs.
2673 * @param c body-to-NED coordinate transformation.
2674 * @param oldC previous body-to-NED coordinate transformation.
2675 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2676 * north, east, and down and expressed in meters per second (m/s).
2677 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2678 * north, east, and down and expressed in meters per second (m/s).
2679 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2680 * north, east, and down and expressed in meters per second (m/s).
2681 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2682 * along north, east, and down and expressed in meters per second (m/s).
2683 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2684 * along north, east, and down and expressed in meters per second (m/s).
2685 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2686 * along north, east, and down and expressed in meters per second (m/s).
2687 * @param latitude current latitude expressed in radians (rad).
2688 * @param height current height expressed in meters (m).
2689 * @param oldLatitude previous latitude expressed in radians (rad).
2690 * @param oldHeight previous height expressed in meters (m).
2691 * @param result instance where estimated body kinematics will be stored.
2692 * @throws IllegalArgumentException if provided time interval is negative or coordinate
2693 */
2694 public static void estimateKinematics(
2695 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2696 final double vn, final double ve, final double vd,
2697 final double oldVn, final double oldVe, final double oldVd, final double latitude, final double height,
2698 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
2699 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
2700 oldLatitude, oldHeight, result);
2701 }
2702
2703 /**
2704 * Estimates body kinematics (specific force applied to a body and its angular rates)
2705 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2706 *
2707 * @param timeInterval time interval between epochs expressed in seconds (s).
2708 * @param c body-to-NED coordinate transformation.
2709 * @param oldC previous body-to-NED coordinate transformation.
2710 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2711 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
2712 * down.
2713 * @param latitude current latitude expressed in radians (rad).
2714 * @param height current height expressed in meters (m).
2715 * @param oldLatitude previous latitude expressed in radians (rad).
2716 * @param oldHeight previous height expressed in meters (m).
2717 * @param result instance where estimated body kinematics will be stored.
2718 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2719 * matrices are not NED frame valid.
2720 */
2721 public static void estimateKinematics(
2722 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2723 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
2724 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
2725 estimateKinematics(timeInterval, c, oldC, velocity.getVn(), velocity.getVe(), velocity.getVd(),
2726 oldVelocity.getVn(), oldVelocity.getVe(), oldVelocity.getVd(), latitude, height, oldLatitude, oldHeight,
2727 result);
2728 }
2729
2730 /**
2731 * Estimates body kinematics (specific force applied to a body and its angular rates)
2732 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2733 *
2734 * @param timeInterval time interval between epochs.
2735 * @param c body-to-NED coordinate transformation.
2736 * @param oldC previous body-to-NED coordinate transformation.
2737 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2738 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
2739 * down.
2740 * @param latitude current latitude expressed in radians (rad).
2741 * @param height current height expressed in meters (m).
2742 * @param oldLatitude previous latitude expressed in radians (rad).
2743 * @param oldHeight previous height expressed in meters (m).
2744 * @param result instance where estimated body kinematics will be stored.
2745 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2746 * matrices are not NED frame valid.
2747 */
2748 public static void estimateKinematics(
2749 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2750 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
2751 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
2752 estimateKinematics(convertTime(timeInterval), c, oldC, velocity, oldVelocity, latitude, height,
2753 oldLatitude, oldHeight, result);
2754 }
2755
2756 /**
2757 * Estimates body kinematics (specific force applied to a body and its angular rates)
2758 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2759 *
2760 * @param timeInterval time interval between epochs expressed in seconds (s).
2761 * @param c body-to-NED coordinate transformation.
2762 * @param oldC previous body-to-NED coordinate transformation.
2763 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2764 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
2765 * down.
2766 * @param latitude current latitude.
2767 * @param height current height.
2768 * @param oldLatitude previous latitude.
2769 * @param oldHeight previous height.
2770 * @param result instance where estimated body kinematics will be stored.
2771 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2772 * matrices are not NED frame valid.
2773 */
2774 public static void estimateKinematics(
2775 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2776 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
2777 final Angle oldLatitude, final Distance oldHeight, final BodyKinematics result) {
2778 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, convertAngle(latitude), convertDistance(height),
2779 convertAngle(oldLatitude), convertDistance(oldHeight), result);
2780 }
2781
2782 /**
2783 * Estimates body kinematics (specific force applied to a body and its angular rates)
2784 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2785 *
2786 * @param timeInterval time interval between epochs expressed in seconds (s).
2787 * @param c body-to-NED coordinate transformation.
2788 * @param oldC previous body-to-NED coordinate transformation.
2789 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2790 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
2791 * down.
2792 * @param latitude current latitude.
2793 * @param height current height.
2794 * @param oldLatitude previous latitude.
2795 * @param oldHeight previous height.
2796 * @param result instance where estimated body kinematics will be stored.
2797 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2798 * matrices are not NED frame valid.
2799 */
2800 public static void estimateKinematics(
2801 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2802 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
2803 final Angle oldLatitude, final Distance oldHeight, final BodyKinematics result) {
2804 estimateKinematics(convertTime(timeInterval), c, oldC, velocity, oldVelocity, latitude, height,
2805 oldLatitude, oldHeight, result);
2806 }
2807
2808 /**
2809 * Estimates body kinematics (specific force applied to a body and its angular rates)
2810 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2811 *
2812 * @param timeInterval time interval between epochs expressed in seconds (s).
2813 * @param c body-to-NED coordinate transformation.
2814 * @param oldC previous body-to-NED coordinate transformation.
2815 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2816 * north, east, and down and expressed in meters per second (m/s).
2817 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2818 * north, east, and down and expressed in meters per second (m/s).
2819 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2820 * north, east, and down and expressed in meters per second (m/s).
2821 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2822 * along north, east, and down and expressed in meters per second (m/s).
2823 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2824 * along north, east, and down and expressed in meters per second (m/s).
2825 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2826 * along north, east, and down and expressed in meters per second (m/s).
2827 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2828 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
2829 * @param result instance where estimated body kinematics will be stored.
2830 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2831 * matrices are not NED frame valid.
2832 */
2833 public static void estimateKinematics(
2834 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2835 final double vn, final double ve, final double vd,
2836 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
2837 final NEDPosition oldPosition, final BodyKinematics result) {
2838 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd,
2839 position.getLatitude(), position.getHeight(), oldPosition.getLatitude(), oldPosition.getHeight(),
2840 result);
2841 }
2842
2843 /**
2844 * Estimates body kinematics (specific force applied to a body and its angular rates)
2845 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2846 *
2847 * @param timeInterval time interval between epochs.
2848 * @param c body-to-NED coordinate transformation.
2849 * @param oldC previous body-to-NED coordinate transformation.
2850 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2851 * north, east, and down and expressed in meters per second (m/s).
2852 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2853 * north, east, and down and expressed in meters per second (m/s).
2854 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2855 * north, east, and down and expressed in meters per second (m/s).
2856 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2857 * along north, east, and down and expressed in meters per second (m/s).
2858 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2859 * along north, east, and down and expressed in meters per second (m/s).
2860 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2861 * along north, east, and down and expressed in meters per second (m/s).
2862 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2863 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
2864 * @param result instance where estimated body kinematics will be stored.
2865 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2866 * matrices are not NED frame valid.
2867 */
2868 public static void estimateKinematics(
2869 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2870 final double vn, final double ve, final double vd,
2871 final double oldVn, final double oldVe, final double oldVd,
2872 final NEDPosition position, final NEDPosition oldPosition, final BodyKinematics result) {
2873 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition,
2874 result);
2875 }
2876
2877 /**
2878 * Estimates body kinematics (specific force applied to a body and its angular rates)
2879 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2880 *
2881 * @param timeInterval time interval between epochs expressed in seconds (s).
2882 * @param c body-to-NED coordinate transformation.
2883 * @param oldC previous body-to-NED coordinate transformation.
2884 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2885 * north, east, and down.
2886 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2887 * north, east, and down.
2888 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2889 * north, east, and down.
2890 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2891 * along north, east, and down.
2892 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2893 * along north, east, and down.
2894 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2895 * along north, east, and down.
2896 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2897 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
2898 * @param result instance where estimated body kinematics will be stored.
2899 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2900 * matrices are not NED frame valid.
2901 */
2902 public static void estimateKinematics(
2903 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2904 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
2905 final NEDPosition position, final NEDPosition oldPosition, final BodyKinematics result) {
2906 estimateKinematics(timeInterval, c, oldC, convertSpeed(vn), convertSpeed(ve), convertSpeed(vd),
2907 convertSpeed(oldVn), convertSpeed(oldVe), convertSpeed(oldVd), position, oldPosition, result);
2908 }
2909
2910 /**
2911 * Estimates body kinematics (specific force applied to a body and its angular rates)
2912 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2913 *
2914 * @param timeInterval time interval between epochs.
2915 * @param c body-to-NED coordinate transformation.
2916 * @param oldC previous body-to-NED coordinate transformation.
2917 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
2918 * north, east, and down.
2919 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
2920 * north, east, and down.
2921 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
2922 * north, east, and down.
2923 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2924 * along north, east, and down.
2925 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
2926 * along north, east, and down.
2927 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
2928 * along north, east, and down.
2929 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2930 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
2931 * @param result instance where estimated body kinematics will be stored.
2932 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2933 * matrices are not NED frame valid.
2934 */
2935 public static void estimateKinematics(
2936 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2937 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
2938 final NEDPosition position, final NEDPosition oldPosition, final BodyKinematics result) {
2939 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition,
2940 result);
2941 }
2942
2943 /**
2944 * Estimates body kinematics (specific force applied to a body and its angular rates)
2945 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2946 *
2947 * @param timeInterval time interval between epochs expressed in seconds (s).
2948 * @param c body-to-NED coordinate transformation.
2949 * @param oldC previous body-to-NED coordinate transformation.
2950 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2951 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
2952 * down.
2953 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2954 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
2955 * @param result instance where estimated body kinematics will be stored.
2956 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2957 * matrices are not NED frame valid.
2958 */
2959 public static void estimateKinematics(
2960 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2961 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
2962 final NEDPosition oldPosition, final BodyKinematics result) {
2963 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, position.getLatitude(), position.getHeight(),
2964 oldPosition.getLatitude(), oldPosition.getHeight(), result);
2965 }
2966
2967 /**
2968 * Estimates body kinematics (specific force applied to a body and its angular rates)
2969 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2970 *
2971 * @param timeInterval time interval between epochs.
2972 * @param c body-to-NED coordinate transformation.
2973 * @param oldC previous body-to-NED coordinate transformation.
2974 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
2975 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
2976 * down.
2977 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
2978 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
2979 * @param result instance where estimated body kinematics will be stored.
2980 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
2981 * matrices are not NED frame valid.
2982 */
2983 public static void estimateKinematics(
2984 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
2985 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
2986 final NEDPosition oldPosition, final BodyKinematics result) {
2987 estimateKinematics(convertTime(timeInterval), c, oldC, velocity, oldVelocity, position, oldPosition, result);
2988 }
2989
2990 /**
2991 * Estimates body kinematics (specific force applied to a body and its angular rates)
2992 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
2993 *
2994 * @param timeInterval time interval between epochs expressed in seconds (s).
2995 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
2996 * @param oldC previous body-to-NED coordinate transformation.
2997 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
2998 * along north, east, and down and expressed in meters per second (m/s).
2999 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3000 * along north, east, and down and expressed in meters per second (m/s).
3001 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3002 * along north, east, and down and expressed in meters per second (m/s).
3003 * @param oldLatitude previous latitude expressed in radians (rad).
3004 * @param oldHeight previous height expressed in meters (m).
3005 * @param result instance where estimated body kinematics will be stored.
3006 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3007 * matrices are not NED frame valid.
3008 */
3009 public static void estimateKinematics(
3010 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3011 final double oldVn, final double oldVe, final double oldVd,
3012 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
3013 estimateKinematics(timeInterval, frame.getCoordinateTransformation(), oldC,
3014 frame.getVn(), frame.getVe(), frame.getVd(), oldVn, oldVe, oldVd,
3015 frame.getLatitude(), frame.getHeight(), oldLatitude, oldHeight, result);
3016 }
3017
3018 /**
3019 * Estimates body kinematics (specific force applied to a body and its angular rates)
3020 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3021 *
3022 * @param timeInterval time interval between epochs.
3023 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3024 * @param oldC previous body-to-NED coordinate transformation.
3025 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3026 * along north, east, and down and expressed in meters per second (m/s).
3027 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3028 * along north, east, and down and expressed in meters per second (m/s).
3029 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3030 * along north, east, and down and expressed in meters per second (m/s).
3031 * @param oldLatitude previous latitude expressed in radians (rad).
3032 * @param oldHeight previous height expressed in meters (m).
3033 * @param result instance where estimated body kinematics will be stored.
3034 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3035 * matrices are not NED frame valid.
3036 */
3037 public static void estimateKinematics(
3038 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3039 final double oldVn, final double oldVe, final double oldVd,
3040 final double oldLatitude, final double oldHeight, final BodyKinematics result) {
3041 estimateKinematics(convertTime(timeInterval), frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight, result);
3042 }
3043
3044 /**
3045 * Estimates body kinematics (specific force applied to a body and its angular rates)
3046 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3047 *
3048 * @param timeInterval time interval between epochs expressed in seconds (s).
3049 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3050 * @param oldC previous body-to-NED coordinate transformation.
3051 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3052 * down.
3053 * @param oldLatitude previous latitude expressed in radians (rad).
3054 * @param oldHeight previous height expressed in meters (m).
3055 * @param result instance where estimated body kinematics will be stored.
3056 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3057 * matrices are not NED frame valid.
3058 */
3059 public static void estimateKinematics(
3060 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3061 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight,
3062 final BodyKinematics result) {
3063 estimateKinematics(timeInterval, frame, oldC, oldVelocity.getVn(), oldVelocity.getVe(), oldVelocity.getVd(),
3064 oldLatitude, oldHeight, result);
3065 }
3066
3067 /**
3068 * Estimates body kinematics (specific force applied to a body and its angular rates)
3069 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3070 *
3071 * @param timeInterval time interval between epochs.
3072 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3073 * @param oldC previous body-to-NED coordinate transformation.
3074 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3075 * down.
3076 * @param oldLatitude previous latitude expressed in radians (rad).
3077 * @param oldHeight previous height expressed in meters (m).
3078 * @param result instance where estimated body kinematics will be stored.
3079 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3080 * matrices are not NED frame valid.
3081 */
3082 public static void estimateKinematics(
3083 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3084 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight,
3085 final BodyKinematics result) {
3086 estimateKinematics(convertTime(timeInterval), frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
3087 }
3088
3089 /**
3090 * Estimates body kinematics (specific force applied to a body and its angular rates)
3091 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3092 *
3093 * @param timeInterval time interval between epochs expressed in seconds (s).
3094 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3095 * @param oldC previous body-to-NED coordinate transformation.
3096 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3097 * down.
3098 * @param oldLatitude previous latitude.
3099 * @param oldHeight previous height.
3100 * @param result instance where estimated body kinematics will be stored.
3101 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3102 * matrices are not NED frame valid.
3103 */
3104 public static void estimateKinematics(
3105 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3106 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight,
3107 final BodyKinematics result) {
3108 estimateKinematics(timeInterval, frame, oldC, oldVelocity,
3109 convertAngle(oldLatitude), convertDistance(oldHeight), result);
3110 }
3111
3112 /**
3113 * Estimates body kinematics (specific force applied to a body and its angular rates)
3114 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3115 *
3116 * @param timeInterval time interval between epochs.
3117 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3118 * @param oldC previous body-to-NED coordinate transformation.
3119 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3120 * down.
3121 * @param oldLatitude previous latitude.
3122 * @param oldHeight previous height.
3123 * @param result instance where estimated body kinematics will be stored.
3124 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3125 * matrices are not NED frame valid.
3126 */
3127 public static void estimateKinematics(
3128 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3129 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight,
3130 final BodyKinematics result) {
3131 estimateKinematics(convertTime(timeInterval), frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
3132 }
3133
3134 /**
3135 * Estimates body kinematics (specific force applied to a body and its angular rates)
3136 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3137 *
3138 * @param timeInterval time interval between epochs expressed in seconds (s).
3139 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3140 * @param oldC previous body-to-NED coordinate transformation.
3141 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3142 * along north, east, and down and expressed in meters per second (m/s).
3143 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3144 * along north, east, and down and expressed in meters per second (m/s).
3145 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3146 * along north, east, and down and expressed in meters per second (m/s).
3147 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
3148 * @param result instance where estimated body kinematics will be stored.
3149 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3150 * matrices are not NED frame valid.
3151 */
3152 public static void estimateKinematics(
3153 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3154 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition,
3155 final BodyKinematics result) {
3156 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd,
3157 oldPosition.getLatitude(), oldPosition.getHeight(), result);
3158 }
3159
3160 /**
3161 * Estimates body kinematics (specific force applied to a body and its angular rates)
3162 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3163 *
3164 * @param timeInterval time interval between epochs.
3165 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3166 * @param oldC previous body-to-NED coordinate transformation.
3167 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3168 * along north, east, and down and expressed in meters per second (m/s).
3169 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3170 * along north, east, and down and expressed in meters per second (m/s).
3171 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3172 * along north, east, and down and expressed in meters per second (m/s).
3173 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
3174 * @param result instance where estimated body kinematics will be stored.
3175 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3176 * matrices are not NED frame valid.
3177 */
3178 public static void estimateKinematics(
3179 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3180 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition,
3181 final BodyKinematics result) {
3182 estimateKinematics(convertTime(timeInterval), frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
3183 }
3184
3185 /**
3186 * Estimates body kinematics (specific force applied to a body and its angular rates)
3187 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3188 *
3189 * @param timeInterval time interval between epochs expressed in seconds (s).
3190 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3191 * @param oldC previous body-to-NED coordinate transformation.
3192 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3193 * along north, east, and down.
3194 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3195 * along north, east, and down.
3196 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3197 * along north, east, and down.
3198 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
3199 * @param result instance where estimated body kinematics will be stored.
3200 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3201 * matrices are not NED frame valid.
3202 */
3203 public static void estimateKinematics(
3204 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3205 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition,
3206 final BodyKinematics result) {
3207 estimateKinematics(timeInterval, frame, oldC, convertSpeed(oldVn), convertSpeed(oldVe), convertSpeed(oldVd),
3208 oldPosition, result);
3209 }
3210
3211 /**
3212 * Estimates body kinematics (specific force applied to a body and its angular rates)
3213 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3214 *
3215 * @param timeInterval time interval between epochs expressed in seconds (s).
3216 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3217 * @param oldC previous body-to-NED coordinate transformation.
3218 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3219 * along north, east, and down.
3220 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3221 * along north, east, and down.
3222 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3223 * along north, east, and down.
3224 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
3225 * @param result instance where estimated body kinematics will be stored.
3226 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3227 * matrices are not NED frame valid.
3228 */
3229 public static void estimateKinematics(
3230 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3231 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition,
3232 final BodyKinematics result) {
3233 estimateKinematics(convertTime(timeInterval), frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
3234 }
3235
3236 /**
3237 * Estimates body kinematics (specific force applied to a body and its angular rates)
3238 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3239 *
3240 * @param timeInterval time interval between epochs expressed in seconds (s).
3241 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3242 * @param oldC previous body-to-NED coordinate transformation.
3243 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3244 * down.
3245 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
3246 * @param result instance where estimated body kinematics will be stored.
3247 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3248 * matrices are not NED frame valid.
3249 */
3250 public static void estimateKinematics(
3251 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3252 final NEDVelocity oldVelocity, final NEDPosition oldPosition, final BodyKinematics result) {
3253 estimateKinematics(timeInterval, frame, oldC, oldVelocity.getVn(), oldVelocity.getVe(), oldVelocity.getVd(),
3254 oldPosition, result);
3255 }
3256
3257 /**
3258 * Estimates body kinematics (specific force applied to a body and its angular rates)
3259 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3260 *
3261 * @param timeInterval time interval between epochs.
3262 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3263 * @param oldC previous body-to-NED coordinate transformation.
3264 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3265 * down.
3266 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
3267 * @param result instance where estimated body kinematics will be stored.
3268 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3269 * matrices are not NED frame valid.
3270 */
3271 public static void estimateKinematics(
3272 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
3273 final NEDVelocity oldVelocity, final NEDPosition oldPosition, final BodyKinematics result) {
3274 estimateKinematics(convertTime(timeInterval), frame, oldC, oldVelocity, oldPosition, result);
3275 }
3276
3277 /**
3278 * Estimates body kinematics (specific force applied to a body and its angular rates)
3279 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3280 *
3281 * @param timeInterval time interval between epochs expressed in seconds (s).
3282 * @param c body-to-NED coordinate transformation.
3283 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3284 * north, east, and down and expressed in meters per second (m/s).
3285 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3286 * north, east, and down and expressed in meters per second (m/s).
3287 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3288 * north, east, and down and expressed in meters per second (m/s).
3289 * @param latitude current latitude expressed in radians (rad).
3290 * @param height current height expressed in meters (m).
3291 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3292 * @param result instance where estimated body kinematics will be stored.
3293 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3294 * matrices are not NED frame valid.
3295 */
3296 public static void estimateKinematics(
3297 final double timeInterval, final CoordinateTransformation c,
3298 final double vn, final double ve, final double vd, final double latitude, final double height,
3299 final NEDFrame oldFrame, final BodyKinematics result) {
3300 estimateKinematics(timeInterval, c, oldFrame.getCoordinateTransformation(), vn, ve, vd,
3301 oldFrame.getVn(), oldFrame.getVe(), oldFrame.getVd(), latitude, height,
3302 oldFrame.getLatitude(), oldFrame.getHeight(), result);
3303 }
3304
3305 /**
3306 * Estimates body kinematics (specific force applied to a body and its angular rates)
3307 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3308 *
3309 * @param timeInterval time interval between epochs.
3310 * @param c body-to-NED coordinate transformation.
3311 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3312 * north, east, and down and expressed in meters per second (m/s).
3313 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3314 * north, east, and down and expressed in meters per second (m/s).
3315 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3316 * north, east, and down and expressed in meters per second (m/s).
3317 * @param latitude current latitude expressed in radians (rad).
3318 * @param height current height expressed in meters (m).
3319 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3320 * @param result instance where estimated body kinematics will be stored.
3321 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3322 * matrices are not NED frame valid.
3323 */
3324 public static void estimateKinematics(
3325 final Time timeInterval, final CoordinateTransformation c,
3326 final double vn, final double ve, final double vd, final double latitude, final double height,
3327 final NEDFrame oldFrame, final BodyKinematics result) {
3328 estimateKinematics(convertTime(timeInterval), c, vn, ve, vd, latitude, height, oldFrame, result);
3329 }
3330
3331 /**
3332 * Estimates body kinematics (specific force applied to a body and its angular rates)
3333 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3334 *
3335 * @param timeInterval time interval between epochs expressed in seconds (s).
3336 * @param c body-to-NED coordinate transformation.
3337 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3338 * @param latitude current latitude expressed in radians (rad).
3339 * @param height current height expressed in meters (m).
3340 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3341 * @param result instance where estimated body kinematics will be stored.
3342 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3343 * matrices are not NED frame valid.
3344 */
3345 public static void estimateKinematics(
3346 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
3347 final double latitude, final double height, final NEDFrame oldFrame, final BodyKinematics result) {
3348 estimateKinematics(timeInterval, c, velocity.getVn(), velocity.getVe(), velocity.getVd(), latitude, height,
3349 oldFrame, result);
3350 }
3351
3352 /**
3353 * Estimates body kinematics (specific force applied to a body and its angular rates)
3354 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3355 *
3356 * @param timeInterval time interval between epochs.
3357 * @param c body-to-NED coordinate transformation.
3358 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3359 * @param latitude current latitude expressed in radians (rad).
3360 * @param height current height expressed in meters (m).
3361 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3362 * @param result instance where estimated body kinematics will be stored.
3363 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3364 * matrices are not NED frame valid.
3365 */
3366 public static void estimateKinematics(
3367 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
3368 final double latitude, final double height, final NEDFrame oldFrame, final BodyKinematics result) {
3369 estimateKinematics(convertTime(timeInterval), c, velocity, latitude, height, oldFrame, result);
3370 }
3371
3372 /**
3373 * Estimates body kinematics (specific force applied to a body and its angular rates)
3374 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3375 *
3376 * @param timeInterval time interval between epochs expressed in seconds (s).
3377 * @param c body-to-NED coordinate transformation.
3378 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3379 * @param latitude current latitude.
3380 * @param height current height.
3381 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3382 * @param result instance where estimated body kinematics will be stored.
3383 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3384 * matrices are not NED frame valid.
3385 */
3386 public static void estimateKinematics(
3387 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
3388 final Angle latitude, final Distance height, final NEDFrame oldFrame, final BodyKinematics result) {
3389 estimateKinematics(timeInterval, c, velocity, convertAngle(latitude), convertDistance(height), oldFrame,
3390 result);
3391 }
3392
3393 /**
3394 * Estimates body kinematics (specific force applied to a body and its angular rates)
3395 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3396 *
3397 * @param timeInterval time interval between epochs.
3398 * @param c body-to-NED coordinate transformation.
3399 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3400 * @param latitude current latitude.
3401 * @param height current height.
3402 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3403 * @param result instance where estimated body kinematics will be stored.
3404 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3405 * matrices are not NED frame valid.
3406 */
3407 public static void estimateKinematics(
3408 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
3409 final Angle latitude, final Distance height, final NEDFrame oldFrame, final BodyKinematics result) {
3410 estimateKinematics(convertTime(timeInterval), c, velocity, latitude, height, oldFrame, result);
3411 }
3412
3413 /**
3414 * Estimates body kinematics (specific force applied to a body and its angular rates)
3415 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3416 *
3417 * @param timeInterval time interval between epochs expressed in seconds (s).
3418 * @param c body-to-NED coordinate transformation.
3419 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3420 * north, east, and down and expressed in meters per second (m/s).
3421 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3422 * north, east, and down and expressed in meters per second (m/s).
3423 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3424 * north, east, and down and expressed in meters per second (m/s).
3425 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
3426 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3427 * @param result instance where estimated body kinematics will be stored.
3428 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3429 * matrices are not NED frame valid.
3430 */
3431 public static void estimateKinematics(
3432 final double timeInterval, final CoordinateTransformation c,
3433 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame,
3434 final BodyKinematics result) {
3435 estimateKinematics(timeInterval, c, vn, ve, vd, position.getLatitude(), position.getHeight(), oldFrame, result);
3436 }
3437
3438 /**
3439 * Estimates body kinematics (specific force applied to a body and its angular rates)
3440 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3441 *
3442 * @param timeInterval time interval between epochs.
3443 * @param c body-to-NED coordinate transformation.
3444 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3445 * north, east, and down and expressed in meters per second (m/s).
3446 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3447 * north, east, and down and expressed in meters per second (m/s).
3448 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3449 * north, east, and down and expressed in meters per second (m/s).
3450 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
3451 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3452 * @param result instance where estimated body kinematics will be stored.
3453 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3454 * matrices are not NED frame valid.
3455 */
3456 public static void estimateKinematics(
3457 final Time timeInterval, final CoordinateTransformation c,
3458 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame,
3459 final BodyKinematics result) {
3460 estimateKinematics(convertTime(timeInterval), c, vn, ve, vd, position, oldFrame, result);
3461 }
3462
3463 /**
3464 * Estimates body kinematics (specific force applied to a body and its angular rates)
3465 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3466 *
3467 * @param timeInterval time interval between epochs expressed in seconds (s).
3468 * @param c body-to-NED coordinate transformation.
3469 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3470 * north, east, and down.
3471 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3472 * north, east, and down.
3473 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3474 * north, east, and down.
3475 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
3476 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3477 * @param result instance where estimated body kinematics will be stored.
3478 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3479 * matrices are not NED frame valid.
3480 */
3481 public static void estimateKinematics(
3482 final double timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
3483 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
3484 estimateKinematics(timeInterval, c, convertSpeed(vn), convertSpeed(ve), convertSpeed(vd), position, oldFrame,
3485 result);
3486 }
3487
3488 /**
3489 * Estimates body kinematics (specific force applied to a body and its angular rates)
3490 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3491 *
3492 * @param timeInterval time interval between epochs.
3493 * @param c body-to-NED coordinate transformation.
3494 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3495 * north, east, and down.
3496 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3497 * north, east, and down.
3498 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3499 * north, east, and down.
3500 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
3501 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3502 * @param result instance where estimated body kinematics will be stored.
3503 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3504 * matrices are not NED frame valid.
3505 */
3506 public static void estimateKinematics(
3507 final Time timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
3508 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
3509 estimateKinematics(convertTime(timeInterval), c, vn, ve, vd, position, oldFrame, result);
3510 }
3511
3512 /**
3513 * Estimates body kinematics (specific force applied to a body and its angular rates)
3514 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3515 *
3516 * @param timeInterval time interval between epochs expressed in seconds (s).
3517 * @param c body-to-NED coordinate transformation.
3518 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3519 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
3520 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3521 * @param result instance where estimated body kinematics will be stored.
3522 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3523 * matrices are not NED frame valid.
3524 */
3525 public static void estimateKinematics(
3526 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
3527 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
3528 estimateKinematics(timeInterval, c, velocity, position.getLatitude(), position.getHeight(), oldFrame, result);
3529 }
3530
3531 /**
3532 * Estimates body kinematics (specific force applied to a body and its angular rates)
3533 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3534 *
3535 * @param timeInterval time interval between epochs.
3536 * @param c body-to-NED coordinate transformation.
3537 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3538 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
3539 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3540 * @param result instance where estimated body kinematics will be stored.
3541 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3542 * matrices are not NED frame valid.
3543 */
3544 public static void estimateKinematics(
3545 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
3546 final NEDPosition position, final NEDFrame oldFrame, final BodyKinematics result) {
3547 estimateKinematics(convertTime(timeInterval), c, velocity, position, oldFrame, result);
3548 }
3549
3550 /**
3551 * Estimates body kinematics (specific force applied to a body and its angular rates)
3552 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3553 *
3554 * @param timeInterval time interval between epochs expressed in seconds (s).
3555 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3556 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3557 * @param result instance where estimated body kinematics will be stored.
3558 * @throws IllegalArgumentException if provided time interval is negative.
3559 */
3560 public static void estimateKinematics(
3561 final double timeInterval, final NEDFrame frame, final NEDFrame oldFrame, final BodyKinematics result) {
3562 estimateKinematics(timeInterval, frame.getCoordinateTransformation(),
3563 frame.getVn(), frame.getVe(), frame.getVd(), frame.getLatitude(), frame.getHeight(), oldFrame, result);
3564 }
3565
3566 /**
3567 * Estimates body kinematics (specific force applied to a body and its angular rates)
3568 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3569 *
3570 * @param timeInterval time interval between epochs.
3571 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
3572 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
3573 * @param result instance where estimated body kinematics will be stored.
3574 * @throws IllegalArgumentException if provided time interval is negative.
3575 */
3576 public static void estimateKinematics(
3577 final Time timeInterval, final NEDFrame frame, final NEDFrame oldFrame, final BodyKinematics result) {
3578 estimateKinematics(convertTime(timeInterval), frame, oldFrame, result);
3579 }
3580
3581 /**
3582 * Estimates body kinematics (specific force applied to a body and its angular rates)
3583 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3584 *
3585 * @param timeInterval time interval between epochs expressed in seconds (s).
3586 * @param c body-to-NED coordinate transformation.
3587 * @param oldC previous body-to-NED coordinate transformation.
3588 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3589 * north, east, and down.
3590 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3591 * north, east, and down.
3592 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3593 * north, east, and down.
3594 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3595 * along north, east, and down.
3596 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3597 * along north, east, and down.
3598 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3599 * along north, east, and down.
3600 * @param latitude current latitude expressed in radians (rad).
3601 * @param height current height expressed in meters (m).
3602 * @param oldLatitude previous latitude expressed in radians (rad).
3603 * @param oldHeight previous height expressed in meters (m).
3604 * @param result instance where estimated body kinematics will be stored.
3605 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3606 * matrices are not NED frame valid.
3607 */
3608 public static void estimateKinematics(
3609 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3610 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
3611 final double latitude, final double height, final double oldLatitude, final double oldHeight,
3612 final BodyKinematics result) {
3613 estimateKinematics(timeInterval, c, oldC, convertSpeed(vn), convertSpeed(ve), convertSpeed(vd),
3614 convertSpeed(oldVn), convertSpeed(oldVe), convertSpeed(oldVd), latitude, height, oldLatitude, oldHeight,
3615 result);
3616 }
3617
3618 /**
3619 * Estimates body kinematics (specific force applied to a body and its angular rates)
3620 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3621 *
3622 * @param timeInterval time interval between epochs.
3623 * @param c body-to-NED coordinate transformation.
3624 * @param oldC previous body-to-NED coordinate transformation.
3625 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3626 * north, east, and down.
3627 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3628 * north, east, and down.
3629 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3630 * north, east, and down.
3631 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3632 * along north, east, and down.
3633 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3634 * along north, east, and down.
3635 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3636 * along north, east, and down.
3637 * @param latitude current latitude expressed in radians (rad).
3638 * @param height current height expressed in meters (m).
3639 * @param oldLatitude previous latitude expressed in radians (rad).
3640 * @param oldHeight previous height expressed in meters (m).
3641 * @param result instance where estimated body kinematics will be stored.
3642 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3643 * matrices are not NED frame valid.
3644 */
3645 public static void estimateKinematics(
3646 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3647 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
3648 final double latitude, final double height, final double oldLatitude, final double oldHeight,
3649 final BodyKinematics result) {
3650 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
3651 oldLatitude, oldHeight, result);
3652 }
3653
3654 /**
3655 * Estimates body kinematics (specific force applied to a body and its angular rates)
3656 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3657 *
3658 * @param timeInterval time interval between epochs expressed in seconds (s).
3659 * @param c body-to-NED coordinate transformation.
3660 * @param oldC previous body-to-NED coordinate transformation.
3661 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3662 * north, east, and down and expressed in meters per second (m/s).
3663 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3664 * north, east, and down and expressed in meters per second (m/s).
3665 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3666 * north, east, and down and expressed in meters per second (m/s).
3667 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3668 * along north, east, and down and expressed in meters per second (m/s).
3669 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3670 * along north, east, and down and expressed in meters per second (m/s).
3671 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3672 * along north, east, and down and expressed in meters per second (m/s).
3673 * @param latitude current latitude.
3674 * @param height current height expressed in meters (m).
3675 * @param oldLatitude previous latitude.
3676 * @param oldHeight previous height expressed in meters (m).
3677 * @param result instance where estimated body kinematics will be stored.
3678 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3679 * matrices are not NED frame valid.
3680 */
3681 public static void estimateKinematics(
3682 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3683 final double vn, final double ve, final double vd,
3684 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
3685 final Angle oldLatitude, final double oldHeight, final BodyKinematics result) {
3686 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, convertAngle(latitude), height,
3687 convertAngle(oldLatitude), oldHeight, result);
3688 }
3689
3690 /**
3691 * Estimates body kinematics (specific force applied to a body and its angular rates)
3692 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3693 *
3694 * @param timeInterval time interval between epochs.
3695 * @param c body-to-NED coordinate transformation.
3696 * @param oldC previous body-to-NED coordinate transformation.
3697 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3698 * north, east, and down and expressed in meters per second (m/s).
3699 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3700 * north, east, and down and expressed in meters per second (m/s).
3701 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3702 * north, east, and down and expressed in meters per second (m/s).
3703 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3704 * along north, east, and down and expressed in meters per second (m/s).
3705 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3706 * along north, east, and down and expressed in meters per second (m/s).
3707 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3708 * along north, east, and down and expressed in meters per second (m/s).
3709 * @param latitude current latitude.
3710 * @param height current height expressed in meters (m).
3711 * @param oldLatitude previous latitude.
3712 * @param oldHeight previous height expressed in meters (m).
3713 * @param result instance where estimated body kinematics will be stored.
3714 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3715 * matrices are not NED frame valid.
3716 */
3717 public static void estimateKinematics(
3718 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3719 final double vn, final double ve, final double vd,
3720 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
3721 final Angle oldLatitude, final double oldHeight, final BodyKinematics result) {
3722 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
3723 oldLatitude, oldHeight, result);
3724 }
3725
3726 /**
3727 * Estimates body kinematics (specific force applied to a body and its angular rates)
3728 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3729 *
3730 * @param timeInterval time interval between epochs expressed in seconds (s).
3731 * @param c body-to-NED coordinate transformation.
3732 * @param oldC previous body-to-NED coordinate transformation.
3733 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3734 * north, east, and down and expressed in meters per second (m/s).
3735 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3736 * north, east, and down and expressed in meters per second (m/s).
3737 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3738 * north, east, and down and expressed in meters per second (m/s).
3739 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3740 * along north, east, and down and expressed in meters per second (m/s).
3741 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3742 * along north, east, and down and expressed in meters per second (m/s).
3743 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3744 * along north, east, and down and expressed in meters per second (m/s).
3745 * @param latitude current latitude expressed in radians (rad).
3746 * @param height current height.
3747 * @param oldLatitude previous latitude expressed in radians (rad).
3748 * @param oldHeight previous height.
3749 * @param result instance where estimated body kinematics will be stored.
3750 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3751 * matrices are not NED frame valid.
3752 */
3753 public static void estimateKinematics(
3754 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3755 final double vn, final double ve, final double vd,
3756 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
3757 final double oldLatitude, final Distance oldHeight, final BodyKinematics result) {
3758 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, convertDistance(height),
3759 oldLatitude, convertDistance(oldHeight), result);
3760 }
3761
3762 /**
3763 * Estimates body kinematics (specific force applied to a body and its angular rates)
3764 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3765 *
3766 * @param timeInterval time interval between epochs.
3767 * @param c body-to-NED coordinate transformation.
3768 * @param oldC previous body-to-NED coordinate transformation.
3769 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3770 * north, east, and down and expressed in meters per second (m/s).
3771 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3772 * north, east, and down and expressed in meters per second (m/s).
3773 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3774 * north, east, and down and expressed in meters per second (m/s).
3775 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3776 * along north, east, and down and expressed in meters per second (m/s).
3777 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3778 * along north, east, and down and expressed in meters per second (m/s).
3779 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3780 * along north, east, and down and expressed in meters per second (m/s).
3781 * @param latitude current latitude expressed in radians (rad).
3782 * @param height current height.
3783 * @param oldLatitude previous latitude expressed in radians (rad).
3784 * @param oldHeight previous height.
3785 * @param result instance where estimated body kinematics will be stored.
3786 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3787 * matrices are not NED frame valid.
3788 */
3789 public static void estimateKinematics(
3790 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3791 final double vn, final double ve, final double vd,
3792 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
3793 final double oldLatitude, final Distance oldHeight, final BodyKinematics result) {
3794 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
3795 oldLatitude, oldHeight, result);
3796 }
3797
3798 /**
3799 * Estimates body kinematics (specific force applied to a body and its angular rates)
3800 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3801 *
3802 * @param timeInterval time interval between epochs expressed in seconds (s).
3803 * @param c body-to-NED coordinate transformation.
3804 * @param oldC previous body-to-NED coordinate transformation.
3805 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3806 * north, east, and down.
3807 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3808 * north, east, and down.
3809 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3810 * north, east, and down.
3811 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3812 * along north, east, and down.
3813 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3814 * along north, east, and down.
3815 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3816 * along north, east, and down.
3817 * @param latitude current latitude.
3818 * @param height current height.
3819 * @param oldLatitude previous latitude.
3820 * @param oldHeight previous height.
3821 * @param result instance where estimated body kinematics will be stored.
3822 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3823 * matrices are not NED frame valid.
3824 */
3825 public static void estimateKinematics(
3826 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3827 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
3828 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight,
3829 final BodyKinematics result) {
3830 estimateKinematics(timeInterval, c, oldC, convertSpeed(vn), convertSpeed(ve), convertSpeed(vd),
3831 convertSpeed(oldVn), convertSpeed(oldVe), convertSpeed(oldVd),
3832 convertAngle(latitude), convertDistance(height), convertAngle(oldLatitude), convertDistance(oldHeight),
3833 result);
3834 }
3835
3836 /**
3837 * Estimates body kinematics (specific force applied to a body and its angular rates)
3838 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3839 *
3840 * @param timeInterval time interval between epochs.
3841 * @param c body-to-NED coordinate transformation.
3842 * @param oldC previous body-to-NED coordinate transformation.
3843 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3844 * north, east, and down.
3845 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3846 * north, east, and down.
3847 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3848 * north, east, and down.
3849 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3850 * along north, east, and down.
3851 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3852 * along north, east, and down.
3853 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3854 * along north, east, and down.
3855 * @param latitude current latitude.
3856 * @param height current height.
3857 * @param oldLatitude previous latitude.
3858 * @param oldHeight previous height.
3859 * @param result instance where estimated body kinematics will be stored.
3860 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3861 * matrices are not NED frame valid.
3862 */
3863 public static void estimateKinematics(
3864 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3865 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
3866 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight,
3867 final BodyKinematics result) {
3868 estimateKinematics(convertTime(timeInterval), c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
3869 oldLatitude, oldHeight, result);
3870 }
3871
3872 /**
3873 * Estimates body kinematics (specific force applied to a body and its angular rates)
3874 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3875 *
3876 * @param timeInterval time interval between epochs expressed in seconds (s).
3877 * @param c body-to-NED coordinate transformation.
3878 * @param oldC previous body-to-NED coordinate transformation.
3879 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3880 * north, east, and down and expressed in meters per second (m/s).
3881 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3882 * north, east, and down and expressed in meters per second (m/s).
3883 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3884 * north, east, and down and expressed in meters per second (m/s).
3885 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3886 * along north, east, and down and expressed in meters per second (m/s).
3887 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3888 * along north, east, and down and expressed in meters per second (m/s).
3889 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3890 * along north, east, and down and expressed in meters per second (m/s).
3891 * @param latitude current latitude expressed in radians (rad).
3892 * @param height current height expressed in meters (m).
3893 * @param oldLatitude previous latitude expressed in radians (rad).
3894 * @param oldHeight previous height expressed in meters (m).
3895 * @return a new body kinematics instance.
3896 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3897 * matrices are not NED frame valid.
3898 */
3899 public static BodyKinematics estimateKinematicsAndReturnNew(
3900 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3901 final double vn, final double ve, final double vd,
3902 final double oldVn, final double oldVe, final double oldVd, final double latitude, final double height,
3903 final double oldLatitude, final double oldHeight) {
3904 final var result = new BodyKinematics();
3905 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
3906 oldLatitude, oldHeight, result);
3907 return result;
3908 }
3909
3910 /**
3911 * Estimates body kinematics (specific force applied to a body and its angular rates)
3912 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3913 *
3914 * @param timeInterval time interval between epochs.
3915 * @param c body-to-NED coordinate transformation.
3916 * @param oldC previous body-to-NED coordinate transformation.
3917 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
3918 * north, east, and down and expressed in meters per second (m/s).
3919 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
3920 * north, east, and down and expressed in meters per second (m/s).
3921 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
3922 * north, east, and down and expressed in meters per second (m/s).
3923 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
3924 * along north, east, and down and expressed in meters per second (m/s).
3925 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
3926 * along north, east, and down and expressed in meters per second (m/s).
3927 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
3928 * along north, east, and down and expressed in meters per second (m/s).
3929 * @param latitude current latitude expressed in radians (rad).
3930 * @param height current height expressed in meters (m).
3931 * @param oldLatitude previous latitude expressed in radians (rad).
3932 * @param oldHeight previous height expressed in meters (m).
3933 * @return a new body kinematics instance.
3934 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3935 * matrices are not NED frame valid.
3936 */
3937 public static BodyKinematics estimateKinematicsAndReturnNew(
3938 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3939 final double vn, final double ve, final double vd,
3940 final double oldVn, final double oldVe, final double oldVd, final double latitude, final double height,
3941 final double oldLatitude, final double oldHeight) {
3942 final var result = new BodyKinematics();
3943 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
3944 oldLatitude, oldHeight, result);
3945 return result;
3946 }
3947
3948 /**
3949 * Estimates body kinematics (specific force applied to a body and its angular rates)
3950 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3951 *
3952 * @param timeInterval time interval between epochs expressed in seconds (s).
3953 * @param c body-to-NED coordinate transformation.
3954 * @param oldC previous body-to-NED coordinate transformation.
3955 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3956 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3957 * down.
3958 * @param latitude current latitude expressed in radians (rad).
3959 * @param height current height expressed in meters (m).
3960 * @param oldLatitude previous latitude expressed in radians (rad).
3961 * @param oldHeight previous height expressed in meters (m).
3962 * @return a new body kinematics instance.
3963 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3964 * matrices are not NED frame valid.
3965 */
3966 public static BodyKinematics estimateKinematicsAndReturnNew(
3967 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3968 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
3969 final double oldLatitude, final double oldHeight) {
3970 final var result = new BodyKinematics();
3971 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
3972 result);
3973 return result;
3974 }
3975
3976 /**
3977 * Estimates body kinematics (specific force applied to a body and its angular rates)
3978 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
3979 *
3980 * @param timeInterval time interval between epochs.
3981 * @param c body-to-NED coordinate transformation.
3982 * @param oldC previous body-to-NED coordinate transformation.
3983 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
3984 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
3985 * down.
3986 * @param latitude current latitude expressed in radians (rad).
3987 * @param height current height expressed in meters (m).
3988 * @param oldLatitude previous latitude expressed in radians (rad).
3989 * @param oldHeight previous height expressed in meters (m).
3990 * @return a new body kinematics instance.
3991 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
3992 * matrices are not NED frame valid.
3993 */
3994 public static BodyKinematics estimateKinematicsAndReturnNew(
3995 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
3996 final NEDVelocity velocity, final NEDVelocity oldVelocity, final double latitude, final double height,
3997 final double oldLatitude, final double oldHeight) {
3998 final var result = new BodyKinematics();
3999 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
4000 result);
4001 return result;
4002 }
4003
4004 /**
4005 * Estimates body kinematics (specific force applied to a body and its angular rates)
4006 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4007 *
4008 * @param timeInterval time interval between epochs expressed in seconds (s).
4009 * @param c body-to-NED coordinate transformation.
4010 * @param oldC previous body-to-NED coordinate transformation.
4011 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4012 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4013 * down.
4014 * @param latitude current latitude.
4015 * @param height current height.
4016 * @param oldLatitude previous latitude.
4017 * @param oldHeight previous height.
4018 * @return a new body kinematics instance.
4019 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4020 * matrices are not NED frame valid.
4021 */
4022 public static BodyKinematics estimateKinematicsAndReturnNew(
4023 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4024 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
4025 final Angle oldLatitude, final Distance oldHeight) {
4026 final var result = new BodyKinematics();
4027 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
4028 result);
4029 return result;
4030 }
4031
4032 /**
4033 * Estimates body kinematics (specific force applied to a body and its angular rates)
4034 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4035 *
4036 * @param timeInterval time interval between epochs.
4037 * @param c body-to-NED coordinate transformation.
4038 * @param oldC previous body-to-NED coordinate transformation.
4039 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4040 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4041 * down.
4042 * @param latitude current latitude.
4043 * @param height current height.
4044 * @param oldLatitude previous latitude.
4045 * @param oldHeight previous height.
4046 * @return a new body kinematics instance.
4047 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4048 * matrices are not NED frame valid.
4049 */
4050 public static BodyKinematics estimateKinematicsAndReturnNew(
4051 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4052 final NEDVelocity velocity, final NEDVelocity oldVelocity, final Angle latitude, final Distance height,
4053 final Angle oldLatitude, final Distance oldHeight) {
4054 final var result = new BodyKinematics();
4055 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, latitude, height, oldLatitude, oldHeight,
4056 result);
4057 return result;
4058 }
4059
4060 /**
4061 * Estimates body kinematics (specific force applied to a body and its angular rates)
4062 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4063 *
4064 * @param timeInterval time interval between epochs expressed in seconds (s).
4065 * @param c body-to-NED coordinate transformation.
4066 * @param oldC previous body-to-NED coordinate transformation.
4067 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4068 * north, east, and down and expressed in meters per second (m/s).
4069 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4070 * north, east, and down and expressed in meters per second (m/s).
4071 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4072 * north, east, and down and expressed in meters per second (m/s).
4073 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4074 * along north, east, and down and expressed in meters per second (m/s).
4075 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4076 * along north, east, and down and expressed in meters per second (m/s).
4077 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4078 * along north, east, and down and expressed in meters per second (m/s).
4079 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4080 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4081 * @return a new body kinematics instance.
4082 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4083 * matrices are not NED frame valid.
4084 */
4085 public static BodyKinematics estimateKinematicsAndReturnNew(
4086 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4087 final double vn, final double ve, final double vd,
4088 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
4089 final NEDPosition oldPosition) {
4090 final var result = new BodyKinematics();
4091 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
4092 return result;
4093 }
4094
4095 /**
4096 * Estimates body kinematics (specific force applied to a body and its angular rates)
4097 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4098 *
4099 * @param timeInterval time interval between epochs.
4100 * @param c body-to-NED coordinate transformation.
4101 * @param oldC previous body-to-NED coordinate transformation.
4102 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4103 * north, east, and down and expressed in meters per second (m/s).
4104 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4105 * north, east, and down and expressed in meters per second (m/s).
4106 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4107 * north, east, and down and expressed in meters per second (m/s).
4108 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4109 * along north, east, and down and expressed in meters per second (m/s).
4110 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4111 * along north, east, and down and expressed in meters per second (m/s).
4112 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4113 * along north, east, and down and expressed in meters per second (m/s).
4114 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4115 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4116 * @return a new body kinematics instance.
4117 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4118 * matrices are not NED frame valid.
4119 */
4120 public static BodyKinematics estimateKinematicsAndReturnNew(
4121 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4122 final double vn, final double ve, final double vd,
4123 final double oldVn, final double oldVe, final double oldVd, final NEDPosition position,
4124 final NEDPosition oldPosition) {
4125 final var result = new BodyKinematics();
4126 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
4127 return result;
4128 }
4129
4130 /**
4131 * Estimates body kinematics (specific force applied to a body and its angular rates)
4132 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4133 *
4134 * @param timeInterval time interval between epochs expressed in seconds (s).
4135 * @param c body-to-NED coordinate transformation.
4136 * @param oldC previous body-to-NED coordinate transformation.
4137 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4138 * north, east, and down.
4139 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4140 * north, east, and down.
4141 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4142 * north, east, and down.
4143 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4144 * along north, east, and down.
4145 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4146 * along north, east, and down.
4147 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4148 * along north, east, and down.
4149 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4150 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4151 * @return a new body kinematics instance.
4152 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4153 * matrices are not NED frame valid.
4154 */
4155 public static BodyKinematics estimateKinematicsAndReturnNew(
4156 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4157 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
4158 final NEDPosition position, final NEDPosition oldPosition) {
4159 final var result = new BodyKinematics();
4160 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
4161 return result;
4162 }
4163
4164 /**
4165 * Estimates body kinematics (specific force applied to a body and its angular rates)
4166 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4167 *
4168 * @param timeInterval time interval between epochs.
4169 * @param c body-to-NED coordinate transformation.
4170 * @param oldC previous body-to-NED coordinate transformation.
4171 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4172 * north, east, and down.
4173 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4174 * north, east, and down.
4175 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4176 * north, east, and down.
4177 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4178 * along north, east, and down.
4179 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4180 * along north, east, and down.
4181 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4182 * along north, east, and down.
4183 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4184 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4185 * @return a new body kinematics instance.
4186 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4187 * matrices are not NED frame valid.
4188 */
4189 public static BodyKinematics estimateKinematicsAndReturnNew(
4190 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4191 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
4192 final NEDPosition position, final NEDPosition oldPosition) {
4193 final var result = new BodyKinematics();
4194 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, position, oldPosition, result);
4195 return result;
4196 }
4197
4198 /**
4199 * Estimates body kinematics (specific force applied to a body and its angular rates)
4200 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4201 *
4202 * @param timeInterval time interval between epochs expressed in seconds (s).
4203 * @param c body-to-NED coordinate transformation.
4204 * @param oldC previous body-to-NED coordinate transformation.
4205 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4206 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4207 * down.
4208 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4209 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4210 * @return a new body kinematics instance.
4211 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4212 * matrices are not NED frame valid.
4213 */
4214 public static BodyKinematics estimateKinematicsAndReturnNew(
4215 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4216 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
4217 final NEDPosition oldPosition) {
4218 final var result = new BodyKinematics();
4219 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, position, oldPosition, result);
4220 return result;
4221 }
4222
4223 /**
4224 * Estimates body kinematics (specific force applied to a body and its angular rates)
4225 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4226 *
4227 * @param timeInterval time interval between epochs.
4228 * @param c body-to-NED coordinate transformation.
4229 * @param oldC previous body-to-NED coordinate transformation.
4230 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4231 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4232 * down.
4233 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4234 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4235 * @return a new body kinematics instance.
4236 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4237 * matrices are not NED frame valid.
4238 */
4239 public static BodyKinematics estimateKinematicsAndReturnNew(
4240 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4241 final NEDVelocity velocity, final NEDVelocity oldVelocity, final NEDPosition position,
4242 final NEDPosition oldPosition) {
4243 final var result = new BodyKinematics();
4244 estimateKinematics(timeInterval, c, oldC, velocity, oldVelocity, position, oldPosition, result);
4245 return result;
4246 }
4247
4248 /**
4249 * Estimates body kinematics (specific force applied to a body and its angular rates)
4250 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4251 *
4252 * @param timeInterval time interval between epochs expressed in seconds (s).
4253 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4254 * @param oldC previous body-to-NED coordinate transformation.
4255 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4256 * along north, east, and down and expressed in meters per second (m/s).
4257 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4258 * along north, east, and down and expressed in meters per second (m/s).
4259 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4260 * along north, east, and down and expressed in meters per second (m/s).
4261 * @param oldLatitude previous latitude expressed in radians (rad).
4262 * @param oldHeight previous height expressed in meters (m).
4263 * @return a new body kinematics instance.
4264 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4265 * matrices are not NED frame valid.
4266 */
4267 public static BodyKinematics estimateKinematicsAndReturnNew(
4268 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4269 final double oldVn, final double oldVe, final double oldVd,
4270 final double oldLatitude, final double oldHeight) {
4271 final var result = new BodyKinematics();
4272 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight, result);
4273 return result;
4274 }
4275
4276 /**
4277 * Estimates body kinematics (specific force applied to a body and its angular rates)
4278 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4279 *
4280 * @param timeInterval time interval between epochs.
4281 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4282 * @param oldC previous body-to-NED coordinate transformation.
4283 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4284 * along north, east, and down and expressed in meters per second (m/s).
4285 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4286 * along north, east, and down and expressed in meters per second (m/s).
4287 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4288 * along north, east, and down and expressed in meters per second (m/s).
4289 * @param oldLatitude previous latitude expressed in radians (rad).
4290 * @param oldHeight previous height expressed in meters (m).
4291 * @return a new body kinematics instance.
4292 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4293 * matrices are not NED frame valid.
4294 */
4295 public static BodyKinematics estimateKinematicsAndReturnNew(
4296 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4297 final double oldVn, final double oldVe, final double oldVd,
4298 final double oldLatitude, final double oldHeight) {
4299 final var result = new BodyKinematics();
4300 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldLatitude, oldHeight, result);
4301 return result;
4302 }
4303
4304 /**
4305 * Estimates body kinematics (specific force applied to a body and its angular rates)
4306 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4307 *
4308 * @param timeInterval time interval between epochs expressed in seconds (s).
4309 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4310 * @param oldC previous body-to-NED coordinate transformation.
4311 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4312 * down.
4313 * @param oldLatitude previous latitude expressed in radians (rad).
4314 * @param oldHeight previous height expressed in meters (m).
4315 * @return a new body kinematics instance.
4316 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4317 * matrices are not NED frame valid.
4318 */
4319 public static BodyKinematics estimateKinematicsAndReturnNew(
4320 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4321 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight) {
4322 final var result = new BodyKinematics();
4323 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
4324 return result;
4325 }
4326
4327 /**
4328 * Estimates body kinematics (specific force applied to a body and its angular rates)
4329 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4330 *
4331 * @param timeInterval time interval between epochs.
4332 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4333 * @param oldC previous body-to-NED coordinate transformation.
4334 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4335 * down.
4336 * @param oldLatitude previous latitude expressed in radians (rad).
4337 * @param oldHeight previous height expressed in meters (m).
4338 * @return a new body kinematics instance.
4339 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4340 * matrices are not NED frame valid.
4341 */
4342 public static BodyKinematics estimateKinematicsAndReturnNew(
4343 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4344 final NEDVelocity oldVelocity, final double oldLatitude, final double oldHeight) {
4345 final var result = new BodyKinematics();
4346 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
4347 return result;
4348 }
4349
4350 /**
4351 * Estimates body kinematics (specific force applied to a body and its angular rates)
4352 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4353 *
4354 * @param timeInterval time interval between epochs expressed in seconds (s).
4355 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4356 * @param oldC previous body-to-NED coordinate transformation.
4357 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4358 * down.
4359 * @param oldLatitude previous latitude.
4360 * @param oldHeight previous height.
4361 * @return a new body kinematics instance.
4362 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4363 * matrices are not NED frame valid.
4364 */
4365 public static BodyKinematics estimateKinematicsAndReturnNew(
4366 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4367 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight) {
4368 final var result = new BodyKinematics();
4369 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
4370 return result;
4371 }
4372
4373 /**
4374 * Estimates body kinematics (specific force applied to a body and its angular rates)
4375 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4376 *
4377 * @param timeInterval time interval between epochs.
4378 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4379 * @param oldC previous body-to-NED coordinate transformation.
4380 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4381 * down.
4382 * @param oldLatitude previous latitude.
4383 * @param oldHeight previous height.
4384 * @return a new body kinematics instance.
4385 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4386 * matrices are not NED frame valid.
4387 */
4388 public static BodyKinematics estimateKinematicsAndReturnNew(
4389 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4390 final NEDVelocity oldVelocity, final Angle oldLatitude, final Distance oldHeight) {
4391 final var result = new BodyKinematics();
4392 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldLatitude, oldHeight, result);
4393 return result;
4394 }
4395
4396 /**
4397 * Estimates body kinematics (specific force applied to a body and its angular rates)
4398 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4399 *
4400 * @param timeInterval time interval between epochs expressed in seconds (s).
4401 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4402 * @param oldC previous body-to-NED coordinate transformation.
4403 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4404 * along north, east, and down and expressed in meters per second (m/s).
4405 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4406 * along north, east, and down and expressed in meters per second (m/s).
4407 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4408 * along north, east, and down and expressed in meters per second (m/s).
4409 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4410 * @return a new body kinematics instance.
4411 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4412 * matrices are not NED frame valid.
4413 */
4414 public static BodyKinematics estimateKinematicsAndReturnNew(
4415 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4416 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition) {
4417 final var result = new BodyKinematics();
4418 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
4419 return result;
4420 }
4421
4422 /**
4423 * Estimates body kinematics (specific force applied to a body and its angular rates)
4424 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4425 *
4426 * @param timeInterval time interval between epochs.
4427 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4428 * @param oldC previous body-to-NED coordinate transformation.
4429 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4430 * along north, east, and down and expressed in meters per second (m/s).
4431 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4432 * along north, east, and down and expressed in meters per second (m/s).
4433 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4434 * along north, east, and down and expressed in meters per second (m/s).
4435 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4436 * @return a new body kinematics instance.
4437 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4438 * matrices are not NED frame valid.
4439 */
4440 public static BodyKinematics estimateKinematicsAndReturnNew(
4441 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4442 final double oldVn, final double oldVe, final double oldVd, final NEDPosition oldPosition) {
4443 final var result = new BodyKinematics();
4444 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
4445 return result;
4446 }
4447
4448 /**
4449 * Estimates body kinematics (specific force applied to a body and its angular rates)
4450 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4451 *
4452 * @param timeInterval time interval between epochs expressed in seconds (s).
4453 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4454 * @param oldC previous body-to-NED coordinate transformation.
4455 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4456 * along north, east, and down.
4457 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4458 * along north, east, and down.
4459 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4460 * along north, east, and down.
4461 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4462 * @return a new body kinematics instance.
4463 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4464 * matrices are not NED frame valid.
4465 */
4466 public static BodyKinematics estimateKinematicsAndReturnNew(
4467 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4468 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition) {
4469 final var result = new BodyKinematics();
4470 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
4471 return result;
4472 }
4473
4474 /**
4475 * Estimates body kinematics (specific force applied to a body and its angular rates)
4476 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4477 *
4478 * @param timeInterval time interval between epochs.
4479 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4480 * @param oldC previous body-to-NED coordinate transformation.
4481 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4482 * along north, east, and down.
4483 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4484 * along north, east, and down.
4485 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4486 * along north, east, and down.
4487 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4488 * @return a new body kinematics instance.
4489 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4490 * matrices are not NED frame valid.
4491 */
4492 public static BodyKinematics estimateKinematicsAndReturnNew(
4493 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4494 final Speed oldVn, final Speed oldVe, final Speed oldVd, final NEDPosition oldPosition) {
4495 final var result = new BodyKinematics();
4496 estimateKinematics(timeInterval, frame, oldC, oldVn, oldVe, oldVd, oldPosition, result);
4497 return result;
4498 }
4499
4500 /**
4501 * Estimates body kinematics (specific force applied to a body and its angular rates)
4502 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4503 *
4504 * @param timeInterval time interval between epochs expressed in seconds (s).
4505 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4506 * @param oldC previous body-to-NED coordinate transformation.
4507 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4508 * down.
4509 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4510 * @return a new body kinematics instance.
4511 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4512 * matrices are not NED frame valid.
4513 */
4514 public static BodyKinematics estimateKinematicsAndReturnNew(
4515 final double timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4516 final NEDVelocity oldVelocity, final NEDPosition oldPosition) {
4517 final var result = new BodyKinematics();
4518 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldPosition, result);
4519 return result;
4520 }
4521
4522 /**
4523 * Estimates body kinematics (specific force applied to a body and its angular rates)
4524 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4525 *
4526 * @param timeInterval time interval between epochs.
4527 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4528 * @param oldC previous body-to-NED coordinate transformation.
4529 * @param oldVelocity previous velocity of body frame with respect NED frame, resolved along north, east and
4530 * down.
4531 * @param oldPosition previous curvilinear position expressed in terms of latitude, longitude and height.
4532 * @return a new body kinematics instance.
4533 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4534 * matrices are not NED frame valid.
4535 */
4536 public static BodyKinematics estimateKinematicsAndReturnNew(
4537 final Time timeInterval, final NEDFrame frame, final CoordinateTransformation oldC,
4538 final NEDVelocity oldVelocity, final NEDPosition oldPosition) {
4539 final var result = new BodyKinematics();
4540 estimateKinematics(timeInterval, frame, oldC, oldVelocity, oldPosition, result);
4541 return result;
4542 }
4543
4544 /**
4545 * Estimates body kinematics (specific force applied to a body and its angular rates)
4546 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4547 *
4548 * @param timeInterval time interval between epochs expressed in seconds (s).
4549 * @param c body-to-NED coordinate transformation.
4550 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4551 * north, east, and down and expressed in meters per second (m/s).
4552 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4553 * north, east, and down and expressed in meters per second (m/s).
4554 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4555 * north, east, and down and expressed in meters per second (m/s).
4556 * @param latitude current latitude expressed in radians (rad).
4557 * @param height current height expressed in meters (m).
4558 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4559 * @return a new body kinematics instance.
4560 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4561 * matrices are not NED frame valid.
4562 */
4563 public static BodyKinematics estimateKinematicsAndReturnNew(
4564 final double timeInterval, final CoordinateTransformation c,
4565 final double vn, final double ve, final double vd, final double latitude, final double height,
4566 final NEDFrame oldFrame) {
4567 final var result = new BodyKinematics();
4568 estimateKinematics(timeInterval, c, vn, ve, vd, latitude, height, oldFrame, result);
4569 return result;
4570 }
4571
4572 /**
4573 * Estimates body kinematics (specific force applied to a body and its angular rates)
4574 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4575 *
4576 * @param timeInterval time interval between epochs.
4577 * @param c body-to-NED coordinate transformation.
4578 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4579 * north, east, and down and expressed in meters per second (m/s).
4580 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4581 * north, east, and down and expressed in meters per second (m/s).
4582 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4583 * north, east, and down and expressed in meters per second (m/s).
4584 * @param latitude current latitude expressed in radians (rad).
4585 * @param height current height expressed in meters (m).
4586 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4587 * @return a new body kinematics instance.
4588 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4589 * matrices are not NED frame valid.
4590 */
4591 public static BodyKinematics estimateKinematicsAndReturnNew(
4592 final Time timeInterval, final CoordinateTransformation c,
4593 final double vn, final double ve, final double vd, final double latitude, final double height,
4594 final NEDFrame oldFrame) {
4595 final var result = new BodyKinematics();
4596 estimateKinematics(timeInterval, c, vn, ve, vd, latitude, height, oldFrame, result);
4597 return result;
4598 }
4599
4600 /**
4601 * Estimates body kinematics (specific force applied to a body and its angular rates)
4602 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4603 *
4604 * @param timeInterval time interval between epochs expressed in seconds (s).
4605 * @param c body-to-NED coordinate transformation.
4606 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4607 * @param latitude current latitude expressed in radians (rad).
4608 * @param height current height expressed in meters (m).
4609 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4610 * @return a new body kinematics instance.
4611 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4612 * matrices are not NED frame valid.
4613 */
4614 public static BodyKinematics estimateKinematicsAndReturnNew(
4615 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
4616 final double latitude, final double height, final NEDFrame oldFrame) {
4617 final var result = new BodyKinematics();
4618 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
4619 return result;
4620 }
4621
4622 /**
4623 * Estimates body kinematics (specific force applied to a body and its angular rates)
4624 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4625 *
4626 * @param timeInterval time interval between epochs.
4627 * @param c body-to-NED coordinate transformation.
4628 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4629 * @param latitude current latitude expressed in radians (rad).
4630 * @param height current height expressed in meters (m).
4631 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4632 * @return a new body kinematics instance.
4633 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4634 * matrices are not NED frame valid.
4635 */
4636 public static BodyKinematics estimateKinematicsAndReturnNew(
4637 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
4638 final double latitude, final double height, final NEDFrame oldFrame) {
4639 final var result = new BodyKinematics();
4640 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
4641 return result;
4642 }
4643
4644 /**
4645 * Estimates body kinematics (specific force applied to a body and its angular rates)
4646 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4647 *
4648 * @param timeInterval time interval between epochs expressed in seconds (s).
4649 * @param c body-to-NED coordinate transformation.
4650 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4651 * @param latitude current latitude.
4652 * @param height current height.
4653 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4654 * @return a new body kinematics instance.
4655 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4656 * matrices are not NED frame valid.
4657 */
4658 public static BodyKinematics estimateKinematicsAndReturnNew(
4659 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
4660 final Angle latitude, final Distance height, final NEDFrame oldFrame) {
4661 final var result = new BodyKinematics();
4662 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
4663 return result;
4664 }
4665
4666 /**
4667 * Estimates body kinematics (specific force applied to a body and its angular rates)
4668 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4669 *
4670 * @param timeInterval time interval between epochs.
4671 * @param c body-to-NED coordinate transformation.
4672 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4673 * @param latitude current latitude.
4674 * @param height current height.
4675 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4676 * @return a new body kinematics instance.
4677 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4678 * matrices are not NED frame valid.
4679 */
4680 public static BodyKinematics estimateKinematicsAndReturnNew(
4681 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
4682 final Angle latitude, final Distance height, final NEDFrame oldFrame) {
4683 final var result = new BodyKinematics();
4684 estimateKinematics(timeInterval, c, velocity, latitude, height, oldFrame, result);
4685 return result;
4686 }
4687
4688 /**
4689 * Estimates body kinematics (specific force applied to a body and its angular rates)
4690 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4691 *
4692 * @param timeInterval time interval between epochs expressed in seconds (s).
4693 * @param c body-to-NED coordinate transformation.
4694 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4695 * north, east, and down and expressed in meters per second (m/s).
4696 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4697 * north, east, and down and expressed in meters per second (m/s).
4698 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4699 * north, east, and down and expressed in meters per second (m/s).
4700 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4701 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4702 * @return a new body kinematics instance.
4703 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4704 * matrices are not NED frame valid.
4705 */
4706 public static BodyKinematics estimateKinematicsAndReturnNew(
4707 final double timeInterval, final CoordinateTransformation c,
4708 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame) {
4709 final var result = new BodyKinematics();
4710 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
4711 return result;
4712 }
4713
4714 /**
4715 * Estimates body kinematics (specific force applied to a body and its angular rates)
4716 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4717 *
4718 * @param timeInterval time interval between epochs.
4719 * @param c body-to-NED coordinate transformation.
4720 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4721 * north, east, and down and expressed in meters per second (m/s).
4722 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4723 * north, east, and down and expressed in meters per second (m/s).
4724 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4725 * north, east, and down and expressed in meters per second (m/s).
4726 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4727 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4728 * @return a new body kinematics instance.
4729 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4730 * matrices are not NED frame valid.
4731 */
4732 public static BodyKinematics estimateKinematicsAndReturnNew(
4733 final Time timeInterval, final CoordinateTransformation c,
4734 final double vn, final double ve, final double vd, final NEDPosition position, final NEDFrame oldFrame) {
4735 final var result = new BodyKinematics();
4736 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
4737 return result;
4738 }
4739
4740 /**
4741 * Estimates body kinematics (specific force applied to a body and its angular rates)
4742 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4743 *
4744 * @param timeInterval time interval between epochs expressed in seconds (s).
4745 * @param c body-to-NED coordinate transformation.
4746 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4747 * north, east, and down.
4748 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4749 * north, east, and down.
4750 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4751 * north, east, and down.
4752 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4753 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4754 * @return a new body kinematics instance.
4755 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4756 * matrices are not NED frame valid.
4757 */
4758 public static BodyKinematics estimateKinematicsAndReturnNew(
4759 final double timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
4760 final NEDPosition position, final NEDFrame oldFrame) {
4761 final var result = new BodyKinematics();
4762 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
4763 return result;
4764 }
4765
4766 /**
4767 * Estimates body kinematics (specific force applied to a body and its angular rates)
4768 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4769 *
4770 * @param timeInterval time interval between epochs.
4771 * @param c body-to-NED coordinate transformation.
4772 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4773 * north, east, and down.
4774 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4775 * north, east, and down.
4776 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4777 * north, east, and down.
4778 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4779 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4780 * @return a new body kinematics instance.
4781 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4782 * matrices are not NED frame valid.
4783 */
4784 public static BodyKinematics estimateKinematicsAndReturnNew(
4785 final Time timeInterval, final CoordinateTransformation c, final Speed vn, final Speed ve, final Speed vd,
4786 final NEDPosition position, final NEDFrame oldFrame) {
4787 final var result = new BodyKinematics();
4788 estimateKinematics(timeInterval, c, vn, ve, vd, position, oldFrame, result);
4789 return result;
4790 }
4791
4792 /**
4793 * Estimates body kinematics (specific force applied to a body and its angular rates)
4794 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4795 *
4796 * @param timeInterval time interval between epochs expressed in seconds (s).
4797 * @param c body-to-NED coordinate transformation.
4798 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4799 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4800 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4801 * @return a new body kinematics instance.
4802 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4803 * matrices are not NED frame valid.
4804 */
4805 public static BodyKinematics estimateKinematicsAndReturnNew(
4806 final double timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
4807 final NEDPosition position, final NEDFrame oldFrame) {
4808 final var result = new BodyKinematics();
4809 estimateKinematics(timeInterval, c, velocity, position, oldFrame, result);
4810 return result;
4811 }
4812
4813 /**
4814 * Estimates body kinematics (specific force applied to a body and its angular rates)
4815 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4816 *
4817 * @param timeInterval time interval between epochs.
4818 * @param c body-to-NED coordinate transformation.
4819 * @param velocity velocity of body frame with respect NED frame, resolved along north, east and down.
4820 * @param position current curvilinear position expressed in terms of latitude, longitude and height.
4821 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4822 * @return a new body kinematics instance.
4823 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4824 * matrices are not NED frame valid.
4825 */
4826 public static BodyKinematics estimateKinematicsAndReturnNew(
4827 final Time timeInterval, final CoordinateTransformation c, final NEDVelocity velocity,
4828 final NEDPosition position, final NEDFrame oldFrame) {
4829 final var result = new BodyKinematics();
4830 estimateKinematics(timeInterval, c, velocity, position, oldFrame, result);
4831 return result;
4832 }
4833
4834 /**
4835 * Estimates body kinematics (specific force applied to a body and its angular rates)
4836 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4837 *
4838 * @param timeInterval time interval between epochs expressed in seconds (s).
4839 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4840 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4841 * @return a new body kinematics instance.
4842 * @throws IllegalArgumentException if provided time interval is negative.
4843 */
4844 public static BodyKinematics estimateKinematicsAndReturnNew(
4845 final double timeInterval, final NEDFrame frame, final NEDFrame oldFrame) {
4846 final var result = new BodyKinematics();
4847 estimateKinematics(timeInterval, frame, oldFrame, result);
4848 return result;
4849 }
4850
4851 /**
4852 * Estimates body kinematics (specific force applied to a body and its angular rates)
4853 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4854 *
4855 * @param timeInterval time interval between epochs.
4856 * @param frame NED frame containing current position, velocity and body-to-NED coordinate transformation.
4857 * @param oldFrame NED frame containing previous position, velocity and body-to-NED coordinate transformation.
4858 * @return a new body kinematics instance.
4859 * @throws IllegalArgumentException if provided time interval is negative.
4860 */
4861 public static BodyKinematics estimateKinematicsAndReturnNew(
4862 final Time timeInterval, final NEDFrame frame, final NEDFrame oldFrame) {
4863 final var result = new BodyKinematics();
4864 estimateKinematics(timeInterval, frame, oldFrame, result);
4865 return result;
4866 }
4867
4868 /**
4869 * Estimates body kinematics (specific force applied to a body and its angular rates)
4870 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4871 *
4872 * @param timeInterval time interval between epochs expressed in seconds (s).
4873 * @param c body-to-NED coordinate transformation.
4874 * @param oldC previous body-to-NED coordinate transformation.
4875 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4876 * north, east, and down.
4877 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4878 * north, east, and down.
4879 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4880 * north, east, and down.
4881 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4882 * along north, east, and down.
4883 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4884 * along north, east, and down.
4885 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4886 * along north, east, and down.
4887 * @param latitude current latitude expressed in radians (rad).
4888 * @param height current height expressed in meters (m).
4889 * @param oldLatitude previous latitude expressed in radians (rad).
4890 * @param oldHeight previous height expressed in meters (m).
4891 * @return a new body kinematics instance.
4892 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4893 * matrices are not NED frame valid.
4894 */
4895 public static BodyKinematics estimateKinematicsAndReturnNew(
4896 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4897 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
4898 final double latitude, final double height, final double oldLatitude, final double oldHeight) {
4899 final var result = new BodyKinematics();
4900 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
4901 oldLatitude, oldHeight, result);
4902 return result;
4903 }
4904
4905 /**
4906 * Estimates body kinematics (specific force applied to a body and its angular rates)
4907 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4908 *
4909 * @param timeInterval time interval between epochs.
4910 * @param c body-to-NED coordinate transformation.
4911 * @param oldC previous body-to-NED coordinate transformation.
4912 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4913 * north, east, and down.
4914 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4915 * north, east, and down.
4916 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4917 * north, east, and down.
4918 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4919 * along north, east, and down.
4920 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4921 * along north, east, and down.
4922 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4923 * along north, east, and down.
4924 * @param latitude current latitude expressed in radians (rad).
4925 * @param height current height expressed in meters (m).
4926 * @param oldLatitude previous latitude expressed in radians (rad).
4927 * @param oldHeight previous height expressed in meters (m).
4928 * @return a new body kinematics instance.
4929 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4930 * matrices are not NED frame valid.
4931 */
4932 public static BodyKinematics estimateKinematicsAndReturnNew(
4933 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4934 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
4935 final double latitude, final double height, final double oldLatitude, final double oldHeight) {
4936 final var result = new BodyKinematics();
4937 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
4938 oldLatitude, oldHeight, result);
4939 return result;
4940 }
4941
4942 /**
4943 * Estimates body kinematics (specific force applied to a body and its angular rates)
4944 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4945 *
4946 * @param timeInterval time interval between epochs expressed in seconds (s).
4947 * @param c body-to-NED coordinate transformation.
4948 * @param oldC previous body-to-NED coordinate transformation.
4949 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4950 * north, east, and down and expressed in meters per second (m/s).
4951 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4952 * north, east, and down and expressed in meters per second (m/s).
4953 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4954 * north, east, and down and expressed in meters per second (m/s).
4955 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4956 * along north, east, and down and expressed in meters per second (m/s).
4957 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4958 * along north, east, and down and expressed in meters per second (m/s).
4959 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4960 * along north, east, and down and expressed in meters per second (m/s).
4961 * @param latitude current latitude.
4962 * @param height current height expressed in meters (m).
4963 * @param oldLatitude previous latitude.
4964 * @param oldHeight previous height expressed in meters (m).
4965 * @return a new body kinematics instance.
4966 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
4967 * matrices are not NED frame valid.
4968 */
4969 public static BodyKinematics estimateKinematicsAndReturnNew(
4970 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
4971 final double vn, final double ve, final double vd,
4972 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
4973 final Angle oldLatitude, final double oldHeight) {
4974 final var result = new BodyKinematics();
4975 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
4976 oldLatitude, oldHeight, result);
4977 return result;
4978 }
4979
4980 /**
4981 * Estimates body kinematics (specific force applied to a body and its angular rates)
4982 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
4983 *
4984 * @param timeInterval time interval between epochs.
4985 * @param c body-to-NED coordinate transformation.
4986 * @param oldC previous body-to-NED coordinate transformation.
4987 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
4988 * north, east, and down and expressed in meters per second (m/s).
4989 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
4990 * north, east, and down and expressed in meters per second (m/s).
4991 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
4992 * north, east, and down and expressed in meters per second (m/s).
4993 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
4994 * along north, east, and down and expressed in meters per second (m/s).
4995 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
4996 * along north, east, and down and expressed in meters per second (m/s).
4997 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
4998 * along north, east, and down and expressed in meters per second (m/s).
4999 * @param latitude current latitude.
5000 * @param height current height expressed in meters (m).
5001 * @param oldLatitude previous latitude.
5002 * @param oldHeight previous height expressed in meters (m).
5003 * @return a new body kinematics instance.
5004 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
5005 * matrices are not NED frame valid.
5006 */
5007 public static BodyKinematics estimateKinematicsAndReturnNew(
5008 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
5009 final double vn, final double ve, final double vd,
5010 final double oldVn, final double oldVe, final double oldVd, final Angle latitude, final double height,
5011 final Angle oldLatitude, final double oldHeight) {
5012 final var result = new BodyKinematics();
5013 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
5014 oldLatitude, oldHeight, result);
5015 return result;
5016 }
5017
5018 /**
5019 * Estimates body kinematics (specific force applied to a body and its angular rates)
5020 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
5021 *
5022 * @param timeInterval time interval between epochs expressed in seconds (s).
5023 * @param c body-to-NED coordinate transformation.
5024 * @param oldC previous body-to-NED coordinate transformation.
5025 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
5026 * north, east, and down and expressed in meters per second (m/s).
5027 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
5028 * north, east, and down and expressed in meters per second (m/s).
5029 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
5030 * north, east, and down and expressed in meters per second (m/s).
5031 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
5032 * along north, east, and down and expressed in meters per second (m/s).
5033 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
5034 * along north, east, and down and expressed in meters per second (m/s).
5035 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
5036 * along north, east, and down and expressed in meters per second (m/s).
5037 * @param latitude current latitude expressed in radians (rad).
5038 * @param height current height.
5039 * @param oldLatitude previous latitude expressed in radians (rad).
5040 * @param oldHeight previous height.
5041 * @return a new body kinematics instance.
5042 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
5043 * matrices are not NED frame valid.
5044 */
5045 public static BodyKinematics estimateKinematicsAndReturnNew(
5046 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
5047 final double vn, final double ve, final double vd,
5048 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
5049 final double oldLatitude, final Distance oldHeight) {
5050 final var result = new BodyKinematics();
5051 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
5052 oldLatitude, oldHeight, result);
5053 return result;
5054 }
5055
5056 /**
5057 * Estimates body kinematics (specific force applied to a body and its angular rates)
5058 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
5059 *
5060 * @param timeInterval time interval between epochs.
5061 * @param c body-to-NED coordinate transformation.
5062 * @param oldC previous body-to-NED coordinate transformation.
5063 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
5064 * north, east, and down and expressed in meters per second (m/s).
5065 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
5066 * north, east, and down and expressed in meters per second (m/s).
5067 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
5068 * north, east, and down and expressed in meters per second (m/s).
5069 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
5070 * along north, east, and down and expressed in meters per second (m/s).
5071 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
5072 * along north, east, and down and expressed in meters per second (m/s).
5073 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
5074 * along north, east, and down and expressed in meters per second (m/s).
5075 * @param latitude current latitude expressed in radians (rad).
5076 * @param height current height.
5077 * @param oldLatitude previous latitude expressed in radians (rad).
5078 * @param oldHeight previous height.
5079 * @return a new body kinematics instance.
5080 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
5081 * matrices are not NED frame valid.
5082 */
5083 public static BodyKinematics estimateKinematicsAndReturnNew(
5084 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
5085 final double vn, final double ve, final double vd,
5086 final double oldVn, final double oldVe, final double oldVd, final double latitude, final Distance height,
5087 final double oldLatitude, final Distance oldHeight) {
5088 final var result = new BodyKinematics();
5089 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
5090 oldLatitude, oldHeight, result);
5091 return result;
5092 }
5093
5094 /**
5095 * Estimates body kinematics (specific force applied to a body and its angular rates)
5096 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
5097 *
5098 * @param timeInterval time interval between epochs expressed in seconds (s).
5099 * @param c body-to-NED coordinate transformation.
5100 * @param oldC previous body-to-NED coordinate transformation.
5101 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
5102 * north, east, and down.
5103 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
5104 * north, east, and down.
5105 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
5106 * north, east, and down.
5107 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
5108 * along north, east, and down.
5109 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
5110 * along north, east, and down.
5111 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
5112 * along north, east, and down.
5113 * @param latitude current latitude.
5114 * @param height current height.
5115 * @param oldLatitude previous latitude.
5116 * @param oldHeight previous height.
5117 * @return a new body kinematics instance.
5118 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
5119 * matrices are not NED frame valid.
5120 */
5121 public static BodyKinematics estimateKinematicsAndReturnNew(
5122 final double timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
5123 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
5124 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight) {
5125 final var result = new BodyKinematics();
5126 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
5127 oldLatitude, oldHeight, result);
5128 return result;
5129 }
5130
5131 /**
5132 * Estimates body kinematics (specific force applied to a body and its angular rates)
5133 * with respect NED frame and resolved along body-frame axes, averaged over time interval.
5134 *
5135 * @param timeInterval time interval between epochs.
5136 * @param c body-to-NED coordinate transformation.
5137 * @param oldC previous body-to-NED coordinate transformation.
5138 * @param vn north coordinate of velocity of body frame with respect NED frame, resolved along
5139 * north, east, and down.
5140 * @param ve east coordinate of velocity of body frame with respect NED frame, resolved along
5141 * north, east, and down.
5142 * @param vd down coordinate of velocity of body frame with respect NED frame, resolved along
5143 * north, east, and down.
5144 * @param oldVn north coordinate of previous velocity of body frame with respect NED frame, resolved
5145 * along north, east, and down.
5146 * @param oldVe east coordinate of previous velocity of body frame with respect NED frame, resolved
5147 * along north, east, and down.
5148 * @param oldVd down coordinate of previous velocity of body frame with respect NED frame, resolved
5149 * along north, east, and down.
5150 * @param latitude current latitude.
5151 * @param height current height.
5152 * @param oldLatitude previous latitude.
5153 * @param oldHeight previous height.
5154 * @return a new body kinematics instance.
5155 * @throws IllegalArgumentException if provided time interval is negative or coordinate transformation
5156 * matrices are not NED frame valid.
5157 */
5158 public static BodyKinematics estimateKinematicsAndReturnNew(
5159 final Time timeInterval, final CoordinateTransformation c, final CoordinateTransformation oldC,
5160 final Speed vn, final Speed ve, final Speed vd, final Speed oldVn, final Speed oldVe, final Speed oldVd,
5161 final Angle latitude, final Distance height, final Angle oldLatitude, final Distance oldHeight) {
5162 final var result = new BodyKinematics();
5163 estimateKinematics(timeInterval, c, oldC, vn, ve, vd, oldVn, oldVe, oldVd, latitude, height,
5164 oldLatitude, oldHeight, result);
5165 return result;
5166 }
5167
5168 /**
5169 * Converts a time instance into seconds.
5170 *
5171 * @param time time to be converted.
5172 * @return time value expressed in seconds.
5173 */
5174 private static double convertTime(final Time time) {
5175 return TimeConverter.convert(time.getValue().doubleValue(), time.getUnit(), TimeUnit.SECOND);
5176 }
5177
5178 /**
5179 * Converts a speed instance into meters per second.
5180 *
5181 * @param speed speed to be converted.
5182 * @return speed value expressed in meters per second.
5183 */
5184 private static double convertSpeed(final Speed speed) {
5185 return SpeedConverter.convert(speed.getValue().doubleValue(), speed.getUnit(), SpeedUnit.METERS_PER_SECOND);
5186 }
5187
5188 /**
5189 * Converts an angle instance into radians.
5190 *
5191 * @param angle angle to be converted.
5192 * @return angle value expressed in radians.
5193 */
5194 private static double convertAngle(final Angle angle) {
5195 return AngleConverter.convert(angle.getValue().doubleValue(), angle.getUnit(), AngleUnit.RADIANS);
5196 }
5197
5198 /**
5199 * Converts a distance instance into meters.
5200 *
5201 * @param distance distance to be converted.
5202 * @return distance value expressed in meters.
5203 */
5204 private static double convertDistance(final Distance distance) {
5205 return DistanceConverter.convert(distance.getValue().doubleValue(), distance.getUnit(), DistanceUnit.METER);
5206 }
5207 }