Source code for genericroboticarm.sila_server.feature_implementations.robotcontroller_impl

# Generated by sila2.code_generator; sila2.__version__: 0.10.4
from __future__ import annotations

from typing import TYPE_CHECKING

from sila2.server import MetadataDict, ObservableCommandInstance

from ..generated.robotcontroller import (
    EmergencyStop_Responses,
    LostPlate,
    MovePlate_Responses,
    MoveToPosition_Responses,
    PickPlate_Responses,
    PlacePlate_Responses,
    Reinitialize_Responses,
    RobotControllerBase,
    SetAcceleration_Responses,
    SetSpeed_Responses,
    Site,
)
from datetime import datetime

if TYPE_CHECKING:
    from ..server import Server


[docs] def _raise_if_gripping_plate(robot) -> None: """ Guard against starting a pick while a plate is already held: the pick would open the gripper at the current location and drop it. Only robots that can report their gripper state (e.g. the PreciseFlex) are checked; others are left untouched. """ if getattr(robot, "currently_gripping_plate", False): raise LostPlate( "Refusing to pick a plate: the gripper is already holding one. Picking now " "would open the gripper and drop the held plate. Recover the held plate first." )
[docs] class RobotControllerImpl(RobotControllerBase): def __init__(self, parent_server: Server) -> None: super().__init__(parent_server=parent_server) self.robot = parent_server.robot
[docs] def Reinitialize(self, *, metadata: MetadataDict) -> Reinitialize_Responses: with self.parent_server.robot_command(): self.robot.init_connection()
[docs] def PickPlate(self, Site: Site, *, metadata: MetadataDict) -> PickPlate_Responses: with self.parent_server.robot_command(): _raise_if_gripping_plate(self.robot) self.robot.pick_from_device(*Site)
[docs] def PlacePlate(self, Site: Site, *, metadata: MetadataDict) -> PlacePlate_Responses: with self.parent_server.robot_command(): self.robot.place_at_device(*Site)
[docs] def SetSpeed(self, Percentage: float, *, metadata: MetadataDict) -> SetSpeed_Responses: self.robot.set_speed(Percentage)
[docs] def SetAcceleration(self, Percentage: float, *, metadata: MetadataDict) -> SetAcceleration_Responses: self.robot.set_acceleration(Percentage)
[docs] def EmergencyStop(self, *, metadata: MetadataDict) -> EmergencyStop_Responses: self.robot.stop_moving()
[docs] def MoveToPosition( self, Position: str, *, metadata: MetadataDict, instance: ObservableCommandInstance ) -> MoveToPosition_Responses: with self.parent_server.robot_command(): instance.begin_execution() # set execution status from `waiting` to `running` self.robot.move_to_position(Position)
[docs] def MovePlate( self, OriginSite: Site, DestinationSite: Site, *, metadata: MetadataDict, instance: ObservableCommandInstance ) -> MovePlate_Responses: with self.parent_server.robot_command(): instance.begin_execution() # set execution status from `waiting` to `running` print(f"{datetime.now()}: Moving a plate from {OriginSite} to {DestinationSite}") _raise_if_gripping_plate(self.robot) self.robot.pick_from_device(*OriginSite) self.robot.place_at_device(*DestinationSite)