diff --git a/docs/pages/demos.rst b/docs/pages/demos.rst index 5fc379b0d..f6cddbeba 100644 --- a/docs/pages/demos.rst +++ b/docs/pages/demos.rst @@ -51,3 +51,36 @@ We usually use depth measurements from depth cameras or 3D LiDARs, but any sourc To help you get started quickly, we provide various example :gh_file:`config ` and ROS :gh_file:`launch ` files. For a brief introduction on how to edit wavemap configs and an overview of all the available settings, see the :doc:`configuration page `. + +Multi-sensor live demo +********************** +This section provides instructions to reproduce the interactive multi-sensor, multi-resolution mapping demo we performed at several events, including `RSS 2023 `__ and the `Swiss Robotics Day 2023 `__. In this demo, wavemap fuses measurements from a depth camera up to a resolution of 1cm and a LiDAR up to a range of 15m in real-time on a laptop. The odometry is obtained by running FastLIO2 using the LiDAR's pointclouds and built-in IMU. + +Hardware +======== +Wavemap can be :doc:`configured ` to work with almost any depth input. In case you want to replicate our exact setup, we used a Livox MID-360 LiDAR at RSS and an Ouster OS0-128 at the Swiss Robotics Day. We chose the PMD Pico Monstar depth camera for both demos, but the Azure Kinect also works well. Although any recent laptop will suffice, we recommend using a laptop with a discrete GPU as it will help Rviz run much smoother. + +Docker +====== +For convenience, the entire demo can be run in Docker using :gh_file:`this Docker image `, which includes the sensor drivers, FastLIO and wavemap. You can build it by running:: + + docker build --tag=wavemap_demo --pull - <<< $(curl -s https://raw.githubusercontent.com/ethz-asl/wavemap/main/tooling/docker/live_demo.Dockerfile) + +We provide a convenience script that you can use to run the Docker image. To download it, run:: + + curl -o demo_in_docker.sh https://raw.githubusercontent.com/ethz-asl/wavemap/main/tooling/packages/wavemap_utils/scripts/demo_in_docker.sh + sudo chmod +x demo_in_docker.sh + +Configure +========= +Start by configuring the laptop's network interface to receive the LiDAR data. By default, the Livox we used required the laptop's IP to be set to ``192.168.1.50``, while the Ouster required the laptop's IP to be set to ``192.168.10.50``. In case you're using another LiDAR, the expected receiver IP is usually mentioned in the LiDARs manual or driver documentation. + +Next, update the sensor calibrations to match your sensor setup. If you're using the exact sensors we used, you mainly need to update the extrinsics. These are defined through static TFs, at the bottom of the launch file for your sensor setup (e.g. :gh_file:`here ` or :gh_file:`here `). If you're using different sensors, you will also need to update the wavemap, FastLIO and sensor driver config files. To help you get started quickly, we provide examples for many different sensor setups for :gh_file:`wavemap ` and :gh_file:`FastLIO `. In case we do not yet have an example FastLIO config for your LiDAR, you might find one in the `official the FastLIO repository `__. + +Note that the ``demo_in_docker.sh`` script saves and restores the `ros/wavemap_ros` folder across runs (explained :gh_file:`here `), so you can configure wavemap by simply running ``demo_in_docker.sh`` and editing the launch and config files through the resulting interactive shell. + +Run +=== +Once the configured, you can directly run the demo by calling the ``demo_in_docker.sh`` script followed by the launch command. For example:: + + demo_in_docker.sh roslaunch wavemap_ros ouster_os0_pico_monstar.launch diff --git a/docs/pages/intro.rst b/docs/pages/intro.rst index ae1406401..780acbaa3 100644 --- a/docs/pages/intro.rst +++ b/docs/pages/intro.rst @@ -18,9 +18,13 @@ Abstract: Please cite it when using wavemap for research: +.. code-block:: text + Reijgwart, V., Cadena, C., Siegwart, R., & Ott, L. (2023). Efficient volumetric mapping of multi-scale environments using wavelet-based compression. Proceedings of Robotics: Science and System XIX. -BibTeX:: +BibTeX: + +.. code-block:: text @INPROCEEDINGS{reijgwart2023wavemap, author = {Reijgwart, Victor and Cadena, Cesar and Siegwart, Roland and Ott, Lionel}, diff --git a/examples/CHANGELOG.rst b/examples/CHANGELOG.rst index 8f6150972..6da6d8092 100644 --- a/examples/CHANGELOG.rst +++ b/examples/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap_examples ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * Add initial usage examples diff --git a/examples/package.xml b/examples/package.xml index 6285db6d1..57499798e 100644 --- a/examples/package.xml +++ b/examples/package.xml @@ -1,7 +1,7 @@ wavemap_examples - 1.6.0 + 1.6.1 Usages examples for wavemap. Victor Reijgwart diff --git a/libraries/wavemap/CHANGELOG.rst b/libraries/wavemap/CHANGELOG.rst index 7da3bde72..47276d92d 100644 --- a/libraries/wavemap/CHANGELOG.rst +++ b/libraries/wavemap/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * New features diff --git a/libraries/wavemap/package.xml b/libraries/wavemap/package.xml index e8c7de6a3..880a1afaf 100644 --- a/libraries/wavemap/package.xml +++ b/libraries/wavemap/package.xml @@ -1,7 +1,7 @@ wavemap - 1.6.0 + 1.6.1 Base library for wavemap. Victor Reijgwart diff --git a/libraries/wavemap_io/CHANGELOG.rst b/libraries/wavemap_io/CHANGELOG.rst index 87deefcbc..a5ac16bb6 100644 --- a/libraries/wavemap_io/CHANGELOG.rst +++ b/libraries/wavemap_io/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap_io ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * Refactor wavemap utils diff --git a/libraries/wavemap_io/package.xml b/libraries/wavemap_io/package.xml index bc2fc84b7..ec1a7083e 100644 --- a/libraries/wavemap_io/package.xml +++ b/libraries/wavemap_io/package.xml @@ -1,7 +1,7 @@ wavemap_io - 1.6.0 + 1.6.1 (De)serialization of wavemap types to files. Victor Reijgwart diff --git a/ros/wavemap_msgs/CHANGELOG.rst b/ros/wavemap_msgs/CHANGELOG.rst index ce5179f0d..96fa34276 100644 --- a/ros/wavemap_msgs/CHANGELOG.rst +++ b/ros/wavemap_msgs/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap_msgs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * Update incremental transmission and Rviz to remove deleted blocks diff --git a/ros/wavemap_msgs/package.xml b/ros/wavemap_msgs/package.xml index 48e527d91..45d2799e5 100644 --- a/ros/wavemap_msgs/package.xml +++ b/ros/wavemap_msgs/package.xml @@ -1,7 +1,7 @@ wavemap_msgs - 1.6.0 + 1.6.1 Message definitions for wavemap's ROS interfaces. Victor Reijgwart diff --git a/ros/wavemap_ros/CHANGELOG.rst b/ros/wavemap_ros/CHANGELOG.rst index d80a20089..5a6b28d68 100644 --- a/ros/wavemap_ros/CHANGELOG.rst +++ b/ros/wavemap_ros/CHANGELOG.rst @@ -2,6 +2,14 @@ Changelog for package wavemap_ros ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ +* Add config for Ouster OS0 + Pico Monstar +* Improve demo settings and tune FastLIO +* Make depth camera startup more reliable +* Document how to replicate the live demo +* Contributors: Victor Reijgwart + 1.6.0 (2023-10-17) ------------------ * New features diff --git a/ros/wavemap_ros/config/wavemap_server.rviz b/ros/wavemap_ros/config/rviz/default.rviz similarity index 100% rename from ros/wavemap_ros/config/wavemap_server.rviz rename to ros/wavemap_ros/config/rviz/default.rviz diff --git a/ros/wavemap_ros/config/rviz/live_demo.rviz b/ros/wavemap_ros/config/rviz/live_demo.rviz new file mode 100644 index 000000000..4344c1f22 --- /dev/null +++ b/ros/wavemap_ros/config/rviz/live_demo.rviz @@ -0,0 +1,325 @@ +Panels: + - Class: rviz/Displays + Help Height: 138 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /TF1/Frames1 + - /TF1/Tree1 + - /Input1 + - /Occupancy grid1 + - /Occupancy grid1/Map1 + Splitter Ratio: 0.943533718585968 + Tree Height: 1459 + - Class: rviz/Selection + Name: Selection + - Class: rviz/Tool Properties + Expanded: + - /2D Pose Estimate1 + - /2D Nav Goal1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz/Time + Name: Time + SyncMode: 0 + SyncSource: Image +Preferences: + PromptSaveOnExit: true +Toolbars: + toolButtonStyle: 2 +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz/Grid + Color: 160; 160; 164 + Enabled: false + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 1000 + Reference Frame: + Value: false + - Class: rviz/TF + Enabled: false + Filter (blacklist): "" + Filter (whitelist): "" + Frame Timeout: 15 + Frames: + All Enabled: false + Marker Alpha: 1 + Marker Scale: 1 + Name: TF + Show Arrows: true + Show Axes: true + Show Names: true + Tree: + {} + Update Interval: 0 + Value: false + - Class: rviz/Group + Displays: + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: reflectivity + Class: rviz/PointCloud2 + Color: 0; 32; 255 + Color Transformer: FlatColor + Decay Time: 0 + Enabled: false + Invert Rainbow: false + Max Color: 255; 255; 255 + Min Color: 0; 0; 0 + Name: Kinect + Position Transformer: XYZ + Queue Size: 10 + Selectable: false + Size (Pixels): 1 + Size (m): 0.009999999776482582 + Style: Points + Topic: /wavemap/depth_cam_input + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: false + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: reflectivity + Class: rviz/PointCloud2 + Color: 239; 41; 41 + Color Transformer: FlatColor + Decay Time: 1 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Min Color: 0; 0; 0 + Name: Ouster raw + Position Transformer: XYZ + Queue Size: 10 + Selectable: false + Size (Pixels): 1 + Size (m): 0.009999999776482582 + Style: Points + Topic: /os_cloud_node/points + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + - Alpha: 1 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: reflectivity + Class: rviz/PointCloud2 + Color: 0; 255; 0 + Color Transformer: FlatColor + Decay Time: 1 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Min Color: 0; 0; 0 + Name: Ouster undistorted + Position Transformer: XYZ + Queue Size: 10 + Selectable: false + Size (Pixels): 1 + Size (m): 0.009999999776482582 + Style: Points + Topic: /wavemap/reprojected_pointcloud + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + - Alpha: 0.5 + Autocompute Intensity Bounds: true + Autocompute Value Bounds: + Max Value: 10 + Min Value: -10 + Value: true + Axis: Z + Channel Name: reflectivity + Class: rviz/PointCloud2 + Color: 0; 255; 0 + Color Transformer: FlatColor + Decay Time: 1000 + Enabled: true + Invert Rainbow: false + Max Color: 255; 255; 255 + Min Color: 0; 0; 0 + Name: LIO + Position Transformer: XYZ + Queue Size: 10 + Selectable: false + Size (Pixels): 1 + Size (m): 0.009999999776482582 + Style: Points + Topic: /cloud_registered + Unreliable: false + Use Fixed Frame: true + Use rainbow: true + Value: true + Enabled: false + Name: Input + - Class: rviz/Group + Displays: + - Class: wavemap_rviz_plugin/WavemapMap + Enabled: true + Name: Map + Queue Size: 10 + Render slice: + Alpha: 1 + Enable: false + Max log odds: 1e+06 + Min log odds: -1e+06 + Slice height: 0 + Render voxels: + Alpha: 1 + Cell selector: Surface + Color mode: Height + Enable: true + Flat color: 0; 0; 255 + Frame rate: + Max update time: 20 + Log odds threshold: 0.0010000000474974513 + Max log odds: 1e+06 + Min log odds: 0.0010000000474974513 + Termination height: 0 + Unknown log odds: 9.999999747378752e-05 + Source: Topic + Topic: /wavemap/map + Unreliable: false + Value: true + - Class: rviz/MarkerArray + Enabled: false + Marker Topic: /wavemap/occupancy_grid + Name: Estimate + Namespaces: + {} + Queue Size: 100 + Value: false + - Class: rviz/MarkerArray + Enabled: false + Marker Topic: /wavemap/occupancy_grid_ground_truth + Name: Ground truth + Namespaces: + {} + Queue Size: 100 + Value: false + - Class: rviz/MarkerArray + Enabled: false + Marker Topic: /wavemap/occupancy_grid_error + Name: Error + Namespaces: + {} + Queue Size: 100 + Value: false + Enabled: true + Name: Occupancy grid + - Class: rviz/Image + Enabled: false + Image Topic: /pico_monstar/image_depth + Max Value: 1 + Median window: 5 + Min Value: 0 + Name: Image + Normalize Range: true + Queue Size: 2 + Transport Hint: raw + Unreliable: false + Value: false + Enabled: true + Global Options: + Background Color: 243; 243; 243 + Default Light: true + Fixed Frame: odom + Frame Rate: 30 + Name: root + Tools: + - Class: rviz/Interact + Hide Inactive Objects: true + - Class: rviz/MoveCamera + - Class: rviz/Select + - Class: rviz/FocusCamera + - Class: rviz/Measure + - Class: rviz/SetInitialPose + Theta std deviation: 0.2617993950843811 + Topic: /initialpose + X std deviation: 0.5 + Y std deviation: 0.5 + - Class: rviz/SetGoal + Topic: /move_base_simple/goal + - Class: rviz/PublishPoint + Single click: true + Topic: /clicked_point + Value: true + Views: + Current: + Class: rviz/ThirdPersonFollower + Distance: 1 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Field of View: 0.7853981852531433 + Focal Point: + X: 0 + Y: 0 + Z: 0 + Focal Shape Fixed Size: false + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 0.30000001192092896 + Target Frame: body + Yaw: 3.1414999961853027 + Saved: ~ +Window Geometry: + Displays: + collapsed: true + Height: 1792 + Hide Left Dock: true + Hide Right Dock: true + Image: + collapsed: false + QMainWindow State: 000000ff00000000fd000000040000000000000219000006abfc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b000000b000fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000b0fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730000000027000006ab0000018200fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d00610067006500000004a50000022d0000002600fffffffb0000000a0049006d0061006700650100000959000001390000000000000000000000010000015f000006abfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730000000027000006ab0000013200fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073800000060fc0100000002fb0000000800540069006d00650000000000000007380000077d00fffffffb0000000800540069006d0065010000000000000450000000000000000000000b70000006ab00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730000000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: true + Width: 2928 + X: 144 + Y: 54 diff --git a/ros/wavemap_ros/config/wavemap_azure_kinect.yaml b/ros/wavemap_ros/config/wavemap_livox_mid360_azure_kinect.yaml similarity index 100% rename from ros/wavemap_ros/config/wavemap_azure_kinect.yaml rename to ros/wavemap_ros/config/wavemap_livox_mid360_azure_kinect.yaml diff --git a/ros/wavemap_ros/config/wavemap_pico_flexx.yaml b/ros/wavemap_ros/config/wavemap_livox_mid360_pico_flexx.yaml similarity index 100% rename from ros/wavemap_ros/config/wavemap_pico_flexx.yaml rename to ros/wavemap_ros/config/wavemap_livox_mid360_pico_flexx.yaml diff --git a/ros/wavemap_ros/config/wavemap_pico_monstar.yaml b/ros/wavemap_ros/config/wavemap_livox_mid360_pico_monstar.yaml similarity index 100% rename from ros/wavemap_ros/config/wavemap_pico_monstar.yaml rename to ros/wavemap_ros/config/wavemap_livox_mid360_pico_monstar.yaml diff --git a/ros/wavemap_ros/config/wavemap_ouster_os0_pico_monstar.yaml b/ros/wavemap_ros/config/wavemap_ouster_os0_pico_monstar.yaml new file mode 100644 index 000000000..98b4d3f2a --- /dev/null +++ b/ros/wavemap_ros/config/wavemap_ouster_os0_pico_monstar.yaml @@ -0,0 +1,98 @@ +map: + general: + world_frame: "gravity_init" + thresholding_period: { seconds: 2.0 } + pruning_period: { seconds: 10.0 } + publication_period: { seconds: 2.0 } + logging_level: debug + allow_reset_map_service: true + data_structure: + type: hashed_chunked_wavelet_octree + min_cell_width: { meters: 0.01 } + tree_height: 9 + +inputs: + - type: depth_image + general: + topic_name: "/pico_monstar/image_rect" + topic_queue_length: 1 + max_wait_for_pose: { seconds: 1.0 } + time_offset: { seconds: 0.0118462 } + # depth_scale_factor: 0.001 + # reprojected_pointcloud_topic_name: "/wavemap/reprojected_pointcloud" + integrators: + - integration_method: + type: hashed_chunked_wavelet_integrator + min_range: { meters: 0.3 } + max_range: { meters: 1.0 } + termination_update_error: 0.1 + termination_height: 0 + projection_model: + type: pinhole_camera_projector + width: 352 + height: 287 + fx: 208.751708984375 + fy: 208.751708984375 + cx: 172.19403076171875 + cy: 146.1179962158203 + measurement_model: + type: continuous_ray + range_sigma: { meters: 0.005 } + scaling_free: 0.4 + scaling_occupied: 0.8 + - integration_method: + type: hashed_chunked_wavelet_integrator + min_range: { meters: 1.0 } + max_range: { meters: 2.0 } + termination_update_error: 0.1 + termination_height: 1 + projection_model: + type: pinhole_camera_projector + width: 352 + height: 287 + fx: 208.751708984375 + fy: 208.751708984375 + cx: 172.19403076171875 + cy: 146.1179962158203 + measurement_model: + type: continuous_ray + range_sigma: { meters: 0.01 } + scaling_free: 0.4 + scaling_occupied: 0.8 + + - type: pointcloud + general: + topic_name: "/os_cloud_node/points" + topic_type: ouster + undistort_motion: true + topic_queue_length: 10 + max_wait_for_pose: { seconds: 1.0 } + # reprojected_pointcloud_topic_name: "/wavemap/reprojected_pointcloud" + # projected_range_image_topic_name: "/wavemap/projected_range_image" + integrators: + - integration_method: + type: hashed_chunked_wavelet_integrator + min_range: { meters: 1.5 } + max_range: { meters: 15.0 } + termination_update_error: 0.1 + termination_height: 3 + projection_model: + type: ouster_projector + lidar_origin_to_beam_origin: { millimeters: 27.67 } + lidar_origin_to_sensor_origin_z_offset: { millimeters: 36.18 } + elevation: + num_cells: 128 + min_angle: { degrees: -45.73 } + max_angle: { degrees: 46.27 } + azimuth: + num_cells: 1024 + min_angle: { degrees: -180.0 } + max_angle: { degrees: 180.0 } + measurement_model: + type: continuous_beam + angle_sigma: { degrees: 0.035 } + # NOTE: For best results, we recommend setting range_sigma to + # max(min_cell_width / 2, ouster_noise) where ouster_noise = 0.05 + range_sigma: { meters: 0.05 } + scaling_free: 0.2 + scaling_occupied: 0.4 diff --git a/ros/wavemap_ros/launch/online/azure_kinect.launch b/ros/wavemap_ros/launch/online/livox_mid360_azure_kinect.launch similarity index 96% rename from ros/wavemap_ros/launch/online/azure_kinect.launch rename to ros/wavemap_ros/launch/online/livox_mid360_azure_kinect.launch index a9ed41998..f39f0f7cc 100644 --- a/ros/wavemap_ros/launch/online/azure_kinect.launch +++ b/ros/wavemap_ros/launch/online/livox_mid360_azure_kinect.launch @@ -1,12 +1,12 @@ - + diff --git a/ros/wavemap_ros/launch/online/pico_monstar.launch b/ros/wavemap_ros/launch/online/livox_mid360_pico_monstar.launch similarity index 83% rename from ros/wavemap_ros/launch/online/pico_monstar.launch rename to ros/wavemap_ros/launch/online/livox_mid360_pico_monstar.launch index 81f4da1ac..90cbf3437 100644 --- a/ros/wavemap_ros/launch/online/pico_monstar.launch +++ b/ros/wavemap_ros/launch/online/livox_mid360_pico_monstar.launch @@ -1,8 +1,25 @@ + + + + + + + + + + + + + @@ -26,29 +43,20 @@ + + args="load image_proc/rectify manager" + respawn="true" output="screen" + launch-prefix="bash -c 'sleep 3; $0 $@' "> - - - - - - - - - - - - @@ -62,7 +70,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ros/wavemap_ros/launch/rosbag_processor.launch b/ros/wavemap_ros/launch/rosbag_processor.launch index 6d3d2148a..682baac61 100644 --- a/ros/wavemap_ros/launch/rosbag_processor.launch +++ b/ros/wavemap_ros/launch/rosbag_processor.launch @@ -9,6 +9,8 @@ + @@ -37,9 +39,7 @@ - + args="-d $(arg rviz_config)"/> diff --git a/ros/wavemap_ros/launch/wavemap_server.launch b/ros/wavemap_ros/launch/wavemap_server.launch index 3a8041090..1c2173355 100644 --- a/ros/wavemap_ros/launch/wavemap_server.launch +++ b/ros/wavemap_ros/launch/wavemap_server.launch @@ -9,6 +9,8 @@ + - + args="-d $(arg rviz_config)"/> diff --git a/ros/wavemap_ros/package.xml b/ros/wavemap_ros/package.xml index ef9de4c68..12f3bdd6e 100644 --- a/ros/wavemap_ros/package.xml +++ b/ros/wavemap_ros/package.xml @@ -1,7 +1,7 @@ wavemap_ros - 1.6.0 + 1.6.1 ROS interface for wavemap. Victor Reijgwart diff --git a/ros/wavemap_ros_conversions/CHANGELOG.rst b/ros/wavemap_ros_conversions/CHANGELOG.rst index 3f53b0917..eac940d9e 100644 --- a/ros/wavemap_ros_conversions/CHANGELOG.rst +++ b/ros/wavemap_ros_conversions/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap_ros_conversions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * Update incremental transmission and Rviz to remove deleted blocks diff --git a/ros/wavemap_ros_conversions/package.xml b/ros/wavemap_ros_conversions/package.xml index ec4e1da32..362d6cc01 100644 --- a/ros/wavemap_ros_conversions/package.xml +++ b/ros/wavemap_ros_conversions/package.xml @@ -1,7 +1,7 @@ wavemap_ros_conversions - 1.6.0 + 1.6.1 Conversions between wavemap and ROS types. Victor Reijgwart diff --git a/ros/wavemap_rviz_plugin/CHANGELOG.rst b/ros/wavemap_rviz_plugin/CHANGELOG.rst index 8807fb96f..14f2b8ccb 100644 --- a/ros/wavemap_rviz_plugin/CHANGELOG.rst +++ b/ros/wavemap_rviz_plugin/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap_rviz_plugin ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * New features diff --git a/ros/wavemap_rviz_plugin/package.xml b/ros/wavemap_rviz_plugin/package.xml index e15a92d40..17ca1131b 100644 --- a/ros/wavemap_rviz_plugin/package.xml +++ b/ros/wavemap_rviz_plugin/package.xml @@ -1,7 +1,7 @@ wavemap_rviz_plugin - 1.6.0 + 1.6.1 Plugin to interactively visualize maps published in wavemap's native format. diff --git a/tooling/docker/live_demo.Dockerfile b/tooling/docker/live_demo.Dockerfile new file mode 100644 index 000000000..68c760def --- /dev/null +++ b/tooling/docker/live_demo.Dockerfile @@ -0,0 +1,75 @@ +ARG WAVEMAP_BASE_RELEASE=latest +ARG WAVEMAP_BRANCH=main +ARG DEMO_DEPENDENCIES_FILE=tooling/vcstool/live_demo_https.yml + +FROM alpine/git:2.40.1 AS cacher + +# Checkout wavemap's demo branch +ARG WAVEMAP_BRANCH +ARG DEMO_DEPENDENCIES_FILE +RUN git clone -b ${WAVEMAP_BRANCH} https://github.com/ethz-asl/wavemap wavemap && \ + cp wavemap/${DEMO_DEPENDENCIES_FILE} /demo_dependencies.yml + + +FROM ghcr.io/ethz-asl/wavemap:${WAVEMAP_BASE_RELEASE} + +# Load the cached dependency spec file +COPY --from=cacher /demo_dependencies.yml /tmp/demo_dependencies.yml + +# Install vcstool +ARG DEBIAN_FRONTEND=noninteractive +# hadolint ignore=DL3008 +RUN apt-get update && \ + apt-get install -q -y --no-install-recommends git python3-vcstool && \ + rm -rf /var/lib/apt/lists/* + +# Import from-source dependencies with vcstool +RUN mkdir src/demo_dependencies && \ + vcs import --recursive --input /tmp/demo_dependencies.yml \ + src/demo_dependencies + +# Configure the Livox ROS driver for ROS1 +# hadolint ignore=DL3003 +RUN cd src/demo_dependencies/livox_ros_driver2 && \ + ln -s package_ROS1.xml package.xml && \ + sed -i '1s/^/set(ROS_EDITION ROS1)\n/' CMakeLists.txt + +# Install system dependencies +ARG DEBIAN_FRONTEND=noninteractive +# hadolint ignore=DL3008 +RUN apt-get update && \ + apt-get install -q -y --no-install-recommends ros-noetic-image-proc tmux && \ + rosdep update && \ + rosdep install --from-paths src --ignore-src \ + --skip-keys="numpy_eigen catkin_boost_python_buildtool" -q -y && \ + rm -rf /var/lib/apt/lists/* + +# Build the Livox SDK +# hadolint ignore=DL3003 +RUN cd src/demo_dependencies/livox_sdk2 && \ + mkdir build && cd build && \ + cmake .. && make -j8 && \ + make install + +# Pull in the Pico Flexx SDK +# hadolint ignore=DL3003 +RUN cd src/demo_dependencies/pico_flexx_driver/royale && \ + curl -L "https://drive.google.com/uc?export=download&id=1Xm0K37KRJJG7usGykTUoHwog897G6EgG" \ + -o libroyale.tar.xz && \ + tar -xf libroyale.tar.xz + +# Setup udev rules for the Pico Monstar +RUN cp src/demo_dependencies/pico_flexx_driver/royale/libroyale-*/driver/udev/10-royale-ubuntu.rules \ + /etc/udev/rules.d/ && \ + usermod -a -G plugdev root + +# Build catkin dependencies +RUN catkin build --force-color ouster_ros pico_flexx_driver livox_ros_driver2 fast_lio + +# Checkout the demo branch +ARG WAVEMAP_BRANCH +RUN rm -rf src/wavemap && \ + git clone -b ${WAVEMAP_BRANCH} https://github.com/ethz-asl/wavemap src/wavemap + +# Build wavemap +RUN catkin build --force-color wavemap_all diff --git a/tooling/packages/catkin_setup/CHANGELOG.rst b/tooling/packages/catkin_setup/CHANGELOG.rst index 79cc5d5a1..1adc4ca93 100644 --- a/tooling/packages/catkin_setup/CHANGELOG.rst +++ b/tooling/packages/catkin_setup/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package catkin_setup ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ diff --git a/tooling/packages/catkin_setup/package.xml b/tooling/packages/catkin_setup/package.xml index 637016bfe..7b4c10800 100644 --- a/tooling/packages/catkin_setup/package.xml +++ b/tooling/packages/catkin_setup/package.xml @@ -1,7 +1,7 @@ catkin_setup - 1.6.0 + 1.6.1 Dummy package to make it easy to setup the workspace and generate the setup.[sh|bash|zsh] scripts in CI. Victor Reijgwart diff --git a/tooling/packages/wavemap_all/CHANGELOG.rst b/tooling/packages/wavemap_all/CHANGELOG.rst index 294651b49..f2f4a9c34 100644 --- a/tooling/packages/wavemap_all/CHANGELOG.rst +++ b/tooling/packages/wavemap_all/CHANGELOG.rst @@ -2,6 +2,9 @@ Changelog for package wavemap_all ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ + 1.6.0 (2023-10-17) ------------------ * Add initial usage examples diff --git a/tooling/packages/wavemap_all/package.xml b/tooling/packages/wavemap_all/package.xml index 4fe00e7c6..fae7e7e12 100644 --- a/tooling/packages/wavemap_all/package.xml +++ b/tooling/packages/wavemap_all/package.xml @@ -1,7 +1,7 @@ wavemap_all - 1.6.0 + 1.6.1 Metapackage that builds all wavemap packages. Victor Reijgwart diff --git a/tooling/packages/wavemap_utils/CHANGELOG.rst b/tooling/packages/wavemap_utils/CHANGELOG.rst index 3d2f9aa76..d927ca18d 100644 --- a/tooling/packages/wavemap_utils/CHANGELOG.rst +++ b/tooling/packages/wavemap_utils/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog for package wavemap_utils ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +1.6.1 (2023-11-20) +------------------ +* Add Dockerfile and scripts to run the demo in Docker +* Document how to replicate the live demo +* Contributors: Victor Reijgwart + 1.6.0 (2023-10-17) ------------------ diff --git a/tooling/packages/wavemap_utils/package.xml b/tooling/packages/wavemap_utils/package.xml index 6199dade7..adaa27c3d 100644 --- a/tooling/packages/wavemap_utils/package.xml +++ b/tooling/packages/wavemap_utils/package.xml @@ -1,7 +1,7 @@ wavemap_utils - 1.6.0 + 1.6.1 Small package containing scripts to simplify common wavemap development tasks. Victor Reijgwart diff --git a/tooling/packages/wavemap_utils/scripts/demo_in_docker.sh b/tooling/packages/wavemap_utils/scripts/demo_in_docker.sh new file mode 100755 index 000000000..02eec3442 --- /dev/null +++ b/tooling/packages/wavemap_utils/scripts/demo_in_docker.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +# Calling this script with no arguments will start a wavemap container running +# an interactive bash session. +# You can also call this script with arguments, which will then be executed as a +# command in the container, for example: +# `run_in_docker.sh roslaunch wavemap_ros newer_college_os0_cloister.launch` + +# The following named volume will be used to persist wavemap's configuration +# files when the container is restarted. This allows users to set the sensor +# extrinsics (e.g. depth camera and LiDAR to IMU transformations) directly in +# the container and have the changes persist across Docker runs. +# To reset the configuration files, run +# docker volume rm wavemap_demo_config +config_volume=wavemap_demo_config + +# Allow the docker user to connect to the X window display, to open GUIs +xhost + local:docker + +# Detect whether the Nvidia container toolkit is available +# NOTE: With this toolkit, Nvidia GPUs on the host can be shared with processes +# running in the container. This makes graphics intensive applications +# such as Rviz much more responsive. +# If you have an Nvidia GPU, you can install it with these instructions: +# https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#docker +if docker info | grep "Runtimes.*nvidia.*" &>/dev/null; then +# Run the Docker container +# NOTE: We use the --rm flag to create an ephemeral container, meaning that the +# container will be erased once it stops running. In case you want changes +# that you make and data that you load into the container to keep existing +# between sessions, you can omit the --rm flag and give your container a +# name with --name . When the container exits, you will then be +# able to restart it with `docker start -i `. If you do this, +# don't forget to manually delete the container with +# `docker container rm ` once you no longer need it, to free up +# disk space. +# In case you want to let ROS nodes running in the container +# (e.g. wavemap_ros) talk to ROS nodes (e.g. rosbag play) on the host, +# you can add the --network="host" flag or configure custom networks. +# The full documentation for docker run is available at: +# https://docs.docker.com/engine/reference/run/ + docker run --rm -it --privileged --net=host \ + -e DISPLAY="${DISPLAY}" \ + -e QT_X11_NO_MITSHM=1 \ + -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ + --runtime=nvidia --gpus all \ + -v "$config_volume":/home/ci/catkin_ws/src/wavemap/ros/wavemap_ros:rw \ + -e NVIDIA_VISIBLE_DEVICES=all \ + -e NVIDIA_DRIVER_CAPABILITIES=graphics \ + wavemap_demo "$@" +else +# If the Nvidia container toolkit is not available, we launch the container with +# access to the host display but without GPU acceleration. +# NOTE: This mode works well for regular processing. However, displaying large +# maps in Rviz might be slow as it will only be able to use software +# rendering. + docker run --rm -it --privileged --net=host --device /dev/dri \ + -e DISPLAY="${DISPLAY}" \ + -e QT_X11_NO_MITSHM=1 \ + -v /tmp/.X11-unix:/tmp/.X11-unix:rw \ + -v "$config_volume":/home/ci/catkin_ws/src/wavemap/ros/wavemap_ros:rw \ + wavemap_demo "$@" +fi diff --git a/tooling/vcstool/live_demo_https.yml b/tooling/vcstool/live_demo_https.yml new file mode 100644 index 000000000..e80fbec34 --- /dev/null +++ b/tooling/vcstool/live_demo_https.yml @@ -0,0 +1,21 @@ +repositories: + ouster_ros: + type: git + url: https://github.com/ouster-lidar/ouster-ros.git + version: master + pico_flexx_driver: + type: git + url: https://github.com/code-iai/pico_flexx_driver.git + version: master + livox_sdk2: + type: git + url: https://github.com/Livox-SDK/Livox-SDK2.git + version: master + livox_ros_driver2: + type: git + url: https://github.com/Livox-SDK/livox_ros_driver2.git + version: master + fast_lio: + type: git + url: https://github.com/ethz-asl/fast_lio + version: feature/new_ouster_driver