Skip to content

Commit

Permalink
Implement stop button
Browse files Browse the repository at this point in the history
  • Loading branch information
andchiind committed Mar 1, 2024
1 parent 53720c9 commit b4e75c5
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 8 deletions.
45 changes: 45 additions & 0 deletions src/isar_exr/api/energy_robotics_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
RobotInfeasibleMissionException,
RobotMapException,
RobotMissionStatusException,
RobotActionException,
)
from robot_interface.models.mission.status import MissionStatus

Expand Down Expand Up @@ -130,6 +131,50 @@ def pause_current_mission(self, exr_robot_id: str) -> None:
error_description=f"Invalid status after pausing mission: '{status}'"
)

def stop_current_mission(self, exr_robot_id: str) -> None:
params: dict = {"robotID": exr_robot_id}

variable_definitions_graphql: DSLVariableDefinitions = DSLVariableDefinitions()

stop_current_mission_mutation: DSLMutation = DSLMutation(
self.schema.Mutation.resetMissionExecution.args(
robotID=variable_definitions_graphql.robotID
).select(
self.schema.MissionExecutionType.id,
self.schema.MissionExecutionType.status,
self.schema.MissionExecutionType.failures,
)
)

stop_current_mission_mutation.variable_definitions = (
variable_definitions_graphql
)

try:
result: Dict[str, Any] = self.client.query(
dsl_gql(stop_current_mission_mutation), params
)
except TransportQueryError as e:
raise RobotActionException(
f"Could not stop the running mission since it is in a conflicting state: {e}"
)
except Exception as e:
raise RobotCommunicationException(
error_description=f"Could not stop the running mission: {e}",
)

status: ExrMissionStatus = ExrMissionStatus(
result["resetMissionExecution"]["status"]
)
success: bool = status in [
ExrMissionStatus.ResetRequested,
ExrMissionStatus.Completed,
]
if not success:
raise RobotMissionStatusException(
error_description=f"Invalid status after stopping mission: '{status}'"
)

def get_point_of_interest_by_customer_tag(
self, customer_tag: str, site_id: str
) -> str:
Expand Down
1 change: 1 addition & 0 deletions src/isar_exr/models/step_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class ExrMissionStatus(str, Enum):
StartRequested: str = "START_REQUESTED"
PauseRequested: str = "PAUSE_REQUESTED"
ResumeRequested: str = "RESUME_REQUESTED"
ResetRequested: str = "RESET_REQUESTED"
Rejected: str = "REJECTED"
WakingUp: str = "WAKING_UP"
Starting: str = "STARTING"
Expand Down
29 changes: 21 additions & 8 deletions src/isar_exr/robotinterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
RobotInitializeException,
RobotMissionNotSupportedException,
RobotMissionStatusException,
RobotActionException,
)
from robot_interface.models.initialize import InitializeParams
from robot_interface.models.inspection.inspection import Inspection
Expand Down Expand Up @@ -236,14 +237,26 @@ def step_status(self) -> StepStatus:
raise NotImplementedError

def stop(self) -> None:
try:
self.api.pause_current_mission(self.exr_robot_id)
except Exception:
message: str = "Could not stop the running mission\n"
self.logger.error(message)
raise RobotCommunicationException(
error_description=message,
)
max_request_attempts: int = 10
stop_mission_attempts: int = 0
while stop_mission_attempts < max_request_attempts:
try:
self.api.stop_current_mission(self.exr_robot_id)
except RobotActionException as e:
self.logger.warning(f"Failed to stop current mission: {e.error_reason}")
stop_mission_attempts += 1
time.sleep(1)
continue
except Exception as e:
message: str = "Could not stop the running mission\n"
self.logger.error(message)
raise RobotCommunicationException(
error_description=message,
)
return
raise RobotActionException(
f"Failed to stop current mission after {stop_mission_attempts} failed attempts"
)

def get_inspections(self, step: InspectionStep) -> Sequence[Inspection]:
raise NotImplementedError
Expand Down

0 comments on commit b4e75c5

Please sign in to comment.