isar 1.10.14__py3-none-any.whl → 1.12.0__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.
- isar/apis/api.py +54 -4
- isar/apis/models/start_mission_definition.py +44 -35
- isar/apis/security/authentication.py +4 -5
- isar/config/keyvault/keyvault_service.py +38 -21
- isar/config/log.py +42 -13
- isar/config/predefined_mission_definition/__init__.py +0 -0
- isar/config/predefined_mission_definition/default_mission.json +98 -0
- isar/config/predefined_mission_definition/default_turtlebot.json +136 -0
- isar/config/predefined_missions/default.json +84 -84
- isar/config/settings.env +5 -0
- isar/config/settings.py +51 -10
- isar/mission_planner/echo_planner.py +1 -1
- isar/models/communication/queues/queues.py +1 -1
- isar/models/mission/status.py +5 -5
- isar/models/mission_metadata/mission_metadata.py +2 -0
- isar/modules.py +3 -2
- isar/services/service_connections/mqtt/mqtt_client.py +0 -18
- isar/services/service_connections/mqtt/robot_info_publisher.py +33 -0
- isar/services/service_connections/mqtt/robot_status_publisher.py +66 -0
- isar/services/service_connections/request_handler.py +1 -1
- isar/services/utilities/scheduling_utilities.py +5 -5
- isar/services/utilities/threaded_request.py +3 -3
- isar/state_machine/state_machine.py +13 -5
- isar/state_machine/states/idle.py +6 -6
- isar/state_machine/states/initialize.py +9 -8
- isar/state_machine/states/initiate_step.py +16 -16
- isar/state_machine/states/monitor.py +17 -11
- isar/state_machine/states/paused.py +6 -6
- isar/state_machine/states/stop_step.py +10 -10
- isar/state_machine/states_enum.py +0 -1
- isar/storage/local_storage.py +2 -2
- isar/storage/slimm_storage.py +107 -41
- isar/storage/uploader.py +4 -5
- isar/storage/utilities.py +1 -23
- {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/LICENSE +0 -0
- {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/METADATA +4 -1
- {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/RECORD +47 -40
- {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/WHEEL +0 -0
- {isar-1.10.14.dist-info → isar-1.12.0.dist-info}/top_level.txt +0 -0
- robot_interface/models/inspection/inspection.py +3 -22
- robot_interface/models/mission/status.py +6 -1
- robot_interface/models/mission/step.py +5 -32
- robot_interface/models/robots/__init__.py +0 -0
- robot_interface/models/robots/robot_model.py +13 -0
- robot_interface/robot_interface.py +17 -0
- robot_interface/telemetry/payloads.py +34 -0
- robot_interface/utilities/json_service.py +3 -0
isar/storage/utilities.py
CHANGED
|
@@ -14,12 +14,10 @@ from robot_interface.utilities.json_service import EnhancedJSONEncoder
|
|
|
14
14
|
def construct_local_paths(
|
|
15
15
|
inspection: Inspection, metadata: MissionMetadata
|
|
16
16
|
) -> Tuple[Path, Path]:
|
|
17
|
-
inspection_type: str = get_inspection_type(inspection=inspection)
|
|
18
|
-
|
|
19
17
|
folder: Path = Path(str(metadata.mission_id))
|
|
20
18
|
filename: str = get_filename(
|
|
21
19
|
mission_id=metadata.mission_id,
|
|
22
|
-
inspection_type=
|
|
20
|
+
inspection_type=type(inspection).__name__,
|
|
23
21
|
inspection_id=inspection.id,
|
|
24
22
|
)
|
|
25
23
|
|
|
@@ -77,23 +75,3 @@ def get_filename(
|
|
|
77
75
|
inspection_id: UUID,
|
|
78
76
|
) -> str:
|
|
79
77
|
return f"{mission_id}_{inspection_type}_{inspection_id}"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def get_inspection_type(inspection: Inspection) -> str:
|
|
83
|
-
if isinstance(inspection, Image):
|
|
84
|
-
return "image"
|
|
85
|
-
elif isinstance(inspection, ThermalImage):
|
|
86
|
-
return "thermal"
|
|
87
|
-
elif isinstance(inspection, Video):
|
|
88
|
-
return "video"
|
|
89
|
-
elif isinstance(inspection, ThermalVideo):
|
|
90
|
-
return "thermal_video"
|
|
91
|
-
else:
|
|
92
|
-
logging.getLogger("uploader").warning(
|
|
93
|
-
f"Failed to upload inspection with ID: {inspection.id}\n "
|
|
94
|
-
f"This was due to an inspection type ({type(inspection)}) "
|
|
95
|
-
f"which is not supported by the uploader"
|
|
96
|
-
)
|
|
97
|
-
raise StorageException(
|
|
98
|
-
f"Inspection type not supported by the uploader. Got {type(inspection)}"
|
|
99
|
-
)
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: isar
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.12.0
|
|
4
4
|
Summary: Integration and Supervisory control of Autonomous Robots
|
|
5
5
|
Home-page: https://github.com/equinor/isar
|
|
6
6
|
Author: Equinor ASA
|
|
@@ -25,6 +25,9 @@ Requires-Dist: dacite
|
|
|
25
25
|
Requires-Dist: fastapi-azure-auth
|
|
26
26
|
Requires-Dist: fastapi
|
|
27
27
|
Requires-Dist: injector
|
|
28
|
+
Requires-Dist: opencensus-ext-logging
|
|
29
|
+
Requires-Dist: opencensus-ext-requests
|
|
30
|
+
Requires-Dist: opencensus-ext-azure
|
|
28
31
|
Requires-Dist: numpy
|
|
29
32
|
Requires-Dist: paho-mqtt
|
|
30
33
|
Requires-Dist: pydantic
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
isar/__init__.py,sha256=oXTcQpZYQ7jkRIem-Nq3hw9DrveoIV3-8k697XN16rA,190
|
|
2
|
-
isar/modules.py,sha256=
|
|
2
|
+
isar/modules.py,sha256=eA4n9_CZ29H7Bt7L3G8ttDLH42WX98dJVtIPHgOeVEI,7041
|
|
3
3
|
isar/apis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
isar/apis/api.py,sha256=
|
|
4
|
+
isar/apis/api.py,sha256=rLoqA8YXGpZCsQMm3FGXgt9Yfk6_B5Ka6Hsjq02v-D4,11288
|
|
5
5
|
isar/apis/models/__init__.py,sha256=NI1BYyN__Ogr00Qqe0XJ-9gEVPva2brXo2RJsbrS4tM,52
|
|
6
6
|
isar/apis/models/models.py,sha256=5LiQWnrlHswRlwbTnIp_RpOfbZ6lFSic7E8XWaoIodk,2212
|
|
7
|
-
isar/apis/models/start_mission_definition.py,sha256=
|
|
7
|
+
isar/apis/models/start_mission_definition.py,sha256=o_jObQ2Gbr_2uRJ3Lz6CNgPUfUW1y94XBZvBItBGo40,3325
|
|
8
8
|
isar/apis/schedule/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
isar/apis/schedule/scheduling_controller.py,sha256=PjfHBKw70rpAe1tRkhQn6kVpL2-nC8SLkDn3MGT32dA,8451
|
|
10
10
|
isar/apis/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
isar/apis/security/authentication.py,sha256=
|
|
11
|
+
isar/apis/security/authentication.py,sha256=sn3MgFJEevkBIOHl1nFfFzwZOzdL0jNA4RvHryQ2n8Q,2088
|
|
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=
|
|
14
|
+
isar/config/log.py,sha256=gXbzb4KvxVOD2dVkkTWttQ8w271lEkRd174CeRJ6H8M,2225
|
|
15
15
|
isar/config/logging.conf,sha256=mYO1xf27gAopEMHhGzY7-mwyfN16rwRLkPNMvy3zn2g,1127
|
|
16
|
-
isar/config/settings.env,sha256=
|
|
17
|
-
isar/config/settings.py,sha256=
|
|
16
|
+
isar/config/settings.env,sha256=aG2CAnXzxsZJhxhgx8pCa11clFtkIsXiTxc2FgXZwuw,553
|
|
17
|
+
isar/config/settings.py,sha256=qlpeOqBptgqqzI-hD8beCdTrAvGANjg5cKtRpxKUkcY,12050
|
|
18
18
|
isar/config/certs/ca-cert.pem,sha256=6XnTSkRxSb9slwXSCWxL4tjeNBprgDzPpEhBraL9RDU,2163
|
|
19
19
|
isar/config/keyvault/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
20
|
isar/config/keyvault/keyvault_error.py,sha256=zvPCsZLjboxsxthYkxpRERCTFxYV8R5WmACewAUQLwk,41
|
|
21
|
-
isar/config/keyvault/keyvault_service.py,sha256=
|
|
21
|
+
isar/config/keyvault/keyvault_service.py,sha256=7M6VdIElAQ_yo0d-VX4i9cqgoH_JIexoRmqS5YGIb2Y,3141
|
|
22
22
|
isar/config/maps/JSP1_intermediate_deck.json,sha256=fdotzN6MVotyLbqpIjRSrbBYM84vogLkdS585NjBnL8,826
|
|
23
23
|
isar/config/maps/JSP1_weather_deck.json,sha256=_dG3cSBI8q4_uHqHMOO5kSYqMXn85JL3_9PaH4uk1yQ,832
|
|
24
24
|
isar/config/maps/default_map.json,sha256=3CdGMr0Qn3PrL4TfUK8I5a-hotMrS_n5DKfaEORJPT4,776
|
|
@@ -26,13 +26,16 @@ isar/config/maps/klab_b.json,sha256=qXgWVUYPaTdVuomf6lQL-uRbV3Tsa6CftnzcbT3dY78,
|
|
|
26
26
|
isar/config/maps/klab_compressor.json,sha256=1Vrk5u_l4WXjrTtG4YfXlrCPbOoRs4TtYHOm0430u2A,803
|
|
27
27
|
isar/config/maps/klab_turtlebot.json,sha256=HcB79XFEdY0Wm96EssIFO4TMyAWzc2KENoqN7TbTT0k,823
|
|
28
28
|
isar/config/maps/turtleworld.json,sha256=EKLMpSK9Gu2lAN-E9l41XOaO3f9Su5n_I97mA6z7sWY,764
|
|
29
|
+
isar/config/predefined_mission_definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
isar/config/predefined_mission_definition/default_mission.json,sha256=i-sjgVRDcXKh2Lx-tauxBI3xLxLAuut_73wmLuYNgNc,3130
|
|
31
|
+
isar/config/predefined_mission_definition/default_turtlebot.json,sha256=tiXgBbE1XOT6G6UR07WChEVvj-Y9oB1qn8VBc8q3ang,4410
|
|
29
32
|
isar/config/predefined_missions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
isar/config/predefined_missions/default.json,sha256=
|
|
33
|
+
isar/config/predefined_missions/default.json,sha256=mRjW4kREfo-KL1LoYU_MN400tYOR8jaLZQvGE5uiqe0,2757
|
|
31
34
|
isar/config/predefined_missions/default_turtlebot.json,sha256=3w-w2EXPd3AnJ7W1bjid0QrIZ6o_-QAy4beimHr2ivc,3350
|
|
32
35
|
isar/config/predefined_poses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
36
|
isar/config/predefined_poses/predefined_poses.py,sha256=fhq8JF00feDLFKNBlyWeFoLfvfs5dVb__C7CmiVbwmQ,25779
|
|
34
37
|
isar/mission_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
-
isar/mission_planner/echo_planner.py,sha256=
|
|
38
|
+
isar/mission_planner/echo_planner.py,sha256=xavICAZJYfnZqwAB_bTtRge_QMwrZ8H-JZPw1pZ1sSY,5674
|
|
36
39
|
isar/mission_planner/local_planner.py,sha256=QGJ3PNea6z0A0XsDfF8qm9O1H8n6xWYWeQLuB9l4_74,3067
|
|
37
40
|
isar/mission_planner/mission_planner_interface.py,sha256=5zmwtLAmtnfaQLsvx9o0Qy1YqWBZ2NVnUCV_XkTg1cE,466
|
|
38
41
|
isar/mission_planner/sequential_task_selector.py,sha256=DkEVDmmmQ-bCswN21tJlmxocj6IURhsYWNZ73dmc_Hk,624
|
|
@@ -43,48 +46,50 @@ isar/models/communication/message.py,sha256=RC0nQ4YrefveRyibb8QRFLEhPilJ6lvuP7px
|
|
|
43
46
|
isar/models/communication/queues/__init__.py,sha256=JqwWbdBQnBeIEhSTjBOkl-O3bYBVBSmjPcWUdscsobw,146
|
|
44
47
|
isar/models/communication/queues/queue_io.py,sha256=AnHWUCkZ0tunkxKKeBarq-OUkRM97IaMfA-a1pmf1cQ,394
|
|
45
48
|
isar/models/communication/queues/queue_timeout_error.py,sha256=rF8TlNF7RHS_ueTZ5mp7aFkhLY1j0dcwMwH-Ba6lVpE,45
|
|
46
|
-
isar/models/communication/queues/queues.py,sha256=
|
|
49
|
+
isar/models/communication/queues/queues.py,sha256=FzoqlT4AQ4Q5Jufh6yRPV2uq5iUZd1odrpjBl77yU5o,803
|
|
47
50
|
isar/models/communication/queues/status_queue.py,sha256=K_i01uzCu1eciDt9QlDXLBINJnuRLqm6fzrM-PY6qD0,467
|
|
48
51
|
isar/models/mission/__init__.py,sha256=OQMLlRLJl5QIPrCtUi3trGtoy_2vSqeL_aaI_JJPQ7M,81
|
|
49
52
|
isar/models/mission/mission.py,sha256=k4pJuUFwxB5JfUiPYgkskUJmd7ROOnzkdZ_p0mUc-uo,4533
|
|
50
|
-
isar/models/mission/status.py,sha256
|
|
53
|
+
isar/models/mission/status.py,sha256=-vwRX6O_bljR0q7LET8qVY195XTKpniNSiOQ--1STu4,583
|
|
51
54
|
isar/models/mission_metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
-
isar/models/mission_metadata/mission_metadata.py,sha256=
|
|
55
|
+
isar/models/mission_metadata/mission_metadata.py,sha256=gsGl68i6lBodJuCn8jvAY33NDQ4ovFgU5wiWqKYCiPY,898
|
|
53
56
|
isar/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
57
|
isar/services/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
58
|
isar/services/auth/azure_credentials.py,sha256=9PlwGe5FrPRbW2dp0go7LMp8_l_FRvL8xOXotXwzRDo,364
|
|
56
59
|
isar/services/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
60
|
isar/services/readers/base_reader.py,sha256=_fNd5fb5dFeMtOvfWzIAGO-KIgl3zT19iEuzSjeZNPc,987
|
|
58
61
|
isar/services/service_connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
-
isar/services/service_connections/request_handler.py,sha256=
|
|
62
|
+
isar/services/service_connections/request_handler.py,sha256=0LxC0lu_HXeEf_xmJWjfEsh14oAUI97cpG1IWtBlcs4,4278
|
|
60
63
|
isar/services/service_connections/mqtt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
|
-
isar/services/service_connections/mqtt/mqtt_client.py,sha256=
|
|
64
|
+
isar/services/service_connections/mqtt/mqtt_client.py,sha256=g5RJ85_dsZlHgj6saG2w0sTSetvGFWI4PW4zsb0j9DE,3516
|
|
65
|
+
isar/services/service_connections/mqtt/robot_info_publisher.py,sha256=7g4N1557ZrxnD3dXXbsI6XLvctTLiRmJOvPlEBr2PGk,1226
|
|
66
|
+
isar/services/service_connections/mqtt/robot_status_publisher.py,sha256=-9aeOtKcgc2BZoJYhtiAD6IAGZ12ihZJwPVj3gohE24,2514
|
|
62
67
|
isar/services/service_connections/stid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
68
|
isar/services/service_connections/stid/stid_service.py,sha256=v1D-sHa2pvYl6A4KcY9NPd2w7vf9Y5AdntFE_p8Hk44,1616
|
|
64
69
|
isar/services/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
70
|
isar/services/utilities/queue_utilities.py,sha256=Pw3hehSwkXJNeDv-bDVDfs58VOwtt3i5hpiJ2ZpphuQ,1225
|
|
66
|
-
isar/services/utilities/scheduling_utilities.py,sha256=
|
|
67
|
-
isar/services/utilities/threaded_request.py,sha256=
|
|
71
|
+
isar/services/utilities/scheduling_utilities.py,sha256=6EQ5G9KpBPf2dM6owH3NmxATzZe6I2oUuC7lxs3dKyM,8371
|
|
72
|
+
isar/services/utilities/threaded_request.py,sha256=py4G-_RjnIdHljmKFAcQ6ddqMmp-ZYV39Ece-dqRqjs,1874
|
|
68
73
|
isar/state_machine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
-
isar/state_machine/state_machine.py,sha256=
|
|
70
|
-
isar/state_machine/states_enum.py,sha256=
|
|
74
|
+
isar/state_machine/state_machine.py,sha256=SSVPxn0OrfKTL3oOzB6RJcULZWVRot_h2UL6js94UOQ,19379
|
|
75
|
+
isar/state_machine/states_enum.py,sha256=HVg2xjZTbiqdesr0rhwl1nlj97GzgI3YQNAr3O7rcMk,272
|
|
71
76
|
isar/state_machine/states/__init__.py,sha256=7JdcGIUexNK-7nkm4vkVhgWJqjZ5VDcbc0FkmZr5jfo,207
|
|
72
|
-
isar/state_machine/states/idle.py,sha256=
|
|
73
|
-
isar/state_machine/states/initialize.py,sha256=
|
|
74
|
-
isar/state_machine/states/initiate_step.py,sha256
|
|
75
|
-
isar/state_machine/states/monitor.py,sha256
|
|
77
|
+
isar/state_machine/states/idle.py,sha256=_0MtK8Wb305agTg4J9t2x-eUq3cnXg3KSP6J6HOM3ps,1229
|
|
78
|
+
isar/state_machine/states/initialize.py,sha256=KfLc-LeyhwaW-d4-xyarIafBh9PBkBtz7j1aPqS0x8A,2019
|
|
79
|
+
isar/state_machine/states/initiate_step.py,sha256=7ePwB43d2xOXOrVhWk8NRswkZY-67ril4-Pa3I074Kw,3943
|
|
80
|
+
isar/state_machine/states/monitor.py,sha256=fv_xXZR6R9dQzeOAcewIHEeoSRNdF2fgoO8Fm4rMsdQ,4765
|
|
76
81
|
isar/state_machine/states/off.py,sha256=jjqN_oJMpBtWuY7hP-c9f0w3p2CYCfe-NpmYHHPnmyI,544
|
|
77
|
-
isar/state_machine/states/paused.py,sha256=
|
|
78
|
-
isar/state_machine/states/stop_step.py,sha256=
|
|
82
|
+
isar/state_machine/states/paused.py,sha256=xVZM9WMt90FTiP5forSlA3eJ5Vt9LzZYCFDQDPIocKA,1004
|
|
83
|
+
isar/state_machine/states/stop_step.py,sha256=nU49HfGHFBSadLCoFn7MYecyR1OytHvDS4e0-k-os00,2730
|
|
79
84
|
isar/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
85
|
isar/storage/blob_storage.py,sha256=LbOIK1J_rQAq_xbe5wdFSWYmmvUDRmTgEWpVzXkmzDc,2899
|
|
81
|
-
isar/storage/local_storage.py,sha256=
|
|
82
|
-
isar/storage/slimm_storage.py,sha256=
|
|
86
|
+
isar/storage/local_storage.py,sha256=6hgGYI3l-VrHAnNHp8_UT7ANrknHQuAzCNfeic1eVX0,1843
|
|
87
|
+
isar/storage/slimm_storage.py,sha256=eOOyeJTitxyACD9WlURsTEym30dnYA7eAR2gplb6JSs,8670
|
|
83
88
|
isar/storage/storage_interface.py,sha256=GsfTjSW-dJrp4N9WlxopsN7ElMfLnvP5FCJSFfT09vM,741
|
|
84
|
-
isar/storage/uploader.py,sha256=
|
|
85
|
-
isar/storage/utilities.py,sha256=
|
|
89
|
+
isar/storage/uploader.py,sha256=NNvXYq9RIHf-w8XNdocgNamgzMNrOCfFwAOENi11klE,4719
|
|
90
|
+
isar/storage/utilities.py,sha256=k7DmNfB7Een3LQF117UNigkLkdU0VZBBFA-k9CtsxFE,2827
|
|
86
91
|
robot_interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
|
-
robot_interface/robot_interface.py,sha256=
|
|
92
|
+
robot_interface/robot_interface.py,sha256=ovOcfzGF3HLNpaI4lm5rOrC4GuqnwvIaJT0_ceRQSVU,4143
|
|
88
93
|
robot_interface/test_robot_interface.py,sha256=FV1urn7SbsMyWBIcTKjsBwAG4IsXeZ6pLHE0mA9EGGs,692
|
|
89
94
|
robot_interface/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
95
|
robot_interface/models/exceptions/__init__.py,sha256=0crcMGDVCkJG_2s8tQOqc6rMk2ITSncBgAy9UQTuKig,156
|
|
@@ -92,17 +97,19 @@ robot_interface/models/exceptions/robot_exceptions.py,sha256=EN-3oIEptqMUpyMscoT
|
|
|
92
97
|
robot_interface/models/initialize/__init__.py,sha256=rz5neEDr59GDbzzI_FF0DId-C-I-50l113P-h-C_QBY,48
|
|
93
98
|
robot_interface/models/initialize/initialize_params.py,sha256=UcsBm8aFgxIojgYMadaa6yOhvYXxTkCuCbjGuZexfuI,171
|
|
94
99
|
robot_interface/models/inspection/__init__.py,sha256=tMn-ka5JxcIDm-So-gUuS5Xod4uwiCMJkcnxsLaRv3k,256
|
|
95
|
-
robot_interface/models/inspection/inspection.py,sha256=
|
|
100
|
+
robot_interface/models/inspection/inspection.py,sha256=oQ--NRTctg7NKa3FtSj537doHkbljhZ3u6WSaJEMs8s,1410
|
|
96
101
|
robot_interface/models/mission/__init__.py,sha256=A-o1zkVBCS4wmAUTg6jYW-Md67nKY8nBFFDfIjCG1WE,201
|
|
97
|
-
robot_interface/models/mission/status.py,sha256=
|
|
98
|
-
robot_interface/models/mission/step.py,sha256=
|
|
102
|
+
robot_interface/models/mission/status.py,sha256=0-HVdMmxDIqDRdtlxe9Z-1KIcZu5baixnrMP6fgYZ-Y,332
|
|
103
|
+
robot_interface/models/mission/step.py,sha256=ZzR8DM1TCvobyq47kdIZx3SB3ez9DpVVbMDL_xtuH4k,3952
|
|
104
|
+
robot_interface/models/robots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
+
robot_interface/models/robots/robot_model.py,sha256=pZQsqhn9hh6XE3EjMZhWMzYqg5oJ4CJ4CXeOASKvEf8,452
|
|
99
106
|
robot_interface/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
100
107
|
robot_interface/telemetry/mqtt_client.py,sha256=zDDbnPiBCWNnTJQWBG03Y_HutOs_ag5WY1HZplghBi4,2227
|
|
101
|
-
robot_interface/telemetry/payloads.py,sha256=
|
|
108
|
+
robot_interface/telemetry/payloads.py,sha256=1Y_RPue9plHmgVA6GZ4wRHXfTGghYGaQndMMdtrmFJg,960
|
|
102
109
|
robot_interface/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
103
|
-
robot_interface/utilities/json_service.py,sha256=
|
|
104
|
-
isar-1.
|
|
105
|
-
isar-1.
|
|
106
|
-
isar-1.
|
|
107
|
-
isar-1.
|
|
108
|
-
isar-1.
|
|
110
|
+
robot_interface/utilities/json_service.py,sha256=nU2Q_3P9Fq9hs6F_wtUjWtHfl_g1Siy-yDhXXSKwHwg,1018
|
|
111
|
+
isar-1.12.0.dist-info/LICENSE,sha256=3fc2-ebLwHWwzfQbulGNRdcNob3SBQeCfEVUDYxsuqw,14058
|
|
112
|
+
isar-1.12.0.dist-info/METADATA,sha256=Ot81RoweIL0xjx6Edeg8VewWnF9JW76d_we5DH5a_tg,14690
|
|
113
|
+
isar-1.12.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
|
114
|
+
isar-1.12.0.dist-info/top_level.txt,sha256=UwIML2RtuQKCyJJkatcSnyp6-ldDjboB9k9JgKipO-U,21
|
|
115
|
+
isar-1.12.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from abc import ABC
|
|
2
2
|
from dataclasses import dataclass, field
|
|
3
3
|
from datetime import datetime
|
|
4
|
-
from typing import Optional, Type
|
|
4
|
+
from typing import List, Optional, Type
|
|
5
5
|
from uuid import UUID, uuid4
|
|
6
6
|
|
|
7
7
|
from alitra import Pose
|
|
@@ -18,8 +18,9 @@ class InspectionMetadata(ABC):
|
|
|
18
18
|
start_time: datetime
|
|
19
19
|
time_indexed_pose: TimeIndexedPose
|
|
20
20
|
file_type: str
|
|
21
|
+
analysis: Optional[List] = field(default_factory=list, init=False)
|
|
21
22
|
tag_id: Optional[str] = field(default=None, init=False)
|
|
22
|
-
additional: Optional[dict] = field(
|
|
23
|
+
additional: Optional[dict] = field(default_factory=dict, init=False)
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
@dataclass
|
|
@@ -48,42 +49,22 @@ class Inspection:
|
|
|
48
49
|
metadata: InspectionMetadata
|
|
49
50
|
data: Optional[bytes] = field(default=None, init=False)
|
|
50
51
|
|
|
51
|
-
@staticmethod
|
|
52
|
-
def get_metadata_type() -> Type[InspectionMetadata]:
|
|
53
|
-
return InspectionMetadata
|
|
54
|
-
|
|
55
52
|
|
|
56
53
|
@dataclass
|
|
57
54
|
class Image(Inspection):
|
|
58
55
|
metadata: ImageMetadata
|
|
59
56
|
|
|
60
|
-
@staticmethod
|
|
61
|
-
def get_metadata_type() -> Type[InspectionMetadata]:
|
|
62
|
-
return ImageMetadata
|
|
63
|
-
|
|
64
57
|
|
|
65
58
|
@dataclass
|
|
66
59
|
class ThermalImage(Inspection):
|
|
67
60
|
metadata: ThermalImageMetadata
|
|
68
61
|
|
|
69
|
-
@staticmethod
|
|
70
|
-
def get_metadata_type() -> Type[InspectionMetadata]:
|
|
71
|
-
return ThermalImageMetadata
|
|
72
|
-
|
|
73
62
|
|
|
74
63
|
@dataclass
|
|
75
64
|
class Video(Inspection):
|
|
76
65
|
metadata: VideoMetadata
|
|
77
66
|
|
|
78
|
-
@staticmethod
|
|
79
|
-
def get_metadata_type() -> Type[InspectionMetadata]:
|
|
80
|
-
return VideoMetadata
|
|
81
|
-
|
|
82
67
|
|
|
83
68
|
@dataclass
|
|
84
69
|
class ThermalVideo(Inspection):
|
|
85
70
|
metadata: ThermalVideoMetadata
|
|
86
|
-
|
|
87
|
-
@staticmethod
|
|
88
|
-
def get_metadata_type() -> Type[InspectionMetadata]:
|
|
89
|
-
return ThermalVideoMetadata
|
|
@@ -2,9 +2,14 @@ from enum import Enum
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class StepStatus(str, Enum):
|
|
5
|
-
|
|
6
5
|
NotStarted: str = "not_started"
|
|
7
6
|
Successful: str = "successful"
|
|
8
7
|
InProgress: str = "in_progress"
|
|
9
8
|
Failed: str = "failed"
|
|
10
9
|
Cancelled: str = "cancelled"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class RobotStatus(Enum):
|
|
13
|
+
Available: str = "available"
|
|
14
|
+
Busy: str = "busy"
|
|
15
|
+
Offline: str = "offline"
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
1
|
from dataclasses import dataclass, field
|
|
3
|
-
from typing import Any, List, Literal, Optional,
|
|
2
|
+
from typing import Any, List, Literal, Optional, Union
|
|
4
3
|
from uuid import UUID, uuid4
|
|
5
4
|
|
|
6
5
|
from alitra import Pose, Position
|
|
7
6
|
|
|
8
|
-
from robot_interface.models.inspection.inspection import
|
|
9
|
-
Image,
|
|
10
|
-
Inspection,
|
|
11
|
-
ThermalImage,
|
|
12
|
-
ThermalVideo,
|
|
13
|
-
Video,
|
|
14
|
-
)
|
|
7
|
+
from robot_interface.models.inspection.inspection import Inspection
|
|
15
8
|
from robot_interface.models.mission.status import StepStatus
|
|
16
9
|
|
|
17
10
|
|
|
@@ -24,7 +17,7 @@ class Step:
|
|
|
24
17
|
id: UUID = field(default_factory=uuid4, init=False)
|
|
25
18
|
status: StepStatus = field(default=StepStatus.NotStarted, init=False)
|
|
26
19
|
|
|
27
|
-
def __str__(self):
|
|
20
|
+
def __str__(self) -> str:
|
|
28
21
|
def add_indent(text: str) -> str:
|
|
29
22
|
return "".join(" " + line for line in text.splitlines(True))
|
|
30
23
|
|
|
@@ -64,12 +57,8 @@ class InspectionStep(Step):
|
|
|
64
57
|
inspections: List[Inspection] = field(default_factory=list, init=False)
|
|
65
58
|
tag_id: Optional[str] = field(default=None, init=False)
|
|
66
59
|
type = "inspection_type"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def get_inspection_type() -> Type[Inspection]:
|
|
70
|
-
return Inspection
|
|
71
|
-
|
|
72
|
-
pass
|
|
60
|
+
analysis: Optional[List] = field(default_factory=list, init=False)
|
|
61
|
+
metadata: Optional[dict] = field(default_factory=dict, init=False)
|
|
73
62
|
|
|
74
63
|
|
|
75
64
|
@dataclass
|
|
@@ -119,10 +108,6 @@ class TakeImage(InspectionStep):
|
|
|
119
108
|
target: Position
|
|
120
109
|
type: Literal["take_image"] = "take_image"
|
|
121
110
|
|
|
122
|
-
@staticmethod
|
|
123
|
-
def get_inspection_type() -> Type[Inspection]:
|
|
124
|
-
return Image
|
|
125
|
-
|
|
126
111
|
|
|
127
112
|
@dataclass
|
|
128
113
|
class TakeThermalImage(InspectionStep):
|
|
@@ -133,10 +118,6 @@ class TakeThermalImage(InspectionStep):
|
|
|
133
118
|
target: Position
|
|
134
119
|
type: Literal["take_thermal_image"] = "take_thermal_image"
|
|
135
120
|
|
|
136
|
-
@staticmethod
|
|
137
|
-
def get_inspection_type() -> Type[Inspection]:
|
|
138
|
-
return ThermalImage
|
|
139
|
-
|
|
140
121
|
|
|
141
122
|
@dataclass
|
|
142
123
|
class TakeVideo(InspectionStep):
|
|
@@ -150,10 +131,6 @@ class TakeVideo(InspectionStep):
|
|
|
150
131
|
duration: float
|
|
151
132
|
type: Literal["take_video"] = "take_video"
|
|
152
133
|
|
|
153
|
-
@staticmethod
|
|
154
|
-
def get_inspection_type() -> Type[Inspection]:
|
|
155
|
-
return Video
|
|
156
|
-
|
|
157
134
|
|
|
158
135
|
@dataclass
|
|
159
136
|
class TakeThermalVideo(InspectionStep):
|
|
@@ -167,10 +144,6 @@ class TakeThermalVideo(InspectionStep):
|
|
|
167
144
|
duration: float
|
|
168
145
|
type: Literal["take_thermal_video"] = "take_thermal_video"
|
|
169
146
|
|
|
170
|
-
@staticmethod
|
|
171
|
-
def get_inspection_type() -> Type[Inspection]:
|
|
172
|
-
return ThermalVideo
|
|
173
|
-
|
|
174
147
|
|
|
175
148
|
STEPS = Union[
|
|
176
149
|
DriveToPose,
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# Did you write your own isar-robot package and would like to have it included here?
|
|
5
|
+
# Open a pull request to the ISAR repository!
|
|
6
|
+
class RobotModel(Enum):
|
|
7
|
+
TaurobInspector: str = "TaurobInspector"
|
|
8
|
+
TaurobOperator: str = "TaurobOperator"
|
|
9
|
+
ExR2: str = "ExR2"
|
|
10
|
+
Robot: str = "Robot" # This corresponds to the mock in isar_robot
|
|
11
|
+
Turtlebot: str = "Turtlebot"
|
|
12
|
+
AnymalX: str = "AnymalX"
|
|
13
|
+
AnymalD: str = "AnymalD"
|
|
@@ -6,6 +6,7 @@ from typing import List, Sequence
|
|
|
6
6
|
from robot_interface.models.initialize import InitializeParams
|
|
7
7
|
from robot_interface.models.inspection.inspection import Inspection
|
|
8
8
|
from robot_interface.models.mission import InspectionStep, Step, StepStatus
|
|
9
|
+
from robot_interface.models.mission.status import RobotStatus
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class RobotInterface(metaclass=ABCMeta):
|
|
@@ -136,3 +137,19 @@ class RobotInterface(metaclass=ABCMeta):
|
|
|
136
137
|
|
|
137
138
|
"""
|
|
138
139
|
raise NotImplementedError
|
|
140
|
+
|
|
141
|
+
@abstractmethod
|
|
142
|
+
def robot_status(self) -> RobotStatus:
|
|
143
|
+
"""
|
|
144
|
+
Method which returns an enum indicating if the robot package is able to reach
|
|
145
|
+
the interface which is used to communicate with the robot. This is further used
|
|
146
|
+
by ISAR to indicate whether the ISAR instance is fully functional and may be
|
|
147
|
+
used by other systems.
|
|
148
|
+
|
|
149
|
+
Returns
|
|
150
|
+
-------
|
|
151
|
+
RobotStatus
|
|
152
|
+
Enum indicating if the robot may be reached by the isar-robot package.
|
|
153
|
+
|
|
154
|
+
"""
|
|
155
|
+
raise NotImplementedError
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
from datetime import datetime
|
|
3
|
+
from typing import List, Union
|
|
4
|
+
from uuid import UUID
|
|
3
5
|
|
|
4
6
|
from alitra import Pose
|
|
7
|
+
from transitions import State
|
|
8
|
+
|
|
9
|
+
from robot_interface.models.mission.status import RobotStatus
|
|
5
10
|
|
|
6
11
|
|
|
7
12
|
@dataclass
|
|
@@ -16,3 +21,32 @@ class TelemetryBatteryPayload:
|
|
|
16
21
|
battery_level: float
|
|
17
22
|
robot_id: str
|
|
18
23
|
timestamp: datetime
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass
|
|
27
|
+
class VideoStream:
|
|
28
|
+
name: str
|
|
29
|
+
url: str
|
|
30
|
+
type: str
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class RobotStatusPayload:
|
|
35
|
+
robot_name: str
|
|
36
|
+
robot_status: RobotStatus
|
|
37
|
+
current_isar_state: State
|
|
38
|
+
current_mission_id: Union[UUID, int, str, None]
|
|
39
|
+
current_task_id: UUID
|
|
40
|
+
current_step_id: UUID
|
|
41
|
+
timestamp: datetime
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@dataclass
|
|
45
|
+
class RobotInfoPayload:
|
|
46
|
+
robot_name: str
|
|
47
|
+
robot_model: str
|
|
48
|
+
robot_serial_number: str
|
|
49
|
+
video_streams: List[VideoStream]
|
|
50
|
+
host: str
|
|
51
|
+
port: int
|
|
52
|
+
timestamp: datetime
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import json
|
|
2
2
|
from dataclasses import asdict, is_dataclass
|
|
3
3
|
from datetime import date, datetime
|
|
4
|
+
from enum import Enum
|
|
4
5
|
from typing import Iterator
|
|
5
6
|
from uuid import UUID
|
|
6
7
|
|
|
@@ -26,6 +27,8 @@ class EnhancedJSONEncoder(json.JSONEncoder):
|
|
|
26
27
|
return o.isoformat()
|
|
27
28
|
if isinstance(o, date):
|
|
28
29
|
return o.isoformat()
|
|
30
|
+
if isinstance(o, Enum):
|
|
31
|
+
return o.value
|
|
29
32
|
if isinstance(o, bytes):
|
|
30
33
|
return "<<non-serializable: bytes>>"
|
|
31
34
|
if isinstance(o, Iterator):
|