├── .gitignore
├── LICENSE.txt
├── README.md
├── backend
├── multi_robot_utils_launch
│ ├── CMakeLists.txt
│ ├── launch
│ │ ├── others
│ │ │ ├── relay_topics_for_loop_closure.launch
│ │ │ ├── relay_topics_for_loop_closure_semantic_meas_and_odom.launch
│ │ │ ├── relay_topics_for_loop_closure_step2.launch
│ │ │ ├── relay_topics_multi_robot.launch
│ │ │ ├── relay_topics_multi_robot_2_robots.launch
│ │ │ └── relay_topics_multi_robot_4_robots.launch
│ │ ├── play_bag_for_object_modeller.launch
│ │ ├── play_bag_for_object_modeller_robot2.launch
│ │ ├── play_bag_with_remapping.launch
│ │ ├── publish_tf.launch
│ │ ├── record_bag_for_vis_pennovation_lidar_seg_pc.launch
│ │ ├── record_bag_multi_robot.launch
│ │ ├── record_bag_ns_robot.launch
│ │ ├── record_bag_vems_slam_ground_station.launch
│ │ ├── record_bag_vems_slam_robot.sh
│ │ └── relay_topics_for_quad2_quad1.launch
│ ├── package.xml
│ └── script
│ │ ├── tmux_multi_robot_indoor_outdoor-bkup.sh
│ │ ├── tmux_multi_robot_with_bags.sh
│ │ ├── tmux_multi_robot_with_bags_dcist.sh
│ │ ├── tmux_multi_robot_with_bags_f250_scarab.sh
│ │ ├── tmux_multi_robot_with_bags_forest.sh
│ │ ├── tmux_multi_robot_with_bags_parking_lot.sh
│ │ ├── tmux_multi_robot_with_bags_scarabs_indoor.sh
│ │ ├── tmux_single_indoor_robot.sh
│ │ ├── tmux_single_indoor_robot_open_vocab.sh
│ │ ├── tmux_single_outdoor_kitti.sh
│ │ └── tmux_single_outdoor_robot.sh
├── sloam
│ ├── CMakeLists.txt
│ ├── clipper_semantic_object
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benchmarks
│ │ │ ├── CMakeLists.txt
│ │ │ ├── bm_utils.cpp
│ │ │ ├── bm_utils.h
│ │ │ └── main.cpp
│ │ ├── bindings
│ │ │ ├── matlab
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── euclideandistance_mex.cpp
│ │ │ │ ├── finddensecluster_mex.cpp
│ │ │ │ ├── mexutils.h
│ │ │ │ └── pointnormaldistance_mex.cpp
│ │ │ └── python
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── py_clipper.cpp
│ │ │ │ ├── setup.py.in
│ │ │ │ └── trampolines.h
│ │ ├── cmake
│ │ │ ├── FindMKL.cmake
│ │ │ └── clipper-config.cmake.in
│ │ ├── devel
│ │ │ ├── .built_by
│ │ │ ├── .private
│ │ │ │ └── catkin_tools_prebuild
│ │ │ │ │ ├── .catkin
│ │ │ │ │ ├── .rosinstall
│ │ │ │ │ ├── _setup_util.py
│ │ │ │ │ ├── cmake.lock
│ │ │ │ │ ├── env.sh
│ │ │ │ │ ├── lib
│ │ │ │ │ └── pkgconfig
│ │ │ │ │ │ └── catkin_tools_prebuild.pc
│ │ │ │ │ ├── local_setup.bash
│ │ │ │ │ ├── local_setup.sh
│ │ │ │ │ ├── local_setup.zsh
│ │ │ │ │ ├── setup.bash
│ │ │ │ │ ├── setup.sh
│ │ │ │ │ ├── setup.zsh
│ │ │ │ │ └── share
│ │ │ │ │ └── catkin_tools_prebuild
│ │ │ │ │ └── cmake
│ │ │ │ │ ├── catkin_tools_prebuildConfig-version.cmake
│ │ │ │ │ └── catkin_tools_prebuildConfig.cmake
│ │ │ ├── _setup_util.py
│ │ │ ├── cmake.lock
│ │ │ ├── env.sh
│ │ │ ├── lib
│ │ │ │ └── pkgconfig
│ │ │ │ │ └── catkin_tools_prebuild.pc
│ │ │ ├── local_setup.bash
│ │ │ ├── local_setup.sh
│ │ │ ├── local_setup.zsh
│ │ │ ├── setup.bash
│ │ │ ├── setup.sh
│ │ │ ├── setup.zsh
│ │ │ └── share
│ │ │ │ └── catkin_tools_prebuild
│ │ │ │ └── cmake
│ │ │ │ ├── catkin_tools_prebuildConfig-version.cmake
│ │ │ │ └── catkin_tools_prebuildConfig.cmake
│ │ ├── examples
│ │ │ ├── c++
│ │ │ │ └── example.cpp
│ │ │ ├── data
│ │ │ │ ├── bun10k.ply
│ │ │ │ ├── robot0Map_forest.txt
│ │ │ │ ├── robot0Map_forest_2d.txt
│ │ │ │ ├── robot0Map_indoor.txt
│ │ │ │ ├── robot0Map_parking.txt
│ │ │ │ ├── robot1Map_forest.txt
│ │ │ │ ├── robot1Map_forest_2d.txt
│ │ │ │ ├── robot1Map_indoor.txt
│ │ │ │ ├── robot1Map_parking.txt
│ │ │ │ ├── robot2Map_forest.txt
│ │ │ │ ├── robot2Map_forest_2d.txt
│ │ │ │ ├── robot2Map_indoor.txt
│ │ │ │ └── robot2Map_parking.txt
│ │ │ └── matlab
│ │ │ │ ├── ex1_knownscalepointcloud.m
│ │ │ │ ├── ex3_planecloud.m
│ │ │ │ └── ex4_bunny.m
│ │ ├── include
│ │ │ ├── clipper
│ │ │ │ ├── clipper.h
│ │ │ │ ├── dsd.h
│ │ │ │ ├── invariants
│ │ │ │ │ ├── abstract.h
│ │ │ │ │ ├── builtins.h
│ │ │ │ │ ├── euclidean_distance.h
│ │ │ │ │ └── pointnormal_distance.h
│ │ │ │ ├── maxclique.h
│ │ │ │ ├── sdp.h
│ │ │ │ ├── types.h
│ │ │ │ └── utils.h
│ │ │ ├── semantic_clipper.h
│ │ │ └── triangulation
│ │ │ │ ├── descriptor.hpp
│ │ │ │ ├── distance.hpp
│ │ │ │ ├── observation.hpp
│ │ │ │ └── polygon.hpp
│ │ ├── matlab
│ │ │ └── clipper.m
│ │ ├── src
│ │ │ ├── clipper.cpp
│ │ │ ├── dsd.cpp
│ │ │ ├── invariants
│ │ │ │ ├── euclidean_distance.cpp
│ │ │ │ └── pointnormal_distance.cpp
│ │ │ ├── maxclique.cpp
│ │ │ ├── sdp.cpp
│ │ │ ├── semantic_clipper.cpp
│ │ │ ├── triangulation
│ │ │ │ ├── descriptor.cpp
│ │ │ │ └── observation.cpp
│ │ │ └── utils.cpp
│ │ └── test
│ │ │ ├── CMakeLists.txt
│ │ │ ├── affinity_test.cpp
│ │ │ ├── clipper_test.cpp
│ │ │ ├── dsd_test.cpp
│ │ │ ├── main.cpp
│ │ │ ├── sdp_test.cpp
│ │ │ └── test_semantic_clipper.cpp
│ ├── cmake
│ │ └── CMakeHelpers.cmake
│ ├── include
│ │ ├── core
│ │ │ ├── cubeMapManager.h
│ │ │ ├── cylinderMapManager.h
│ │ │ ├── databaseManager.h
│ │ │ ├── ellipsoidMapManager.h
│ │ │ ├── place_recognition.h
│ │ │ ├── robot.h
│ │ │ ├── sloam.h
│ │ │ ├── sloamNode.h
│ │ │ └── sloamNodelet.h
│ │ ├── factorgraph
│ │ │ ├── cubeFactor.h
│ │ │ ├── cylinderFactor.h
│ │ │ ├── graph.h
│ │ │ └── graphWrapper.h
│ │ ├── helpers
│ │ │ ├── definitions.h
│ │ │ ├── serialization.h
│ │ │ └── utils.h
│ │ ├── objects
│ │ │ ├── cube.h
│ │ │ ├── cylinder.h
│ │ │ ├── ellipsoid.h
│ │ │ ├── plane.h
│ │ │ └── semanticObject.h
│ │ └── viz
│ │ │ └── vizTools.h
│ ├── launch
│ │ ├── decentralized_sloam.launch
│ │ ├── decentralized_sloam_indoor_outdoor.launch
│ │ ├── decentralized_sloam_multi_robot_dcist.launch
│ │ ├── decentralized_sloam_multi_robot_f250_scarab.launch
│ │ ├── decentralized_sloam_multi_robot_forest.launch
│ │ ├── decentralized_sloam_multi_robot_seven_robots_indoor_outdoor.launch
│ │ ├── decentralized_sloam_scarab.launch
│ │ ├── play_bag_indoor_scarab.launch
│ │ ├── play_multi_robot_bags_with_remapping.launch
│ │ ├── run.launch
│ │ ├── run_indoor_large_scale_exploration.launch
│ │ ├── run_pennovation.launch
│ │ ├── run_sim.launch
│ │ ├── rviz
│ │ │ ├── decentralized_sloam.rviz
│ │ │ └── sloam_active_slam.rviz
│ │ ├── segmentation.launch
│ │ ├── single_robot_sloam_test.launch
│ │ ├── single_robot_sloam_test_LiDAR.launch
│ │ ├── single_robot_sloam_test_benchmark.launch
│ │ ├── single_robot_sloam_test_outdoor.launch
│ │ ├── sloam.launch
│ │ ├── sloam.launch.debug
│ │ ├── sloam_bw_test.launch
│ │ └── unit_tests
│ │ │ └── place_recognition_test.launch
│ ├── nodelet_plugins.xml
│ ├── package.xml
│ ├── params
│ │ ├── sloam-forest-parking-lot.yaml
│ │ └── sloam.yaml
│ ├── resource
│ │ ├── cabinet.stl
│ │ ├── chair-no-back.dae
│ │ ├── chair.stl
│ │ ├── combine_cad_mode.py
│ │ ├── door.stl
│ │ ├── fridge.stl
│ │ ├── microwave.stl
│ │ ├── monitor.stl
│ │ ├── move_chair.py
│ │ ├── plant.stl
│ │ ├── robot.stl
│ │ ├── rotate_door.py
│ │ ├── scale_object.py
│ │ ├── table2.stl
│ │ └── trash_can.stl
│ └── src
│ │ ├── core
│ │ ├── cubeMapManager.cpp
│ │ ├── cylinderMapManager.cpp
│ │ ├── databaseManager.cpp
│ │ ├── ellipsoidMapManager.cpp
│ │ ├── inputNode.cpp
│ │ ├── place_recognition.cpp
│ │ ├── robot.cpp
│ │ ├── sloam.cpp
│ │ ├── sloamNode.cpp
│ │ └── sloamNodelet.cpp
│ │ ├── factorgraph
│ │ ├── cubeFactor.cpp
│ │ ├── cylinderFactor.cpp
│ │ ├── graph.cpp
│ │ └── graphWrapper.cpp
│ │ ├── objects
│ │ ├── cube.cpp
│ │ ├── cylinder.cpp
│ │ ├── ellipsoid.cpp
│ │ └── plane.cpp
│ │ ├── tests
│ │ ├── core_test.cpp
│ │ ├── cube_factor_test.cpp
│ │ ├── cylinder_factor_test.cpp
│ │ ├── cylinder_test.cpp
│ │ ├── loop_closure_test.cpp
│ │ ├── place_recognition_test.cpp
│ │ └── plane_test.cpp
│ │ └── viz
│ │ └── vizTools.cpp
└── sloam_msgs
│ ├── CMakeLists.txt
│ ├── action
│ ├── ActiveLoopClosure.action
│ └── DetectLoopClosure.action
│ ├── msg
│ ├── LoopClosure.msg
│ ├── MultiArrayPoseObjectEdges.msg
│ ├── ObservationPair.msg
│ ├── PoseMst.msg
│ ├── PoseMstBundle.msg
│ ├── ROSCube.msg
│ ├── ROSCylinder.msg
│ ├── ROSCylinderArray.msg
│ ├── ROSEllipsoid.msg
│ ├── ROSGround.msg
│ ├── ROSObservation.msg
│ ├── ROSRangeBearing.msg
│ ├── ROSRangeBearingSyncOdom.msg
│ ├── ROSScan.msg
│ ├── ROSSubMap.msg
│ ├── ROSSweep.msg
│ ├── ROSSyncOdom.msg
│ ├── SemanticLoopClosure.msg
│ ├── SemanticMeasSyncOdom.msg
│ ├── StampedRvizMarkerArray.msg
│ ├── cubeMap.msg
│ ├── cylinderMap.msg
│ ├── interRobotTF.msg
│ ├── keyPoses.msg
│ ├── poseObjectEdges.msg
│ ├── syncPcOdom.msg
│ ├── vector4d.msg
│ └── vector7d.msg
│ ├── package.xml
│ └── srv
│ ├── EvaluateLoopClosure.srv
│ └── graphTansmission.srv
├── frontend
├── object_modeller
│ ├── CMakeLists.txt
│ ├── config
│ │ ├── cls_all.yaml
│ │ ├── cylinder_plane_modeller_params.yaml
│ │ ├── open_vocab_cls_all.yaml
│ │ └── rgb_segmentation_open_vocab_params.yaml
│ ├── include
│ │ └── object_modeller
│ │ │ └── cylinder_modeller.h
│ ├── launch
│ │ ├── rgb_segmentation_f250.launch
│ │ ├── rgb_segmentation_open_vocab.launch
│ │ └── sync_semantic_measurements.launch
│ ├── models
│ │ └── THIS_FOLDER_STORES_YOUR_MODELS.txt
│ ├── object_detector_utils
│ │ ├── detect.py
│ │ └── detect_open_vocab.py
│ ├── package.xml
│ ├── rviz
│ │ ├── default.rviz
│ │ └── object_modeller.rviz
│ ├── script
│ │ ├── cylinder_plane_modeller.py
│ │ ├── merge_synced_measurements.py
│ │ ├── play_bag_remap_scripts
│ │ │ └── play_bag_with_remapping.launch
│ │ ├── sync_centroid_odom.py
│ │ ├── sync_cuboid_odom.py
│ │ ├── sync_cylinder_odom.py
│ │ ├── tmux_benchmark.sh
│ │ ├── tmux_indoor_outdoor_merge.sh
│ │ ├── tmux_run_all_nodes.sh
│ │ └── tmux_run_all_nodes_jiuzhou.sh
│ └── src
│ │ └── cylinder_modeller.cpp
└── scan2shape
│ ├── rviz
│ ├── default.rviz
│ └── faster-lio-sloam.rviz
│ ├── scan2shape_launch
│ ├── CMakeLists.txt
│ ├── config
│ │ ├── infer_node_params.yaml
│ │ ├── process_cloud_node_indoor_cls_info.yaml
│ │ ├── process_cloud_node_indoor_open_vocab_cls_info.yaml
│ │ ├── process_cloud_node_indoor_open_vocab_params.yaml
│ │ ├── process_cloud_node_indoor_params.yaml
│ │ ├── process_cloud_node_outdoor_class_info.yaml
│ │ ├── process_cloud_node_outdoor_class_info_dcist_demo.yaml
│ │ ├── process_cloud_node_outdoor_kitti_class_info.yaml
│ │ ├── process_cloud_node_outdoor_kitti_params.yaml
│ │ ├── process_cloud_node_outdoor_params.yaml
│ │ ├── process_cloud_node_real_robot.yaml
│ │ ├── process_cloud_node_real_robot_full_mission.yaml
│ │ ├── process_cloud_node_real_robot_full_mission_loop_closure.yaml
│ │ └── process_cloud_node_sim.yaml
│ ├── launch
│ │ ├── closure_retrigger.launch
│ │ ├── drivers_for_faster_lio.launch
│ │ ├── infer_node.launch
│ │ ├── llol_robot_ns.launch
│ │ ├── ouster_decoder.launch
│ │ ├── play_bag_with_remapping.sh
│ │ ├── process_cloud_node_lidar_indoor_with_ns.launch
│ │ ├── process_cloud_node_outdoor_kitti_with_ns.launch
│ │ ├── process_cloud_node_outdoor_with_ns.launch
│ │ ├── process_cloud_node_rgbd_indoor_open_vocab_with_ns.launch
│ │ ├── process_cloud_node_rgbd_indoor_with_ns.launch
│ │ ├── real_robot_process_cloud_node.launch
│ │ ├── record_bag.launch
│ │ ├── record_bag_for_confidence_stats.launch
│ │ ├── record_bag_for_loop_closure.launch
│ │ ├── record_bag_for_running_process_node.launch
│ │ ├── run_flio_with_driver.launch
│ │ ├── run_lidar_driver_decoder.launch
│ │ ├── run_llol_with_driver.launch
│ │ ├── sim_perturb_odom.launch
│ │ ├── sim_process_cloud_node.launch
│ │ ├── sloam_process_cloud_node.launch
│ │ └── throttle_and_remap_kitti.launch
│ ├── package.xml
│ └── script
│ │ ├── backbone
│ │ ├── decoder
│ │ ├── infer_node.py
│ │ ├── process_cloud_node.py
│ │ ├── process_cloud_node_lidar_indoor.py
│ │ └── process_cloud_node_outdoor.py
│ └── script
│ ├── CRF.py
│ ├── assignment.py
│ ├── backbone
│ ├── basic_darknet.py
│ └── darknet.py
│ ├── cuboid_utils_indoor.py
│ ├── cuboid_utils_outdoor.py
│ ├── decoder
│ ├── basic_darknet.py
│ └── darknet.py
│ ├── infer_node.py
│ ├── laserscan.py
│ ├── load_model.py
│ ├── object_tracker.py
│ ├── object_tracker_utils.py
│ ├── process_cloud_node.py
│ ├── process_cloud_node_lidar_indoor.py
│ ├── process_cloud_node_outdoor.py
│ ├── segmentator.py
│ ├── sklearn_matching_utils.py
│ ├── tmux_no_docker.sh
│ ├── tmux_pipeline.sh
│ ├── tmux_script_multi_robot_sloam.sh
│ ├── utils.py
│ └── utils_outdoor.py
└── run_slide_slam_docker.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | */build/*
2 | *.pyc
3 | */__pycache__/*
4 | /scan2shape/script/explo_plots/*
5 | /scan2shape/script/explo_model*
6 | /scan2shape/script/explo_plots2/*
7 | /scan2shape/script/stats_data/*
8 | ouster_example
9 | /scan2shape/script/plots/*
10 | scan2shape/script/max_scale.pkl
11 | /*/*/build/
12 | *log*.txt
13 | *.bag
14 | *.pt
15 | *.npy
16 | .vscode
17 | *.png
18 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2024, KumarRobotics at University of Pennsylvania
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | 3. Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.10)
2 | project(multi_robot_utils_launch)
3 |
4 | set(CMAKE_CXX_STANDARD 17)
5 |
6 | find_package(catkin REQUIRED)
7 |
8 | catkin_package()
9 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/others/relay_topics_for_loop_closure.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
10 |
12 |
14 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/others/relay_topics_for_loop_closure_semantic_meas_and_odom.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
11 |
13 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/others/relay_topics_for_loop_closure_step2.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
10 |
12 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/others/relay_topics_multi_robot.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
9 |
11 |
13 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/others/relay_topics_multi_robot_2_robots.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
10 |
12 |
14 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/others/relay_topics_multi_robot_4_robots.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
12 |
14 |
16 |
17 |
19 |
21 |
23 |
25 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/play_bag_for_object_modeller.launch:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/play_bag_for_object_modeller_robot2.launch:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/play_bag_with_remapping.launch:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/publish_tf.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/record_bag_for_vis_pennovation_lidar_seg_pc.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/record_bag_multi_robot.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
29 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/record_bag_ns_robot.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/record_bag_vems_slam_ground_station.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
61 |
62 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/record_bag_vems_slam_robot.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | TOPICS="
4 | /tf
5 | /tf_static
6 | /${AGENT}/camera/depth/image_rect_raw
7 | /${AGENT}/camera/depth/camera_info
8 | /${AGENT}/camera/color/image_raw
9 | /${AGENT}/camera/infra1/image_rect_raw
10 | /${AGENT}/camera/infra2/image_rect_raw
11 | /${AGENT}/camera/imu
12 | /${AGENT}/camera/aligned_depth_to_color/image_raw
13 | /${AGENT}/camera/aligned_depth_to_color/camera_info
14 | /scarab40/odom_laser
15 | /scarab41/odom_laser
16 | /scarab42/odom_laser
17 | /scarab43/odom_laser
18 | /scarab44/odom_laser
19 | /scarab45/odom_laser
20 | /scarab46/odom_laser
21 | /robot0/semantic_meas_sync_odom
22 | /robot1/semantic_meas_sync_odom
23 | /robot2/semantic_meas_sync_odom
24 | /robot3/semantic_meas_sync_odom
25 | /robot4/semantic_meas_sync_odom
26 | "
27 |
28 | ALL_TOPICS=$TOPICS
29 |
30 | BAG_STAMP=$(date +%F-%H-%M-%S-%Z)
31 | CURR_TIMEZONE=$(date +%Z)
32 |
33 | BAG_PREFIX=VEMS-SLAM-${AGENT}-${CURR_TIMEZONE}
34 |
35 | eval rosbag record -b512 $ALL_TOPICS -o $BAG_PREFIX
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/launch/relay_topics_for_quad2_quad1.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
8 |
10 |
12 |
14 |
--------------------------------------------------------------------------------
/backend/multi_robot_utils_launch/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | multi_robot_utils_launch
4 | 0.0.0
5 | The multi_robot_utils_launch package
6 |
7 | Xu Liu
8 | Jiuzhou Lei
9 | Ankit Prabhu
10 | Yuezhan Tao
11 |
12 | Xu Liu
13 | Jiuzhou Lei
14 | Ankit Prabhu
15 | Yuezhan Tao
16 |
17 | Penn Software License
18 |
19 | catkin
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | *.pyc
3 | *.m~
4 | .vscode
5 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 MIT Aerospace Controls Lab
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/README.md:
--------------------------------------------------------------------------------
1 | ## Note
2 | The repo is forked from CLIPPER and modified to extract triangulation descriptors from point landmarks and robustly estimate point correspondences betweentwo set of points. The code is put inside the slide_slam for the convenience of debugging and implementation.
3 |
4 | Original CLIPPER Git Repo: https://github.com/mit-acl/clipper
5 |
6 | CLIPPER citation
7 | ```
8 | @inproceedings{lusk2021clipper,
9 | title={{CLIPPER}: A graph-theoretic framework for robust data association},
10 | author={Lusk, Parker C and Fathian, Kaveh and How, Jonathan P},
11 | booktitle={2021 IEEE International Conference on Robotics and Automation (ICRA)},
12 | pages={13828--13834},
13 | year={2021},
14 | organization={IEEE}
15 | }
16 | ```
17 |
18 | #### Dependencies for clipper and triangulation
19 | Eigen3, MKL, Boost, Opencv, qhull, pmc, scs
20 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/benchmarks/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | include(FetchContent)
2 | FetchContent_Declare(tinyply
3 | GIT_REPOSITORY https://github.com/ddiakopoulos/tinyply
4 | GIT_TAG 2.3.4)
5 | # set(BUILD_TESTS OFF)
6 | # FetchContent_MakeAvailable(tinyply)
7 |
8 | FetchContent_GetProperties(tinyply)
9 | if(NOT tinyply_POPULATED)
10 | FetchContent_Populate(tinyply)
11 |
12 | set(BUILD_TESTS OFF)
13 | add_subdirectory(${tinyply_SOURCE_DIR} ${tinyply_BINARY_DIR})
14 |
15 | # fix for tinyply because it does not use target_include_directories
16 | target_include_directories(tinyply PUBLIC
17 | $)
18 | endif()
19 |
20 | include(FetchContent)
21 | FetchContent_Declare(nanoflann
22 | GIT_REPOSITORY https://github.com/jlblancoc/nanoflann
23 | GIT_TAG v1.4.2)
24 | set(NANOFLANN_BUILD_EXAMPLES OFF)
25 | set(NANOFLANN_BUILD_TESTS OFF)
26 | FetchContent_MakeAvailable(nanoflann)
27 |
28 | include(FetchContent)
29 | FetchContent_Declare(libfort
30 | GIT_REPOSITORY https://github.com/seleznevae/libfort
31 | GIT_TAG v0.4.2)
32 | set(FORT_ENABLE_TESTING OFF)
33 | FetchContent_MakeAvailable(libfort)
34 |
35 | include(FetchContent)
36 | FetchContent_Declare(indicators
37 | GIT_REPOSITORY https://github.com/p-ranav/indicators
38 | GIT_TAG v2.2)
39 | set(INDICATORS_BUILD_TESTS OFF)
40 | set(INDICATORS_SAMPLES OFF)
41 | set(INDICATORS_DEMO OFF)
42 | FetchContent_MakeAvailable(indicators)
43 |
44 |
45 | add_executable(benchmark)
46 | target_sources(benchmark PRIVATE main.cpp bm_utils.cpp)
47 | target_include_directories(benchmark PRIVATE $)
48 | target_link_libraries(benchmark clipper Eigen3::Eigen tinyply nanoflann fort indicators)
49 |
50 | # trying to make life easier when running ./benchmarks/benchmark
51 | add_custom_command(TARGET benchmark POST_BUILD
52 | COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/examples/data/*.ply
53 | ${CMAKE_BINARY_DIR}/)
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/bindings/matlab/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | find_package(Matlab COMPONENTS MX_LIBRARY)
2 |
3 | if(Matlab_FOUND)
4 | message(STATUS "MATLAB root directory found: ${Matlab_ROOT_DIR}")
5 |
6 | matlab_add_mex(NAME finddensecluster_mex SRC finddensecluster_mex.cpp LINK_TO Eigen3::Eigen clipper)
7 | set_target_properties(finddensecluster_mex PROPERTIES COMPILE_FLAGS "-fvisibility=default")
8 | set_target_properties(finddensecluster_mex PROPERTIES OUTPUT_NAME clipper_finddensecluster)
9 |
10 | matlab_add_mex(NAME euclideandistance_mex SRC euclideandistance_mex.cpp LINK_TO Eigen3::Eigen clipper)
11 | set_target_properties(euclideandistance_mex PROPERTIES COMPILE_FLAGS "-fvisibility=default")
12 | set_target_properties(euclideandistance_mex PROPERTIES OUTPUT_NAME clipper_euclideandistance)
13 |
14 | matlab_add_mex(NAME pointnormaldistance_mex SRC pointnormaldistance_mex.cpp LINK_TO Eigen3::Eigen clipper)
15 | set_target_properties(pointnormaldistance_mex PROPERTIES COMPILE_FLAGS "-fvisibility=default")
16 | set_target_properties(pointnormaldistance_mex PROPERTIES OUTPUT_NAME clipper_pointnormaldistance)
17 | else()
18 | message(WARNING "MATLAB root directory not found. Will not build MATLAB bindings.")
19 | set(BUILD_MATLAB_BINDINGS OFF)
20 | endif()
21 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/bindings/python/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | set(PYPKG_DIR "${CMAKE_CURRENT_BINARY_DIR}/clipperpy")
2 |
3 | pybind11_add_module(py_clipper py_clipper.cpp)
4 | target_link_libraries(py_clipper PUBLIC clipper)
5 | set_target_properties(py_clipper PROPERTIES OUTPUT_NAME "clipperpy")
6 | set_target_properties(py_clipper PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${PYPKG_DIR}")
7 |
8 | # copy setup.py file binary dir for install with: pip install .
9 | configure_file(setup.py.in ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
10 |
11 | # Create the Python package -- Note that "." is used to conform to PEP 328
12 | file(WRITE "${PYPKG_DIR}/__init__.py"
13 | "from .clipperpy import *\n"
14 | "from .clipperpy import __version__\n"
15 | "from .clipperpy import __doc__")
16 |
17 | set(DIST "none")
18 | if(UNIX AND NOT APPLE)
19 | execute_process(COMMAND bash -c "lsb_release -cs" OUTPUT_VARIABLE UBUNTU_DIST)
20 | string(STRIP "${UBUNTU_DIST}" UBUNTU_DIST)
21 | set(DIST "${UBUNTU_DIST}")
22 | elseif(APPLE)
23 | # TODO: not very specific...
24 | set(DIST "macos")
25 | elseif(WIN32)
26 | # TODO: not very specific...
27 | set(DIST "win10")
28 | endif()
29 |
30 | set(PKGSTR clipperpy-py3-${DIST}-${PROJECT_VERSION})
31 | add_custom_target(pypkg
32 | DEPENDS py_clipper
33 | COMMAND ${CMAKE_COMMAND} -E make_directory ${PKGSTR}
34 | COMMAND ${CMAKE_COMMAND} -E copy setup.py ${PKGSTR}/
35 | COMMAND ${CMAKE_COMMAND} -E copy_directory ${PYPKG_DIR} ${PKGSTR}/clipperpy
36 | COMMAND ${CMAKE_COMMAND} -E tar zcvf ${PKGSTR}.tar.gz ${PKGSTR}
37 | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
38 |
39 | add_custom_target(pip-install
40 | DEPENDS pypkg
41 | COMMAND ${PYTHON_EXECUTABLE} -m pip install .
42 | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${PKGSTR}
43 | )
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/bindings/python/setup.py.in:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 |
3 | setup(
4 | name='clipperpy',
5 | version='${PROJECT_VERSION}',
6 | author='Parker Lusk',
7 | author_email='plusk@mit.edu',
8 | description='Robust data association framework',
9 | package_dir={'': '${CMAKE_CURRENT_BINARY_DIR}'},
10 | packages=['clipperpy'],
11 | package_data={'': ['*.so']}
12 | )
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/bindings/python/trampolines.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file trampolines.h
3 | * @brief Trampolines to help overriding C++ in Python
4 | * @author Parker Lusk
5 | * @date 16 May 2021
6 | */
7 |
8 | #pragma once
9 |
10 | #include
11 |
12 | #include "clipper/invariants/abstract.h"
13 |
14 | template
15 | class PyInvariant : public InvariantBase {
16 | public:
17 | using InvariantBase::InvariantBase; // Inherit constructors
18 | };
19 |
20 | template
21 | class PyPairwiseInvariant : public PyInvariant {
22 | public:
23 | using PyInvariant::PyInvariant; // Inherit constructors
24 | using Datum = clipper::invariants::Datum; // for convenience
25 | // trampoline for virtual function
26 | double operator()(const Datum& ai, const Datum& aj, const Datum& bi, const Datum& bj) override {
27 | pybind11::gil_scoped_acquire acquire; // Acquire GIL before calling Python code
28 | PYBIND11_OVERRIDE_PURE_NAME(double, PairwiseInvariantBase, "__call__", operator(), ai, aj, bi, bj);
29 | }
30 | };
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/cmake/clipper-config.cmake.in:
--------------------------------------------------------------------------------
1 | # - Config file for the clipper package
2 | # It defines the following variables
3 | # CLIPPER_LIBRARIES - libraries to link against
4 |
5 | # Compute paths
6 | get_filename_component(ADAPTNOTCH_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
7 |
8 | # Our library dependencies (contains definitions for IMPORTED targets)
9 | if(NOT TARGET clipper)
10 | include("${ADAPTNOTCH_CMAKE_DIR}/clipper-targets.cmake")
11 | endif()
12 |
13 | # These are IMPORTED targets created by clipper-targets.cmake
14 | set(CLIPPER_LIBRARIES clipper)
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.built_by:
--------------------------------------------------------------------------------
1 | catkin build
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/.catkin:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/build/catkin_tools_prebuild
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/.rosinstall:
--------------------------------------------------------------------------------
1 | - setup-file:
2 | local-name: /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/setup.sh
3 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/cmake.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KumarRobotics/SLIDE_SLAM/9d510f075273605bb1c36b4321d5185e25ff4a39/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/cmake.lock
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/env.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | # generated from catkin/cmake/templates/env.sh.in
3 |
4 | if [ $# -eq 0 ] ; then
5 | /bin/echo "Usage: env.sh COMMANDS"
6 | /bin/echo "Calling env.sh without arguments is not supported anymore. Instead spawn a subshell and source a setup file manually."
7 | exit 1
8 | fi
9 |
10 | # ensure to not use different shell type which was set before
11 | CATKIN_SHELL=sh
12 |
13 | # source setup.sh from same directory as this file
14 | _CATKIN_SETUP_DIR=$(cd "`dirname "$0"`" > /dev/null && pwd)
15 | . "$_CATKIN_SETUP_DIR/setup.sh"
16 | exec "$@"
17 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/lib/pkgconfig/catkin_tools_prebuild.pc:
--------------------------------------------------------------------------------
1 | prefix=/home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild
2 |
3 | Name: catkin_tools_prebuild
4 | Description: Description of catkin_tools_prebuild
5 | Version: 0.0.0
6 | Cflags:
7 | Libs: -L${prefix}/lib
8 | Requires:
9 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/local_setup.bash:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # generated from catkin/cmake/templates/local_setup.bash.in
3 |
4 | CATKIN_SHELL=bash
5 |
6 | # source setup.sh from same directory as this file
7 | _CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)
8 | . "$_CATKIN_SETUP_DIR/setup.sh" --extend --local
9 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/local_setup.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | # generated from catkin/cmake/template/local_setup.sh.in
3 |
4 | # since this file is sourced either use the provided _CATKIN_SETUP_DIR
5 | # or fall back to the destination set at configure time
6 | : ${_CATKIN_SETUP_DIR:=/home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild}
7 | CATKIN_SETUP_UTIL_ARGS="--extend --local"
8 | . "$_CATKIN_SETUP_DIR/setup.sh"
9 | unset CATKIN_SETUP_UTIL_ARGS
10 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/local_setup.zsh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env zsh
2 | # generated from catkin/cmake/templates/local_setup.zsh.in
3 |
4 | CATKIN_SHELL=zsh
5 |
6 | # source setup.sh from same directory as this file
7 | _CATKIN_SETUP_DIR=$(builtin cd -q "`dirname "$0"`" > /dev/null && pwd)
8 | emulate -R zsh -c 'source "$_CATKIN_SETUP_DIR/setup.sh" --extend --local'
9 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/setup.bash:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # generated from catkin/cmake/templates/setup.bash.in
3 |
4 | CATKIN_SHELL=bash
5 |
6 | # source setup.sh from same directory as this file
7 | _CATKIN_SETUP_DIR=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)
8 | . "$_CATKIN_SETUP_DIR/setup.sh"
9 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/setup.zsh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env zsh
2 | # generated from catkin/cmake/templates/setup.zsh.in
3 |
4 | CATKIN_SHELL=zsh
5 |
6 | # source setup.sh from same directory as this file
7 | _CATKIN_SETUP_DIR=$(builtin cd -q "`dirname "$0"`" > /dev/null && pwd)
8 | emulate -R zsh -c 'source "$_CATKIN_SETUP_DIR/setup.sh"'
9 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/.private/catkin_tools_prebuild/share/catkin_tools_prebuild/cmake/catkin_tools_prebuildConfig-version.cmake:
--------------------------------------------------------------------------------
1 | # generated from catkin/cmake/template/pkgConfig-version.cmake.in
2 | set(PACKAGE_VERSION "0.0.0")
3 |
4 | set(PACKAGE_VERSION_EXACT False)
5 | set(PACKAGE_VERSION_COMPATIBLE False)
6 |
7 | if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}")
8 | set(PACKAGE_VERSION_EXACT True)
9 | set(PACKAGE_VERSION_COMPATIBLE True)
10 | endif()
11 |
12 | if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}")
13 | set(PACKAGE_VERSION_COMPATIBLE True)
14 | endif()
15 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/_setup_util.py:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/_setup_util.py
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/cmake.lock:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/cmake.lock
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/env.sh:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/env.sh
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/lib/pkgconfig/catkin_tools_prebuild.pc:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/lib/pkgconfig/catkin_tools_prebuild.pc
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/local_setup.bash:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/local_setup.bash
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/local_setup.sh:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/local_setup.sh
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/local_setup.zsh:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/local_setup.zsh
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/setup.bash:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/setup.bash
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/setup.sh:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/setup.sh
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/setup.zsh:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/setup.zsh
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/share/catkin_tools_prebuild/cmake/catkin_tools_prebuildConfig-version.cmake:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/share/catkin_tools_prebuild/cmake/catkin_tools_prebuildConfig-version.cmake
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/devel/share/catkin_tools_prebuild/cmake/catkin_tools_prebuildConfig.cmake:
--------------------------------------------------------------------------------
1 | /home/jiuzhou/clipper_semantic_object/devel/.private/catkin_tools_prebuild/share/catkin_tools_prebuild/cmake/catkin_tools_prebuildConfig.cmake
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/examples/data/bun10k.ply:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KumarRobotics/SLIDE_SLAM/9d510f075273605bb1c36b4321d5185e25ff4a39/backend/sloam/clipper_semantic_object/examples/data/bun10k.ply
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/examples/data/robot0Map_indoor.txt:
--------------------------------------------------------------------------------
1 | 3 6.41903 -0.346591 0.605761
2 | 1 6.41602 2.5084 0.140431
3 | 1 7.20971 1.31182 0.000203529
4 | 1 6.77072 -3.40847 0.00187095
5 | 1 4.69451 -2.83212 0.0519033
6 | 1 2.83934 -1.87861 -0.0608559
7 | 2 5.18586 -0.662365 -0.0555485
8 | 1 3.97671 -4.72411 0.0356192
9 | 3 4.63306 -2.91857 0.964001
10 | 1 5.29141 -1.08711 -0.0355758
11 | 1 4.54943 0.650984 -0.0313159
12 | 1 2.33172 1.20601 -0.0237492
13 | 3 -3.92076 -3.48758 1.23033
14 | 1 1.53793 -4.55869 -0.0130436
15 | 3 13.8174 -5.89769 0.103694
16 | 3 11.3295 -2.64406 0.94652
17 | 1 14.0145 -2.97051 -0.0308608
18 | 1 11.7614 -13.6643 0.0114579
19 | 3 9.82803 -17.0212 1.31943
20 | 3 11.4281 -14.1887 0.35213
21 | 1 11.2235 -11.4765 0.0362473
22 | 1 6.91769 -16.5407 -0.184619
23 | 2 11.479 -12.5559 -0.0325268
24 | 1 5.85361 -11.929 -0.0556598
25 | 1 9.73723 -11.8781 -0.0566215
26 | 1 2.39288 -10.9363 0.00777467
27 | 3 5.8612 -16.9482 1.25288
28 | 1 0.570472 -7.80347 -0.0374796
29 | 1 -2.20189 -19.0989 0.378749
30 | 1 -2.04522 -17.3162 0.326958
31 | 3 -1.74581 -17.5877 0.370282
32 | 3 -1.8644 -19.5628 0.301241
33 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/examples/data/robot1Map_indoor.txt:
--------------------------------------------------------------------------------
1 | 1 4.36256 -2.86669 -0.0363254
2 | 1 3.66272 -4.21781 -0.0149842
3 | 1 5.09733 -0.964295 -0.0378865
4 | 2 3.34634 -1.33718 -0.197003
5 | 1 2.08358 5.4637 -0.0644543
6 | 1 6.73703 3.42892 -0.0397598
7 | 1 3.35749 7.61567 0.00108001
8 | 3 -0.147777 5.42552 1.3611
9 | 1 1.63495 -1.41596 0.0188353
10 | 1 2.48336 0.0664812 -0.0180247
11 | 3 3.63549 -1.67245 0.3306
12 | 1 0.611101 -4.85208 0.0226985
13 | 2 2.59122 -3.16468 -0.0720823
14 | 1 2.51721 -3.41103 -0.0158438
15 | 1 0.436468 -6.60099 0.00187924
16 | 1 -2.96265 -0.822504 -0.00824841
17 | 3 0.582904 -2.95753 0.925894
18 | 2 0.771968 -6.39815 -0.16327
19 | 1 0.585116 -8.27963 0.0521746
20 | 1 -4.94987 -12.1257 -0.0864293
21 | 1 -9.77966 -10.0189 -0.0113719
22 | 1 -8.17321 -9.31268 -0.00964654
23 | 2 -8.73956 -9.82727 -0.0358115
24 | 3 -13.004 -8.57177 1.17484
25 | 1 -12.601 -6.25474 -0.020846
26 | 1 0.805256 -12.5098 -0.0391472
27 | 1 -0.834472 0.350466 -0.0424411
28 | 1 1.02748 5.47296 0.0161506
29 | 1 2.47358 7.50933 -0.14224
30 | 1 0.674991 8.1755 -0.081143
31 | 1 2.54236 11.9787 -0.0655328
32 | 1 2.42949 10.0787 -0.00465212
33 | 3 -0.303691 8.71331 1.38179
34 | 1 0.906162 10.0148 -0.0137986
35 | 1 -4.24122 0.0234059 0.000502329
36 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/examples/data/robot2Map_indoor.txt:
--------------------------------------------------------------------------------
1 | 1 4.87694 -3.50548 0.00581943
2 | 1 6.52997 -1.44357 -0.0146996
3 | 2 5.69076 -2.22827 -0.0969788
4 | 1 2.95647 -2.94865 -0.0257299
5 | 3 4.12508 -1.94785 0.272436
6 | 1 3.31044 -0.869268 -0.0148898
7 | 3 -2.195 -5.58573 1.55165
8 | 1 -3.6781 -1.15421 -0.104992
9 | 1 -1.85847 -2.91896 -0.0407093
10 | 1 -1.18035 0.713851 -0.0308894
11 | 3 -6.29677 -5.32715 1.19462
12 | 1 -4.20375 -3.9642 -0.0935602
13 | 1 2.2139 -9.49344 -0.0121432
14 | 1 3.17959 -8.02131 0.0205073
15 | 1 12.303 -16.1166 0.00626077
16 | 3 7.64674 -18.0727 1.14465
17 | 3 10.7894 -19.0394 1.22846
18 | 1 12.9825 -27.0931 0.154325
19 | 1 11.3148 -24.0579 0.073585
20 | 1 4.86721 -23.8552 0.244067
21 | 1 16.2788 -21.5127 0.21982
22 | 1 15.5252 -5.34611 0.0199957
23 | 1 8.43794 -4.85963 0.0423192
24 | 1 4.86404 -0.386962 -0.0491706
25 | 1 0.48252 1.28017 -0.0118155
26 | 3 -1.39512 -4.43837 1.24793
27 | 1 3.36659 -5.97624 0.0912229
28 | 3 -4.56683 -3.71748 1.09683
29 | 1 -8.05273 -1.05183 -0.090258
30 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/dsd.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file dsd.h
3 | * @brief Dense subgraph discovery using Goldberg's algorithm
4 | * @brief See https://github.com/MengLiuPurdue/find_densest_subgraph
5 | * @author Parker Lusk
6 | * @date 13 June 2023
7 | */
8 |
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include
14 | #include
15 | #include
16 |
17 | #include
18 | #include
19 |
20 | #include "clipper/types.h"
21 |
22 | namespace clipper {
23 | namespace dsd {
24 |
25 | /**
26 | * @brief Find the densest subgraph in an unweighted edge-weighted graph
27 | * using Goldberg's flow-based polynomial-time algorithm. This
28 | * solves the problem exactly.
29 | *
30 | * The optimization formulation is as follows
31 | *
32 | * max u' * A * u / (u' * u)
33 | * s.t. u \in {0, 1}^n
34 | *
35 | * In the graph networks community, the objective is frequently
36 | * written as f(S) = w(S) / |S|, where S is the subgraph, w(S)
37 | * is the sum of the edges in the subgraph S, and |S| is the
38 | * number of vertices in the subgraph. For example, see second
39 | * paragraph of https://arxiv.org/pdf/1809.04802.pdf.
40 | *
41 | * @param[in] A Weighted adjacency matrix of graph. Symmetric upper tri.
42 | * @param[in] S (Optional) restrict search to subgraph of A
43 | *
44 | * @return Nodes of densest subgraph
45 | */
46 | std::vector solve(const SpAffinity& A, const std::vector& S = {});
47 |
48 | /**
49 | * @brief Dense specialization of dsd::solve
50 | *
51 | * @param[in] A Dense weighted adjacency matrix of graph
52 | * @param[in] S (Optional) restrict search to subgraph of A
53 | *
54 | * @return Nodes of densest subgraph
55 | */
56 | std::vector solve(const Eigen::MatrixXd& A, const std::vector& S = {});
57 |
58 | } // ns dsd
59 | } // ns clipper
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/invariants/abstract.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file abstract.h
3 | * @brief Abstract base class for geometric invariants
4 | * @author Parker Lusk
5 | * @date 15 May 2021
6 | */
7 |
8 | #pragma once
9 |
10 | #include
11 | #include
12 | #include
13 |
14 | #include
15 |
16 | namespace clipper {
17 | namespace invariants {
18 |
19 | using Data = Eigen::MatrixXd;
20 | using Datum = Eigen::VectorXd;
21 |
22 | /**
23 | * @brief Abstract base clase for all invariant types.
24 | * An invariant is a function which yields the same output for
25 | * the same subset of elements in a dataset under transformation.
26 | *
27 | * For example, in R^n under SE(3), the most natural invariant is
28 | * the norm since ||q|| = ||T p||. So for two points in a dataset,
29 | * if ||qi - qj|| = ||Tpi - Tpj|| then there is a high degreee of
30 | * consistency between (qi, pi) and (qj, pj).
31 | *
32 | * The Invariant datatype implements an invariant for a specific
33 | * domain and expected transformation. Further, this datatype is
34 | * used to score consistency between data using the implemented
35 | * invariant.
36 | */
37 | class Invariant {
38 | public:
39 | virtual ~Invariant() = default;
40 | };
41 |
42 | using InvariantPtr = std::shared_ptr;
43 |
44 | /**
45 | * @brief A pairwise invariant uses pairs of points to score association
46 | * consistency. This class implements a real-valued invariant
47 | * scoring function that takes the form
48 | *
49 | * f : A x A x A x A -> R
50 | *
51 | * where A represents the specific domain of interest (e.g., R^n)
52 | * Note that f is not the invariant itself, but the invariant
53 | * _scoring_ function, which uses the invariant to assses
54 | * consistency.
55 | */
56 | class PairwiseInvariant : public Invariant
57 | {
58 | public:
59 | virtual ~PairwiseInvariant() = default;
60 |
61 | /**
62 | * @brief Functor for pairwise invariant scoring function
63 | *
64 | * @param[in] ai Element i from dataset 1
65 | * @param[in] aj Element j from dataset 1
66 | * @param[in] bi Element i from dataset 2
67 | * @param[in] bj Element j from dataset 2
68 | *
69 | * @return The consistency score for the association of (ai,bi) and (aj,bj)
70 | */
71 | virtual double operator()(const Datum& ai, const Datum& aj, const Datum& bi, const Datum& bj) = 0;
72 | };
73 |
74 | using PairwiseInvariantPtr = std::shared_ptr;
75 |
76 | } // ns invariants
77 | } // ns clipper
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/invariants/builtins.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file builtins.h
3 | * @brief Common geometric invariants for CLIPPER
4 | * @author Parker Lusk
5 | * @date 3 October 2020
6 | */
7 |
8 | #pragma once
9 |
10 | #include "clipper/invariants/euclidean_distance.h"
11 | #include "clipper/invariants/pointnormal_distance.h"
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/invariants/euclidean_distance.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file euclidean_distance.h
3 | * @brief Pairwise Euclidean distance geometric invariant
4 | * @author Parker Lusk
5 | * @date 15 May 2021
6 | */
7 |
8 | #pragma once
9 |
10 | #include "clipper/invariants/abstract.h"
11 |
12 | namespace clipper {
13 | namespace invariants {
14 |
15 | /**
16 | * @brief Specialization of PairwiseInvariant to Euclidean distance in
17 | * the real numbers using the 2-norm as the invariant.
18 | */
19 | class EuclideanDistance : public PairwiseInvariant
20 | {
21 | public:
22 | struct Params
23 | {
24 | double sigma = 0.01; ///< spread / "variance" of exponential kernel
25 | double epsilon = 0.06; ///< bound on consistency score, determines if inlier/outlier
26 | double mindist = 0; ///< minimum allowable distance between inlier points in the same dataset
27 | };
28 | public:
29 | EuclideanDistance(const Params& params)
30 | : params_(params) {}
31 | ~EuclideanDistance() = default;
32 |
33 | /**
34 | * @brief Functor for pairwise invariant scoring function
35 | *
36 | * @param[in] ai Element i from dataset 1
37 | * @param[in] aj Element j from dataset 1
38 | * @param[in] bi Element i from dataset 2
39 | * @param[in] bj Element j from dataset 2
40 | *
41 | * @return The consistency score for the association of (ai,bi) and (aj,bj)
42 | */
43 | double operator()(const Datum& ai, const Datum& aj, const Datum& bi, const Datum& bj) override;
44 |
45 | private:
46 | Params params_;
47 | };
48 |
49 | using EuclideanDistancePtr = std::shared_ptr;
50 |
51 | } // ns invariants
52 | } // ns clipper
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/invariants/pointnormal_distance.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file pointnormal_distance.h
3 | * @brief Pairwise geometric invariant between point-normals (e.g., planes)
4 | * @author Parker Lusk
5 | * @date 15 May 2021
6 | */
7 |
8 | #pragma once
9 |
10 | #include "clipper/invariants/abstract.h"
11 |
12 | namespace clipper {
13 | namespace invariants {
14 |
15 | /**
16 | * @brief Specialization of PairwiseInvariant to be applied to sets
17 | * of planes, patches, or equivalently, points with normals.
18 | *
19 | * Data: 6xn matrix
20 | * Datum: 6x1 vector --> top 3x1 is point, bottom 3x1 is normal.
21 | */
22 | class PointNormalDistance : public PairwiseInvariant
23 | {
24 | public:
25 | struct Params
26 | {
27 | double sigp = 0.5; ///< point - spread of exp kernel
28 | double epsp = 0.5; ///< point - bound on consistency score
29 | double sign = 0.10; ///< normal - spread of exp kernel
30 | double epsn = 0.35; ///< normal - bound on consistency score
31 | };
32 | public:
33 | PointNormalDistance(const Params& params)
34 | : params_(params) {}
35 | ~PointNormalDistance() = default;
36 |
37 | /**
38 | * @brief Functor for pairwise invariant scoring function
39 | *
40 | * @param[in] ai Element i from dataset 1
41 | * @param[in] aj Element j from dataset 1
42 | * @param[in] bi Element i from dataset 2
43 | * @param[in] bj Element j from dataset 2
44 | *
45 | * @return The consistency score for the association of (ai,bi) and (aj,bj)
46 | */
47 | double operator()(const Datum& ai, const Datum& aj, const Datum& bi, const Datum& bj) override;
48 |
49 | private:
50 | Params params_;
51 | };
52 |
53 | using PointNormalDistancePtr = std::shared_ptr;
54 |
55 | } // ns invariants
56 | } // ns clipper
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/maxclique.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file maxclique.h
3 | * @brief Library for solving maximum clique
4 | * @author Parker Lusk
5 | * @date 20 December 2021
6 | */
7 |
8 | #include
9 |
10 | #include
11 |
12 | namespace clipper {
13 | namespace maxclique {
14 |
15 | enum class Method { EXACT, HEU, KCORE };
16 |
17 | struct Params
18 | {
19 | Method method = Method::EXACT; ///< EXACT is ROBIN*, KCORE is ROBIN
20 | size_t threads = 24; ///< num threads for OpenMP to use
21 | int time_limit = 3600; ///< [s], maximum time allotted for MCP solving
22 | bool verbose = false;
23 | };
24 |
25 | std::vector solve(const Eigen::MatrixXd& A, const Params& params = {});
26 |
27 | } // ns maxclique
28 | } // ns clipper
29 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/sdp.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file sdp.h
3 | * @brief Problem parser for CLIPPER SDR optimization
4 | * @author Parker Lusk
5 | * @date 23 Nov 2021
6 | */
7 |
8 | #include
9 |
10 | #include
11 |
12 | namespace clipper {
13 | namespace sdp {
14 |
15 | struct Solution
16 | {
17 | Eigen::MatrixXd X;
18 | Eigen::VectorXd lambdas;
19 | Eigen::VectorXd evec1;
20 |
21 | double thr; ///< threshold for selecting nodes
22 | std::vector nodes; ///< indices of selected nodes
23 |
24 | int iters; ///< number of iterations
25 | float pobj; ///< primal objective value
26 | float dobj; ///< dual objective value
27 |
28 | double t; ///< total tile: parsing, solving, extraction
29 | double t_parse; ///< time spent setting up the problem data
30 | double t_scs; ///< total SCS time
31 | double t_scs_setup; ///< SCS setup time
32 | double t_scs_solve; ///< SCS solve time
33 | double t_scs_linsys; ///< SCS total time spent in the linear system solver
34 | double t_scs_cone; ///< total time spent on cone projections
35 | double t_scs_accel; ///< total time spent in the accel routine
36 | double t_extract; ///< time spent extracting which nodes to select
37 | };
38 |
39 | struct Params
40 | {
41 | bool verbose = false;
42 |
43 | int max_iters = 2000;
44 | int acceleration_interval = 10;
45 | int acceleration_lookback = 10;
46 |
47 | float eps_abs = 1e-3;
48 | float eps_rel = 1e-3;
49 | float eps_infeas = 1e-7;
50 |
51 | float time_limit_secs = 0;
52 | };
53 |
54 | Solution solve(const Eigen::MatrixXd& M, const Eigen::MatrixXd& C,
55 | const Params& params = Params{});
56 |
57 | } // ns sdp
58 | } // ns clipper
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/clipper/types.h:
--------------------------------------------------------------------------------
1 | /**
2 | * @file types.h
3 | * @brief Types used in CLIPPER framework
4 | * @author Parker Lusk
5 | * @date 19 March 2022
6 | */
7 |
8 | #pragma once
9 |
10 | #include
11 | #include
12 |
13 | namespace clipper {
14 |
15 | using SpMat = Eigen::SparseMatrix;
16 | using SpTriplet = Eigen::Triplet;
17 |
18 | using Association = Eigen::Matrix;
19 | using Affinity = Eigen::MatrixXd;
20 | using Constraint = Eigen::MatrixXd;
21 |
22 | using SpAffinity = SpMat;
23 | using SpConstraint = SpMat;
24 |
25 | } // ns clipper
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/semantic_clipper.h:
--------------------------------------------------------------------------------
1 | #ifndef SEMANTIC_CLIPPER_H
2 | #define SEMANTIC_CLIPPER_H
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include
13 | #include "clipper/clipper.h"
14 | #include "clipper/utils.h"
15 | #include "triangulation/observation.hpp"
16 | #include
17 |
18 | // namespace Eigen {
19 | // typedef Matrix Vector7d;
20 | // }
21 |
22 | namespace semantic_clipper{
23 |
24 | Eigen::Matrix2Xd read_2d_points(std::string txt_file);
25 |
26 | Eigen::Matrix2Xd transform_2d_points(Eigen::Matrix2Xd points, Eigen::Matrix2d rotation, Eigen::Vector2d translation);
27 |
28 | std::vector argsort(const std::vector& v);
29 |
30 | void compute_triangle_diff(const DelaunayTriangulation::Polygon& triangle_model, const DelaunayTriangulation::Polygon& triangle_data, std::vector& diffs, std::vector>& matched_points_model, std::vector>& matched_points_data, double threshold);
31 |
32 | void match_triangles(const std::vector& triangles_model, const std::vector& triangles_data, std::vector& diffs, std::vector>& matched_points_model, std::vector>& matched_points_data, double threshold);
33 |
34 | void clipper_data_association(const Eigen::Matrix2Xd& matched_points_model, const Eigen::Matrix2Xd& matched_points_data, double threshold, clipper::Association& A);
35 |
36 | void clipper_semantic_object(const Eigen::Matrix2Xd& model, const Eigen::Matrix2Xd& data, double threshold, clipper::Association& A);
37 |
38 | bool run_semantic_clipper(const std::vector>& reference_map, const std::vector>& query_map, Eigen::Matrix4d& tfFromQuery2Ref, double sigma, double epsilon, int min_num_pairs, double matching_threshold);
39 | }
40 |
41 | #endif // SEMANTIC_CLIPPER_H
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/triangulation/descriptor.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 |
5 | namespace descriptor{
6 | // Samples points around the perimeter of a polygon and returns a new set of points.
7 | // The size of the returned PointVector depends on step.
8 | // Smaller steps means more points will be sampled,
9 | // e.g. step=0.05 means a point every 5% of the perimeter, resulting in 20 points.
10 | PointVector samplePoints(PointVector points, double step);
11 | // Uses sampled points to compute a centroid distance descriptor
12 | std::vector centroidDist(PointVector points, PointVector sampledPoints);
13 | // Uses OpenCV to compute the magnitude of the DFT of the centroid descriptor
14 | std::vector invariantFourier(std::vector centroidDesc);
15 | // Runs the entire descriptor computation pipeline
16 | std::vector compute(PointVector points);
17 | }
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/triangulation/distance.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | using vecPtT = std::vector;
12 | using EdgeT = std::pair;
13 | using PointVector = std::vector;
14 |
15 | inline float pow_2(const float &x) { return x * x; }
16 |
17 | inline double euclideanDistance(std::vector A, std::vector B)
18 | {
19 | double d = 0;
20 | for (size_t i = 0; i < A.size(); ++i)
21 | {
22 | d += pow_2(A[i] - B[i]);
23 | }
24 | return std::sqrt(d);
25 | }
26 |
27 | inline double euclideanDistance2D(std::vector A, std::vector B)
28 | {
29 | double d = 0;
30 | for (size_t i = 0; i < 2; ++i)
31 | {
32 | d += pow_2(A[i] - B[i]);
33 | }
34 | return std::sqrt(d);
35 | }
36 |
37 | inline size_t cantorPairing(size_t a, size_t b)
38 | {
39 | // a is always the smallest number
40 | size_t aux = a;
41 | if(b < a)
42 | {
43 | a = b;
44 | b = aux;
45 | }
46 | return (a + b) * (a + b + 1) / 2 + a;
47 | }
48 |
--------------------------------------------------------------------------------
/backend/sloam/clipper_semantic_object/include/triangulation/observation.hpp:
--------------------------------------------------------------------------------
1 | // the code is adapted from https://github.com/gnardari/urquhart
2 | #pragma once
3 |
4 | #include
5 | #include
6 | #include