Git Product home page Git Product logo

sc-a-loam's Introduction

SC-A-LOAM

News

  • 2021-07-16: This repository's easy-to-use plug-and-play loop detection and pose graph optimization module (named SC-PGO) is also integrated with FAST-LIO2! see FAST_LIO_SLAM.

What is SC-A-LOAM?

  • A real-time LiDAR SLAM package that integrates A-LOAM and ScanContext.
    • A-LOAM for odometry (i.e., consecutive motion estimation)
    • ScanContext for coarse global localization that can deal with big drifts (i.e., place recognition as kidnapped robot problem without initial pose)
    • and iSAM2 of GTSAM is used for pose-graph optimization.
  • This package aims to show ScanContext's handy applicability.
    • The only things a user should do is just to include Scancontext.h, call makeAndSaveScancontextAndKeys and detectLoopClosureID.

Features

  1. A strong place recognition and loop closing
    • We integrated ScanContext as a loop detector into A-LOAM, and ISAM2-based pose-graph optimization is followed. (see https://youtu.be/okML_zNadhY?t=313 to enjoy the drift-closing moment)
  2. A modular implementation
    • The only difference from A-LOAM is the addition of the laserPosegraphOptimization.cpp file. In the new file, we subscribe the point cloud topic and odometry topic (as a result of A-LOAM, published from laserMapping.cpp). That is, our implementation is generic to any front-end odometry methods. Thus, our pose-graph optimization module (i.e., laserPosegraphOptimization.cpp) can easily be integrated with any odometry algorithms such as non-LOAM family or even other sensors (e.g., visual odometry).
  3. (optional) Altitude stabilization using consumer-level GPS
    • To make a result more trustworthy, we supports GPS (consumer-level price, such as U-Blox EVK-7P)-based altitude stabilization. The LOAM family of methods are known to be susceptible to z-errors in outdoors. We used the robust loss for only the altitude term. For the details, see the variable robustGPSNoise in the laserPosegraphOptimization.cpp file.

Prerequisites (dependencies)

  • We mainly depend on ROS, Ceres (for A-LOAM), and GTSAM (for pose-graph optimization).
    • For the details to install the prerequisites, please follow the A-LOAM and LIO-SAM repositiory.
  • The below examples are done under ROS melodic (ubuntu 18) and GTSAM version 4.x.

How to use?

  • First, install the abovementioned dependencies, and follow below lines.
    mkdir -p ~/catkin_scaloam_ws/src
    cd ~/catkin_scaloam_ws/src
    git clone https://github.com/gisbi-kim/SC-A-LOAM.git
    cd ../
    catkin_make
    source ~/catkin_scaloam_ws/devel/setup.bash
    roslaunch aloam_velodyne aloam_mulran.launch # for MulRan dataset setting 

Example Results

Riverside 01, MulRan dataset

KITTI 05

Indoor

  • ScanContext also works at indoor environments (use smaller sc_max_radius value).
  • example video: https://youtu.be/Uv6_BRmxJho
  • example result:

For Livox LiDAR

  • Scan Context also works for Livox LiDAR data
    • In this example, Scan Context is integrated with FAST-LIO (https://github.com/hku-mars/FAST_LIO).
    • Note: No additional integration effort is required. A user just run seperately FAST-LIO node and SC-A-LOAM's posegraphoptimization.cpp node!
  • example video (tutoial and results): https://youtu.be/Fw9S6D6HozA
  • example result:

For Navtech Radar

Utilities

Data saver and Map construction

  • Similar to the SC-LIO-SAM's saver utility, we support pose and scan saver per keyframes. Using these saved data, the map (within ROI) can be constructed offline. See the utils/python/makeMergedMap.py and this tutorial.

  • Below is the example results of MulRan dataset KAIST 03's merged map, visualized using CloudCompare (download the map data here).

  • A user also can remove dynamic points using these saved keyframe poses and scans. See this tutorial and our Removert project.

Acknowledgements

  • Thanks to LOAM, A-LOAM, and LIO-SAM code authors. The major codes in this repository are borrowed from their efforts.

Maintainer

TODO

  • Delayed RS loop closings
  • SLAM with multi-session localization
  • More examples on other datasets (KITTI, complex urban dataset, etc.)

sc-a-loam's People

Contributors

gisbi-kim 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  avatar

sc-a-loam's Issues

Does the line "loopFindNearKeyframesCloud(cureKeyframeCloud, _curr_kf_idx, 0, _loop_kf_idx);" works as it should be?

Hi, thanks for your excellent contribution!

When I learned your code, I wondered if line 433 in laserPosegraphOptimization.cpp(mentioned below) works well as it's supposed to be. In my opinion, we should extract the point cloud in the global frame corresponding to "_curr_kf_idx" in this step. However, the function "loopFindNearKeyframesCloud" doesn't use the second parameter. Is there a mistake or I have a wrong understanding?

Looking forward to your reply. Thanks a lot!

void loopFindNearKeyframesCloud( pcl::PointCloud<PointType>::Ptr& nearKeyframes, const int& key, const int& submap_size, const int& root_idx)
{
    // extract and stacking near keyframes (in global coord)
    nearKeyframes->clear();
    for (int i = -submap_size; i <= submap_size; ++i) {
        int keyNear = root_idx + i;
        if (keyNear < 0 || keyNear >= int(keyframeLaserClouds.size()) )
            continue;

        mKF.lock(); 
        *nearKeyframes += * local2global(keyframeLaserClouds[keyNear], keyframePosesUpdated[keyNear]);
        mKF.unlock(); 
    }

    if (nearKeyframes->empty())
        return;

    // downsample near keyframes
    pcl::PointCloud<PointType>::Ptr cloud_temp(new pcl::PointCloud<PointType>());
    downSizeFilterICP.setInputCloud(nearKeyframes);
    downSizeFilterICP.filter(*cloud_temp);
    *nearKeyframes = *cloud_temp;
} // loopFindNearKeyframesCloud

loopFindNearKeyframesCloud(cureKeyframeCloud, _curr_kf_idx, 0, _loop_kf_idx); // use same root of loop kf idx

Build error on ceres-solver

I installed dependencies in advance to build sc-a-loam. And I run catkin_make as how to use, and then the error occurs as shown below.

Running command: "make cmake_check_build_system" in "/home/kbk/catkin_scaloam_ws/build"

Running command: "make -j8 -l8" in "/home/kbk/catkin_scaloam_ws/build"

[ 18%] Building CXX object SC-A-LOAM/CMakeFiles/alaserMapping.dir/src/laserMapping.cpp.o
[ 18%] Building CXX object SC-A-LOAM/CMakeFiles/alaserOdometry.dir/src/laserOdometry.cpp.o
[ 45%] Building CXX object SC-A-LOAM/CMakeFiles/alaserPGO.dir/src/laserPosegraphOptimization.cpp.o
[ 45%] Built target kittiHelper
[ 63%] Built target ascanRegistration
In file included from /usr/local/include/ceres/internal/autodiff.h:152:0,
from /usr/local/include/ceres/autodiff_cost_function.h:130,
from /usr/local/include/ceres/ceres.h:37,
from /home/kbk/catkin_scaloam_ws/src/SC-A-LOAM/src/laserMapping.cpp:54:
/usr/local/include/ceres/jet.h:1423:8: error: ‘ScalarBinaryOpTraits’ is not a class template
struct ScalarBinaryOpTraits<ceres::Jet<T, N>, T, BinaryOp> {
^~~~~~~~~~~~~~~~~~~~

Have any idea for it?

Question about "loopFindNearKeyframesCloud(cureKeyframeCloud, _curr_kf_idx, 0, _loop_kf_idx) ?

Hi, thanks for your contribution.
I have same question same as the question https://github.com/gisbi-kim/SC-A-LOAM/issues/7
However, I think the code still have something wrong, the code in the repo is as:

 void loopFindNearKeyframesCloud( pcl::PointCloud<PointType>::Ptr& nearKeyframes, const int& key, const int& submap_size, const int& root_idx)
{
    // extract and stacking near keyframes (in global coord)
    nearKeyframes->clear();
    for (int i = -submap_size; i <= submap_size; ++i) {
        int keyNear = key + i; 
        if (keyNear < 0 || keyNear >= int(keyframeLaserClouds.size()) )
            continue;

        mKF.lock(); 
        *nearKeyframes += * local2global(keyframeLaserClouds[keyNear], keyframePosesUpdated[root_idx]);
        mKF.unlock(); 
    }
    if (nearKeyframes->empty())
        return;
    pcl::PointCloud<PointType>::Ptr cloud_temp(new pcl::PointCloud<PointType>());
    downSizeFilterICP.setInputCloud(nearKeyframes);
    downSizeFilterICP.filter(*cloud_temp);
    *nearKeyframes = *cloud_temp;
} // loopFindNearKeyframesCloud

where *nearKeyframes += * local2global(keyframeLaserClouds[keyNear], keyframePosesUpdated[root_idx]) should be:

*nearKeyframes += * local2global(keyframeLaserClouds[keyNear], keyframePosesUpdated[keyNear]);

The target of the function “loopFindNearKeyframesCloud ” is transforming the nearby keyframe point cloud stored in keyframeLaserClouds from thr Lidar coordinate to the world coordinate, to form a submap in _loop_kf_idx, so I think local2global should be the tranformation stored in keyframePosesUpdated[keyNear].

微信图片_20220309111635

Ubuntu 20.04 | Ros Noetic | make -j16 -l16" failed

I'm trying to build and install SC-A-LOAM on Ubuntu 20.04 and ROS Noetic.

I had two main errors after I run catkin_make, Errors are as below:

  1. fatal error: opencv/cv.h: No such file or directory 44 | #include <opencv/cv.h>

I solved this error by editing "scanRegistration.cpp" file, I write #include <opencv2/opencv.hpp> instead of #include <opencv/cv.h>
I also changed set(CMAKE_CXX_FLAGS "-std=c++14") instead of set(CMAKE_CXX_FLAGS "-std=c++11") in CMakeLists.txt

  1. error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope 91 | cv::Mat left_image = cv::imread(left_image_path.str(), CV_LOAD_IMAGE_GRAYSCALE);
    image

I couldn't manage to solve this issue, any idea about it?

roslaunch aloam_velodyne aloam_mulran.launch # for MulRan dataset setting

dji@dji-MANIFOLD-2-C:~/catkin_scaloam_ws/src/SC-A-LOAM$ roslaunch aloam_velodyne aloam_mulran.launch
... logging to /home/dji/.ros/log/26d237ca-c6c4-11eb-bfca-34d26269e60d/roslaunch-dji-MANIFOLD-2-C-14613.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://dji-MANIFOLD-2-C:34089/

SUMMARY

PARAMETERS

  • /keyframe_meter_gap: 1.0
  • /lidar_type: OS1-64
  • /mapping_line_resolution: 0.4
  • /mapping_plane_resolution: 0.8
  • /mapping_skip_frame: 1
  • /minimum_range: 0.5
  • /rosdistro: melodic
  • /rosversion: 1.14.11
  • /save_directory: /home/user/Docume...
  • /sc_dist_thres: 0.2
  • /sc_max_radius: 80.0
  • /scan_line: 64

NODES
/
alaserMapping (aloam_velodyne/alaserMapping)
alaserOdometry (aloam_velodyne/alaserOdometry)
alaserPGO (aloam_velodyne/alaserPGO)
ascanRegistration (aloam_velodyne/ascanRegistration)
rviz (rviz/rviz)

auto-starting new master
process[master]: started with pid [14623]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 26d237ca-c6c4-11eb-bfca-34d26269e60d
process[rosout-1]: started with pid [14634]
started core service [/rosout]
process[ascanRegistration-2]: started with pid [14641]
process[alaserOdometry-3]: started with pid [14642]
process[alaserMapping-4]: started with pid [14643]
ERROR: cannot launch node of type [aloam_velodyne/alaserPGO]: Cannot locate node of type [alaserPGO] in package [aloam_velodyne]. Make sure file exists in package path and permission is set to executable (chmod +x)
process[rviz-6]: started with pid [14649]
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqeglfs.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqeglfs.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"eglfs"
]
},
"className": "QEglFSIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("eglfs")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqlinuxfb.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqlinuxfb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"linuxfb"
]
},
"className": "QLinuxFbIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("linuxfb")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimal.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimal.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimal"
]
},
"className": "QMinimalIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimalegl.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqminimalegl.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimalegl"
]
},
"className": "QMinimalEglIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("minimalegl")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqoffscreen.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqoffscreen.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"offscreen"
]
},
"className": "QOffscreenIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("offscreen")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqvnc.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqvnc.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"vnc"
]
},
"className": "QVncIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("vnc")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"xcb"
]
},
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/platforms" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so"
loaded library "Xcursor"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-egl-integration.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-egl-integration.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.Xcb.QXcbGlIntegrationFactoryInterface.5.5",
"MetaData": {
"Keys": [
"xcb_egl"
]
},
"className": "QXcbEglIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("xcb_egl")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.Xcb.QXcbGlIntegrationFactoryInterface.5.5",
"MetaData": {
"Keys": [
"xcb_glx"
]
},
"className": "QXcbGlxIntegrationPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("xcb_glx")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/xcbglintegrations" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes/libqgtk3.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes/libqgtk3.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformThemeFactoryInterface.5.1",
"MetaData": {
"Keys": [
"gtk3"
]
},
"className": "QGtk3ThemePlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("gtk3")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/platformthemes" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes/libqgtk3.so"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so, metadata=
{
"IID": "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1",
"MetaData": {
"Keys": [
"compose",
"xim"
]
},
"className": "QComposePlatformInputContextPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("compose", "xim")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so, metadata=
{
"IID": "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1",
"MetaData": {
"Keys": [
"ibus"
]
},
"className": "QIbusPlatformInputContextPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("ibus")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/platforminputcontexts" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/styles" ...
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/styles" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/iconengines" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so, metadata=
{
"IID": "org.qt-project.Qt.QIconEngineFactoryInterface",
"MetaData": {
"Keys": [
"svg",
"svgz",
"svg.gz"
]
},
"className": "QSvgIconPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("svg", "svgz", "svg.gz")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/iconengines" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqgif.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqgif.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"gif"
],
"MimeTypes": [
"image/gif"
]
},
"className": "QGifPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("gif")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqico.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqico.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"ico",
"cur"
],
"MimeTypes": [
"image/vnd.microsoft.icon"
]
},
"className": "QICOPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("ico", "cur")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"jpg",
"jpeg"
],
"MimeTypes": [
"image/jpeg",
"image/jpeg"
]
},
"className": "QJpegPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("jpg", "jpeg")
QFactoryLoader::QFactoryLoader() looking at "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqsvg.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqsvg.so, metadata=
{
"IID": "org.qt-project.Qt.QImageIOHandlerFactoryInterface",
"MetaData": {
"Keys": [
"svg",
"svgz"
],
"MimeTypes": [
"image/svg+xml",
"image/svg+xml-compressed"
]
},
"className": "QSvgPlugin",
"debug": false,
"version": 329989
}

Got keys from plugin meta data ("svg", "svgz")
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/imageformats" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqgif.so"
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqico.so"
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so"
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqsvg.so"
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/accessible" ...
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/accessible" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/x86_64-linux-gnu/qt5/plugins/accessiblebridge" ...
QFactoryLoader::QFactoryLoader() checking directory path "/opt/ros/melodic/lib/rviz/accessiblebridge" ...
loaded library "/usr/lib/x86_64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so"
^C[rviz-6] killing on exit
[alaserMapping-4] killing on exit
[alaserOdometry-3] killing on exit
[ascanRegistration-2] killing on exit
terminate called without an active exception
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqgif.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqico.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqjpeg.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/imageformats/libqsvg.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/iconengines/libqsvgicon.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/platformthemes/libqgtk3.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so"
QLibraryPrivate::unload succeeded on "/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so"
QLibraryPrivate::unload succeeded on "Xcursor" (faked)
[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done
dji@dji-MANIFOLD-2-C:~/catkin_scaloam_ws/src/SC-A-LOAM$ ls

ERROR: cannot launch node of type [aloam_velodyne/alaserPGO]: Cannot locate node of type [alaserPGO] in package [aloam_velodyne]. Make sure file exists in package path and permission is set to executable (chmod +x)

Kitti dataset results in inccorect orientation

I am using Sc-A-LOAM to generate odometry. This outputs a txt file called optimised poses. When I use evo_traj on the optimised poses vs kitti ground truth for 05 sequence. This is my result.
number of poses and ground truth comparison

The ground truth is in xz plane and my results are in xy plane. What is the best way to output the optimised_poses.txt in the xz plane?
optimized_poses.txt
This is in kitti format and thus doesn't have any time stamps and as you can see from the image has less number of total poses.

I am using ROS Melodic, Ubuntu 18.04
I am using minikitti publisher to publish the Kitti data
& using aloam_velodyne_HDL_64.launch

Let me know if you need any more information.

Any help is appreciated.

@gisbi-kim

failed when catkin_make the project

I got the following error message when run catkin_make to build the project. I am using Ubuntu 18.04, and it can run A-LOAM perfectly, and I have installed GTSAM4.0.0. Does anyone know how to fix the error? thank you very much.

[ 63%] Linking CXX executable /home/ruofei/code_project/cpp_project/catkin_scaloam_ws/devel/lib/aloam_velodyne/ascanRegistration
[ 72%] Linking CXX executable /home/ruofei/code_project/cpp_project/catkin_scaloam_ws/devel/lib/aloam_velodyne/kittiHelper
[ 72%] Built target kittiHelper
[ 72%] Built target ascanRegistration
In file included from /usr/include/pcl-1.8/pcl/sample_consensus/sac_model.h:52:0,
from /usr/include/pcl-1.8/pcl/sample_consensus/sac.h:45,
from /usr/include/pcl-1.8/pcl/sample_consensus/ransac.h:44,
from /usr/include/pcl-1.8/pcl/registration/icp.h:45,
from /home/ruofei/code_project/cpp_project/catkin_scaloam_ws/src/SC-A-LOAM/src/laserPosegraphOptimization.cpp:19:
/usr/include/pcl-1.8/pcl/sample_consensus/model_types.h: In function ‘void __static_initialization_and_destruction_0(int, int)’:
/usr/include/pcl-1.8/pcl/sample_consensus/model_types.h:99:3: warning: ‘pcl::SAC_SAMPLE_SIZE’ is deprecated: This map is deprecated and is kept only to prevent breaking existing user code. Starting from PCL 1.8.0 model sample size is a protected member of the SampleConsensusModel class [-Wdeprecated-declarations]
SAC_SAMPLE_SIZE (sample_size_pairs, sample_size_pairs + sizeof (sample_size_pairs) / sizeof (SampleSizeModel));
^~~~~~~~~~~~~~~
/usr/include/pcl-1.8/pcl/sample_consensus/model_types.h:99:3: note: declared here
SC-A-LOAM/CMakeFiles/alaserPGO.dir/build.make:62: recipe for target 'SC-A-LOAM/CMakeFiles/alaserPGO.dir/src/laserPosegraphOptimization.cpp.o' failed
make[2]: *** [SC-A-LOAM/CMakeFiles/alaserPGO.dir/src/laserPosegraphOptimization.cpp.o] Error 1
CMakeFiles/Makefile2:1436: recipe for target 'SC-A-LOAM/CMakeFiles/alaserPGO.dir/all' failed
make[1]: *** [SC-A-LOAM/CMakeFiles/alaserPGO.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j20 -l20" failed

Pose Graph doesn't converge

@gisbi-kim
When I am using aloam_velodyne_HDL-64.launch file the odometry is working great but I am getting this warning message

Warning

After the mini-kitti-publisher is done publishing the points the I recieve the optimized_poses.txt file but this is the output on my terminal and this doesn't converge even after leaving it for more than half an hour.

No covergence

I am using Ros Melodic on VMware. Can you recommend what should I do ?

Let me know if you need more information.

Once again thank you for creating this repository.

point_lio scancontext

I tried to run point_lio with scancontext.
Screenshot from 2023-10-18 09-56-16
The map with scancontext doesn't show. Can anyone do it with point_lio. Thanks

ERROR install

I get this message when execute catkin_make:
[-Wreturn-type]
} // xy2theta
^
[ 72%] Linking CXX executable /home/id/catkin_scaloam_ws/devel/lib/aloam_velodyne/kittiHelper
[ 72%] Linking CXX executable /home/id/catkin_scaloam_ws/devel/lib/aloam_velodyne/ascanRegistration
[ 72%] Built target kittiHelper
/home/id/catkin_scaloam_ws/src/SC-A-LOAM/src/laserPosegraphOptimization.cpp: In function ‘int main(int, char**)’:
/home/id/catkin_scaloam_ws/src/SC-A-LOAM/src/laserPosegraphOptimization.cpp:781:10: warning: variable ‘unused’ set but not used [-Wunused-but-set-variable]
auto unused = system((std::string("exec rm -r ") + pgScansDirectory).c_str());
^~~~~~
[ 72%] Built target ascanRegistration
[ 81%] Linking CXX executable /home/id/catkin_scaloam_ws/devel/lib/aloam_velodyne/alaserOdometry
[ 81%] Built target alaserOdometry
In file included from /usr/include/pcl-1.8/pcl/sample_consensus/sac_model.h:52:0,
from /usr/include/pcl-1.8/pcl/sample_consensus/sac.h:45,
from /usr/include/pcl-1.8/pcl/sample_consensus/ransac.h:44,
from /usr/include/pcl-1.8/pcl/registration/icp.h:45,
from /home/id/catkin_scaloam_ws/src/SC-A-LOAM/src/laserPosegraphOptimization.cpp:19:
/usr/include/pcl-1.8/pcl/sample_consensus/model_types.h: In function ‘void __static_initialization_and_destruction_0(int, int)’:
/usr/include/pcl-1.8/pcl/sample_consensus/model_types.h:99:3: warning: ‘pcl::SAC_SAMPLE_SIZE’ is deprecated: This map is deprecated and is kept only to prevent breaking existing user code. Starting from PCL 1.8.0 model sample size is a protected member of the SampleConsensusModel class [-Wdeprecated-declarations]
SAC_SAMPLE_SIZE (sample_size_pairs, sample_size_pairs + sizeof (sample_size_pairs) / sizeof (SampleSizeModel));

AND THEN WHEN EXECUTING:
roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

auto-starting new master
process[master]: started with pid [30989]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 058225d2-2c07-11ec-8133-3cf011fc43dd
process[rosout-1]: started with pid [31000]
started core service [/rosout]
process[ascanRegistration-2]: started with pid [31003]
process[alaserOdometry-3]: started with pid [31008]
process[alaserMapping-4]: started with pid [31009]
process[alaserPGO-5]: started with pid [31010]
/home/id/catkin_scaloam_ws/devel/lib/aloam_velodyne/alaserPGO: error while loading shared libraries: libmetis.so: cannot open shared object file: No such file or directory
process[rviz-6]: started with pid [31016]

[alaserPGO-5] process has died [pid 31010, exit code 127, cmd /home/id/catkin_scaloam_ws/devel/lib/aloam_velodyne/alaserPGO /velodyne_points:=/velodyne_points __name:=alaserPGO __log:=/home/id/.ros/log/058225d2-2c07-11ec-8133-3cf011fc43dd/alaserPGO-5.log].

log file: /home/id/.ros/log/058225d2-2c07-11ec-8133-3cf011fc43dd/alaserPGO-5*.log
[rviz-6] process has finished cleanly

Transform error in pgoOdom

Hi,

After running sc-a-loam for a few minutes, all of a sudden I get the following error (keeps repeating until process is closed):
Saving the posegraph ... running isam2 optimization ... Saving the posegraph ... running isam2 optimization ... Saving the posegraph ... [ERROR] [1658300918.247001921]: Error transforming odometry 'pgoOdom' from frame '/camera_init' to frame 'camera_init' [ERROR] [1658300918.342610283]: Error transforming odometry 'pgoOdom' from frame '/camera_init' to frame 'camera_init' [ERROR] [1658300918.437678957]: Error transforming odometry 'pgoOdom' from frame '/camera_init' to frame 'camera_init' [ERROR] [1658300918.534470309]: Error transforming odometry 'pgoOdom' from frame '/camera_init' to frame 'camera_init'
I've tried renaming the the camera_init topic in laserPosegraphOptimization.cpp without the leading '/', to no avail.
Any ideas on what the issue might be?

[alaserPGO-4] process has died [pid 10294, exit code -11

Hello! I was trying to use this package with my own VLP-16 but after a couple of seconds, the alaserPGO node crashes every time I try to run it.

I can see the original A-LOAM's path and point cloud nicely.

Any idea what might be wrong?

Here some output on the console:

... logging to /home/maciej/.ros/log/ba604eac-0047-11ec-908e-bfd9381756ce/roslaunch-u20-10266.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://u20:44311/

SUMMARY
========

PARAMETERS
 * /keyframe_deg_gap: 10.0
 * /keyframe_meter_gap: 1.0
 * /lidar_type: VLP16
 * /mapping_line_resolution: 0.2
 * /mapping_plane_resolution: 0.4
 * /mapping_skip_frame: 1
 * /mapviz_filter_size: 0.1
 * /minimum_range: 1.0
 * /rosdistro: noetic
 * /rosversion: 1.15.11
 * /save_directory: /home/maciej/ros1...
 * /sc_dist_thres: 0.2
 * /sc_max_radius: 80.0
 * /scan_line: 16

NODES
  /
    alaserMapping (aloam_velodyne/alaserMapping)
    alaserOdometry (aloam_velodyne/alaserOdometry)
    alaserPGO (aloam_velodyne/alaserPGO)
    ascanRegistration (aloam_velodyne/ascanRegistration)
    rviz (rviz/rviz)

ROS_MASTER_URI=http://localhost:11311

process[ascanRegistration-1]: started with pid [10291]
process[alaserOdometry-2]: started with pid [10292]
process[alaserMapping-3]: started with pid [10293]
process[alaserPGO-4]: started with pid [10294]
process[rviz-5]: started with pid [10310]
Initialization finished 
[ WARN] [1629307294.464116126]: time Map corner and surf num are not enough
posegraph prior node 0 added
running isam2 optimization ...
running isam2 optimization ...
[ WARN] [1629307296.617260630]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109086.590366 according to authority unknown_publisher
[ WARN] [1629307296.717237043]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109086.590366 according to authority unknown_publisher
[ WARN] [1629307296.817238252]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109086.590366 according to authority unknown_publisher
[ WARN] [1629307296.917239281]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109086.590366 according to authority unknown_publisher
[ WARN] [1629307297.017243436]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109086.590366 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307297.117262164]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109086.590366 according to authority unknown_publisher
[ WARN] [1629307297.317240087]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307297.417241833]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307297.517260541]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307297.617252037]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307297.717247662]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307297.817249798]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307297.917247065]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307298.017245224]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307298.117269338]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109087.699800 according to authority unknown_publisher
[ WARN] [1629307298.317253555]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307298.417250487]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307298.517252378]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307298.617252157]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307298.717253878]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307298.817239369]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307298.917244045]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307299.017245617]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307299.117283562]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109088.304963 according to authority unknown_publisher
[ WARN] [1629307299.317247582]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307299.417246192]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307299.517238643]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307299.617256359]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307299.717243520]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307299.817247851]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307299.917245009]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307300.017257607]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307300.117272635]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109089.616076 according to authority unknown_publisher
[ WARN] [1629307300.317234732]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307300.417245872]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307300.517239620]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307300.617234148]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307300.717243836]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307300.817248014]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307300.917253122]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307301.017255246]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307301.117258948]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109090.826364 according to authority unknown_publisher
[ WARN] [1629307301.317240322]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307301.417248483]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307301.517242144]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307301.617234385]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307301.717241433]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307301.817248711]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307301.917230672]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307302.017231779]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307302.117292284]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109091.330624 according to authority unknown_publisher
[ WARN] [1629307302.317225988]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307302.417229726]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307302.517231800]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307302.617239636]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307302.717230389]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307302.817244364]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307302.917232462]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307303.017228086]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
[ WARN] [1629307303.117257989]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109092.540913 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307303.317276866]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307303.417239561]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307303.517235560]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307303.617233772]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307303.717234548]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307303.817268748]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307303.917328827]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[ WARN] [1629307304.017229406]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
running isam2 optimization ...
[ WARN] [1629307304.118606415]: TF_REPEATED_DATA ignoring data with redundant timestamp for frame aft_pgo at time 1622109093.852047 according to authority unknown_publisher
[alaserPGO-4] process has died [pid 10294, exit code -11, cmd /home/maciej/ros1_wss/odom/devel/lib/aloam_velodyne/alaserPGO velodyne_points:=velodyne_points __name:=alaserPGO __log:=/home/maciej/.ros/log/ba604eac-0047-11ec-908e-bfd9381756ce/alaserPGO-4.log].
log file: /home/maciej/.ros/log/ba604eac-0047-11ec-908e-bfd9381756ce/alaserPGO-4*.log

When to set LiDAR_HEIGHT=0

The default setting of LIDAR_HEIGHT in ScanContext is 2.0, indicating that there is an z-axis offset in recoreded PointClouds. However, most LiDAR datasets like KITTI record LiDAR scans in the robot-transformed-coordinate (as stated in comments). Therefore, should I set it to zero when running on KITTI dataset?

Many thanks for your reply.

running crashed with Mid-70+ex-imu

Hi, I use livox mid 70 with a extend imu running fast-lio,and it looks good. but when I run another node in SC-PGO it always crashed at begining, the log in screen is "running isam2 optimization",and after some lines like this, the ros node is crashed. my launch file is below:

<param name="scan_line" type="int" value="64" />

<!-- if 1, do mapping 10 Hz, if 2, do mapping 5 Hz. Suggest to use 1, it will adjust frequence automaticlly -->
<!-- <param name="mapping_skip_frame" type="int" value="1" /> -->

<!-- remove too closed points -->
<param name="minimum_range" type="double" value="0.5"/>

<param name="mapping_line_resolution" type="double" value="0.4"/> <!-- A-LOAM -->
<param name="mapping_plane_resolution" type="double" value="0.8"/> <!-- A-LOAM -->

<param name="mapviz_filter_size" type="double" value="0.05"/>

<!-- SC-A-LOAM -->
<param name="keyframe_meter_gap" type="double" value="0.5"/>

<!-- Scan Context -->
<param name="sc_dist_thres" type="double" value="0.3"/> <!-- SC-A-LOAM, if want no outliers, use 0.1-0.15 -->
<!-- for MulRan -->
<!-- <param name="lidar_type" type="string" value="OS1-64"/> -->

<!-- input from FASTLIO2 -->
<remap from="/aft_mapped_to_init" to="/Odometry"/>
<remap from="/velodyne_cloud_registered_local" to="/cloud_registered_body"/>
<remap from="/cloud_for_scancontext" to="/cloud_registered_lidar"/>   <!-- because ScanContext requires lidar-ego-centric coordinate for the better performance -->

<!-- utils -->
<param name="save_directory" type="string" value="$(env HOME)/sc-fast_ws/"/>  <!-- CHANGE THIS and end with / -->

<!-- nodes -->
<node pkg="aloam_velodyne" type="alaserPGO" name="alaserPGO" output="screen" /> <!-- Scan Context-based PGO -->

<!-- visulaization -->
<arg name="rvizscpgo" default="false" />
<group if="$(arg rvizscpgo)">
    <node launch-prefix="nice" pkg="rviz" type="rviz" name="rvizscpgo" args="-d $(find aloam_velodyne)/rviz_cfg/aloam_velodyne.rviz" />
</group>

loop closure problem

Hi there,

I am trying to generate a map which has big loop about 7-8 km, but loop is not closing so I investigated the code and I saw a line that prepare GPS noise error (

double bigNoiseTolerentToXY = 1000000000.0; // 1e9
) here. I decreased the error value to 2 meter xy, 1 meter height. But this action was not solve the problem.

Also a few line below there is a comment '

robustNoiseVector3 << bigNoiseTolerentToXY, bigNoiseTolerentToXY, gpsAltitudeNoiseScore; // means only caring altitude here. (because LOAM-like-methods tends to be asymptotically flyging)
' like that. So current GPS usage only includes for height correction, to solve the loop closure problem I think that I have to use GPS more effectively for xy dimensions.

Do you have any suggestion to me?

Thanks...
loop

Local and global variables have the same name

q_wodom_curr declared here locally, and here globally.

t_wodom_curr declared here locally, and here globally.

q_w_curr declared here locally, and here globally.

t_w_curr declared here locally, and here globally.

All these variables are used in the local function and in other functions.

My question is: should these local variables have a different name or should they be removed and only global variables should be used?

Bug in laserPosegraphOptimization.cpp?

In the function loopFindNearKeyframesCloud (line 412), key frames are being combined into a single point cloud to be used as the target in the ICP registration (doICPVirtualRelative).

This is how it is:

*nearKeyframes += * local2global(keyframeLaserClouds[keyNear], keyframePosesUpdated[root_idx]);

This is how it should be (I guess):

*nearKeyframes += * local2global(keyframeLaserClouds[keyNear], keyframePosesUpdated[keyNear]);

This way, the correct pose for each key frame cloud is used when converting them to the global coordinate frame. The original line results a cluttered point cloud, and thus the ICP registration results often a poor fitness score. Because the best matching key frame with index 'key' (predicted by the scan context matching) is still included in the cluttered cloud, the registration may still result a correct transform. But not always. At least not with my LiDAR data collected with Ouster OS1-32.

error during build

After installing the necessary dependencies and cloning the git, I faced the following error during build:

[ 90%] Built target alaserMapping
[ 90%] Built target ascanRegistration
[100%] Linking CXX executable /home/mcw/catkin_scaloam/devel/lib/aloam_velodyne/alaserPGO
/usr/bin/ld: cannot find -lBoost::timer
collect2: error: ld returned 1 exit status
SC-A-LOAM/CMakeFiles/alaserPGO.dir/build.make:468: recipe for target '/home/mcw/catkin_scaloam/devel/lib/aloam_velodyne/alaserPGO' failed
make[2]: *** [/home/mcw/catkin_scaloam/devel/lib/aloam_velodyne/alaserPGO] Error 1
CMakeFiles/Makefile2:1436: recipe for target 'SC-A-LOAM/CMakeFiles/alaserPGO.dir/all' failed
make[1]: *** [SC-A-LOAM/CMakeFiles/alaserPGO.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

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.