Skip to content

Commit 821284d

Browse files
authored
Small improvements to sai-cli diagnose (#72)
* Use symlog instead of log axis (to avoid hiding values near 0) * Add isOptionalSensor flag to timestamp check * Simplify IMU noise check
1 parent a2c46cf commit 821284d

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

python/cli/diagnose/sensors.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ def analyzeTimestamps(
103103
minFrequencyHz,
104104
maxFrequencyHz,
105105
plotArgs,
106-
allowDataGaps=False):
106+
allowDataGaps=False,
107+
isOptionalSensor=False):
107108
WARNING_RELATIVE_DELTA_TIME = 0.2
108109
DATA_GAP_RELATIVE_DELTA_TIME = 10
109110
MIN_DATA_GAP_SECONDS = 0.25
@@ -152,7 +153,7 @@ def toPercent(value):
152153
plottype="scatter",
153154
xLabel="Time (s)",
154155
yLabel="Time diff (ms)",
155-
yScale="log" if dataGaps > 0 else None,
156+
yScale="symlog" if dataGaps > 0 else None,
156157
s=10,
157158
**plotArgs))
158159

@@ -168,7 +169,7 @@ def toPercent(value):
168169
)
169170

170171
if dataGaps > 0 and not allowDataGaps:
171-
self.__addIssue(DiagnosisLevel.ERROR,
172+
self.__addIssue(DiagnosisLevel.WARNING if isOptionalSensor else DiagnosisLevel.ERROR,
172173
f"Found {dataGaps} gaps in the data longer than {SECONDS_TO_MILLISECONDS*thresholdDataGap:.1f}ms.")
173174

174175
if badDeltaTimes > MAX_BAD_DELTA_TIME_RATIO * total and not allowDataGaps:
@@ -180,12 +181,12 @@ def toPercent(value):
180181

181182
frequency = 1.0 / medianDeltaTime
182183
if minFrequencyHz is not None and frequency < minFrequencyHz:
183-
self.__addIssue(DiagnosisLevel.ERROR,
184+
self.__addIssue(DiagnosisLevel.WARNING if isOptionalSensor else DiagnosisLevel.ERROR,
184185
f"Minimum required frequency is {minFrequencyHz:.1f}Hz but data is {frequency:.1f}Hz"
185186
)
186187

187188
if maxFrequencyHz is not None and frequency > maxFrequencyHz:
188-
self.__addIssue(DiagnosisLevel.ERROR,
189+
self.__addIssue(DiagnosisLevel.WARNING if isOptionalSensor else DiagnosisLevel.ERROR,
189190
f"Maximum allowed frequency is {maxFrequencyHz:.1f}Hz but data is {frequency:.1f}Hz"
190191
)
191192

@@ -233,16 +234,15 @@ def analyzeSignalNoise(
233234
signal,
234235
timestamps,
235236
samplingRate,
236-
cutoffFrequency,
237237
noiseThreshold,
238238
sensorName,
239239
measurementUnit):
240240
WINDOW_SIZE_SECONDS = 1.0
241241
count = np.shape(timestamps)[0]
242242
windowSize = int(WINDOW_SIZE_SECONDS * samplingRate)
243+
cutoffFrequency = samplingRate / 4.0
243244
if windowSize <= 0: return
244245
if count < windowSize: return
245-
if cutoffFrequency >= 2.0 * samplingRate: return
246246

247247
def highpass(signal, fs, cutoff, order=3):
248248
from scipy.signal import butter, filtfilt
@@ -428,7 +428,6 @@ def diagnoseAccelerometer(data, output):
428428
ACC_MIN_FREQUENCY_HZ = 50.0
429429
ACC_MAX_FREQUENCY_HZ = 1e4
430430
ACC_NOISE_THRESHOLD = 2.5 # m/s²
431-
ACC_CUTOFF_FREQUENCY_HZ = 50.0
432431
ACC_UNIT_CHECK_THRESHOLD = 200.0 # m/s²
433432

434433
sensor = data["accelerometer"]
@@ -447,7 +446,6 @@ def diagnoseAccelerometer(data, output):
447446
return
448447

449448
samplingRate = computeSamplingRate(deltaTimes)
450-
cutoffThreshold = min(samplingRate / 4.0, ACC_CUTOFF_FREQUENCY_HZ)
451449

452450
status = Status()
453451
status.analyzeTimestamps(
@@ -470,7 +468,6 @@ def diagnoseAccelerometer(data, output):
470468
signal,
471469
timestamps,
472470
samplingRate,
473-
cutoffThreshold,
474471
ACC_NOISE_THRESHOLD,
475472
sensorName="Accelerometer",
476473
measurementUnit="m/s²")
@@ -572,7 +569,8 @@ def diagnoseMagnetometer(data, output):
572569
MAGN_MAX_FREQUENCY_HZ,
573570
plotArgs={
574571
"title": "Magnetometer time diff"
575-
})
572+
},
573+
isOptionalSensor=True)
576574
status.analyzeSignalDuplicateValues(signal)
577575
status.analyzeSignalUnit(
578576
signal,
@@ -622,7 +620,8 @@ def diagnoseBarometer(data, output):
622620
BARO_MAX_FREQUENCY_HZ,
623621
plotArgs={
624622
"title": "Barometer time diff"
625-
})
623+
},
624+
isOptionalSensor=True)
626625
status.analyzeSignalDuplicateValues(signal, BARO_DUPLICATE_VALUE_THRESHOLD)
627626
status.analyzeSignalUnit(
628627
signal,
@@ -670,7 +669,8 @@ def diagnoseGps(data, output):
670669
plotArgs={
671670
"title": "GPS time diff"
672671
},
673-
allowDataGaps=True)
672+
allowDataGaps=True,
673+
isOptionalSensor=True)
674674
status.analyzeSignalDuplicateValues(signal)
675675

676676
output["gps"] = {

0 commit comments

Comments
 (0)