Giter Site home page Giter Site logo

maverickpeter / mr_slam Goto Github PK

View Code? Open in Web Editor NEW
240.0 240.0 18.0 27.92 MB

[IEEE T-RO 2023] A modularized multi-robot SLAM system with elevation mapping and a costmap converter for easy navigation. Different odometry and loop closure algorithms can be easily integrated into the system.

License: MIT License

CMake 1.11% MATLAB 0.10% Python 8.55% C++ 48.47% Cuda 2.14% Cython 0.12% C 0.42% Dockerfile 0.10% Makefile 0.01% HTML 0.01% Jupyter Notebook 38.93% Shell 0.04%
exploration localization mapping multi-robot-systems slam

mr_slam's Introduction

Hi there 👋

This is my blog -> https://maverickpeter.github.io/

  • 🔭 I'm currently working on multi-robot SLAM
  • 🌱 I'm currently learning LLM
  • 👯 I'm looking to collaborate on place recognition and LLM with robotics
  • 💬 Ask me about SLAM
  • 📫 How to reach me: [email protected]

MaverickPeter's GitHub stats

mr_slam's People

Contributors

maverickpeter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mr_slam's Issues

Inconsistent loop optimization

Hi all, I recently found some issues when running mr_slam deployments locally. There is a conflict in loopback optimization (loopback optimization), the previous loopback stitched the maps between multiple machines nicely, but after some time, a new loopback was generated but it corrupted the previously stitched maps, resulting in the inability to generate globally consistent maps. What is causing this problem and how can I fix it, please give me some suggestions.
Here is how my localization runs:
Initial loop: https://github.com/MaverickPeter/MR_SLAM/assets/65029285/c9950770-0703-4efe-a662-afdb2267f95b
Initial loop is corrupted by subsequent loopback optimizations: https://github.com/MaverickPeter/MR_SLAM/assets/65029285/d11db669-851d-4958-9bfc-25763ea530ce

ICP fitness score is larger than threshold, reject the loop.

为什么其他数据集一直都是ICP fitness score is larger than threshold, reject the loop.,像m2dgr,graco这些都试过了,disco和scancontext也都试过了,readme里提供的数据集能够很好地实现回环检测,但是换数据集后fitness一直没有达到阈值,是否有其他的初始设置我没有做?比如frame_id、初始位姿啥的?我只调整了fastlio的相关配置,这一块能够正常输出submap,loopdetection里的num_xxx这些参数也尝试调整过了但是没有效果。请问用其他数据集有哪些要注意的?
image

Not possible to visualize traversability costmap

First and foremost, thanks for your research and for publishing it available.

I'm trying to visalize the traversability map but it seems the RViz map is just a white grid. No TFs are published and there are a few points in the readme that do not work.

Can you help us with that?

These are the following problems using the Docker machine:

  • The point 6. "Run preprocess tools (in 3 terminals)" does not work

Neither the Tool folder nor the file robot_1.py exists
The files filter_robot_1.launch also do not exist.

  • The point 7. "Run loop detection module" does not work
# rosrun disco_ros main.py
/opt/ros/noetic/bin/rosrun: /home/LoopDetection/src/disco_ros/main.py: /home/client/miniconda3/envs/py3-mink/bin/python3: bad interpreter: No such file or directory
/opt/ros/noetic/bin/rosrun: line 150: /home/LoopDetection/src/disco_ros/main.py: Success
  • The point 9. "Run preprocess tools (in 3 terminals)" does not work
cd Costmap && source devel/setup.bash
roslaunch move_base move_base_server.launch

Produces the following error:

> roslaunch move_base move_base_server.launch
RLException: [move_base_server.launch] is neither a launch file in package [move_base] nor is [move_base] a launch file name
The traceback for the exception was written to the log file
  • TFs not working
    I can't see any tf nor tf_static being published.

What would be the minimal setup to be able to see the traversability costmap on RViz?

To launch the Docker machine and being able to launch RViz is:

xhost +
export LIBGL_ALWAYS_INDIRECT=1
docker run --mount type=bind,source=$HOME/Downloads,target=/bags/ \
    --runtime=nvidia \
    --cap-add=SYS_PTRACE \
    --security-opt=seccomp:unconfined \
    --security-opt=apparmor:unconfined \
    --privileged -e NVIDIA_DRIVER_CAPABILITIES=all --gpus all \
    --device-cgroup-rule "c 81:* rmw" \
    --device-cgroup-rule "c 189:* rmw" \
    --security-opt apparmor:unconfined \
    --net=host \
    --env="DISPLAY" \
    --volume="$HOME/.Xauthority:/home/ros/.Xauthority:rw" \
    -exec -it docker.io/maverickp/mrslam:noetic   /bin/bash

Using grid map as the transmission protocol between multiple robot to run MR_SLAM?

Hello, here I am again, recently I'm working on multi-robot grid map stitching, and I'm planning to utilize MR_SLAM for this work, I'm utilizing 2.5d grid maps as a transfer medium between robots, first I remap the 2.5d grid maps to point cloud maps in the backend, and then I input the point clouds into LoopDetection and Mmapping, MR_ SLAM can work well (good news). I have an idea about this, can we use the grid map to construct the pose graph, use the point cloud after the grid map conversion for LoopDetection, after that use the loopback constraints for grid map pose graph optimization, and use the optimized pose graph for grid sub-map splicing, I think this can reduce a lot of computation, do you think this is feasible?

Full usage demo

Hi!
Thank you for the great job!
1.Can you provide a bag file for full usage?
2.if I want to use single robot for big map, how can I follow the full usage steps?
3.if I want to use another loop closure method instead of the disco, how can I modify the code?

Thank you again!!!

multi LIO map merge

Hi @MaverickPeter Thanks for your great works!

MR_SLAM is a great project for multi robot/session slam, and it include multi modules. Full usage of MR_SLAM is very complicated.

I just want use MR_SLAM for multi lidar mapping, and I have multi session data at different site and time(i.e., point cloud scans, point cloud scans pose, point cloud scans loop closure descriptors and global map of the session for each session) , I want to merge multi session lio global map to one global map by using MR_SLAM. can I only use the global_manager module to achieve the goal? elevation_mapping, preprocess tools and costmap module does not need to be run ? can you give me some advice? Thanks a lot!

ImportError: No module named pygicp

this occured because after clone the third party codes in Fast GICP repo, you need to use the command as follows to install pygicp module.

cd fast_gicp
python3 setup.py install

but after install the pygicp, when import pygicp in python, you may get the error report as 'ImportError: dynamic module does not define module export function', and you can solve this problem by renaming /usr/include/python2.7 to something else, installing the package with setup.py as mentioned above and then renaming the folder back to python2.7. This idea comes from the issue in fast_gicp

Replace front-end odometry?

Hello author, thank you very much for open sourcing this project. I am very interested in this project, I also want to do a set of multi-computer SLAM system, may I ask you this module to support the replacement of other front-end odometry, that MR_SLAM seems to support only FAST_lio2 and A_LOAM, I want to replace the other odometry integrated into this system, may I ask that the system has a special requirement for odometry?

some question about “merged_elevation_map”

Hi, is it necessary to enable the elevation_mapping module for the construction of erged_elevation_map in global_manager, I noticed that elevation_mapping transmits a submap to global_manager as well, is it possible to just Is it possible to transmit only the front-end LIO submap to build erged_elevation_map to generate the global costmap?

Can this MR_SLAM integrate global location information

Can the inclusion of global location data, such as GPS, enhance the quality of something? accuracy and success of MR_SLAM? If it can, then what aspects of GPS information should be incorporated, How should I incorporate GPS information into MR_SLAM. please give us some suggestions.

Loop Detector Errors: DiSCO - No module named 'gputransform' & RING - Segmentation fault

Hi @MaverickPeter,

Thanks for your pioneering work on multi-robot SLAM.
I've successfully installed MR_SLAM on my laptop (Ubuntu 20.04, ROS Noetic), however there are some problems for both of the two loop detector modules as follows:

  1. For the DiSCO Loop Detector: have the module "gputransform" not found error. I checked and confirmed that the gputransform.cpython-38-x86_64-linux-gnu.so file is in the disco_ros directory. I also tried the python3 setup.py install command from DiSCO-pytorch. However, this error persists as shown in the figure below:

DiSCO_error

  1. For the RING Loop Detector: the Segmentation fault (core dumped) issue persists, even if I have changed the system stack size by ulimit -s 81920. The error message is shown below:
  • If executing the RING-based method main.py, core will dump after detecting the first loop:

2023-04-07-MR_SLAM_RING-lc-failed

And the map in Rviz will not be loop closed or corrected, as can be seen in this video:

simplescreenrecorder_loc-2023-04-07-RING-lc-failed1.mp4
  • If executing the Scan Context-based method main_SC.py, core will dump in the very beginning:

2023-04-07-main_SC-failed

So do you have any idea or suggestion for solving these issues?
Thanks a lot and appreciate your early response.

Best Regards,
William

怎么用evo包评估结果

请问有没有图优化后的多机器人轨迹数据或文件?有的话是在哪里?并且怎么用evo包评估?

No elevation_map output

Thakns for your work!

When I run the code in docker, the topic "/robot_1/visual_map": no new messages.

And the screen output in elevation_map part:
[ WARN] [1700028527.069606734, 1642748343.491280501]: in map service [ WARN] [1700028527.074154659, 1642748343.491280501]: out map service [ WARN] [1700028527.405144592, 1642748343.826465818]: in map service [ WARN] [1700028527.407398626, 1642748343.826465818]: out map service [ WARN] [1700028527.773029853, 1642748344.194439812]: in map servic [ WARN] [1700028527.780150849, 1642748344.194439812]: out map service

The topic:
clock /aligned_cloud /clicked_point /clock /cmd_vel /database_cloud /global_manager/graph /global_manager/merged_cloud /global_manager/merged_map /global_manager/opt /initialpose /loop_info /map_saving /move_base/NavfnROS/plan /move_base/TrajectoryPlannerROS/cost_cloud /move_base/TrajectoryPlannerROS/global_plan /move_base/TrajectoryPlannerROS/local_plan /move_base/TrajectoryPlannerROS/parameter_descriptions /move_base/TrajectoryPlannerROS/parameter_updates /move_base/cancel /move_base/current_goal /move_base/feedback /move_base/global_costmap/costmap /move_base/global_costmap/costmap_updates /move_base/global_costmap/footprint /move_base/global_costmap/inflation_layer/parameter_descriptions /move_base/global_costmap/inflation_layer/parameter_updates /move_base/global_costmap/parameter_descriptions /move_base/global_costmap/parameter_updates /move_base/goal /move_base/local_costmap/costmap /move_base/local_costmap/costmap_updates /move_base/local_costmap/elevation_layer/parameter_descriptions /move_base/local_costmap/elevation_layer/parameter_updates /move_base/local_costmap/footprint /move_base/local_costmap/inflation_layer/parameter_descriptions /move_base/local_costmap/inflation_layer/parameter_updates /move_base/local_costmap/parameter_descriptions /move_base/local_costmap/parameter_updates /move_base/parameter_descriptions /move_base/parameter_updates /move_base/recovery_status /move_base/result /move_base/status /move_base_simple/goal /odom /query_cloud /robot_1/Laser_map /robot_1/Odometry /robot_1/cloud_effected /robot_1/cloud_registered /robot_1/cloud_registered_body /robot_1/dense_mapping /robot_1/disco /robot_1/elevation_map_raw /robot_1/global_octomap /robot_1/global_point /robot_1/history_point /robot_1/image_rect /robot_1/imu /robot_1/keyframe_pc /robot_1/local_octomap /robot_1/map_saving /robot_1/merged_cloud_registered /robot_1/merged_keyframe /robot_1/new_keyframe /robot_1/opt_keyframes /robot_1/opt_map /robot_1/orthomosaic /robot_1/path /robot_1/pointcloud /robot_1/submap /robot_1/visual_map /robot_1/visualpoints /robot_1/voxel_grid/output /robot_2/submap /robot_3/submap /rosout /rosout_agg /tf /tf_static

LoopDetection error when running main.py

In MR_SLAM/LoopDetection/src/RING_ros/util.py, the code in line 99 should change from R[:3, 3] = np.array([x, y, 0]) to R[:3, 3] = np.array([x[0], y[0], 0]), which can solve the problem of 'the requested arrary has an imhomogeneous shape after 1 dimensions'.
In MR_SLAM/LoopDetection/src/RING_ros/main.py, he code in line 100 should change from fitness = gicp.get_fitness_score(max_range=1.0) to fitness = gicp.get_fitness_score(1.0), which can solve the problem of 'TypeError: get_fitness_score(): incompatible function arguments. The following argument types are supported: 1. (self: pygicp.LsqRegistration, arg0: float) -> float'

Failed loop closure for full usage demo in Docker - wrong parameters settings?

Hi @MaverickPeter,

Thanks for your update and release of the full usage demo!

I've tried to run the full usage bags in Docker. However, I found that if the parameter icp_fitness_score is set at 0.1 by default, most of the loop candidates would be rejected and the point cloud maps are only partially shown (please see figures below).

Reject the loop

point clouds

point cloud with routes

If I increase the value of icp_fitness_score to 0.35, more loops would be accepted and I would be able to see more point clouds (please see figures below). But the 3 maps were still not fused and I'm not able to obtain a loop closed global map.

Accept the loop

point cloud without routes

So is there any possible reason for this?
I'm guessing is the default parameters setting in the Docker fit for the full usage demo? What are the other important parameters that I need to fine-tune to obtain the good loop closure results for the full usage demo?

Cheers.

Best Regards,
William

For single robot application.

Hello author, thank you very much for open sourcing this project.
FAST-LIO will experience drift during loopback.So i Attempt to change the loop back detection module,like this
2024-04-10 15-06-01 的屏幕截图
But there was an error in the global_manager module
2024-04-10 15-06-58 的屏幕截图
and i noticed that MR SLAM supports single robot applications, Can you give me some help for this. Thanks

ring++

Is the code for ring++ already open source?

docker

Hello, first of all, thank you and your team for sharing, but when I used docker verification algorithm, I found that there was no module containing RING++. Could you please provide the image or construction method containing RING++? Thank you again for your sharing

few test questions

Hi @MaverickPeter Thanks for your released codes.
I want to ask some questions:

  1. Did you compare Disco-SLAM with MR-SLAM,how much better is MR-SLAM
  2. I found that the test data 3_dog.bag was collected at the same moment, if I record data at different time, and the data have overlapping area, can MR-SLAM merge the data which collected at different time
  3. Do you have any relevant documents to introduce global_manager module

Thanks!

/usr/local/lib/cmake/fftw3/FFTW3Config.cmake:13 (include):

Hello, I am Liang Yapeng from Wuhan University. I am very interested in your work on GitHub, but I encounter issues connecting when trying to clone. I would like to seek some advice on this.


  • Found PCL: pcl_common;pcl_kdtree;pcl_octree;pcl_search;pcl_features;pcl_sample_consensus;pcl_filters;pcl_io;pcl_registration;pcl_visualization;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;vtkChartsCore;vtkCommonColor;vtkCommonCore;vtksys;vtkCommonDataModel;vtkCommonMath;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkCommonExecutionModel;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersCore;vtkInfovisCore;vtkFiltersExtraction;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkFiltersModeling;vtkImagingSources;vtkInteractionStyle;vtkInteractionWidgets;vtkFiltersHybrid;vtkImagingColor;vtkImagingGeneral;vtkImagingHybrid;vtkIOImage;vtkDICOMParser;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkRenderingAnnotation;vtkRenderingVolume;vtkIOXML;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkIOGeometry;vtkIOLegacy;vtkIOPLY;vtkRenderingLOD;vtkViewsContext2D;vtkViewsCore;vtkRenderingContextOpenGL2;vtkRenderingOpenGL2;FLANN::FLANN
    -- GTSAM include directory: /usr/local/lib/cmake/GTSAM/../../../include;/usr/include;/usr/local/include/gtsam/3rdparty/Eigen/
    CMake Error at /usr/local/lib/cmake/fftw3/FFTW3Config.cmake:13 (include):
    include could not find load file:

    /usr/local/lib/cmake/fftw3/FFTW3LibraryDepends.cmake
    Call Stack (most recent call first):
    global_manager/CMakeLists.txt:48 (find_package)

-- Found CUDA: /usr/local/cuda-11.3 (found suitable version "11.3", minimum required is "10")
-- Found Boost: /usr/include (found version "1.71.0") found components: serialization filesystem timer system program_options thread chrono date_time atomic

What is the unit of angle of phase_corr in disco_ros, is it degree(0-360) ?

In disco_ros/main.py
` yaw_pc, _ = phase_corr(DiSCO_candidate, DiSCO_current, device, corr2soft)

    if yaw_pc < cfg.num_sector//2:
        yaw_pc = (cfg.num_sector//2 - yaw_pc) / float(cfg.num_sector) * 360.
    else:
        yaw_pc = (yaw_pc - cfg.num_sector//2) / float(cfg.num_sector) * 360.

`
It's seems degree.
However, It's not same in euler2rot(), which is radians.
If it's a bug, how can this loop detection work with this initial pose?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.