UGV Camera and World Gen Boxes
This commit is contained in:
@@ -81,18 +81,22 @@ class RunRecorder:
|
||||
|
||||
self._tracker_writer = None
|
||||
self._camera_writer = None
|
||||
self._ugv_camera_writer = None
|
||||
self._gazebo_writer = None
|
||||
|
||||
self._tracker_size = None
|
||||
self._camera_size = None
|
||||
self._ugv_camera_size = None
|
||||
self._gazebo_size = None
|
||||
|
||||
self._tracker_frames = 0
|
||||
self._camera_frames = 0
|
||||
self._ugv_camera_frames = 0
|
||||
self._gazebo_frames = 0
|
||||
|
||||
self._last_tracker_frame = None
|
||||
self._last_camera_frame = None
|
||||
self._last_ugv_camera_frame = None
|
||||
self._camera_snapshots = []
|
||||
|
||||
self._recording = False
|
||||
@@ -290,6 +294,14 @@ class RunRecorder:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
ugv_frame = self._camera_ref.frames.get("ugv_forward")
|
||||
if ugv_frame is not None:
|
||||
self._write_ugv_camera_frame(ugv_frame)
|
||||
self._last_ugv_camera_frame = ugv_frame.copy()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
elapsed = time.time() - t0
|
||||
sleep_time = max(0, interval - elapsed)
|
||||
time.sleep(sleep_time)
|
||||
@@ -314,6 +326,16 @@ class RunRecorder:
|
||||
self._camera_writer.write(frame)
|
||||
self._camera_frames += 1
|
||||
|
||||
def _write_ugv_camera_frame(self, frame):
|
||||
h, w = frame.shape[:2]
|
||||
if self._ugv_camera_writer is None:
|
||||
self._ugv_camera_size = (w, h)
|
||||
fourcc = cv2.VideoWriter_fourcc(*'XVID')
|
||||
path = str(self.run_dir / "ugv_camera.avi")
|
||||
self._ugv_camera_writer = cv2.VideoWriter(path, fourcc, self.fps, (w, h))
|
||||
self._ugv_camera_writer.write(frame)
|
||||
self._ugv_camera_frames += 1
|
||||
|
||||
def snapshot_camera(self, label="snapshot"):
|
||||
if self._camera_ref is None:
|
||||
return
|
||||
@@ -398,12 +420,21 @@ class RunRecorder:
|
||||
cv2.imwrite(str(path), self._last_camera_frame)
|
||||
self._upload_file(path, filename)
|
||||
|
||||
if self._last_ugv_camera_frame is not None:
|
||||
filename = "ugv_camera_final.png"
|
||||
path = self.run_dir / filename
|
||||
cv2.imwrite(str(path), self._last_ugv_camera_frame)
|
||||
self._upload_file(path, filename)
|
||||
|
||||
if self._tracker_writer:
|
||||
self._tracker_writer.release()
|
||||
self._upload_file(self.run_dir / "flight_path.avi", "flight_path.avi")
|
||||
if self._camera_writer:
|
||||
self._camera_writer.release()
|
||||
self._upload_file(self.run_dir / "camera.avi", "camera.avi")
|
||||
if self._ugv_camera_writer:
|
||||
self._ugv_camera_writer.release()
|
||||
self._upload_file(self.run_dir / "ugv_camera.avi", "ugv_camera.avi")
|
||||
|
||||
self.stop_logging()
|
||||
self._log_file.close()
|
||||
@@ -427,9 +458,10 @@ class RunRecorder:
|
||||
f"\n[REC] ═══════════════════════════════════════\n"
|
||||
f"[REC] Cloud Upload Complete (ID: {self.sim_id})\n"
|
||||
f"[REC] Duration: {mins}m {secs}s\n"
|
||||
f"[REC] Tracker: {self._tracker_frames} frames\n"
|
||||
f"[REC] Camera: {self._camera_frames} frames\n"
|
||||
f"[REC] Gazebo: via ffmpeg (.mp4)\n"
|
||||
f"[REC] Tracker: {self._tracker_frames} frames\n"
|
||||
f"[REC] UAV Camera: {self._camera_frames} frames\n"
|
||||
f"[REC] UGV Camera: {self._ugv_camera_frames} frames\n"
|
||||
f"[REC] Gazebo: via ffmpeg (.mp4)\n"
|
||||
f"[REC] ═══════════════════════════════════════\n"
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user