isar 1.16.9__py3-none-any.whl → 1.16.11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of isar might be problematic. Click here for more details.

@@ -10,9 +10,11 @@ from isar.config.settings import settings
10
10
  from isar.mission_planner.mission_planner_interface import MissionPlannerError
11
11
  from robot_interface.models.mission.mission import Mission
12
12
  from robot_interface.models.mission.step import (
13
- STEPS,
13
+ DockingProcedure,
14
14
  DriveToPose,
15
+ Localize,
15
16
  RecordAudio,
17
+ STEPS,
16
18
  TakeImage,
17
19
  TakeThermalImage,
18
20
  TakeThermalVideo,
@@ -29,6 +31,13 @@ class InspectionTypes(str, Enum):
29
31
  audio: str = "Audio"
30
32
 
31
33
 
34
+ class TaskType(str, Enum):
35
+ Inspection: str = "inspection"
36
+ DriveTo: str = "drive_to"
37
+ Localization: str = "localization"
38
+ Dock: str = "dock"
39
+
40
+
32
41
  class StartMissionInspectionDefinition(BaseModel):
33
42
  type: InspectionTypes = Field(default=InspectionTypes.image)
34
43
  inspection_target: InputPosition
@@ -39,6 +48,7 @@ class StartMissionInspectionDefinition(BaseModel):
39
48
 
40
49
 
41
50
  class StartMissionTaskDefinition(BaseModel):
51
+ type: TaskType = Field(default=TaskType.Inspection)
42
52
  pose: InputPose
43
53
  inspections: List[StartMissionInspectionDefinition]
44
54
  tag: Optional[str] = None
@@ -53,35 +63,13 @@ class StartMissionDefinition(BaseModel):
53
63
 
54
64
  def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
55
65
  isar_tasks: List[Task] = []
56
- all_inspection_steps: List[STEPS] = []
57
- duplicate_ids: List[str] = []
66
+ all_steps_in_mission: List[STEPS] = []
58
67
 
59
68
  for task in mission_definition.tasks:
60
- try:
61
- tag_id: Optional[str] = task.tag
62
- drive_step: DriveToPose = DriveToPose(pose=task.pose.to_alitra_pose())
63
- inspection_steps: List[STEPS] = [
64
- create_inspection_step(
65
- inspection_type=inspection.type,
66
- duration=inspection.duration,
67
- target=inspection.inspection_target.to_alitra_position(),
68
- tag_id=tag_id,
69
- metadata=inspection.metadata,
70
- id=inspection.id,
71
- )
72
- for inspection in task.inspections
73
- ]
74
- except ValueError as e:
75
- raise MissionPlannerError(f"Failed to create task: {str(e)}")
76
-
77
- duplicate_ids = get_duplicate_ids(items=inspection_steps)
78
- if len(duplicate_ids) > 0:
79
- raise MissionPlannerError(
80
- f"Failed to create task: Duplicate step IDs are not allowed ({duplicate_ids})"
81
- )
82
- all_inspection_steps.extend(inspection_steps)
83
-
84
- isar_task: Task = Task(steps=[drive_step, *inspection_steps], tag_id=tag_id)
69
+ steps: List[STEPS] = generate_steps(task)
70
+ all_steps_in_mission.extend(steps)
71
+
72
+ isar_task: Task = Task(steps=steps, tag_id=task.tag)
85
73
  if task.id:
86
74
  isar_task.id = task.id
87
75
  isar_tasks.append(isar_task)
@@ -89,17 +77,8 @@ def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
89
77
  if not isar_tasks:
90
78
  raise MissionPlannerError("Mission does not contain any valid tasks")
91
79
 
92
- duplicate_ids = get_duplicate_ids(items=isar_tasks)
93
- if len(duplicate_ids) > 0:
94
- raise MissionPlannerError(
95
- f"Failed to create mission: Duplicate task IDs are not allowed ({duplicate_ids})"
96
- )
97
-
98
- duplicate_ids = get_duplicate_ids(items=all_inspection_steps)
99
- if len(duplicate_ids) > 0:
100
- raise MissionPlannerError(
101
- f"Failed to create task: Duplicate step IDs are not allowed ({duplicate_ids})"
102
- )
80
+ check_for_duplicate_ids(isar_tasks)
81
+ check_for_duplicate_ids(all_steps_in_mission)
103
82
 
104
83
  isar_mission: Mission = Mission(tasks=isar_tasks)
105
84
 
@@ -114,6 +93,63 @@ def to_isar_mission(mission_definition: StartMissionDefinition) -> Mission:
114
93
  return isar_mission
115
94
 
116
95
 
96
+ def check_for_duplicate_ids(items: Union[List[Task], List[STEPS]]):
97
+ duplicate_ids = get_duplicate_ids(items=items)
98
+ if len(duplicate_ids) > 0:
99
+ raise MissionPlannerError(
100
+ f"Failed to create as there were duplicate IDs which is not allowed "
101
+ f"({duplicate_ids})"
102
+ )
103
+
104
+
105
+ def generate_steps(task) -> List[STEPS]:
106
+ steps: List[STEPS] = []
107
+ try:
108
+ match task.type:
109
+ case TaskType.Inspection:
110
+ steps.extend(generate_steps_for_inspection_task(task=task))
111
+ case TaskType.DriveTo:
112
+ steps.append(generate_steps_for_drive_to_task(task=task))
113
+ case TaskType.Localization:
114
+ steps.append(generate_steps_for_localization_task(task=task))
115
+ case TaskType.Dock:
116
+ steps.append(generate_steps_for_dock_task())
117
+ except ValueError as e:
118
+ raise MissionPlannerError(f"Failed to create task: {str(e)}")
119
+
120
+ return steps
121
+
122
+
123
+ def generate_steps_for_inspection_task(task: StartMissionTaskDefinition) -> List[STEPS]:
124
+ drive_step: DriveToPose = DriveToPose(pose=task.pose.to_alitra_pose())
125
+
126
+ inspection_steps: List[STEPS] = [
127
+ create_inspection_step(
128
+ inspection_type=inspection.type,
129
+ duration=inspection.duration,
130
+ target=inspection.inspection_target.to_alitra_position(),
131
+ tag_id=task.tag,
132
+ metadata=inspection.metadata,
133
+ id=inspection.id,
134
+ )
135
+ for inspection in task.inspections
136
+ ]
137
+
138
+ return [drive_step, *inspection_steps]
139
+
140
+
141
+ def generate_steps_for_drive_to_task(task: StartMissionTaskDefinition) -> DriveToPose:
142
+ return DriveToPose(pose=task.pose.to_alitra_pose())
143
+
144
+
145
+ def generate_steps_for_localization_task(task: StartMissionTaskDefinition) -> Localize:
146
+ return Localize(localization_pose=task.pose.to_alitra_pose())
147
+
148
+
149
+ def generate_steps_for_dock_task() -> DockingProcedure:
150
+ return DockingProcedure(behavior="dock")
151
+
152
+
117
153
  def create_inspection_step(
118
154
  inspection_type: InspectionTypes,
119
155
  duration: float,
isar/config/log.py CHANGED
@@ -54,7 +54,9 @@ def configure_azure_handler(log_config: dict, keyvault: Keyvault) -> logging.Han
54
54
  "application-insights-connection-string"
55
55
  ).value
56
56
  except KeyvaultError:
57
- message: str = f"CRITICAL ERROR: Missing connection string for Application Insights in key vault '{keyvault.name}'."
57
+ message: str = (
58
+ f"CRITICAL ERROR: Missing connection string for Application Insights in key vault '{keyvault.name}'."
59
+ )
58
60
  print(f"\n{message} \n")
59
61
  raise ConfigurationError(message)
60
62
 
@@ -0,0 +1,51 @@
1
+ {
2
+ "mission_definition": {
3
+ "tasks": [
4
+ {
5
+ "pose": {
6
+ "position": {
7
+ "x": -3.2629,
8
+ "y": 3.0795,
9
+ "z": 0.0055,
10
+ "frame_name": "robot"
11
+ },
12
+ "orientation": {
13
+ "x": 0,
14
+ "y": 0,
15
+ "z": 0,
16
+ "w": 1,
17
+ "frame_name": "robot"
18
+ },
19
+ "frame_name": "robot"
20
+ },
21
+ "tag": "equinor_exR_tag_simulator",
22
+ "inspections": [
23
+ {
24
+ "type": "Image",
25
+ "inspection_target": {
26
+ "x": 6.6550,
27
+ "y": 3.7987,
28
+ "z": 0.6145,
29
+ "frame_name": "robot"
30
+ },
31
+ "analysis_types": "CarSeal, Rust",
32
+ "metadata": {
33
+ "zoom": "2x"
34
+ }
35
+ },
36
+ {
37
+ "type": "ThermalVideo",
38
+ "inspection_target": {
39
+ "x": 6.6550,
40
+ "y": 3.7987,
41
+ "z": 0.6145,
42
+ "frame_name": "robot"
43
+ },
44
+ "analysis_types": "GasDetection",
45
+ "duration": 10
46
+ }
47
+ ]
48
+ }
49
+ ]
50
+ }
51
+ }
@@ -53,7 +53,7 @@ class MqttClient(MqttClientInterface):
53
53
 
54
54
  self.port: int = settings.MQTT_PORT
55
55
 
56
- self.client: Client = Client()
56
+ self.client: Client = Client(mqtt.CallbackAPIVersion.VERSION1)
57
57
 
58
58
  self.client.enable_logger(logger=self.logger)
59
59
 
@@ -72,15 +72,21 @@ class RobotStatusPublisher:
72
72
  robot_status=combined_status,
73
73
  previous_robot_status=previous_robot_status,
74
74
  current_isar_state=self.state_machine.current_state,
75
- current_mission_id=self.state_machine.current_mission.id
76
- if self.state_machine.current_mission
77
- else None,
78
- current_task_id=self.state_machine.current_task.id
79
- if self.state_machine.current_task
80
- else None,
81
- current_step_id=self.state_machine.current_step.id
82
- if self.state_machine.current_step
83
- else None,
75
+ current_mission_id=(
76
+ self.state_machine.current_mission.id
77
+ if self.state_machine.current_mission
78
+ else None
79
+ ),
80
+ current_task_id=(
81
+ self.state_machine.current_task.id
82
+ if self.state_machine.current_task
83
+ else None
84
+ ),
85
+ current_step_id=(
86
+ self.state_machine.current_step.id
87
+ if self.state_machine.current_step
88
+ else None
89
+ ),
84
90
  timestamp=datetime.utcnow(),
85
91
  )
86
92
 
@@ -492,9 +492,9 @@ class StateMachine(object):
492
492
  "mission_id": self.current_mission.id if self.current_mission else None,
493
493
  "status": self.current_mission.status if self.current_mission else None,
494
494
  "error_reason": error_message.error_reason if error_message else None,
495
- "error_description": error_message.error_description
496
- if error_message
497
- else None,
495
+ "error_description": (
496
+ error_message.error_description if error_message else None
497
+ ),
498
498
  "timestamp": datetime.utcnow(),
499
499
  },
500
500
  cls=EnhancedJSONEncoder,
@@ -524,9 +524,9 @@ class StateMachine(object):
524
524
  "task_id": task.id if task else None,
525
525
  "status": task.status if task else None,
526
526
  "error_reason": error_message.error_reason if error_message else None,
527
- "error_description": error_message.error_description
528
- if error_message
529
- else None,
527
+ "error_description": (
528
+ error_message.error_description if error_message else None
529
+ ),
530
530
  "timestamp": datetime.utcnow(),
531
531
  },
532
532
  cls=EnhancedJSONEncoder,
@@ -558,9 +558,9 @@ class StateMachine(object):
558
558
  "step_type": step.__class__.__name__ if step else None,
559
559
  "status": step.status if step else None,
560
560
  "error_reason": error_message.error_reason if error_message else None,
561
- "error_description": error_message.error_description
562
- if error_message
563
- else None,
561
+ "error_description": (
562
+ error_message.error_description if error_message else None
563
+ ),
564
564
  "timestamp": datetime.utcnow(),
565
565
  },
566
566
  cls=EnhancedJSONEncoder,
@@ -25,9 +25,9 @@ class Idle(State):
25
25
 
26
26
  def _run(self) -> None:
27
27
  while True:
28
- start_mission: Optional[
29
- StartMissionMessage
30
- ] = self.state_machine.should_start_mission()
28
+ start_mission: Optional[StartMissionMessage] = (
29
+ self.state_machine.should_start_mission()
30
+ )
31
31
  if start_mission:
32
32
  self.state_machine.start_mission(
33
33
  mission=start_mission.mission,
@@ -68,9 +68,9 @@ class Monitor(State):
68
68
  )
69
69
 
70
70
  try:
71
- status: Union[
72
- StepStatus, MissionStatus
73
- ] = self.step_status_thread.get_output()
71
+ status: Union[StepStatus, MissionStatus] = (
72
+ self.step_status_thread.get_output()
73
+ )
74
74
  except ThreadedRequestNotFinishedError:
75
75
  time.sleep(self.state_machine.sleep_time)
76
76
  continue
@@ -145,9 +145,9 @@ class Monitor(State):
145
145
  self, mission: Mission, current_step: InspectionStep
146
146
  ) -> None:
147
147
  try:
148
- inspections: Sequence[
149
- Inspection
150
- ] = self.state_machine.robot.get_inspections(step=current_step)
148
+ inspections: Sequence[Inspection] = (
149
+ self.state_machine.robot.get_inspections(step=current_step)
150
+ )
151
151
 
152
152
  except (RobotRetrieveInspectionException, RobotException) as e:
153
153
  self._set_error_message(e)
@@ -122,16 +122,18 @@ class SlimmStorage(StorageInterface):
122
122
  "ImageMetadata.CameraOrientation2": str(array_of_orientation[1]),
123
123
  "ImageMetadata.CameraOrientation3": str(array_of_orientation[2]),
124
124
  "ImageMetadata.CameraOrientation4": str(array_of_orientation[3]),
125
- "ImageMetadata.AnalysisMethods": inspection.metadata.additional[
126
- "analysis_type"
127
- ]
128
- if inspection.metadata.additional
129
- and inspection.metadata.additional["analysis_type"]
130
- else "N/A",
125
+ "ImageMetadata.AnalysisMethods": (
126
+ inspection.metadata.additional["analysis_type"]
127
+ if inspection.metadata.additional
128
+ and inspection.metadata.additional["analysis_type"]
129
+ else "N/A"
130
+ ),
131
131
  "ImageMetadata.Description": str(inspection.metadata.additional),
132
- "ImageMetadata.FunctionalLocation": inspection.metadata.tag_id # noqa: E501
133
- if inspection.metadata.tag_id
134
- else "N/A",
132
+ "ImageMetadata.FunctionalLocation": (
133
+ inspection.metadata.tag_id # noqa: E501
134
+ if inspection.metadata.tag_id
135
+ else "N/A"
136
+ ),
135
137
  "Filename": filename,
136
138
  "AttachedFile": (filename, inspection.data),
137
139
  }
@@ -170,16 +172,18 @@ class SlimmStorage(StorageInterface):
170
172
  "VideoMetadata.CameraOrientation2": str(array_of_orientation[1]),
171
173
  "VideoMetadata.CameraOrientation3": str(array_of_orientation[2]),
172
174
  "VideoMetadata.CameraOrientation4": str(array_of_orientation[3]),
173
- "VideoMetadata.AnalysisMethods": inspection.metadata.additional[
174
- "analysis_type"
175
- ]
176
- if inspection.metadata.additional
177
- and inspection.metadata.additional["analysis_type"]
178
- else "N/A",
175
+ "VideoMetadata.AnalysisMethods": (
176
+ inspection.metadata.additional["analysis_type"]
177
+ if inspection.metadata.additional
178
+ and inspection.metadata.additional["analysis_type"]
179
+ else "N/A"
180
+ ),
179
181
  "VideoMetadata.Description": str(inspection.metadata.additional),
180
- "VideoMetadata.FunctionalLocation": inspection.metadata.tag_id # noqa: E501
181
- if inspection.metadata.tag_id
182
- else "N/A",
182
+ "VideoMetadata.FunctionalLocation": (
183
+ inspection.metadata.tag_id # noqa: E501
184
+ if inspection.metadata.tag_id
185
+ else "N/A"
186
+ ),
183
187
  "Filename": filename,
184
188
  "AttachedFile": (filename, inspection.data),
185
189
  }
isar/storage/utilities.py CHANGED
@@ -40,9 +40,11 @@ def construct_metadata_file(
40
40
  "mission_date": datetime.utcnow().date(),
41
41
  "isar_id": settings.ISAR_ID,
42
42
  "robot_name": settings.ROBOT_NAME,
43
- "analysis_type": inspection.metadata.additional["analysis_type"]
44
- if inspection.metadata.additional
45
- else "N/A",
43
+ "analysis_type": (
44
+ inspection.metadata.additional["analysis_type"]
45
+ if inspection.metadata.additional
46
+ else "N/A"
47
+ ),
46
48
  },
47
49
  "data": [
48
50
  {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: isar
3
- Version: 1.16.9
3
+ Version: 1.16.11
4
4
  Summary: Integration and Supervisory control of Autonomous Robots
5
5
  Home-page: https://github.com/equinor/isar
6
6
  Author: Equinor ASA
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python
12
12
  Classifier: Topic :: Scientific/Engineering
13
13
  Classifier: Topic :: Scientific/Engineering :: Physics
14
14
  Classifier: Topic :: Software Development :: Libraries
15
- Requires-Python: >=3.8
15
+ Requires-Python: >=3.10
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: alitra >=1.1.0
@@ -246,12 +246,6 @@ make docs
246
246
 
247
247
  The documentation can now be viewed at `docs/build/html/index.html`.
248
248
 
249
- ### Contributing
250
-
251
- We welcome all kinds of contributions, including code, bug reports, issues, feature requests, and documentation. The
252
- preferred way of submitting a contribution is to either make an [issue](https://github.com/equinor/isar/issues) on
253
- GitHub or by forking the project on GitHub and making a pull requests.
254
-
255
249
  ## Components
256
250
 
257
251
  The system consists of two main components.
@@ -420,3 +414,9 @@ ISAR_MQTT_PASSWORD
420
414
  ```
421
415
 
422
416
  If not specified the password will default to an empty string.
417
+
418
+ # Contributions
419
+
420
+ Equinor welcomes all kinds of contributions, including code, bug reports, issues, feature requests, and documentation
421
+ Please initiate your contribution by creating an [issue](https://github.com/equinor/isar/issues) or by forking the
422
+ project and making a pull requests. Commit messages shall be written according to [this guide](https://cbea.msgit-commit/).
@@ -4,14 +4,14 @@ isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  isar/apis/api.py,sha256=vSXfkWR7iITWbh4BsDzjEDtQrz6KS-vi2S8AeaeDc3Q,13112
5
5
  isar/apis/models/__init__.py,sha256=NI1BYyN__Ogr00Qqe0XJ-9gEVPva2brXo2RJsbrS4tM,52
6
6
  isar/apis/models/models.py,sha256=BRm3Wl6TJHdHEKLRQ2SGDx6Y54qq8IesMbBuVO7RuxE,1757
7
- isar/apis/models/start_mission_definition.py,sha256=KnZdKWWFxblHn7CkjVutqLMrgHFtUpJ388eOb4R0NRw,5261
7
+ isar/apis/models/start_mission_definition.py,sha256=_gKjibphr0hJHcFuOA9l9ZQExud_r5xMakJjfhUvUGg,6119
8
8
  isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  isar/apis/schedule/scheduling_controller.py,sha256=3WcYttaN4mMVS9lHZrQfYLCO89W_VaJ56RE3ofUegmA,11853
10
10
  isar/apis/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  isar/apis/security/authentication.py,sha256=TI8U9Y_L6ihHLMeM50ZONd5EPfuHdw_XMU_Q987W4AY,1975
12
12
  isar/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  isar/config/configuration_error.py,sha256=rO6WOhafX6xvVib8WxV-eY483Z0PpN-9PxGsq5ATfKc,46
14
- isar/config/log.py,sha256=WEp5DNhLTsMfTjN6YM2lKQkVeWxnwNapKEwvPXvbnX4,2227
14
+ isar/config/log.py,sha256=39G_Cue0qvw0Uv-1NYXvQ83yivPIKcAv-bGNNREFw5o,2251
15
15
  isar/config/logging.conf,sha256=mYO1xf27gAopEMHhGzY7-mwyfN16rwRLkPNMvy3zn2g,1127
16
16
  isar/config/settings.env,sha256=-RCBJiVRWBLky7FKuQX1qYXy8rCzTNLM4LDuyp12EbY,535
17
17
  isar/config/settings.py,sha256=bWIhbs0xVSyQgNss7fbPXq1gXVN5QP2sXRF_C0hJd_4,13048
@@ -27,6 +27,7 @@ isar/config/maps/klab_compressor.json,sha256=1Vrk5u_l4WXjrTtG4YfXlrCPbOoRs4TtYHO
27
27
  isar/config/maps/klab_turtlebot.json,sha256=HcB79XFEdY0Wm96EssIFO4TMyAWzc2KENoqN7TbTT0k,823
28
28
  isar/config/maps/turtleworld.json,sha256=EKLMpSK9Gu2lAN-E9l41XOaO3f9Su5n_I97mA6z7sWY,764
29
29
  isar/config/predefined_mission_definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ isar/config/predefined_mission_definition/default_exr.json,sha256=L3-kqjfgXoULDUgGsD3Zci7m3wdbwAuSrn4yaH4aPIA,1667
30
31
  isar/config/predefined_mission_definition/default_mission.json,sha256=nEk1ql17RAs2I5Ws2wA-0GJ6oqJco-Q0Q0vhf4k6ajc,2926
31
32
  isar/config/predefined_mission_definition/default_turtlebot.json,sha256=Ka379MLu8qiGIa6Fu-8p8A4OgHVccLkKYSX0RthUOeI,4060
32
33
  isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -56,33 +57,33 @@ isar/services/readers/base_reader.py,sha256=_fNd5fb5dFeMtOvfWzIAGO-KIgl3zT19iEuz
56
57
  isar/services/service_connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
58
  isar/services/service_connections/request_handler.py,sha256=0LxC0lu_HXeEf_xmJWjfEsh14oAUI97cpG1IWtBlcs4,4278
58
59
  isar/services/service_connections/mqtt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- isar/services/service_connections/mqtt/mqtt_client.py,sha256=g5RJ85_dsZlHgj6saG2w0sTSetvGFWI4PW4zsb0j9DE,3516
60
+ isar/services/service_connections/mqtt/mqtt_client.py,sha256=Aib0lqaddxW9aVXXYD7wGL9jIpr2USCCH91SQgFdIG4,3548
60
61
  isar/services/service_connections/mqtt/robot_heartbeat_publisher.py,sha256=TxvpLA_qfyXwwN58h2X-eomTnhbFPhqfjamPxBz084E,1000
61
62
  isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=_7lXSyOaTbde584M67bG7N9sQJH51yhaSuhsjuCM02U,1325
62
- isar/services/service_connections/mqtt/robot_status_publisher.py,sha256=7lb4UjMGC7QXXKBcamcnAqz07VYaV5g63e7b5pZvNfM,4281
63
+ isar/services/service_connections/mqtt/robot_status_publisher.py,sha256=KPxRrdtu-yLQolQ7DejC1v1NCeELUzrK_ZoiEpsrqD4,4425
63
64
  isar/services/service_connections/stid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
65
  isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
66
  isar/services/utilities/queue_utilities.py,sha256=Pw3hehSwkXJNeDv-bDVDfs58VOwtt3i5hpiJ2ZpphuQ,1225
66
67
  isar/services/utilities/scheduling_utilities.py,sha256=LFimEmacML3J9q-FNLfKPhcAr-R3f2rkYkbsoro0Gyo,8434
67
68
  isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
68
69
  isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- isar/state_machine/state_machine.py,sha256=-8gzAvaSpVegCSquam2uxeJ8yqtZmnTAmB6yvQAmwws,23137
70
+ isar/state_machine/state_machine.py,sha256=ZqFg7CE291_X8Ix5NDQ3RGBLJx-fU3E007C82xyHMuk,23161
70
71
  isar/state_machine/states_enum.py,sha256=ks1A8gO7DOpLbSe6Vzq4-BfTCU78IsQZyoEJwQ9Wg4M,254
71
72
  isar/state_machine/states/__init__.py,sha256=gUikQDu-O-lmunwzwcN9gN6VaEmlCFlqqgdNfFAfXBc,189
72
- isar/state_machine/states/idle.py,sha256=_0MtK8Wb305agTg4J9t2x-eUq3cnXg3KSP6J6HOM3ps,1229
73
+ isar/state_machine/states/idle.py,sha256=tfciqI7NPDVF8WMe5qbSO3c-xDzUTQYLmJinb9e0JS8,1231
73
74
  isar/state_machine/states/initialize.py,sha256=Vx7OxWZI_xEkRwHWFh9ymxK_7mDH0Wayt09dGGqBJWk,2359
74
75
  isar/state_machine/states/initiate.py,sha256=N2v1zsGJ3Zavs750LwBHMvLOtPW0RF57vCG8zUyRU5k,5656
75
- isar/state_machine/states/monitor.py,sha256=BeTsYtsfCBi8S2mcYeuyLpXLJdQnavf_-3tSJoZtKZ8,8608
76
+ isar/state_machine/states/monitor.py,sha256=2eYv2wUH0MLwxZCizBHIpigELPeou6KzCzW_JuEVlls,8612
76
77
  isar/state_machine/states/off.py,sha256=jjqN_oJMpBtWuY7hP-c9f0w3p2CYCfe-NpmYHHPnmyI,544
77
78
  isar/state_machine/states/paused.py,sha256=xVZM9WMt90FTiP5forSlA3eJ5Vt9LzZYCFDQDPIocKA,1004
78
79
  isar/state_machine/states/stop.py,sha256=Sxdo4FGhxc2Pj91jidYtVIjpSNklbEf1sJYJ6x51HgE,3348
79
80
  isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
81
  isar/storage/blob_storage.py,sha256=8i23s_4d3_REKYxH1DzXF_Lc04pofOlrtDYML_t7BDc,2922
81
82
  isar/storage/local_storage.py,sha256=fLzVuwvdEk9l8z7od1qX2p5MeWzcsx-vN4yWvelZeFM,1836
82
- isar/storage/slimm_storage.py,sha256=x7u9tLGHjIJBho0jr-EonunbDUyR3jFrX_-1bHqIxi8,8842
83
+ isar/storage/slimm_storage.py,sha256=Hp7ZIgZgIR4KAFjzxDKfgMZjPZwP2kmdc1gG8zVcsMk,8966
83
84
  isar/storage/storage_interface.py,sha256=v7QiYGz79dqw9jbgNoLYD1QOvXFoMrqfVT1TJX7rCsw,790
84
85
  isar/storage/uploader.py,sha256=QyviG27Km6a2hBXE8Ka_qX2GInCjs3u84RiUloG3DJ0,6294
85
- isar/storage/utilities.py,sha256=7TrGae8ehtGOT92xyC-Aw0b2iBwlovr_osJQPxSHSvI,3013
86
+ isar/storage/utilities.py,sha256=dqh60eJ00rKNNmNLBkV-oNcNToxXLS7oAJpisJZZ90c,3053
86
87
  robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
88
  robot_interface/robot_interface.py,sha256=i2qw1V9mLO-ljtS7LiRliQ7XNmmBJIwD4NG8mDfwMEI,8317
88
89
  robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
@@ -96,7 +97,7 @@ robot_interface/models/inspection/inspection.py,sha256=TVqUl5o3d3fp8IravOMwJIuRo
96
97
  robot_interface/models/mission/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
98
  robot_interface/models/mission/mission.py,sha256=obuV2htwoYlcssZF5IIBUYCrd2pIerIONlJsggBYRVs,776
98
99
  robot_interface/models/mission/status.py,sha256=R5jLmmn6M7oNX907QvbrhoAqAo4C1zB653Ed1PcxAtg,922
99
- robot_interface/models/mission/step.py,sha256=UnsqzS-jjCD3iOXqObwy9Z1bNFzjLwstFOYe20SyscI,5389
100
+ robot_interface/models/mission/step.py,sha256=FazjTmVWT5zL8cvthhmizm59_KEcF1OOhKlJ5bC-YgA,5391
100
101
  robot_interface/models/mission/task.py,sha256=bjp-m_Ak6tzgUIQvbGe90Mnwt6QhofTgFxnVPkqHOY4,4352
101
102
  robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
103
  robot_interface/models/robots/robot_model.py,sha256=pZQsqhn9hh6XE3EjMZhWMzYqg5oJ4CJ4CXeOASKvEf8,452
@@ -106,8 +107,8 @@ robot_interface/telemetry/payloads.py,sha256=9EshERifjD1u8CwjSiV3NGuj0KuXnwblQNB
106
107
  robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
108
  robot_interface/utilities/json_service.py,sha256=nU2Q_3P9Fq9hs6F_wtUjWtHfl_g1Siy-yDhXXSKwHwg,1018
108
109
  robot_interface/utilities/uuid_string_factory.py,sha256=_NQIbBQ56w0qqO0MUDP6aPpHbxW7ATRhK8HnQiBSLkc,76
109
- isar-1.16.9.dist-info/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
110
- isar-1.16.9.dist-info/METADATA,sha256=JxzgSpe6NjBClhT7ern_FgrANVlN7oW2E7pHKIw5r7g,14697
111
- isar-1.16.9.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
112
- isar-1.16.9.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
113
- isar-1.16.9.dist-info/RECORD,,
110
+ isar-1.16.11.dist-info/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
111
+ isar-1.16.11.dist-info/METADATA,sha256=9HN5mPXOr-JYqK7OkacquEBlHNgm6tpbynbKNALG660,14752
112
+ isar-1.16.11.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
113
+ isar-1.16.11.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
114
+ isar-1.16.11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.3)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -107,7 +107,7 @@ class DockingProcedure(MotionStep):
107
107
  Step which causes the robot to dock or undock
108
108
  """
109
109
 
110
- behavior: Literal["dock, undock"]
110
+ behavior: Literal["dock", "undock"]
111
111
  type: Literal["docking_procedure"] = "docking_procedure"
112
112
 
113
113