Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit. On branch master Your branch is ahead of 'origin/master' by 31 commits. (use "git push" to publish your local commits) Changes to be committed: new file: .gitignore new file: .vscode/c_cpp_properties.json new file: .vscode/launch.json new file: .vscode/settings.json new file: CLAUDE.md new file: README.md new file: bashes/README.md new file: bashes/radar-driver-switch.sh new file: bashes/radar-driver-switch.sh.bak new file: dependencies/dependencies.txt new file: src/LSLIDAR_X_ROS2-20240228/src/README.md new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/CMakeLists.txt new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/input.h new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/lsiosr.h new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/lslidar_driver.h new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lslidar_double_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10_uart_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10p_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10p_uart_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10p_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10p_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/viewer_scan_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/package.xml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsm10_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsm10p_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsn10_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsn10p_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsm10.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsm10_p.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsn10.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsn10p.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/rviz/lslidar.rviz new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/input.cc new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lsiosr.cpp new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver.cc new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver.cc.bak new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver_node.cc new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/CMakeLists.txt new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarDifop.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarPacket.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarPoint.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarScan.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarSweep.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/package.xml new file: src/LSLIDAR_X_ROS2-20240228/src/version.txt new file: src/LSLIDAR_X_ROS2-20240228/src/wheeltec_udev.sh new file: "src/LSLIDAR_X_ROS2-20240228/src/\351\225\255\347\245\236Lsx\351\233\267\350\276\276\346\227\213\350\275\254\350\247\222\345\272\246.png" new file: src/LSLIDAR_X_ROS2-20240228/wheeltec_lidar.launch.py new file: "src/LSLIDAR_X_ROS2-20240228/wheeltec_lidar.launch.py\344\273\205\345\234\250WHEELTEC\351\225\234\345\203\217\344\270\255\344\275\277\347\224\250" new file: src/cyy_navigation2/CMakeLists.txt new file: src/cyy_navigation2/bt/follow_point.xml new file: src/cyy_navigation2/bt/nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.xml new file: src/cyy_navigation2/bt/navigate_through_poses_w_replanning_and_recovery.xml new file: src/cyy_navigation2/bt/navigate_to_pose_w_replanning_and_recovery.xml new file: src/cyy_navigation2/bt/navigate_to_pose_w_replanning_goal_patience_and_recovery.xml new file: src/cyy_navigation2/bt/navigate_w_recovery_and_replanning_only_if_path_becomes_invalid.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_distance.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_only_if_goal_is_updated.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_only_if_path_becomes_invalid.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_speed.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_time.xml new file: src/cyy_navigation2/bt/odometry_calibration.xml new file: src/cyy_navigation2/config/nav2_params.yaml new file: src/cyy_navigation2/launch/car_bringup.launch.py new file: src/cyy_navigation2/launch/cyy_nav.launch.py new file: src/cyy_navigation2/launch/cyy_nav_box.launch.py new file: src/cyy_navigation2/maps/cyy_map.data new file: src/cyy_navigation2/maps/cyy_map.pgm new file: src/cyy_navigation2/maps/cyy_map.yaml new file: src/cyy_navigation2/maps/cyy_map1.pgm new file: src/cyy_navigation2/maps/cyy_map1.yaml new file: src/cyy_navigation2/package.xml new file: src/cyy_navigation2/param/nav2_params.yaml new file: src/cyy_navigation2/param/slam_toolbox_localization.yaml new file: src/cyy_slamtoolbox/CMakeLists.txt new file: src/cyy_slamtoolbox/config/angular_filter_example.yaml new file: src/cyy_slamtoolbox/config/box_filter_example.yaml new file: src/cyy_slamtoolbox/config/footprint_filter_example.yaml new file: src/cyy_slamtoolbox/config/intensity_filter_example.yaml new file: src/cyy_slamtoolbox/config/laser_filter_config.yaml new file: src/cyy_slamtoolbox/config/mapper_params_lifelong.yaml new file: src/cyy_slamtoolbox/config/mapper_params_localization.yaml new file: src/cyy_slamtoolbox/config/mapper_params_offline.yaml new file: src/cyy_slamtoolbox/config/mapper_params_online_async.yaml new file: src/cyy_slamtoolbox/config/mapper_params_online_sync.yaml new file: src/cyy_slamtoolbox/config/mask_filter_example.yaml new file: src/cyy_slamtoolbox/config/median_filter_example.yaml new file: src/cyy_slamtoolbox/config/median_spatial_filter_example.yaml new file: src/cyy_slamtoolbox/config/multiple_filters_example.yaml new file: src/cyy_slamtoolbox/config/pass_through_example.yaml new file: src/cyy_slamtoolbox/config/polygon_filter_example.yaml new file: src/cyy_slamtoolbox/config/range_filter_example.yaml new file: src/cyy_slamtoolbox/config/scan_blob_filter_example.yaml new file: src/cyy_slamtoolbox/config/sector_filter_example.yaml new file: src/cyy_slamtoolbox/config/shadow_filter_example.yaml new file: src/cyy_slamtoolbox/config/slam_toolbox_default.rviz new file: src/cyy_slamtoolbox/config/speckle_filter_example.yaml new file: src/cyy_slamtoolbox/launch/cyy_slam_toolbox_launch.launch.py new file: src/cyy_slamtoolbox/launch/cyy_slam_toolbox_location.launch.py new file: src/cyy_slamtoolbox/launch/filter.launch.py new file: src/cyy_slamtoolbox/package.xml new file: src/gc_navigation2_real/CMakeLists.txt new file: src/gc_navigation2_real/behavior_tree/nav_to_pose_ackermann.xml new file: src/gc_navigation2_real/config/slam_toolbox_async_real.yaml new file: src/gc_navigation2_real/config/slam_toolbox_localization_real.yaml new file: src/gc_navigation2_real/launch/real_bringup.launch.py new file: src/gc_navigation2_real/launch/real_nav2_slam.launch.py new file: src/gc_navigation2_real/launch/real_nav2_slam_online.launch.py new file: src/gc_navigation2_real/launch/real_slam_mapping.launch.py new file: src/gc_navigation2_real/maps/Readme.txt new file: src/gc_navigation2_real/package.xml new file: src/gc_navigation2_real/params/gc_navigation_slam_real.yaml new file: src/gc_navigation2_slamtoolbox/CMakeLists.txt new file: src/gc_navigation2_slamtoolbox/config/mapper_params_lifelong.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_localization.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_offline.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_online_multi_async.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_online_sync.yaml new file: src/gc_navigation2_slamtoolbox/config/nav_to_pose_ackermann.xml new file: src/gc_navigation2_slamtoolbox/config/slam_toolbox_async.yaml new file: src/gc_navigation2_slamtoolbox/config/slam_toolbox_localization.yaml new file: src/gc_navigation2_slamtoolbox/config/slam_toolbox_mapping.yaml new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_amcl.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam_online.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam_online_real.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_lifelong.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_location.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_on_async.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_slam_mapping.launch.py new file: src/gc_navigation2_slamtoolbox/maps/my_map.data new file: src/gc_navigation2_slamtoolbox/maps/my_map.pgm new file: src/gc_navigation2_slamtoolbox/maps/my_map.posegraph new file: src/gc_navigation2_slamtoolbox/maps/my_map.yaml new file: src/gc_navigation2_slamtoolbox/maps/zhihui.data new file: src/gc_navigation2_slamtoolbox/maps/zhihui.pgm new file: src/gc_navigation2_slamtoolbox/maps/zhihui.posegraph new file: src/gc_navigation2_slamtoolbox/maps/zhihui.yaml new file: src/gc_navigation2_slamtoolbox/package.xml new file: src/gc_navigation2_slamtoolbox/params/gc_navigation_amcl.yaml new file: src/gc_navigation2_slamtoolbox/params/gc_navigation_slam.yaml new file: src/gc_navigation2_slamtoolbox/params/gc_navigation_slam.yaml.bak new file: src/gc_navigation2_slamtoolbox/world/zhihui/model.config new file: src/gc_navigation2_slamtoolbox/world/zhihui/model.sdf new file: src/gc_navigation_fish/CMakeLists.txt new file: src/gc_navigation_fish/launch/gc_navigation.launch.py new file: src/gc_navigation_fish/maps/test_map.pgm new file: src/gc_navigation_fish/maps/test_map.yaml new file: src/gc_navigation_fish/package.xml new file: src/gc_navigation_fish/param/gc_navigation.yaml new file: src/gc_navigation_fish/param/navigation_test.yaml new file: src/gc_slam_toolbox_fish/CMakeLists.txt new file: src/gc_slam_toolbox_fish/config/gc_2d.lua new file: src/gc_slam_toolbox_fish/launch/catograph.launch.py new file: src/gc_slam_toolbox_fish/package.xml new file: src/ground_slam/.gitignore new file: src/ground_slam/CMakeLists.txt new file: src/ground_slam/LICENSE.md new file: src/ground_slam/README.md new file: src/ground_slam/cmake/FindEigen3.cmake new file: src/ground_slam/cmake/FindFFTW3.cmake new file: src/ground_slam/configs/config_HD.yaml new file: src/ground_slam/configs/config_geekplus.yaml new file: src/ground_slam/configs/config_ntu.yaml new file: src/ground_slam/figures/data_association.jpg new file: src/ground_slam/figures/features_small.jpg new file: src/ground_slam/figures/fig1.jpg new file: src/ground_slam/figures/loop_error.jpg new file: src/ground_slam/figures/loop_trajectory.jpg new file: src/ground_slam/figures/pipeline.png new file: src/ground_slam/figures/rmse_curve.jpg new file: src/ground_slam/figures/sample_images.jpg new file: src/ground_slam/figures/trajectory.jpg new file: src/ground_slam/figures/video.png new file: src/ground_slam/include/camera.h new file: src/ground_slam/include/circ_shift.h new file: src/ground_slam/include/correlation_flow.h new file: src/ground_slam/include/dataset.h new file: src/ground_slam/include/edge.h new file: src/ground_slam/include/frame.h new file: src/ground_slam/include/loop_closure.h new file: src/ground_slam/include/map.h new file: src/ground_slam/include/map_builder.h new file: src/ground_slam/include/map_stitcher.h new file: src/ground_slam/include/optimization_2d/angle_local_parameterization.h new file: src/ground_slam/include/optimization_2d/normalize_angle.h new file: src/ground_slam/include/optimization_2d/pose_graph_2d.h new file: src/ground_slam/include/optimization_2d/pose_graph_2d_error_term.h new file: src/ground_slam/include/optimization_2d/types.h new file: src/ground_slam/include/read_configs.h new file: src/ground_slam/include/thread_publisher.h new file: src/ground_slam/include/timer.h new file: src/ground_slam/include/utils.h new file: src/ground_slam/include/visualization.h new file: src/ground_slam/main.cpp new file: src/ground_slam/package.xml new file: src/ground_slam/src/camera.cc new file: src/ground_slam/src/correlation_flow.cc new file: src/ground_slam/src/dataset.cc new file: src/ground_slam/src/edge.cc new file: src/ground_slam/src/frame.cc new file: src/ground_slam/src/loop_closure.cc new file: src/ground_slam/src/map.cc new file: src/ground_slam/src/map_builder.cc new file: src/ground_slam/src/map_stitcher.cc new file: src/ground_slam/src/optimization_2d/pose_graph_2d.cc new file: src/ground_slam/src/thread_publisher.cc new file: src/ground_slam/src/timer.cc new file: src/ground_slam/src/utils.cc new file: src/ground_slam/src/visualization.cc new file: src/ground_slam/supplementary/GroundSLAM_Supplement_Materia.pdf new file: src/origincar_base/CMakeLists.txt new file: src/origincar_base/config/ekf.yaml new file: src/origincar_base/config/imu.yaml new file: src/origincar_base/include/origincar_base/Quaternion_Solution.h new file: src/origincar_base/include/origincar_base/origincar_base.h new file: src/origincar_base/launch/__pycache__/testtwo.launch.cpython-38.pyc new file: src/origincar_base/launch/base_serial.launch.py new file: src/origincar_base/launch/ekf.launch.py new file: src/origincar_base/launch/origincar_bringup.launch.py new file: src/origincar_base/launch/robot_mode_description.launch.py new file: src/origincar_base/msg/Position.msg new file: src/origincar_base/package.xml new file: src/origincar_base/scripts/__pycache__/cmd_vel_to_ackermann_drive.cpython-310.pyc new file: src/origincar_base/scripts/cmd_vel_to_ackermann_drive.py new file: src/origincar_base/src/Quaternion_Solution.cpp new file: src/origincar_base/src/origincar_base.cpp new file: src/origincar_base/src/origincar_base.cpp.bak new file: src/origincar_description/CMakeLists.txt new file: src/origincar_description/CMakeLists.txt.save new file: src/origincar_description/config/joint_names_origincar_description.yaml new file: src/origincar_description/config/joint_names_origincar_description.yaml:Zone.Identifier new file: "src/origincar_description/config/joint_names_origincar_description.yaml\357\200\272Zone.Identifier" new file: src/origincar_description/launch/display.launch new file: src/origincar_description/launch/display.launch.py new file: src/origincar_description/launch/gazebo.launch new file: src/origincar_description/launch/gazebo.launch.py new file: src/origincar_description/meshes/base_link.STL new file: src/origincar_description/meshes/base_link.STL:Zone.Identifier new file: "src/origincar_description/meshes/base_link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/down_left_Link.STL new file: src/origincar_description/meshes/down_left_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/down_left_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/down_right_Link.STL new file: src/origincar_description/meshes/down_right_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/down_right_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/up_left_Link.STL new file: src/origincar_description/meshes/up_left_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/up_left_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/up_right_Link.STL new file: src/origincar_description/meshes/up_right_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/up_right_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/package.xml new file: src/origincar_description/rviz/README new file: src/origincar_description/rviz/display.rviz new file: src/origincar_description/urdf/origincar.urdf new file: src/origincar_description/urdf/origincar.xacro new file: src/origincar_description/world/fishbot.world new file: src/origincar_description/world/gc_world.world new file: src/origincar_description/world/test.world new file: src/origincar_description/world/zhihui.world new file: src/origincar_msg/CMakeLists.txt new file: src/origincar_msg/msg/Data.msg new file: src/origincar_msg/msg/Sign.msg new file: src/origincar_msg/package.xml new file: src/zbw_slamtoolbox/CMakeLists.txt new file: src/zbw_slamtoolbox/config/mapper_params_online_async.yaml new file: src/zbw_slamtoolbox/config/mapper_params_online_sync copy.yaml new file: src/zbw_slamtoolbox/config/navigation.yaml new file: src/zbw_slamtoolbox/launch/navigation.launch.py new file: src/zbw_slamtoolbox/launch/slamtoolbox.launch.py new file: src/zbw_slamtoolbox/package.xml new file: "\347\253\236\350\265\233\346\226\271\346\241\210_\347\254\25421\345\261\212\346\231\272\350\203\275\346\261\275\350\275\246\347\253\236\350\265\233\345\234\260\347\223\234\346\234\272\345\231\250\344\272\272\350\265\233\351\241\271.md" new file: "\350\260\203\350\257\225\350\256\260\345\275\225.log"
This commit is contained in:
138
src/ground_slam/README.md
Normal file
138
src/ground_slam/README.md
Normal file
@@ -0,0 +1,138 @@
|
||||
<h1 align="center">GroundSLAM: A Robust Visual SLAM System for Warehouse Robots Using Ground Textures</h1><p align="center"><strong>
|
||||
<a href = "https://scholar.google.com/citations?user=-p7HvCMAAAAJ&hl=zh-CN">Kuan Xu</a><sup>1</sup>,
|
||||
<a href = "https://github.com/yangzheng-yz">Zheng Yang</a><sup>1</sup>,
|
||||
<a href = "https://scholar.google.com.sg/citations?user=Fmrv3J8AAAAJ&hl=en">Lihua Xie</a><sup>1</sup>,
|
||||
<a href = "https://sairlab.org/team/chenw/">Chen Wang</a><sup>2</sup>
|
||||
</strong></p>
|
||||
|
||||
<p align="center"><strong>
|
||||
<a href = "https://www.ntu.edu.sg/cartin">1: Centre for Advanced Robotics Technology Innovation (CARTIN), Nanyang Technological University</a><br>
|
||||
<a href = "https://sairlab.org/">2: Spatial AI & Robotics (SAIR) Lab, Computer Science and Engineering, University at Buffalo</a><br>
|
||||
</strong></p>
|
||||
|
||||
|
||||
<p align="center"><strong>
|
||||
<!-- <a href = "https://arxiv.org/pdf/2408.03520">📄 [PDF]</a> |
|
||||
<a href = "https://xukuanhit.github.io/airslam/">💾 [Project Site]</a> | -->
|
||||
<a href = "https://youtu.be/2sI76SDptDA">🎥 [Youtube]</a> |
|
||||
<a href = "https://www.bilibili.com/video/BV1vWh8zTE77">🎥 [Bilibili]</a>
|
||||
<a href = "supplementary/GroundSLAM_Supplement_Materia.pdf">📊 [Supplementary]</a>
|
||||
<!-- 📖 [OpenAccess] -->
|
||||
</strong></p>
|
||||
|
||||
|
||||
<img src="figures/pipeline.png" width = "800" alt="pipeline" />
|
||||
|
||||
GroundSLAM is a novel **feature-free** and **ground-texture-based** SLAM system for **the warehouse robot**. Our system can provide robust pose estimation and localization in environments with many **dynamic** objects or **open spaces**, such as warehouses, which is very challenging for localization systems with a forward-facing camera or LiDAR. GroundSLAM consists of three components: feature-free visual odometry, ground-texture-based loop detection and map optimization, and map reuse. Specifically, we introduce a kernel cross-correlator for **image-level pose tracking**, loop detection, and map reuse to improve localization accuracy and robustness, and incorporate adaptive pruning strategies to enhance efficiency. Due to these specific designs, GroundSLAM more **robust** and **accurate** when dealing with ground images with **few textures** or with many **repetitive patterns** than the feature-based methods.
|
||||
|
||||
|
||||
|
||||
**Video:**
|
||||
|
||||
|
||||
<p align="middle">
|
||||
<a href="https://youtu.be/2sI76SDptDA" target="_blank"><img src="figures/video.png" width="600" border="10"/></a>
|
||||
</p>
|
||||
|
||||
## Test Environment
|
||||
### Dependencies
|
||||
* OpenCV 4.2
|
||||
* Eigen 3
|
||||
* Ceres 2.0.0
|
||||
* FFTW3
|
||||
* ROS noetic
|
||||
* Boost
|
||||
* yaml-cpp
|
||||
* VTK
|
||||
|
||||
## Build
|
||||
```
|
||||
cd ~/catkin_ws/src
|
||||
git clone https://github.com/sair-lab/GroundSLAM.git
|
||||
cd ../
|
||||
catkin_make
|
||||
source ~/catkin_ws/devel/setup.bash
|
||||
```
|
||||
|
||||
## Run
|
||||
|
||||
Modify the configuration file in [configs](configs) and then run
|
||||
|
||||
```
|
||||
rosrun ground_slam ground_slam src/GroundSLAM/configs/your_config.yaml
|
||||
```
|
||||
|
||||
## Data
|
||||
|
||||
### PathTex Dataset
|
||||
|
||||
<img src="figures/sample_images.jpg" width = "600" alt="pathtex_dataset" />
|
||||
|
||||
|
||||
Our data collection platform is a modified Weston SCOUT Robot. The robot is equipped with an IDS uEye monocular camera, which is positioned at the bottom and facing downward, placed at a height of 0.1m above the ground. To ensure constant illumination, a set of LED lights are arranged around the camera. For ground truth, a prism is installed on the top of the robot, and its position is tracked by a Leica Nova MS60 MultiStation laser tracker.
|
||||
|
||||
We collect the data of 10 common ground textures, including 6 $\color{lightblue}{outdoor}$ textures and 4 $\color{red}{indoor}$ textures. The table below provides detailed information and download links for each sequence. The **camera parameters** can be found [here](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EQqXW2eDcXNAkBWlSGgq6bgBe2yYdjdcuSJ8HEFey3haGg?e=nOg2ym).
|
||||
|
||||
<!-- <div align=center> -->
|
||||
|
||||
|
||||
Sequence Name|Total Size|Total Images|Download Link
|
||||
:--:|:--:|:--:|:--:
|
||||
Brick_seq1|1.0g|3119|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EUMENxrPbQBFmzAQmfhMw4YB4df6_uq6ua7H1fo9A7NC7g?e=5Mzy9Q)
|
||||
Brick_seq2|0.9g|5328|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EY1-hFr2taZJqjxE4k6-W6oB-XenzRAk_RW8DME6VvqUmg?e=PSQEi6)
|
||||
Carpet1_seq1|1.7g|8458|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/ETuQX1ePORdKmQJ_wFXT1mUBS6MqJ3LoZ-eeUsDhhXouug?e=AmMgBX)
|
||||
Carpet1_seq2|1.7g|8499|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EQwzCVxFMT1Hh9BMMNljwSgBM27RXd7v8gdM3KMNWm5mDQ?e=aSoH1v)
|
||||
Carpet2_seq1|3.0g|15481|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EZ6Y6xsmk6xBjkkU7JNrVQIB_zTovWY8-AOPdW7AN7XJLw?e=GvlK03)
|
||||
Carpet3_seq1|0.7g|4500|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EXxxHyPOvsFBh8judFQqhtEB-kI6uBzFmKcCiNDZZBzBIw?e=917b5c)
|
||||
Carpet3_seq2|0.7g|4385|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EQHoNL0xtpdKj6e6mhBBLyEBl-7s5N0cJ6U47jzT1tJheg?e=ot4hSH)
|
||||
Carpet3_seq3|1.0g|6428|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EcE3o-HN0UJEpc57_EJM3kcBSVSIQ8M7oCjkWsZlUQRKLw?e=qG8MUM)
|
||||
Coarse_asphalt_seq1|1.2g|5897|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EQbDBVemPH9Cp7bqV2ZwfFIBD_gsHQ-d3atPfSY8__6DKQ?e=ASludI)
|
||||
Concrete_seq1|1.0g|5850|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EcIYh8RIhClKs7ogwgFmS_QBlflxcx-eR33BwRVerNXFgg?e=8McLDA)
|
||||
Concrete_seq2|0.9g|5975|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EbNJ5FdpQSJMqK-2zyoEPNoBNCO4ZzhuzjzTL2m1AYZQKQ?e=feQNUX)
|
||||
Fine_asphalt_seq1|1.1g|5119|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EY22RWOcM89ApAYEr0E5I5EB6QhINnL5iGsbgli8INjuXg?e=HArfqb)
|
||||
Fine_asphalt_seq2|1.3g|11897|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/ERBTClOvkpBHgNeAEc5co4sBI5E-ubQ2MqNFwlfys07mbQ?e=WDd0uP)
|
||||
Granite_tiles_seq1|1.2g|7194|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/ERNkKMy_nvFFmORT7LU_MxEB7TDzhAsNKEEfBf_cNG4Zbg?e=sjDkYW)
|
||||
Granite_tiles_seq2|1.6g|10633|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EU-8ocb82WZDpErJuOGfR6oBbQwXEpAzR-nykA6wXk9zeg?e=Vx4P1t)
|
||||
Gravel_road1_seq1|0.8g|4883|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/ERRQQR0VTCVEqSdo9pM85zwBNMQFRBcgev4VVIZtjg68Vg?e=KFxJST)
|
||||
Gravel_road2_seq1|2.1g|11776|[Link](https://entuedu-my.sharepoint.com/:u:/g/personal/kuan_xu_staff_main_ntu_edu_sg/EZS9BNL-ct1Nu3_Ag1Z0YuIBt6ah02i8vojro4eHexs4ww?e=hQOLIF)
|
||||
<!-- </div> -->
|
||||
|
||||
### Run with Your Data
|
||||
|
||||
The data should be organized in the following format:
|
||||
```
|
||||
dataroot
|
||||
├── image_names.txt
|
||||
├── rgb
|
||||
│ ├── 00001.png
|
||||
│ ├── 00002.png
|
||||
│ ├── 00003.png
|
||||
│ └── ......
|
||||
└── times.txt
|
||||
```
|
||||
where `image_names.txt` contains the image names in `/dataroot/rgb` and `times.txt` contains the corresponding double type timestamps.
|
||||
|
||||
## Experiments
|
||||
|
||||
### Data Association
|
||||
|
||||
<img src="figures/features_small.jpg" width = "700" alt="data_association" />
|
||||
|
||||
We compare the data association of our system with ORB and SIFT on the HD Ground dataset. The numbers of features and matching inliers are given. For our method, the correction results are projected to three coordinate axes and represent the estimation of the 3-DOF movement. The vertical axis is the confidence of estimated movement on the horizontal axis. The higher the value of the peak relative to other positions, the greater the confidence of motion estimation. The results show that the data association of our system is more stable for various ground texture images.
|
||||
|
||||
### Visual Odometry
|
||||
<div style="display:flex; justify-content:flex-start;">
|
||||
<img src="figures/trajectory.jpg" height="200" style="margin-right: 20px;" />
|
||||
<img src="figures/rmse_curve.jpg" height="200" />
|
||||
</div>
|
||||
|
||||
This experiment is conducted on our PathTex dataset. The left figure shows the trajectories produced by our system and GT-SLAM on 4 sequences. The right figure provides the comparison of error distributions of different systems on the Gravel_road2_seq1 sequence, where the vertical axis is the proportion of pose errors that are less than the given error threshold on the horizontal axis.
|
||||
|
||||
### Loop Closure
|
||||
|
||||
<div style="display:flex; justify-content:flex-start;">
|
||||
<img src="figures/loop_trajectory.jpg" height="135" style="margin-right: 20px;" />
|
||||
<img src="figures/loop_error.jpg" height="135" />
|
||||
</div>
|
||||
|
||||
These two figures show the performance difference of GroundSLAM with and without loop correction on the Fine_asphalt_seq2 sequence. It is seen that the pose errors are significantly decreased after the loop correction.
|
||||
Reference in New Issue
Block a user