Skip to content

Commit c363412

Browse files
committed
Use ISAR version 2.2.0
1 parent 83f032d commit c363412

6 files changed

Lines changed: 55 additions & 53 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ classifiers = [
2020
"Topic :: Scientific/Engineering :: Physics",
2121
"Topic :: Software Development :: Libraries",
2222
]
23-
dependencies = ["alitra", "isar>=2.1.4"]
23+
dependencies = ["alitra", "isar>=2.2.0"]
2424
dynamic = ["version"]
2525

2626
[tool.uv.sources]

src/isar_robot/inspections.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import logging
22
import os
33
import random
4-
from datetime import datetime, timezone
4+
from datetime import UTC, datetime
55
from pathlib import Path
66

77
from robot_interface.models.exceptions.robot_exceptions import (
@@ -72,7 +72,7 @@
7272

7373

7474
def create_image(task: TakeImage, telemetry: Telemetry) -> Image:
75-
now: datetime = datetime.now(timezone.utc)
75+
now: datetime = datetime.now(UTC)
7676

7777
image_metadata: ImageMetadata = ImageMetadata(
7878
start_time=now,
@@ -86,11 +86,11 @@ def create_image(task: TakeImage, telemetry: Telemetry) -> Image:
8686
filepath: Path = _select_image_filepath(task)
8787
data = _read_data_from_file(filepath)
8888

89-
return Image(metadata=image_metadata, id=task.inspection_id, data=data)
89+
return Image(metadata=image_metadata, id=task.id, data=data)
9090

9191

9292
def create_thermal_image(task: TakeThermalImage, telemetry: Telemetry) -> Image:
93-
now: datetime = datetime.now(timezone.utc)
93+
now: datetime = datetime.now(UTC)
9494

9595
image_metadata: ThermalImageMetadata = ThermalImageMetadata(
9696
start_time=now,
@@ -104,11 +104,11 @@ def create_thermal_image(task: TakeThermalImage, telemetry: Telemetry) -> Image:
104104
filepath: Path = example_thermal_image
105105
data = _read_data_from_file(filepath)
106106

107-
return ThermalImage(metadata=image_metadata, id=task.inspection_id, data=data)
107+
return ThermalImage(metadata=image_metadata, id=task.id, data=data)
108108

109109

110110
def create_video(task: TakeVideo, telemetry: Telemetry) -> Video:
111-
now: datetime = datetime.now(timezone.utc)
111+
now: datetime = datetime.now(UTC)
112112
video_metadata: VideoMetadata = VideoMetadata(
113113
start_time=now,
114114
robot_pose=telemetry.get_pose(),
@@ -122,11 +122,11 @@ def create_video(task: TakeVideo, telemetry: Telemetry) -> Video:
122122
filepath: Path = example_video
123123
data = _read_data_from_file(filepath)
124124

125-
return Video(metadata=video_metadata, id=task.inspection_id, data=data)
125+
return Video(metadata=video_metadata, id=task.id, data=data)
126126

127127

128128
def create_thermal_video(task: TakeThermalVideo, telemetry: Telemetry):
129-
now: datetime = datetime.now(timezone.utc)
129+
now: datetime = datetime.now(UTC)
130130
thermal_video_metadata: ThermalVideoMetadata = ThermalVideoMetadata(
131131
start_time=now,
132132
robot_pose=telemetry.get_pose(),
@@ -140,13 +140,11 @@ def create_thermal_video(task: TakeThermalVideo, telemetry: Telemetry):
140140
filepath: Path = example_thermal_video
141141
data = _read_data_from_file(filepath)
142142

143-
return ThermalVideo(
144-
metadata=thermal_video_metadata, id=task.inspection_id, data=data
145-
)
143+
return ThermalVideo(metadata=thermal_video_metadata, id=task.id, data=data)
146144

147145

148146
def create_audio(task: RecordAudio, telemetry: Telemetry):
149-
now: datetime = datetime.now(timezone.utc)
147+
now: datetime = datetime.now(UTC)
150148
audio_metadata: AudioMetadata = AudioMetadata(
151149
start_time=now,
152150
robot_pose=telemetry.get_pose(),
@@ -160,11 +158,11 @@ def create_audio(task: RecordAudio, telemetry: Telemetry):
160158
filepath: Path = example_audio
161159
data = _read_data_from_file(filepath)
162160

163-
return Audio(metadata=audio_metadata, id=task.inspection_id, data=data)
161+
return Audio(metadata=audio_metadata, id=task.id, data=data)
164162

165163

166164
def create_co2_measurement(task: TakeCO2Measurement, telemetry: Telemetry):
167-
now: datetime = datetime.now(timezone.utc)
165+
now: datetime = datetime.now(UTC)
168166
gas_measurement_metadata: GasMeasurementMetadata = GasMeasurementMetadata(
169167
start_time=now,
170168
robot_pose=telemetry.get_pose(),
@@ -176,7 +174,7 @@ def create_co2_measurement(task: TakeCO2Measurement, telemetry: Telemetry):
176174

177175
return CO2Measurement(
178176
metadata=gas_measurement_metadata,
179-
id=task.inspection_id,
177+
id=task.id,
180178
value=random.normalvariate(0.043, 0.005),
181179
unit="% v/v",
182180
)
@@ -185,7 +183,7 @@ def create_co2_measurement(task: TakeCO2Measurement, telemetry: Telemetry):
185183
def create_acoustic_measurement(
186184
task: TakeAcousticMeasurement, telemetry: Telemetry
187185
) -> AcousticMeasurement:
188-
now: datetime = datetime.now(timezone.utc)
186+
now: datetime = datetime.now(UTC)
189187
metadata: AcousticMeasurementMetadata = AcousticMeasurementMetadata(
190188
start_time=now,
191189
robot_pose=telemetry.get_pose(),
@@ -207,7 +205,7 @@ def create_acoustic_measurement(
207205

208206
data = _read_data_from_file(example_video)
209207

210-
return AcousticMeasurement(metadata=metadata, id=task.inspection_id, data=data)
208+
return AcousticMeasurement(metadata=metadata, id=task.id, data=data)
211209

212210

213211
def _select_image_filepath(task: TakeImage) -> Path:

src/isar_robot/robotinterface.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import logging
22
import random
33
import time
4-
from datetime import datetime, timezone
4+
from collections.abc import Callable
5+
from datetime import UTC, datetime
56
from queue import Queue
67
from threading import Thread
7-
from typing import Callable, List, Optional
88

99
from alitra import Position
1010
from robot_interface.models.exceptions.robot_exceptions import (
@@ -41,9 +41,9 @@ def __init__(self, robot_name: str, isar_id: str) -> None:
4141
super().__init__(robot_name=robot_name, isar_id=isar_id)
4242

4343
self.telemetry = telemetry.Telemetry()
44-
self.last_task_completion_time: datetime = datetime.now(timezone.utc)
44+
self.last_task_completion_time: datetime = datetime.now(UTC)
4545
self.robot_is_home: bool = settings.SHOULD_START_AT_HOME
46-
self.mission_simulation: Optional[MissionSimulation] = None
46+
self.mission_simulation: MissionSimulation | None = None
4747

4848
def initiate_mission(self, mission: Mission) -> None:
4949
if (
@@ -116,7 +116,7 @@ def get_inspection(self, task: InspectionTask) -> Inspection:
116116

117117
def register_inspection_callback(
118118
self, callback_function: Callable[[Inspection, Mission], None]
119-
) -> Optional[Thread]:
119+
) -> Thread | None:
120120

121121
if settings.SHOULD_SIMULATE_INSPECTION_CALLBACK_CRASH:
122122
return None
@@ -140,7 +140,7 @@ def initialize(self) -> None:
140140
return
141141

142142
def _get_pose_telemetry(self, isar_id: str, robot_name: str) -> str:
143-
current_target: Optional[Position] = None
143+
current_target: Position | None = None
144144
if self.mission_simulation:
145145
current_task = self.mission_simulation.current_task()
146146
if current_task and isinstance(current_task, InspectionTask):
@@ -157,8 +157,8 @@ def _get_battery_telemetry(self, isar_id: str, robot_name: str) -> str:
157157

158158
def get_telemetry_publishers(
159159
self, queue: Queue, isar_id: str, robot_name: str
160-
) -> List[Thread]:
161-
publisher_threads: List[Thread] = []
160+
) -> list[Thread]:
161+
publisher_threads: list[Thread] = []
162162

163163
pose_publisher: MqttTelemetryPublisher = MqttTelemetryPublisher(
164164
mqtt_queue=queue,
@@ -249,7 +249,7 @@ def resume(self) -> None:
249249
)
250250
self.mission_simulation.resume_mission()
251251

252-
def generate_media_config(self) -> Optional[MediaConfig]:
252+
def generate_media_config(self) -> MediaConfig | None:
253253
return None
254254

255255
def get_battery_level(self):

src/isar_robot/telemetry.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import random
2-
from datetime import datetime, timezone
3-
from typing import Optional
2+
from datetime import UTC, datetime
43

54
from alitra import Frame, Orientation, Pose, Position
65
from robot_interface.models.robots.battery_state import BatteryState
@@ -49,7 +48,7 @@ def __init__(self) -> None:
4948
def get_pose(self) -> Pose:
5049
return self.current_pose
5150

52-
def _get_pose(self, current_target: Optional[Position]) -> Pose:
51+
def _get_pose(self, current_target: Position | None) -> Pose:
5352
if not current_target:
5453
return self.current_pose
5554

@@ -64,7 +63,7 @@ def _get_pose(self, current_target: Optional[Position]) -> Pose:
6463
)
6564
return self.current_pose
6665

67-
def _get_battery_level(self, is_home: Optional[bool] = None) -> float:
66+
def _get_battery_level(self, is_home: bool | None = None) -> float:
6867
if settings.SHOULD_HAVE_RANDOM_BATTERY_LEVEL or is_home is None:
6968
# Return random float in the range [50, 100]
7069
return random.randint(500, 1000) / 10.0
@@ -80,32 +79,32 @@ def _get_battery_level(self, is_home: Optional[bool] = None) -> float:
8079
)
8180
return self.current_battery_level
8281

83-
def _get_battery_state(self, is_home: Optional[bool] = None) -> BatteryState:
82+
def _get_battery_state(self, is_home: bool | None = None) -> BatteryState:
8483
if settings.SHOULD_HAVE_RANDOM_BATTERY_LEVEL or is_home is None:
8584
return BatteryState.Normal
8685

8786
return BatteryState.Charging if is_home else BatteryState.Normal
8887

8988
def get_battery_telemetry(
90-
self, isar_id: str, robot_name: str, is_home: Optional[bool] = None
89+
self, isar_id: str, robot_name: str, is_home: bool | None = None
9190
) -> str:
9291
battery_payload: TelemetryBatteryPayload = TelemetryBatteryPayload(
9392
battery_level=self._get_battery_level(is_home=is_home),
9493
battery_state=self._get_battery_state(is_home=is_home),
9594
isar_id=isar_id,
9695
robot_name=robot_name,
97-
timestamp=datetime.now(timezone.utc),
96+
timestamp=datetime.now(UTC),
9897
)
9998
return battery_payload.model_dump_json()
10099

101100
def get_pose_telemetry(
102-
self, isar_id: str, robot_name: str, current_target: Optional[Position]
101+
self, isar_id: str, robot_name: str, current_target: Position | None
103102
) -> str:
104103
pose_payload: TelemetryPosePayload = TelemetryPosePayload(
105104
pose=self._get_pose(current_target=current_target),
106105
isar_id=isar_id,
107106
robot_name=robot_name,
108-
timestamp=datetime.now(timezone.utc),
107+
timestamp=datetime.now(UTC),
109108
)
110109
return pose_payload.model_dump_json()
111110

@@ -115,7 +114,7 @@ def get_obstacle_status_telemetry(self, isar_id: str, robot_name: str) -> str:
115114
obstacle_status=_get_obstacle_status(),
116115
isar_id=isar_id,
117116
robot_name=robot_name,
118-
timestamp=datetime.now(timezone.utc),
117+
timestamp=datetime.now(UTC),
119118
)
120119
)
121120
return obstacle_status_payload.model_dump_json()
@@ -125,6 +124,6 @@ def get_pressure_telemetry(self, isar_id: str, robot_name: str) -> str:
125124
pressure_level=_get_pressure_level(),
126125
isar_id=isar_id,
127126
robot_name=robot_name,
128-
timestamp=datetime.now(timezone.utc),
127+
timestamp=datetime.now(UTC),
129128
)
130129
return pressure_payload.model_dump_json()

tests/test_inspections.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,33 @@
2020

2121

2222
def test_create_image() -> None:
23-
task_actions = TakeImage(target=target, robot_pose=robot_pose)
23+
task_actions = TakeImage(id="id", target=target, robot_pose=robot_pose)
2424

2525
inspection_image = inspections.create_image(task_actions, telemetryModule)
2626

2727
assert inspection_image.metadata.file_type == "jpg"
2828

2929

3030
def test_create_thermal_image() -> None:
31-
task_actions = TakeThermalImage(target=target, robot_pose=robot_pose)
31+
task_actions = TakeThermalImage(id="id", target=target, robot_pose=robot_pose)
3232

3333
inspection_image = inspections.create_thermal_image(task_actions, telemetryModule)
3434

3535
assert inspection_image.metadata.file_type == "fff"
3636

3737

3838
def test_create_video() -> None:
39-
task_actions = TakeImage(target=target, robot_pose=robot_pose)
39+
task_actions = TakeImage(id="id", target=target, robot_pose=robot_pose)
4040

4141
inspection_video = inspections.create_video(task_actions, telemetryModule)
4242

4343
assert inspection_video.metadata.file_type == "mp4"
4444

4545

4646
def test_create_thermal_video() -> None:
47-
task_actions = TakeThermalVideo(target=target, duration=10, robot_pose=robot_pose)
47+
task_actions = TakeThermalVideo(
48+
id="id", target=target, duration=10, robot_pose=robot_pose
49+
)
4850

4951
inspection_video = inspections.create_thermal_video(task_actions, telemetryModule)
5052

@@ -53,7 +55,9 @@ def test_create_thermal_video() -> None:
5355

5456

5557
def test_create_audio() -> None:
56-
task_actions = RecordAudio(target=target, duration=10, robot_pose=robot_pose)
58+
task_actions = RecordAudio(
59+
id="id", target=target, duration=10, robot_pose=robot_pose
60+
)
5761

5862
inspection_recording = inspections.create_audio(task_actions, telemetryModule)
5963

@@ -63,6 +67,7 @@ def test_create_audio() -> None:
6367

6468
def test_create_acoustic_measurement() -> None:
6569
task_actions = TakeAcousticMeasurement(
70+
id="id",
6671
target=target,
6772
robot_pose=robot_pose,
6873
frequency_from=35000,
@@ -79,7 +84,9 @@ def test_create_acoustic_measurement() -> None:
7984

8085
def test_select_image_filepath_cloe_kaa(monkeypatch) -> None:
8186
monkeypatch.setattr(inspections.settings, "PLANT_SHORT_NAME", "kaa")
82-
task = TakeImage(target=target, robot_pose=robot_pose, analysis_types=["CLOE"])
87+
task = TakeImage(
88+
id="id", target=target, robot_pose=robot_pose, analysis_types=["CLOE"]
89+
)
8390

8491
assert (
8592
inspections._select_image_filepath(task) == inspections.example_cloe_image_kaa
@@ -88,7 +95,9 @@ def test_select_image_filepath_cloe_kaa(monkeypatch) -> None:
8895

8996
def test_select_image_filepath_fencilla(monkeypatch) -> None:
9097
monkeypatch.setattr(inspections.settings, "PLANT_SHORT_NAME", "nls")
91-
task = TakeImage(target=target, robot_pose=robot_pose, analysis_types=["Fencilla"])
98+
task = TakeImage(
99+
id="id", target=target, robot_pose=robot_pose, analysis_types=["Fencilla"]
100+
)
92101

93102
assert (
94103
inspections._select_image_filepath(task) == inspections.example_fencilla_image

uv.lock

Lines changed: 4 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)