Include option for delta stage in microscope initialisation
This commit is contained in:
parent
5e9e8cb2a3
commit
6dcd6601c4
2 changed files with 12 additions and 9 deletions
|
|
@ -12,7 +12,7 @@ from openflexure_microscope.captures import CaptureManager
|
||||||
|
|
||||||
from openflexure_microscope.stage.mock import MissingStage
|
from openflexure_microscope.stage.mock import MissingStage
|
||||||
from openflexure_microscope.camera.mock import MissingCamera
|
from openflexure_microscope.camera.mock import MissingCamera
|
||||||
from openflexure_microscope.stage.sanga import SangaStage
|
from openflexure_microscope.stage.sanga import SangaStage, SangaDeltaStage
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from openflexure_microscope.camera.pi import PiCameraStreamer
|
from openflexure_microscope.camera.pi import PiCameraStreamer
|
||||||
|
|
@ -111,10 +111,18 @@ class Microscope:
|
||||||
stage_port = configuration["stage"].get("port")
|
stage_port = configuration["stage"].get("port")
|
||||||
if stage_type in ("SangaBoard", "SangaStage"):
|
if stage_type in ("SangaBoard", "SangaStage"):
|
||||||
try:
|
try:
|
||||||
|
logging.info("Trying SangaStage")
|
||||||
self.stage = SangaStage(port=stage_port)
|
self.stage = SangaStage(port=stage_port)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(e)
|
logging.error(e)
|
||||||
logging.warning("No compatible Sangaboard hardware found.")
|
logging.warning("No compatible Sangaboard hardware found.")
|
||||||
|
elif stage_type in ("SangaDeltaStage"):
|
||||||
|
try:
|
||||||
|
logging.info("Trying SangaDeltaStage")
|
||||||
|
self.stage = SangaDeltaStage(port=stage_port)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(e)
|
||||||
|
logging.warning("No compatible Sangaboard hardware found.")
|
||||||
|
|
||||||
logging.info("Handling fallbacks")
|
logging.info("Handling fallbacks")
|
||||||
### Fallbacks
|
### Fallbacks
|
||||||
|
|
|
||||||
|
|
@ -108,10 +108,6 @@ class SangaStage(BaseStage):
|
||||||
axis: None (for 3-axis moves) or one of 'x','y','z'
|
axis: None (for 3-axis moves) or one of 'x','y','z'
|
||||||
backlash: (default: True) whether to correct for backlash.
|
backlash: (default: True) whether to correct for backlash.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if axis is not None:
|
|
||||||
displacement = self.steps_to_array(displacement, axis)
|
|
||||||
|
|
||||||
with self.lock:
|
with self.lock:
|
||||||
logging.debug(f"Moving sangaboard by {displacement}")
|
logging.debug(f"Moving sangaboard by {displacement}")
|
||||||
if not backlash or self.backlash is None:
|
if not backlash or self.backlash is None:
|
||||||
|
|
@ -193,7 +189,6 @@ class SangaStage(BaseStage):
|
||||||
print("Move completed, raising exception...")
|
print("Move completed, raising exception...")
|
||||||
raise value # Propagate the exception
|
raise value # Propagate the exception
|
||||||
|
|
||||||
|
|
||||||
class SangaDeltaStage(SangaStage):
|
class SangaDeltaStage(SangaStage):
|
||||||
def __init__(self, port=None, flex_h=80, flex_a=50, flex_b=50, camera_angle=0, **kwargs):
|
def __init__(self, port=None, flex_h=80, flex_a=50, flex_b=50, camera_angle=0, **kwargs):
|
||||||
self.flex_h = flex_h
|
self.flex_h = flex_h
|
||||||
|
|
@ -208,13 +203,15 @@ class SangaDeltaStage(SangaStage):
|
||||||
[0, 0, 1]
|
[0, 0, 1]
|
||||||
])
|
])
|
||||||
|
|
||||||
|
logging.debug(self.R_camera)
|
||||||
|
|
||||||
# Transformation matrix converting delta into cartesian
|
# Transformation matrix converting delta into cartesian
|
||||||
x_fac = -1 * np.multiply(np.divide(2, np.sqrt(3)), np.divide(self.flex_b, self.flex_h))
|
x_fac = -1 * np.multiply(np.divide(2, np.sqrt(3)), np.divide(self.flex_b, self.flex_h))
|
||||||
y_fac = -1 * np.divide(self.flex_b, self.flex_h)
|
y_fac = -1 * np.divide(self.flex_b, self.flex_h)
|
||||||
z_fac = np.multiply(np.divide(1, 3), np.divide(self.flex_b, self.flex_a))
|
z_fac = np.multiply(np.divide(1, 3), np.divide(self.flex_b, self.flex_a))
|
||||||
|
|
||||||
self.Tvd = np.array([
|
self.Tvd = np.array([
|
||||||
[x_fac, -x_fac, 0],
|
[-x_fac, x_fac, 0],
|
||||||
[0.5 * y_fac, 0.5 * y_fac, -y_fac],
|
[0.5 * y_fac, 0.5 * y_fac, -y_fac],
|
||||||
[z_fac, z_fac, z_fac]
|
[z_fac, z_fac, z_fac]
|
||||||
])
|
])
|
||||||
|
|
@ -234,8 +231,6 @@ class SangaDeltaStage(SangaStage):
|
||||||
return [int(p) for p in position]
|
return [int(p) for p in position]
|
||||||
|
|
||||||
def move_rel(self, displacement, axis=None, backlash=True):
|
def move_rel(self, displacement, axis=None, backlash=True):
|
||||||
if axis is not None:
|
|
||||||
displacement = self.steps_to_array(displacement, axis)
|
|
||||||
|
|
||||||
# Transform into camera coordinates
|
# Transform into camera coordinates
|
||||||
displacement = np.dot(self.R_camera, displacement)
|
displacement = np.dot(self.R_camera, displacement)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue