# funny_slam_comments **Repository Path**: jazzey/funny_slam_comments ## Basic Information - **Project Name**: funny_slam_comments - **Description**: 学习一个funny_slam框架,主要是学习它的架构思想 - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-10 - **Last Updated**: 2025-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Funny-Lidar-SLAM a Demo video: [bilibili](https://www.bilibili.com/video/BV1KqtgeiEzD/?spm_id_from=333.999.0.0) ## 0.Thanks This Work is fork from https://github.com/zm0612/funny_lidar_slam.git Thanks to Zhang Zhimeng, for her open source work 这是一个基于funny lidar slam框架的注释版,我会加上注释内容便于阅读 ## 1.Introduction A real-time multifunctional Lidar SLAM package. It has dual functions of Mapping and Localization. Supports multiple types of IMUs(6-axis and 9-axis) and Lidars(Velodyne, Livox Avia, Livox Mid 360, RoboSense, Ouster, etc). Supports various types of frontends, such as LOAM, NDT, ICP, etc. Supports multiple fusion methods, such as Kalman filter, optimization method, etc. Support multiple LoopClosure methods. The overall accuracy and efficiency are close to the current state-of-the-art methods. - Supports multiple IMU types. - Supports multiple fusion methods. - Supports Mapping and Localization. - Supports multiple LoopClosure methods. - Supports multiple Lidar types, and customize Lidar type. - Supports multiple pointcloud registration methods, and easily extendable to other registration methods. | Features | Details | | :------------------------------------------: | :----------------------------------------------------------: | | IMU Types | 6-axis, 9-axis. | | Lidar Types | Solid State Lidar(Mid-360, Avia, etc),
Mechanical Lidar(Velodyne, Robosense, Ouster, etc),
etc. | | Registration Methods | Loam Series,
Optimized-ICP,
Incremental-NDT,
even customizable via plug-in. | | LoopClosure Methods
(only Mapping mode) | Euclidean distance based,
Feature based. | | Fusion Methods | Loose Coupling,
Kalman Filter,
Optimization. | ## 2.Prerequisites ### 2.1 Ubuntu and ROS **Ubuntu >= 20.04 && ROS Noetic && C++17 Compiler** For Ubuntu 20.04 or higher. After installing ROS, most of the dependent libraries have been installed, including the PCL/Eigen/CMake/etc. ### 2.2 glog && gflag && gtest ```shell sudo apt-get install libgoogle-glog-dev libgflags-dev libgtest-dev ``` ### 2.3 g2o ```shell sudo apt install libeigen3-dev libspdlog-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev-qt5 # g2o requirements git clone https://github.com/RainerKuemmerle/g2o.git cd g2o mkdir build cd build cmake .. make -j sudo make install ``` ## 3.How to Build? ### 3.1 Build from source (Recommend) ```shell mkdir -p funny_lidar_slam_ws/src cd funny_lidar_slam_ws/src git clone https://github.com/zm0612/funny_lidar_slam.git cd ../ catkin_make -j source devel/setup.bash ``` ### 3.2 Build in Docker If you want to use docker conatiner to run Funny Lidar SLAM, please install the docker on you machine. Follow [Docker Installation](https://docs.docker.com/engine/install/ubuntu/). #### 3.2.1 Download project code to any path ```shell git clone https://github.com/zm0612/funny_lidar_slam.git ``` #### 3.2.2 Build Docker image and create the container ```shell cd funny_lidar_slam docker build -f Dockerfile -t funny_lidar_slam:v0 . cd docker sudo chmod +x run.sh bash run.sh ``` Tips: - When the above commands are executed correctly, you will enter the virtual terminal of the funny_lidar_slam container. Refer to the following to perform Mapping and Localization. - Please copy your bag data to the host's directory `funny_lidar_slam/data`. Then you can play them in the container. ## 4.How to run Mapping? Funny-Lidar-SLAM is a multi-functional Lidar SLAM package. You can freely choose the Lidar model, 6-axis or 9-axis IMU , and registration method. To help you get started quickly, here I provide some of my examples on some open source datasets. Of course you can also try other combinations. ### 4.1 For Velodyne HDL-32E - Dataset: [M2DGR](https://github.com/SJTU-ViSYS/M2DGR). You can also get part of the dataset from [Baidu Pan](https://pan.baidu.com/s/1KZZxavUrfRF5nqK4eeDVzw?pwd=yph8) for testing. ```shell cd funny_lidar_slam_ws source devel/setup.bash roslaunch funny_lidar_slam mapping_M2DGR.launch rosbag play street_02.bag # Play one of the sets of data ``` - Dataset: [NCLT](https://robots.engin.umich.edu/nclt/index.html#download). You can also get part of the dataset from [Baidu Pan](https://pan.baidu.com/s/1Z3UzjP1FWJu9XSwujo_d5g?pwd=jggw) for testing. ```c++ cd funny_lidar_slam_ws source devel/setup.bash roslaunch funny_lidar_slam mapping_nclt.launch rosbag play 20130110.bag # Play one of the sets of data ``` ### 4.2 For Velodyne HDL-16E The test dataset comes from: [LIO-SAM dataset](https://github.com/TixiaoShan/LIO-SAM?tab=readme-ov-file#sample-datasets). You can also get part of the dataset from [Baidu Pan](https://pan.baidu.com/s/1PS7RkyNvbQNlpWaNDtQ1kQ?pwd=w3xe) for testing. ```shell cd funny_lidar_slam_ws source devel/setup.bash roslaunch funny_lidar_slam mapping_lio_sam.launch rosbag play walking_dataset.bag # Play one of the sets of data ``` ### 4.3 For Livox Mid-360 You can download the Livox Mid-360 data from: [Baidu Pan](https://pan.baidu.com/s/1Wi7s23r7TSE5wSyzrDaLNQ?pwd=th3i) ```shell cd funny_lidar_slam_ws source devel/setup.bash roslaunch funny_lidar_slam mapping_mid360.launch rosbag play mid_360.bag # Play one of the sets of data ``` Note: If your Mid-360 format is `livox_ros_driver2/CustomMsg`, you can use `4.4 For Livox Avia` to run. ### 4.4 For Livox Avia You can download the Livox Avia data from: [Baidu Pan](https://pan.baidu.com/s/1ZJ25shwYG66iU4jHzpCKyA?pwd=xy36). ```shell cd funny_lidar_slam_ws source devel/setup.bash roslaunch funny_lidar_slam mapping_livox_avia.launch rosbag play avia.bag # Play one of the sets of data ``` Note: If your Livox Avia format is `sensor_msgs/PointCloud2`, you can use `4.3 For Livox Mid-360` to run. ### 4.5 For custom Lidar model (Only supports rotating mechanical Lidar) You can download the data from: [Baidu Pan](https://pan.baidu.com/s/1rJiUiYibWmlmQ1xw_kOf7Q?pwd=dkpj) ```shell cd funny_lidar_slam_ws source devel/setup.bash roslaunch funny_lidar_slam mapping_turing.launch rosbag play our.bag # Play one of the sets of data ``` ### 4.6 Save PointCloud Map ```shell cd funny_lidar_slam_ws source devel/setup.bash rosservice call /funny_lidar_slam/save_map "map_path: '' split_map: false" ``` Note: `map_path`: is the path where the map is stored. If `map_path` is empty, the default path `funny_lidar_slam/data` is used for saving. If you want to save the map to a specific path, set `map_path`. For example: `"map_path: '/home/xx/xxx.pcd'"` `split_map`: Whether to divide the map into blocks. ## 5.How to run Localization? ### 5.1 Prepare pointcloud map Copy your pointcloud map to the `funny_lidar_slam/data` directory and change its name to `map.pcd`. If you don’t have a pointcloud map, you can generate one according to Section 4. ### 5.2 Run Localization - For Livox Mid 360 ```shell roslaunch funny_lidar_slam localization_mid_360.launch ``` - For Velodyne-32 ```shell roslaunch funny_lidar_slam localization_nclt.launch ``` - For RoboSense-16 ```shell roslaunch funny_lidar_slam localization_turing.launch ``` **Note**: Other Lidar models can be configured by referring to the above examples. ### 5.3 Set the initial pose After running the Localization program, you need to play the bag and set the initial pose. The localization program does not have a global relocalization function, so the initial position and orientation need to be set manually. For convenience, I use the `2D Pose Estimate` plugin in RVIZ to set the initial pose. If the initial pose effect is not good, you can try to use `2D Pose Estimate` multiple times to set the pose. ## 6.Some Tips - If your IMU is 6-axis, and the fusion method is optimization, you need to ensure that your IMU and Lidar are stationary for at least two seconds before starting to run Mapping or Localization. - When you run the Mapping program, the default Rviz configuration will be started. In order to reduce resource usage, the pointcloud map is displayed roughly. If you want to display richer details, pass the Rviz configuration path when running the Mapping launch file. For example: `roslaunch funny_lidar_slam mapping_xxx.launch rviz_config:=/path/to/funny_lidar_slam/launch/display_detailed_without_loopclosure.rviz`