-
Notifications
You must be signed in to change notification settings - Fork 706
feat(recording): Go2 + Mid-360 Point-LIO map recording #2557
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
0f50b68
f172f5a
0a74a33
63070e9
9afdeb4
20a75a8
c6f2813
6049881
d038390
b77ec1a
67c3338
aadba8c
ad76b45
04844a4
581a1ee
56f13f5
cf9bbb2
ec336c9
7ef91f6
2b31c91
0500790
459f1d8
e0e1ab4
aea4372
d069c99
d30c045
f41faa8
a14bae8
8d98e13
c082684
dc42455
1b7c6f7
11dc457
9065332
f8a6b65
8d518aa
fa6325d
c3a65b2
89151a7
b35d0f2
4303fd6
360133c
0f4cc4c
d08f555
f4b25c9
9611105
6e5e336
21cb8f2
01d8872
afd8395
7ee3308
b0c8b2a
a472d25
eeb90e8
b07e9fc
3b5f988
c53c73a
d48a945
c062727
00b0720
22d9ec0
0504aae
333ece4
8bb723b
32757d6
4570885
3aff05f
6dbb391
24c19fa
8d9a461
1088fe3
c64047d
4725bcb
9bb8315
a24e29f
05aa9d9
e741ad8
1c42128
7bf679e
1118f23
b266301
d7ffc6f
0f48de5
5f27cfd
3d077c4
d987f87
ab4c19d
8376809
344560c
bea9ec8
90079f3
ec184cb
2e7c755
6fb4b09
4eadca8
2a0f51c
948c3f5
b4a455b
76743e0
5fdaf56
3ec490d
e06c29f
95383f8
0dd0071
1f21def
9a12a30
6f70e29
d234536
12c4d13
be4c1f8
460168c
3a8fc55
e2a4d85
7ee0c31
226a330
1e7bf28
c4fa47b
d7aa546
7f49b00
c35dd76
b245098
c64c2ba
773d02c
de3b32f
6f33458
f91f4e9
fc682b3
24cb75a
d6d979f
45bffc3
bf858c4
94cf54f
aca9e56
0f7be3a
2fbdb79
6d0833a
8b4c130
ca9d276
e9f8096
027f214
28b01f8
f31b1c8
9c4724f
a5256e9
b4109a1
4d3f1c1
723d6fa
0953506
da415cd
4d3c79d
1ad8031
ec5594d
35a8ad9
55099fc
c458de8
39cf383
3fb1a54
10faefe
6ffaad4
ec86efa
4b22007
62e71b7
721a290
e17e6b1
9faea3b
c995b0a
86d8f68
f2aeab4
9b38016
9335298
b2eb4c7
f5ca33f
e2ae0b8
ffd8628
e5621fb
9f13b16
244954f
6bcaaa3
5e88c54
d35224a
404d604
fa1ee7b
eb7891e
a2aa3ce
e30afd9
2eb1ac4
9183d7e
0ab7ab1
fba90db
43d25f5
33c7041
c76339d
1e3e9b1
c5a6ab9
0260030
2678ba7
44efe28
253cf7a
691a24a
1a2d129
8c3d5a9
18ec528
afadd1f
f2cd2dc
2aa131e
0edae56
9cda108
542a0ec
f8c94f9
db1d361
30718ba
720cf59
66e8066
d0ccd82
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -14,7 +14,6 @@ | |||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| from __future__ import annotations | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| import atexit | ||||||||||||||||||||||||||||||||||||||||||
| import threading | ||||||||||||||||||||||||||||||||||||||||||
| import time | ||||||||||||||||||||||||||||||||||||||||||
| from typing import TYPE_CHECKING | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -26,11 +25,11 @@ | |||||||||||||||||||||||||||||||||||||||||
| from scipy.spatial.transform import Rotation | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| from dimos.constants import DEFAULT_THREAD_JOIN_TIMEOUT | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.core.coordination.blueprints import autoconnect | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.core.coordination.module_coordinator import ModuleCoordinator | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.core.core import rpc | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.core.module import Module, ModuleConfig | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.core.stream import Out | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.core.transport import LCMTransport | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.hardware.sensors.camera.spec import ( | ||||||||||||||||||||||||||||||||||||||||||
| OPTICAL_ROTATION, | ||||||||||||||||||||||||||||||||||||||||||
| DepthCameraConfig, | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -41,9 +40,11 @@ | |||||||||||||||||||||||||||||||||||||||||
| from dimos.msgs.geometry_msgs.Vector3 import Vector3 | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.msgs.sensor_msgs.CameraInfo import CameraInfo | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.msgs.sensor_msgs.Image import Image, ImageFormat | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.msgs.sensor_msgs.Imu import Imu | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.msgs.sensor_msgs.PointCloud2 import PointCloud2 | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.spec import perception | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.utils.reactive import backpressure | ||||||||||||||||||||||||||||||||||||||||||
| from dimos.visualization.vis_module import vis_module | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| if TYPE_CHECKING: | ||||||||||||||||||||||||||||||||||||||||||
| import pyrealsense2 as rs # type: ignore[import-not-found,import-untyped] | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -67,6 +68,7 @@ class RealSenseCameraConfig(ModuleConfig, DepthCameraConfig): | |||||||||||||||||||||||||||||||||||||||||
| align_depth_to_color: bool = True | ||||||||||||||||||||||||||||||||||||||||||
| enable_depth: bool = True | ||||||||||||||||||||||||||||||||||||||||||
| enable_pointcloud: bool = False | ||||||||||||||||||||||||||||||||||||||||||
| enable_imu: bool = True | ||||||||||||||||||||||||||||||||||||||||||
| pointcloud_fps: float = 5.0 | ||||||||||||||||||||||||||||||||||||||||||
| camera_info_fps: float = 1.0 | ||||||||||||||||||||||||||||||||||||||||||
| serial_number: str | None = None | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -79,6 +81,7 @@ class RealSenseCamera(DepthCameraHardware, Module, perception.DepthCamera): | |||||||||||||||||||||||||||||||||||||||||
| pointcloud: Out[PointCloud2] | ||||||||||||||||||||||||||||||||||||||||||
| camera_info: Out[CameraInfo] | ||||||||||||||||||||||||||||||||||||||||||
| depth_camera_info: Out[CameraInfo] | ||||||||||||||||||||||||||||||||||||||||||
| imu: Out[Imu] | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||
| def _camera_link(self) -> str: | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -100,6 +103,10 @@ def _depth_frame(self) -> str: | |||||||||||||||||||||||||||||||||||||||||
| def _depth_optical_frame(self) -> str: | ||||||||||||||||||||||||||||||||||||||||||
| return f"{self.config.camera_name}_depth_optical_frame" | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| @property | ||||||||||||||||||||||||||||||||||||||||||
| def _imu_frame(self) -> str: | ||||||||||||||||||||||||||||||||||||||||||
| return f"{self.config.camera_name}_imu_optical_frame" | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def] | ||||||||||||||||||||||||||||||||||||||||||
| super().__init__(*args, **kwargs) | ||||||||||||||||||||||||||||||||||||||||||
| self._pipeline: rs.pipeline | None = None | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -115,6 +122,10 @@ def __init__(self, *args, **kwargs) -> None: # type: ignore[no-untyped-def] | |||||||||||||||||||||||||||||||||||||||||
| self._latest_color_img: Image | None = None | ||||||||||||||||||||||||||||||||||||||||||
| self._latest_depth_img: Image | None = None | ||||||||||||||||||||||||||||||||||||||||||
| self._pointcloud_lock = threading.Lock() | ||||||||||||||||||||||||||||||||||||||||||
| # IMU state | ||||||||||||||||||||||||||||||||||||||||||
| self._imu_pipeline: rs.pipeline | None = None | ||||||||||||||||||||||||||||||||||||||||||
| self._depth_to_imu_extrinsics: rs.extrinsics | None = None | ||||||||||||||||||||||||||||||||||||||||||
| self._latest_accel: Vector3 | None = None | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| @rpc | ||||||||||||||||||||||||||||||||||||||||||
| def start(self) -> None: | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -176,6 +187,71 @@ def start(self) -> None: | |||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| if self.config.enable_imu: | ||||||||||||||||||||||||||||||||||||||||||
| self._start_imu() | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def _start_imu(self) -> None: | ||||||||||||||||||||||||||||||||||||||||||
| import pyrealsense2 as rs | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| imu_pipeline = rs.pipeline() | ||||||||||||||||||||||||||||||||||||||||||
| imu_config = rs.config() | ||||||||||||||||||||||||||||||||||||||||||
| if self.config.serial_number: | ||||||||||||||||||||||||||||||||||||||||||
| imu_config.enable_device(self.config.serial_number) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||||||
| # Explicit IMU rates required: without an fps librealsense falls back to | ||||||||||||||||||||||||||||||||||||||||||
| # accel @ 63 Hz, which D4xx firmware doesn't offer -> "Couldn't resolve requests". | ||||||||||||||||||||||||||||||||||||||||||
| imu_config.enable_stream(rs.stream.accel, rs.format.motion_xyz32f, 200) | ||||||||||||||||||||||||||||||||||||||||||
| imu_config.enable_stream(rs.stream.gyro, rs.format.motion_xyz32f, 200) | ||||||||||||||||||||||||||||||||||||||||||
| imu_pipeline.start(imu_config, self._on_imu_frame) | ||||||||||||||||||||||||||||||||||||||||||
| except RuntimeError as error: | ||||||||||||||||||||||||||||||||||||||||||
| print(f"RealSense IMU unavailable, disabling IMU stream: {error}") | ||||||||||||||||||||||||||||||||||||||||||
| return | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| self._imu_pipeline = imu_pipeline | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| if self._profile is not None and self.config.enable_depth: | ||||||||||||||||||||||||||||||||||||||||||
| depth_stream = self._profile.get_stream(rs.stream.depth) | ||||||||||||||||||||||||||||||||||||||||||
| # The accel profile must come from the device's extrinsics graph, not the | ||||||||||||||||||||||||||||||||||||||||||
| # separately-started IMU pipeline -- cross-pipeline profiles aren't linked and | ||||||||||||||||||||||||||||||||||||||||||
| # get_extrinsics_to() raises "Requested extrinsics are not available!". | ||||||||||||||||||||||||||||||||||||||||||
| accel_stream = next( | ||||||||||||||||||||||||||||||||||||||||||
| profile | ||||||||||||||||||||||||||||||||||||||||||
| for sensor in self._profile.get_device().query_sensors() | ||||||||||||||||||||||||||||||||||||||||||
| for profile in sensor.get_stream_profiles() | ||||||||||||||||||||||||||||||||||||||||||
| if profile.stream_type() == rs.stream.accel | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
| self._depth_to_imu_extrinsics = depth_stream.get_extrinsics_to(accel_stream) | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+218
to
+224
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def _on_imu_frame(self, frame: rs.frame) -> None: | ||||||||||||||||||||||||||||||||||||||||||
| if frame.is_frameset(): | ||||||||||||||||||||||||||||||||||||||||||
| for sub_frame in frame.as_frameset(): | ||||||||||||||||||||||||||||||||||||||||||
| self._handle_motion_frame(sub_frame) | ||||||||||||||||||||||||||||||||||||||||||
| else: | ||||||||||||||||||||||||||||||||||||||||||
| self._handle_motion_frame(frame) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def _handle_motion_frame(self, frame: rs.frame) -> None: | ||||||||||||||||||||||||||||||||||||||||||
| import pyrealsense2 as rs | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| motion = frame.as_motion_frame() | ||||||||||||||||||||||||||||||||||||||||||
| if not motion: | ||||||||||||||||||||||||||||||||||||||||||
| return | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| motion_data = motion.get_motion_data() | ||||||||||||||||||||||||||||||||||||||||||
| stream_type = motion.get_profile().stream_type() | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| if stream_type == rs.stream.accel: | ||||||||||||||||||||||||||||||||||||||||||
| self._latest_accel = Vector3(motion_data.x, motion_data.y, motion_data.z) | ||||||||||||||||||||||||||||||||||||||||||
| elif stream_type == rs.stream.gyro and self._latest_accel is not None: | ||||||||||||||||||||||||||||||||||||||||||
| # Gyro drives publishing, paired with the most recent accel sample. | ||||||||||||||||||||||||||||||||||||||||||
| self.imu.publish( | ||||||||||||||||||||||||||||||||||||||||||
| Imu( | ||||||||||||||||||||||||||||||||||||||||||
| angular_velocity=Vector3(motion_data.x, motion_data.y, motion_data.z), | ||||||||||||||||||||||||||||||||||||||||||
| linear_acceleration=self._latest_accel, | ||||||||||||||||||||||||||||||||||||||||||
| frame_id=self._imu_frame, | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def _publish_camera_info(self) -> None: | ||||||||||||||||||||||||||||||||||||||||||
| ts = time.time() | ||||||||||||||||||||||||||||||||||||||||||
| if self._color_camera_info: | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -381,6 +457,16 @@ def _publish_tf(self, ts: float) -> None: | |||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
| transforms.append(color_to_color_optical) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| # camera_link -> imu (physical motion-sensor extrinsics) | ||||||||||||||||||||||||||||||||||||||||||
| if self._depth_to_imu_extrinsics is not None: | ||||||||||||||||||||||||||||||||||||||||||
| imu_tf = self._extrinsics_to_transform( | ||||||||||||||||||||||||||||||||||||||||||
| self._depth_to_imu_extrinsics, | ||||||||||||||||||||||||||||||||||||||||||
| self._camera_link, | ||||||||||||||||||||||||||||||||||||||||||
| self._imu_frame, | ||||||||||||||||||||||||||||||||||||||||||
| ts, | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
| transforms.append(imu_tf) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| self.tf.publish(*transforms) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def _generate_pointcloud(self) -> None: | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -408,6 +494,13 @@ def _generate_pointcloud(self) -> None: | |||||||||||||||||||||||||||||||||||||||||
| def stop(self) -> None: | ||||||||||||||||||||||||||||||||||||||||||
| self._running = False | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| if self._imu_pipeline: | ||||||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||||||
| self._imu_pipeline.stop() | ||||||||||||||||||||||||||||||||||||||||||
| except Exception: | ||||||||||||||||||||||||||||||||||||||||||
| pass # Pipeline might already be stopped | ||||||||||||||||||||||||||||||||||||||||||
| self._imu_pipeline = None | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| # Stop pipeline first to unblock wait_for_frames() | ||||||||||||||||||||||||||||||||||||||||||
| if self._pipeline: | ||||||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -426,6 +519,8 @@ def stop(self) -> None: | |||||||||||||||||||||||||||||||||||||||||
| self._profile = None | ||||||||||||||||||||||||||||||||||||||||||
| self._align = None | ||||||||||||||||||||||||||||||||||||||||||
| self._color_to_depth_extrinsics = None | ||||||||||||||||||||||||||||||||||||||||||
| self._depth_to_imu_extrinsics = None | ||||||||||||||||||||||||||||||||||||||||||
| self._latest_accel = None | ||||||||||||||||||||||||||||||||||||||||||
| self._latest_color_img = None | ||||||||||||||||||||||||||||||||||||||||||
| self._latest_depth_img = None | ||||||||||||||||||||||||||||||||||||||||||
| super().stop() | ||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -443,34 +538,25 @@ def get_depth_scale(self) -> float: | |||||||||||||||||||||||||||||||||||||||||
| return self._depth_scale | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def main() -> None: | ||||||||||||||||||||||||||||||||||||||||||
| dimos = ModuleCoordinator() | ||||||||||||||||||||||||||||||||||||||||||
| dimos.start() | ||||||||||||||||||||||||||||||||||||||||||
| def _color_camera_info_to_rerun(camera_info: CameraInfo) -> object: | ||||||||||||||||||||||||||||||||||||||||||
| # Re-parent the pinhole onto the color image entity + its optical frame so | ||||||||||||||||||||||||||||||||||||||||||
| # the color image renders inside the camera frustum in the 3D view. | ||||||||||||||||||||||||||||||||||||||||||
| return camera_info.to_rerun( | ||||||||||||||||||||||||||||||||||||||||||
| image_topic="world/color_image", | ||||||||||||||||||||||||||||||||||||||||||
| optical_frame="camera_color_optical_frame", | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| camera = dimos.deploy(RealSenseCamera, enable_pointcloud=True, pointcloud_fps=5.0) | ||||||||||||||||||||||||||||||||||||||||||
| camera.color_image.transport = LCMTransport("/camera/color", Image) | ||||||||||||||||||||||||||||||||||||||||||
| camera.depth_image.transport = LCMTransport("/camera/depth", Image) | ||||||||||||||||||||||||||||||||||||||||||
| camera.pointcloud.transport = LCMTransport("/camera/pointcloud", PointCloud2) | ||||||||||||||||||||||||||||||||||||||||||
| camera.camera_info.transport = LCMTransport("/camera/color_info", CameraInfo) | ||||||||||||||||||||||||||||||||||||||||||
| camera.depth_camera_info.transport = LCMTransport("/camera/depth_info", CameraInfo) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| def cleanup() -> None: | ||||||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||||||
| dimos.stop() | ||||||||||||||||||||||||||||||||||||||||||
| except Exception: | ||||||||||||||||||||||||||||||||||||||||||
| pass | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| atexit.register(cleanup) | ||||||||||||||||||||||||||||||||||||||||||
| dimos.start_all_modules() | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| try: | ||||||||||||||||||||||||||||||||||||||||||
| while True: | ||||||||||||||||||||||||||||||||||||||||||
| time.sleep(0.1) | ||||||||||||||||||||||||||||||||||||||||||
| except (KeyboardInterrupt, SystemExit): | ||||||||||||||||||||||||||||||||||||||||||
| pass | ||||||||||||||||||||||||||||||||||||||||||
| finally: | ||||||||||||||||||||||||||||||||||||||||||
| atexit.unregister(cleanup) | ||||||||||||||||||||||||||||||||||||||||||
| cleanup() | ||||||||||||||||||||||||||||||||||||||||||
| def main() -> None: | ||||||||||||||||||||||||||||||||||||||||||
| blueprint = autoconnect( | ||||||||||||||||||||||||||||||||||||||||||
| RealSenseCamera.blueprint(enable_pointcloud=True, pointcloud_fps=5.0), | ||||||||||||||||||||||||||||||||||||||||||
| vis_module( | ||||||||||||||||||||||||||||||||||||||||||
| "rerun", | ||||||||||||||||||||||||||||||||||||||||||
| rerun_config={"visual_override": {"world/camera_info": _color_camera_info_to_rerun}}, | ||||||||||||||||||||||||||||||||||||||||||
| ), | ||||||||||||||||||||||||||||||||||||||||||
| ) | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| ModuleCoordinator.build(blueprint).loop() | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
| if __name__ == "__main__": | ||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||
This file was deleted.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -89,7 +89,6 @@ | |
| pkgs.glib | ||
| pkgs.eigen | ||
| pkgs.pcl | ||
| pkgs.yaml-cpp | ||
| pkgs.glog | ||
| pkgs.boost | ||
| pkgs.llvmPackages.openmp | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Recorded IMU with realsense cause I wanted an all-in-one recording