fixed normal force negative display scale problem

This commit is contained in:
ykcheungab
2026-09-01 16:46:00 +08:00
parent e7789c86cb
commit 299696ab33
3 changed files with 49 additions and 11 deletions
+31 -5
View File
@@ -47,8 +47,10 @@ from .acquisition import (
from .camera_discovery import list_cameras, pick_default_camera
from .dd06_acquisition import Dd06AcquisitionWorker
from .force_calibration import (
CALIBRATED_FORCE_Y_MAX,
CALIBRATED_FORCE_Y_MIN,
CALIBRATED_NORMAL_FORCE_Y_MAX,
CALIBRATED_NORMAL_FORCE_Y_MIN,
CALIBRATED_SHEAR_FORCE_Y_MAX,
CALIBRATED_SHEAR_FORCE_Y_MIN,
FORCE_SAMPLE_RATE_HZ,
PLOT_BUFFER_POINTS,
PLOT_WINDOW_SEC,
@@ -896,20 +898,44 @@ class ExhibitionWindow(QMainWindow):
)
self.image_label.setPixmap(scaled)
def _calibrated_y_range(self, channel_index: int) -> tuple[float, float]:
if channel_index == 0:
return CALIBRATED_NORMAL_FORCE_Y_MIN, CALIBRATED_NORMAL_FORCE_Y_MAX
return CALIBRATED_SHEAR_FORCE_Y_MIN, CALIBRATED_SHEAR_FORCE_Y_MAX
def _apply_calibrated_y_axis(self, plot, channel_index: int) -> None:
axis = plot.getAxis("left")
if channel_index == 0:
ticks = [(0, "0"), (5, "5"), (10, "10"), (15, "15"), (20, "20")]
else:
ticks = [
(-20, "-20"),
(-10, "-10"),
(0, "0"),
(10, "10"),
(20, "20"),
]
axis.setTicks([ticks])
def _update_plots(self) -> None:
state = self.force_history.state()
if state is None:
return
for i, curve in enumerate(self.curves):
x = state.times
y = state.values[:, i]
y = state.values[:, i].copy()
if self._force_calibrated and i == 0:
y = np.maximum(y, 0.0)
curve.setData(x, y)
if self._force_calibrated:
ymin, ymax = CALIBRATED_FORCE_Y_MIN, CALIBRATED_FORCE_Y_MAX
ymin, ymax = self._calibrated_y_range(i)
self._apply_calibrated_y_axis(self.plots[i], i)
else:
ymin, ymax = state.y_ranges[i]
self.plots[i].getAxis("left").setTicks(None)
self.plots[i].setYRange(ymin, ymax, padding=0)
self.dot_cores[i].setData(x[-1:], y[-1:])
dot_y = y[-1:]
self.dot_cores[i].setData(x[-1:], dot_y)
x0, x1 = state.x_range
for plot in self.plots:
plot.setXRange(x0, x1, padding=0)
+4 -2
View File
@@ -11,8 +11,10 @@ FORCE_SAMPLE_RATE_HZ = 30.0
PLOT_BUFFER_POINTS = 120
PLOT_WINDOW_SEC = PLOT_BUFFER_POINTS / FORCE_SAMPLE_RATE_HZ
Y_AXIS_MIN_SPAN = 20000.0
CALIBRATED_FORCE_Y_MIN = -20.0
CALIBRATED_FORCE_Y_MAX = 20.0
CALIBRATED_NORMAL_FORCE_Y_MIN = 0.0
CALIBRATED_NORMAL_FORCE_Y_MAX = 20.0
CALIBRATED_SHEAR_FORCE_Y_MIN = -20.0
CALIBRATED_SHEAR_FORCE_Y_MAX = 20.0
Y_RANGE_ALPHA = 0.5
LOWPASS_CUTOFF_HZ = 10.0