CLOCK_ACCELERATION=slice(28,29)# clock acceleration in light-meters/s**2,
CLOCK_ACCELERATION=slice(28,29)# clock acceleration in light-meters/s**2,
ACCELEROMETER_SCALE_UNUSED=slice(29,30)# scale of mems accelerometer
ACCELEROMETER_SCALE_UNUSED=slice(29,30)# scale of mems accelerometer
ACCELEROMETER_BIAS=slice(30,33)# bias of mems accelerometer
ACCELEROMETER_BIAS=slice(30,33)# bias of mems accelerometer
# TODO the offset is likely a translation of the sensor, not a rotation of the camera
WIDE_CAM_OFFSET=slice(33,36)# wide camera offset angles in radians (tici only)
# We curently do not use ACCELEROMETER_SCALE to avoid instability due to too many free variables (ACCELEROMETER_SCALE, ACCELEROMETER_BIAS, IMU_OFFSET).
# We curently do not use ACCELEROMETER_SCALE to avoid instability due to too many free variables (ACCELEROMETER_SCALE, ACCELEROMETER_BIAS, IMU_OFFSET).
# From experiments we see that ACCELEROMETER_BIAS is more correct than ACCELEROMETER_SCALE
# From experiments we see that ACCELEROMETER_BIAS is more correct than ACCELEROMETER_SCALE
@ -70,6 +72,7 @@ class States():
CLOCK_ACCELERATION_ERR=slice(27,28)
CLOCK_ACCELERATION_ERR=slice(27,28)
ACCELEROMETER_SCALE_ERR_UNUSED=slice(28,29)
ACCELEROMETER_SCALE_ERR_UNUSED=slice(28,29)
ACCELEROMETER_BIAS_ERR=slice(29,32)
ACCELEROMETER_BIAS_ERR=slice(29,32)
WIDE_CAM_OFFSET_ERR=slice(32,35)
classLocKalman():
classLocKalman():
@ -87,6 +90,7 @@ class LocKalman():
0,0,
0,0,
0,
0,
1,
1,
0,0,0,
0,0,0],dtype=np.float64)
0,0,0],dtype=np.float64)
# state covariance
# state covariance
@ -99,11 +103,12 @@ class LocKalman():
0.02**2,
0.02**2,
2**2,2**2,2**2,
2**2,2**2,2**2,
0.01**2,
0.01**2,
(0.01)**2,(0.01)**2,(0.01)**2,
0.01**2,0.01**2,0.01**2,
10**2,1**2,
10**2,1**2,
0.2**2,
0.2**2,
0.05**2,
0.05**2,
0.05**2,0.05**2,0.05**2])
0.05**2,0.05**2,0.05**2,
0.01**2,0.01**2,0.01**2])
# process noise
# process noise
Q=np.diag([0.03**2,0.03**2,0.03**2,
Q=np.diag([0.03**2,0.03**2,0.03**2,
@ -119,10 +124,11 @@ class LocKalman():
(.1)**2,(.01)**2,
(.1)**2,(.01)**2,
0.005**2,
0.005**2,
(0.02/100)**2,
(0.02/100)**2,
(0.005/100)**2,(0.005/100)**2,(0.005/100)**2])
(0.005/100)**2,(0.005/100)**2,(0.005/100)**2,
(0.05/60)**2,(0.05/60)**2,(0.05/60)**2])
# measurements that need to pass mahalanobis distance outlier rejector
# measurements that need to pass mahalanobis distance outlier rejector
--demo Use the demo route instead of providing one (default: False)
--demo Use the demo route instead of providing one (default: False)
--plot If a plot should be generated (default: False)
--plot If a plot should be generated (default: False)
```
```
To timestamp an event, use `LOGT("msg")` in c++ code or `cloudlog.timestamp("msg")` in python code. If the print is warning for frameId assignment ambiguity, use `LOGT(frameId ,"msg")`.
## Examples
## Examples
Plotting with relative starts each process at time=0 and gives a nice overview. Timestamps are visualized as diamonds. The opacity allows for visualization of overlapping services.
Plotting with relative starts each process at time=0 and gives a nice overview. Timestamps are visualized as diamonds. The opacity allows for visualization of overlapping services.
@ -31,58 +32,64 @@ Plotting without relative provides info about the frames relative time.
Printed timestamps of a frame with internal durations.
Printed timestamps of a frame with internal durations.