Giter Club home page Giter Club logo

ct_icp's People

Contributors

jedeschaud avatar pdell-kitware avatar pierdell 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  avatar

ct_icp's Issues

Unable to run with own dataset

Hello,
I have a folder with *.ply files with the timestamps as filenames. These ply files have been generated from Ouster LiDAR. I am finding it difficult to run this package with my dataset even though I have changed a few things in the default config file like the root folder and the dataset option. I have set the dataset option to PLY_DIRECTORY .

I get a error which says:

terminate called after throwing an instance of 'std::runtime_error'
  what():  PLY Directory is not supported by read_pointcloud. See the DirectoryIterator.
Aborted (core dumped)

I'll appreciate help in fixing this issue.

Question about initializing lidar motion

Hi again

I know the initalization of the lidar motion is one of the important thing in ICP

In your code , here

At the beginning pose of current scan, it uses the end pose of previous scan.

I don't catch up how it inits the end pose of current scan?

I don't understand above code

I would appreciate if you can explain that code, if not can you recommend something to refer ?

Best regards.

How to save the poincloud map

I start the ct_icp by using roslaunch ct_icp_odometry ct_icp_slam.launch and rosbag play semantickitti_sequence07.bag and now I want to save the pointcloud map my rostopic list is
SUMMARY

Published topics:

  • /move_base_simple/goal [geometry_msgs/PoseStamped] 1 publisher
  • /vehicle [geometry_msgs/PoseStamped] 1 publisher
  • /rosout [rosgraph_msgs/Log] 2 publishers
  • /velodyne_points [sensor_msgs/PointCloud2] 1 publisher
  • /rosout_agg [rosgraph_msgs/Log] 1 publisher
  • /clicked_point [geometry_msgs/PointStamped] 1 publisher
  • /tf_static [tf2_msgs/TFMessage] 1 publisher
  • /clock [rosgraph_msgs/Clock] 1 publisher
  • /initialpose [geometry_msgs/PoseWithCovarianceStamped] 1 publisher
  • /tf [tf2_msgs/TFMessage] 1 publisher
  • /odom_pose [nav_msgs/Odometry] 1 publisher

Subscribed topics:

  • /ct_icp/gt_pose/odom [nav_msgs/Odometry] 1 subscriber
  • /ct_icp/pose/odom [nav_msgs/Odometry] 1 subscriber
  • /rosout [rosgraph_msgs/Log] 2 subscribers
  • Published topics:
  • /move_base_simple/goal [geometry_msgs/PoseStamped] 1 publisher
  • /vehicle [geometry_msgs/PoseStamped] 1 publisher
  • /rosout [rosgraph_msgs/Log] 2 publishers
  • /velodyne_points [sensor_msgs/PointCloud2] 1 publisher
  • /rosout_agg [rosgraph_msgs/Log] 1 publisher
  • /clicked_point [geometry_msgs/PointStamped] 1 publisher
  • /tf_static [tf2_msgs/TFMessage] 1 publisher
  • /clock [rosgraph_msgs/Clock] 1 publisher
  • /initialpose [geometry_msgs/PoseWithCovarianceStamped] 1 publisher
  • /tf [tf2_msgs/TFMessage] 1 publisher
  • /odom_pose [nav_msgs/Odometry] 1 publisher

Subscribed topics:

  • /ct_icp/gt_pose/odom [nav_msgs/Odometry] 1 subscriber
  • /ct_icp/pose/odom [nav_msgs/Odometry] 1 subscriber
  • /rosout [rosgraph_msgs/Log] 2 subscribers
  • /velodyne_points [sensor_msgs/PointCloud2] 1 subscriber
  • /tf [tf2_msgs/TFMessage] 1 subscriber
  • /tf_static [tf2_msgs/TFMessage] 1 subscriber
  • /initialpose [geometry_msgs/PoseWithCovarianceStamped] 1 subscriber
  • /ct_icp/key_points [sensor_msgs/PointCloud2] 1 subscriber
    [sensor_msgs/PointCloud2] 1 subscriber
  • /tf [tf2_msgs/TFMessage] 1 subscriber
  • /tf_static [tf2_msgs/TFMessage] 1 subscriber
  • /initialpose [geometry_msgs/PoseWithCovarianceStamped] 1 subscriber
  • /ct_icp/key_points [sensor_msgs/PointCloud2] 1 subscriber

if I use rosrun pcl_ros pointcloud_to_pcd input:=/velodyne

I can only save the map in one frame,but I want to save the whole pointcloud map

ROS Installation Issue

From @ajxdhe

Thank you for your answer
but I got the new issue in ROS
when I
cd ros/roscore
mkdir cmake-build-release && cd cmake-build-release #< Create the build directory
cmake .. -DCMAKE_BUILD_TYPE=Release
It got the error
cmake .. -DCMAKE_BUILD_TYPE=Release
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/local/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/local/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
INFO [ROSCore] -- Variable "SUPERBUILD_INSTALL_DIR" not specified. Trying to set it to /home/skywalker/install
INFO [ROSCore] -- Variable "CT_ICP_INSTALL_DIR" not specified. Trying to set it to /home/skywalker/install/CT_ICP/lib/cmake.
CMake Error at /home/skywalker/ct_icp/cmake/superbuild_utils.cmake:27 (include):
include could not find requested file:

/home/skywalker/install/superbuild_import.cmake

Call Stack (most recent call first):
CMakeLists.txt:33 (SLAM_INCLUDE_SUPERBUILD)

CMake Error at CMakeLists.txt:36 (find_package):
Could not find a package configuration file provided by "SlamCore" with any
of the following names:

SlamCoreConfig.cmake
slamcore-config.cmake

Add the installation prefix of "SlamCore" to CMAKE_PREFIX_PATH or set
"SlamCore_DIR" to a directory containing one of the above files. If
"SlamCore" provides a separate development package or SDK, be sure it has
been installed.

-- Configuring incomplete, errors occurred!
See also "/home/skywalker/ct_icp/ros/roscore/cmake-build-release/CMakeFiles/CMakeOutput.log".

Originally posted by @ajxdhe in #35 (comment)

debugging at vscode

Hi.

I tried to debugging slam.cpp at vscode.

I got a syntax error like this photo.
image

I don't know what is the problem.

I hope you reply

Compiler Issues

CT-ICP is written in C++-17,

This means you need a compiler which support C++17,

To configure the compiler you want before building the project, write the following lines:

export CC=<path-to-c-compiler>
export CXX=<path-to-cxx-compiler>

cmake .. etc..

How to run this on MulRan dataset

Hello again, thanks for your contribution. I'm trying to run this code on the MulRan dataset without success.

If you ever ran this code on the dataset, can you please provide some pointers?

I also tried to run with the "PLY_DIRECTORY" with no success:

WARNING: Logging before InitGoogleLogging() is written to STDERR
I20220725 11:23:17.709126 2555704 slam.cpp:351] Creating directory .outputs/
I20220725 11:23:17.713934 2555704 dataset.cpp:278] Found Sequence PLY_DIR
terminate called after throwing an instance of 'std::runtime_error'
  what():  PLY Directory is not supported by read_pointcloud. See the DirectoryIterator.
[1]    2555704 IOT instruction (core dumped)  ./slam -c default_config.yaml

Inspecting the code, I see there is no method to read the PLY directory.

case PLY_DIRECTORY:

Related to #27, #26, #21

Choice of interpolation method for the time continuous representation.

Hello! Thank you for such bright project and for the code release :)

I have a question related to paper. Can you please explain a motivation behind choosing the interpolation method for time continuous representation? You use a separate linear interpolation (slerp) for the rotation (S03) and translation (R^3). Did you try any other method such are linear interpolation of SE3 elements or B-splines? Why did you decide to use a such particular way?

I really appreciate any help you might provide.
Thank you in advance :)

Launch File Errors

Hi Thanks for your sharing! This is a good work.

I am now trying run ct_icp on my own dataset using Ubuntu1804/ROS/Melodic, However, when I roslaunch ct_icp_on_rosbag.launch, I got warning that Unknown <arg> attribute "required" and Unknown <include> attribute "args", it seems that these two tabs have no such attributes?

I wonder have you try this launch file on ros melodic? How can I fix it? Thanks!

Tune slam output velocity

Hello, I am able to run the slam and it works really good, but especially at the beginning of the motion I am facing a possible computation time problem.
I am using an Ouster OS0-64, and for what concern the motion on Y an Z I did not notice any problem, but when I walk with my sensor for 10m X remain around the initial value until I reach ~7m. After the output value start to change really fast and reach the correct value (and mantain it for almost all the test).
To be more clear:

Real distance(m) | 0 | 0.5 | 1.0  | 1.5  | 2.0     | 2.5  | 3.0  | 3.5 | 4.0    | 4.5   | 5.0   | 5.5 | 6.0   | 6.5  | 7.0 | 8.0 | 9.0 | 10.0 | 10.0 | 10.0 | 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/ct_icp/pose(m)  | 0 | 0.1 | -0.2 | 0.015 | -0.03 | 0.3 | 0.40 | -0.2 | 0.10   | 0.15 | 0.16 |  0.2 | 0.10   | 0.15   | 1.0| 3.0 | 5.0 | 7.0 | 9.0 | 10.0  | 

Now my PC CPUs are not in saturation, and them speed is 4.8Ghz so I do not think is an hardware problem, the ram occupation is also low (7Gb/16Gb)

There is a portion of code to modify in order to speed up the computation of the output pose? I have try to change some parameters in ct_icp/include/ct_icp/odometry.h but nothing has changed.

How to reproduce results for NCLT

Hello @jedeschaud, sorry to disturb you.

We are trying to reproduce the results for ct-icp on the NCLT dataset, and we couldn't succeed so far. How can I get this number?
image

Checking the implementation, and using the original velodyne_hits.bin file, I also see that you are processing 42764 in total, where the velodyne_sync folder contains only 28127 scans. How did you guys evaluate the results of the system?

Moreover, which ground truth poses were used to carry on the evaluation? According to the implementation,

case NCLT:

// Returns the Path to the Ground Truth file for the given sequence
// Note: The name of the sequence is not checked
inline std::string ground_truth_path(const DatasetOptions &options,
                                     const std::string &sequence_name) {
    std::string ground_truth_path = options.root_path;
    if (ground_truth_path.size() > 0 && ground_truth_path[ground_truth_path.size() - 1] != '/')
        ground_truth_path += '/';

    switch (options.dataset) {
        case NCLT:
            throw std::runtime_error("Not Implemented!");
    }
    return ground_truth_path;
}

Thanks a lot in advance

Termination: NO_CONVERGENCE on my own dataset

Hi Thanks for your sharing of this excellent work!

I have ssuccessfully run ct icp on my own dataset, however, I have two question, and I hope you can help me!

(1) My dataset is collected using OS1-128 Lidar, shoud I modified any configuration in the code to adapt to the lidar?

(2) The terminal says : Termination: NO_CONVERGENCE, Is it normal? Or did I mistake something? I have post one output below, the loss is about 0.1.

Thanks for your reading!

/* ------------------------------------------------------------------------ */
REGISTRATION OF FRAME number 704 (Fid:704) with CERES solver
Number of points in sub-sampled frame: 6292
Initial ego-motion distance: 0.219946
Ceres Solver Report: Iterations: 2, Initial cost: 1.823143e-01, Final cost: 1.734975e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.25545(deg)
[CT-ICP]: Translation diff: 0.0268903(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.753664e-01, Final cost: 1.741726e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.126741(deg)
[CT-ICP]: Translation diff: 0.0156516(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.658873e-01, Final cost: 1.649816e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.064464(deg)
[CT-ICP]: Translation diff: 0.0102195(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.587869e-01, Final cost: 1.583586e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.0440787(deg)
[CT-ICP]: Translation diff: 0.00744236(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.574686e-01, Final cost: 1.567192e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.0759043(deg)
[CT-ICP]: Translation diff: 0.00731901(m)
[CT-ICP]: Correction (Optim-Init[end])=0.0200416(m)
[CT-ICP]: Correction (Optim-Init[begin])=0.0105974(m)
[CT-ICP]: Begin Pose:
-0.372328 0.927865 0.0209494 9.44271
-0.927987 -0.372542 0.00730528 54.7062
0.0145828 -0.0167208 0.999754 -0.100985
0 0 0 1
[CT-ICP]: End Pose:
-0.371037 0.928334 0.0229463 9.35357
-0.928504 -0.371265 0.00648589 54.5304
0.0145402 -0.0188992 0.999716 -0.0981214
0 0 0 1
Trajectory correction [begin(t) - end(t-1)]: 0
Final ego-motion distance: 0.197156
Elapsed Time: 63.3284 (ms)
Inserting points in the Map: Skipped Frames [0 / 5] Total Insertions: 704
Cumulative Orientation: 0.117865°
Cumulative Distance: 0.18717m
Ego Orientation: 0.147157°

[RUNNING] Bag Time: 1656034744.789619 Duration: 70.598759 / 114.797567
[CT-ICP] Logged Values:
-- icp_duration_neighborhood: 32.8843
-- icp_duration_solve: 21.011
-- icp_num_iters: 5
-- icp_total_duration: 55.9733
-- odometry_duration_sampling: 0.164952
-- odometry_initialization: 0.720628
-- odometry_initialization(ms): 6.28906
-- odometry_map_update(ms): 37.0534
-- odometry_num_keypoints: 1045
-- odometry_total: 104.93
-- odometry_total_duration(ms): 63.3284
-- odometry_transform(ms): 3.43219
-- odometry_try_register: 57.0291

[RUNNING] Bag Time: 1656034744.839663 Duration: 70.648802 / 114.797567
/* ------------------------------------------------------------------------ */

dev Branch `CMake Error: Invalid value used with --config`

Hello, I am attempting to build the dev branch to use CT ICP with ROS.

OS: Ubuntu 18.04
CMake: V3.23.0
Clang: 10.0
Branch: dev

I can only get halfway through the steps in Step 1: Superbuild, SlamCore, ROSCore before I get a build error.

Attempting to Build

myUser@myUsermain:~/Documents/ct_icp/$ mkdir .cmake-build-superbuild && cd .cmake-build-superbuild


myUser@myUsermain:~/Documents/ct_icp/.cmake-build-superbuild$ cmake ../superbuild
-- Configuring done
-- Generating done
-- Build files have been written to: /home/myUser/Documents/ct_icp/.cmake-build-superbuild


myUser@myUsermain:~/Documents/ct_icp/.cmake-build-superbuild$ cmake --build . --config Release -v
/usr/local/bin/cmake -S/home/myUser/Documents/ct_icp/superbuild -B/home/myUser/Documents/ct_icp/.cmake-build-superbuild --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/bin/cmake -E cmake_progress_start /home/myUser/Documents/ct_icp/.cmake-build-superbuild/CMakeFiles /home/myUser/Documents/ct_icp/.cmake-build-superbuild//CMakeFiles/progress.marks
/usr/bin/make  -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/myUser/Documents/ct_icp/.cmake-build-superbuild'
/usr/bin/make  -f CMakeFiles/MappingResearchKEU_superbuild.dir/build.make CMakeFiles/MappingResearchKEU_superbuild.dir/depend
make[2]: Entering directory '/home/myUser/Documents/ct_icp/.cmake-build-superbuild'
cd /home/myUser/Documents/ct_icp/.cmake-build-superbuild && /usr/local/bin/cmake -E cmake_depends "Unix Makefiles" /home/myUser/Documents/ct_icp/superbuild /home/myUser/Documents/ct_icp/superbuild /home/myUser/Documents/ct_icp/.cmake-build-superbuild /home/myUser/Documents/ct_icp/.cmake-build-superbuild /home/myUser/Documents/ct_icp/.cmake-build-superbuild/CMakeFiles/MappingResearchKEU_superbuild.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/myUser/Documents/ct_icp/.cmake-build-superbuild'
/usr/bin/make  -f CMakeFiles/MappingResearchKEU_superbuild.dir/build.make CMakeFiles/MappingResearchKEU_superbuild.dir/build
make[2]: Entering directory '/home/myUser/Documents/ct_icp/.cmake-build-superbuild'
[  6%] Performing update step for 'MappingResearchKEU_superbuild'
cd /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild && /usr/local/bin/cmake -P /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/tmp/MappingResearchKEU_superbuild-gitupdate.cmake
Enter passphrase for key '/home/myUser/.ssh/id_rsa': 
HEAD is now at f666378 [fix]
[ 12%] No patch step for 'MappingResearchKEU_superbuild'
/usr/local/bin/cmake -E echo_append
/usr/local/bin/cmake -E touch /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-stamp/MappingResearchKEU_superbuild-patch
[ 18%] Performing configure step for 'MappingResearchKEU_superbuild'
cd /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build && /usr/local/bin/cmake -DSUPERBUILD_INSTALL_DIR=/home/myUser/Documents/ct_icp/superbuild/../install -DWITH_G2O=OFF -DWITH_OPENCV=OFF -DWITH_SQLITE=OFF -DWITH_VIZ3D=OFF "-GUnix Makefiles" /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild
Re-run cmake no build system arguments
INFO [Superbuild] -- [Generation] -- Generating GTest dependency
INFO [Superbuild] -- [Generation] -- Generating GLOG dependency
INFO [Superbuild] -- [Generation] -- Generating Eigen3 dependency
INFO [Superbuild] -- [Generation] -- Generating Ceres dependency
INFO [Superbuild] -- [Generation] -- Generating yaml-cpp dependency
INFO [Superbuild] -- [Generation] -- Generating cereal dependency
INFO [Superbuild] -- [Generation] -- Generating tessil dependency
INFO [Superbuild] -- [Generation] -- Generating nanoflann dependency
INFO [Superbuild] -- [Generation] -- Generating tclap dependency
INFO [Superbuild] -- [Generation] -- Generating colormap dependency
INFO [Superbuild] -- [Generation] -- Generating tinyply dependency
-- Configuring done
-- Generating done
-- Build files have been written to: /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build
cd /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build && /usr/local/bin/cmake -E touch /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-stamp/MappingResearchKEU_superbuild-configure
[ 25%] Performing build step for 'MappingResearchKEU_superbuild'
cd /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build && /usr/local/bin/cmake --build /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build --config --target install
CMake Error: Invalid value used with --config
Usage: cmake --build <dir>             [options] [-- [native-options]]
       cmake --build --preset <preset> [options] [-- [native-options]]
Options:
  <dir>          = Project binary directory to be built.
  --preset <preset>, --preset=<preset>
                 = Specify a build preset.
  --list-presets
                 = List available build presets.
  --parallel [<jobs>], -j [<jobs>]
                 = Build in parallel using the given number of jobs. 
                   If <jobs> is omitted the native build tool's 
                   default number is used.
                   The CMAKE_BUILD_PARALLEL_LEVEL environment variable
                   specifies a default parallel level when this option
                   is not given.
  --target <tgt>..., -t <tgt>... 
                 = Build <tgt> instead of default targets.
  --config <cfg> = For multi-configuration tools, choose <cfg>.
  --clean-first  = Build target 'clean' first, then build.
                   (To clean only, use --target 'clean'.)
  --resolve-package-references={on|only|off}
                 = Restore/resolve package references during build.
  --verbose, -v  = Enable verbose output - if supported - including
                   the build commands to be executed. 
  --             = Pass remaining options to the native tool.
CMakeFiles/MappingResearchKEU_superbuild.dir/build.make:85: recipe for target 'MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-stamp/MappingResearchKEU_superbuild-build' failed
make[2]: *** [MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-stamp/MappingResearchKEU_superbuild-build] Error 1
make[2]: Leaving directory '/home/myUser/Documents/ct_icp/.cmake-build-superbuild'
CMakeFiles/Makefile2:84: recipe for target 'CMakeFiles/MappingResearchKEU_superbuild.dir/all' failed
make[1]: *** [CMakeFiles/MappingResearchKEU_superbuild.dir/all] Error 2
make[1]: Leaving directory '/home/myUser/Documents/ct_icp/.cmake-build-superbuild'
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

Error

After rerunning the CMake in verbose mode, I found the error to be caused by running the following command without specifying the configuration to use.

cd /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build && /usr/local/bin/cmake --build /home/myUser/Documents/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build --config --target install

Possible Fix

My best guess is that the package will need to be built with the Release configuration?
At the end of the above command, I believe that:
/src/MappingResearchKEU_superbuild-build --config --target install
should be replaced with something like
/src/MappingResearchKEU_superbuild-build --config Release --target install

visualization with viz3d

Hi, is there a way to properly setup the visualization with viz3d? I was running kitti_raw 01 sequence and could not see the map properly.

Thanks!

ct_icp

Pybind issue

Thank you very much for your work!
I didn't find any bindings to python in the compile command you provided, am I missing something?

I have a question about the article "CT-ICP"

I don't know whether this Github issue pages are right place for question...

I have read your paper CT-ICP: Real-time Elastic LiDAR Odometry with Loop Closure.

I successfully have built your ct_icp code using KITTI dataset with viz3d

Here is my question

What is exactly the role of pyLiDAR-SLAM ?

The paper says that ct_icp is lidar-only odometry and has loop closure itself using g2o

Is it enough for SLAM to use ct_icp ?

I would appreciate it if you could answer my question...!


Best regards.

why my Elapsed Search Neighbors cost too much? can you answer for me,thanks

thanks for openning your code.

Number of points in sub-sampled frame: 35679 / 126902
Initial ego-motion distance: 0
Elapsed Normals: 35.0737
Elapsed Search Neighbors: 567.692
Elapsed A Construction: 0
Elapsed Select closest: 2.18221
Elapsed Solve: 0.222377
Elapsed Solve: 8.04642
Number iterations CT-ICP : 5
Elapsed Elastic_ICP: 681.094
Number of Keypoints extracted: 4640 / Actual number of residuals: 4180
Trajectory correction [begin(t) - end(t-1)]: 0
Final ego-motion distance: 0.29746
Average Load Factor (Map): 0.324829
Number of Buckets (Map): 16384
Number of points (Map): 39514
Elapsed Time: 683.08 (ms)

here is my log info of one frame, why my Elapsed Search Neighbor cost too much?

best wishes

libgflags link error

Hi,thanks for your work
when I run "./slam -c robust_high_frequency_config.yaml" ,the output is "error while loading shared libraries: libgflags.so.2.2: cannot open shared object file: No such file or directory". I have install gflag in “usr/local/”. And I can't find where link gflags in cmakelists.txt.
hope for your reply,thanks a lot.

kitti timestamps

great appreciate with opening your great work!
first, can you provide dataset passcord to me, no one relpy in mail,
second, And when I see kitti website, the raw point cloud data do not have time information except scan begin and end time,
How do you get the time information?

thanks a lot
best wishes!

Issues during catkin_make (Step 3)

Dear Authors:
Thanks for sharing your work and detailed installation steps. I have trouble understanding superbuild-install-dir in Step2, and I have no idea how to set it in Step3 "-DSUPERBUILD_INSTALL_DIR=". Some information are shown below:

Environment

Ubuntu 20.04
CMake 3.25.0
gcc 9.4.0
ROS Noetic
Python 3.8.10

Steps

I met no issues in Step 1 & 2, and I can find a superbuild_import.cmake file in the install dir at the root.

But I didn't see a CT_ICP subdirectory in Superbuild Directory (I'm not sure whether the Superbuild Directory refers to <path/to/ct_icp/.cmake-build-superbuild>).

I have link ct_icp_odometry and slam_roscore to my catkin workspace.

Command in Step 3

catkin_make -DSUPERBUILD_INSTALL_DIR="../ct_icp/.cmake-build-superbuild"

Errors

Base path: /home/bit/CODE/Drivers/CT_ICP_WS
Source space: /home/bit/CODE/Drivers/CT_ICP_WS/src
Build space: /home/bit/CODE/Drivers/CT_ICP_WS/build
Devel space: /home/bit/CODE/Drivers/CT_ICP_WS/devel
Install space: /home/bit/CODE/Drivers/CT_ICP_WS/install
####
#### Running command: "cmake /home/bit/CODE/Drivers/CT_ICP_WS/src -DSUPERBUILD_INSTALL_DIR=../ct_icp/.cmake-build-superbuild -DCATKIN_DEVEL_PREFIX=/home/bit/CODE/Drivers/CT_ICP_WS/devel -DCMAKE_INSTALL_PREFIX=/home/bit/CODE/Drivers/CT_ICP_WS/install -G Unix Makefiles" in "/home/bit/CODE/Drivers/CT_ICP_WS/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/bit/CODE/Drivers/CT_ICP_WS/devel
-- Using CMAKE_PREFIX_PATH: /home/bit/CODE/Drivers/ugv_noetic/devel;/opt/ros/noetic
-- This workspace overlays: /home/bit/CODE/Drivers/ugv_noetic/devel;/opt/ros/noetic
-- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3") 
-- Using PYTHON_EXECUTABLE: /usr/bin/python3
-- Using Debian Python package layout
-- Using empy: /usr/lib/python3/dist-packages/em.py
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/bit/CODE/Drivers/CT_ICP_WS/build/test_results
-- Forcing gtest/gmock from source, though one was otherwise available.
-- Found gtest sources under '/usr/src/googletest': gtests will be built
-- Found gmock sources under '/usr/src/googletest': gmock will be built
CMake Deprecation Warning at /usr/src/googletest/CMakeLists.txt:4 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


CMake Deprecation Warning at /usr/src/googletest/googlemock/CMakeLists.txt:45 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


CMake Deprecation Warning at /usr/src/googletest/googletest/CMakeLists.txt:56 (cmake_minimum_required):
  Compatibility with CMake < 2.8.12 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- Found PythonInterp: /usr/bin/python3 (found version "3.8.10") 
-- Using Python nosetests: /usr/bin/nosetests3
-- catkin 0.8.10
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~  traversing 2 packages in topological order:
-- ~~  - slam_roscore
-- ~~  - ct_icp_odometry
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'slam_roscore'
-- ==> add_subdirectory(slam_roscore)
CMake Error at slam_roscore/CMakeLists.txt:18 (include):
  include could not find requested file:

    ../ct_icp/.cmake-build-superbuild/CT_ICP/lib/cmake/cmake/includes.cmake


CMake Error at slam_roscore/CMakeLists.txt:19 (SLAM_DEFAULT_VARIABLES):
  Unknown CMake command "SLAM_DEFAULT_VARIABLES".


-- Configuring incomplete, errors occurred!
See also "/home/bit/CODE/Drivers/CT_ICP_WS/build/CMakeFiles/CMakeOutput.log".
See also "/home/bit/CODE/Drivers/CT_ICP_WS/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed


Possible causes

Maybe I set the wrong parameter -DSUPERBUILD_INSTALL_DIR, but I really don't know what is SUPERBUILD_INSTALL_DIR, or I have mistakes in Step 1 or 2.

Looking forward to your help.

Parameters meaning

Hi, I need to change the configuration for my dataset.
Where I can find the parameter meanings?
There is an explanation about how they influence the output?

Working on Ubuntu 20.04 (ROS Noetic)

Hi, again.

I'd appreciate for you to share the ROS wrapping.

Is it work on Ubuntu 20.04 (ROS Noetic) ?

Actually, I have trouble with installing SuperBuild.

Is loop closure enable?

Hi Thanks for your great work!

When I trying roslaunch ct_icp_odometry ct_icp_odometry_node, I found it only output odom, not path, so I guess it does not contains loop closure, I wonder how can I enable loop closure in ros?

Thanks!

Fail to use CERES Analytic Derivation for CT-ICP

Hi,

I found you used auto derivation of CERES when minimizing "CTPointToPlaneFactor" residuals. However, when I try to use analytic derivation instead of auto derivation, I found the variables (e.g., pose_begin and pose_end) cannot be updated normally and are always identity matrix. Have you successfully used analytic derivation for CT-ICP? I doubt the analytic derivation of CERES may not be applicable to your "CTPointToPlaneFactor".

Heres is my code for the analytic derivation of "CTPointToPlaneFactor":

class CTPointToPlaneFactor : public ceres::SizedCostFunction<1, 7, 7>
{

public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW

    CTPointToPlaneFactor(const Eigen::Vector3d &reference_point_, const Eigen::Vector3d &raw_keypoint_,
                          const Eigen::Vector3d &reference_normal_, double alpha_time_, double weight_ = 1.0);

    virtual ~CTPointToPlaneFactor() {}

    virtual bool Evaluate(double const* const* parameters, double* residuals, double** jacobians) const;

    Eigen::Vector3d raw_keypoint;
    Eigen::Vector3d reference_point;
    Eigen::Vector3d reference_normal;
    double alpha_time;
    double weight = 1.0;
};

CTPointToPlaneFactor::CTPointToPlaneFactor(const Eigen::Vector3d &reference_point_, const Eigen::Vector3d &raw_keypoint_,
                                           const Eigen::Vector3d &reference_normal_, double alpha_time_, double weight_)
{
    raw_keypoint = raw_keypoint_;
    reference_point = reference_point_;
    reference_normal = reference_normal_;
    alpha_time = alpha_time_;
    weight = weight_;
}

bool CTPointToPlaneFactor::Evaluate(double const* const* parameters, double* residuals, double** jacobians) const
{
    const Eigen::Quaterniond rot_begin(parameters[0][6], parameters[0][3], parameters[0][4], parameters[0][5]);
    const Eigen::Quaterniond rot_end(parameters[1][6], parameters[1][3], parameters[1][4], parameters[1][5]);
    const Eigen::Vector3d tran_begin(parameters[0][0], parameters[0][1], parameters[0][2]);
    const Eigen::Vector3d tran_end(parameters[1][0], parameters[1][1], parameters[1][2]);

    Eigen::Quaterniond rot_slerp = rot_begin.slerp(alpha_time, rot_end);
    rot_slerp.normalize();
    Eigen::Vector3d tran_slerp = tran_begin * (1 - alpha_time) + tran_end * alpha_time;

    Eigen::Vector3d point_world = rot_slerp * raw_keypoint + tran_slerp;
    double distance = weight * (reference_point - point_world).transpose() * reference_normal;

    residuals[0] = distance;

    if (jacobians)
    {
        if (jacobians[0])
        {
            Eigen::Map<Eigen::Matrix<double, 1, 7, Eigen::RowMajor>> jacobian_pose_begin(jacobians[0]);
            jacobian_pose_begin.setZero();

            jacobian_pose_begin.block<1, 3>(0, 3) = - reference_normal.transpose() * rot_begin.toRotationMatrix() * numType::skewSymmetric(raw_keypoint) * weight * (1 - alpha_time);
            jacobian_pose_begin.block<1, 3>(0, 0) = reference_normal.transpose() * weight * (1 - alpha_time);
        }

        if (jacobians[1])
        {
            Eigen::Map<Eigen::Matrix<double, 1, 7, Eigen::RowMajor>> jacobian_pose_end(jacobians[1]);
            jacobian_pose_end.setZero();

            jacobian_pose_end.block<1, 3>(0, 3) = - reference_normal.transpose() * rot_end.toRotationMatrix() * numType::skewSymmetric(raw_keypoint) * weight * alpha_time;
            jacobian_pose_end.block<1, 3>(0, 0) = reference_normal.transpose() * weight * alpha_time;
        }
    }

    return true;
}

Run ct_icp on Darpa tunnel circuit datasets

Hi, I have manage to make the slam work on Darpa urban datasets, now I am trying to test it in the tunnel ciruits.
As you links say, them al compressed, so I decompress all of them with rosbag decompress file.bag .
I have correctly remap the pointcloud topic, lidar model and frequency are the same and at the moment I have not change anything inside the param yaml file.
When I launch the simulation the simulation starts, but the odometry topic /ct_icp/pose/odom is not published.
As you can see from the following images, also the tf from odom to base_link is not generated.

This image are the TF from the urban datasets:
Screenshot from 2022-11-03 10-50-21

This one are the TF from the tunnel:
Screenshot from 2022-11-03 12-50-19

This one is a screenshot from RViz after some seconds: as you can see the position frame are not published even if the robot is already inside the tunnel (the robot stars outside the tunnel)

rviz_screenshot_2022_11_03-12_42_01

This one are the topic from rqt:
Screenshot from 2022-11-03 11-38-45

What I am doing wrong? Can someone please help me?

Build/Compilation Error - filesystem No Such file or directory (GCC-7)

In your installation there are 3 steps to install ct-icp code.

[1] $ .\ct_icp_build.sh Release "Unix Makefiles" ON ON  # Builds the project in "Release" mode, with "Unix Makefiles" cmake generator, with python binding and with the visualization activated
[2] $ source env.sh                                     # Setup the environment (.so locations) 
[3] $ .\slam -c default_config.yaml                     # Launches the SLAM

I think the symbol '\' need to be changed as '/' because it is about unix system.
Anyway, when I put the command [1], the errors occur.

Error is ,

/home/bigbigpark/ct_icp/src/ct_icp/utils.hpp:5:10: fatal error: filesystem: No such file or directory
 #include <filesystem>

The library is available more than C++17. I checked CMakeLists.txt....
How can I build this package ?

Thanks

GN vs Ceres Optimization

Hello, thanks for this great work!
I saw that the default optimization (in default_config.yaml) is using the Gauss Newton optimization and for the robust configs Ceres is used. The Jacobians for the rotation look for me like an approximation. Is this true, and if yes do you think the approximation error is relevant?

Is Ceres mainly used for the robust loss functions or also to get better Jacobians by the autodiff?

Thanks and best regards,
Louis

Cmake Error in Ubuntu20.04

$ cmake .. -DCMAKE_BUILD_TYPE=Release -DSUPERBUILD_INSTALL_DIR=/home/lingbo/open-source-project/ct_icp/install -DSLAMCORE_INSTALL_DIR=/home/lingbo/open-source-project/ct_icp/install/SlamCore -DCT_ICP_INSTALL_DIR=/home/lingbo/open-source-project/ct_icp/install/CT_ICP -DEIGEN_DIR=/home/lingbo/open-source-project/ct_icp/install/Eigen3/share/eigen3/cmake
INFO [Superbuild] -- Successfully found target glog::glog
INFO [Superbuild] -- Successfully Found Target Eigen3::Eigen
-- Found required Ceres dependency: Eigen version 3.3.7 in /home/lingbo/open-source-project/ct_icp/install/Eigen3/include/eigen3
-- Found required Ceres dependency: glog
-- Found required Ceres dependency: gflags
-- Found Ceres version: 2.0.0 installed in: /home/lingbo/open-source-project/ct_icp/install/Ceres with components: [EigenSparse, SparseLinearAlgebraLibrary, LAPACK, SuiteSparse, CXSparse, SchurSpecializations, Multithreading]
INFO [Superbuild] -- Successfully found target Ceres::ceres
INFO [Superbuild] -- Successfully found target yaml-cpp
INFO [Superbuild] -- Successfully found target GTest::gtest
INFO [Superbuild] -- Successfully found target cereal
INFO [Superbuild] -- Successfully found target tclap::tclap
INFO [Superbuild] -- Successfully found target tsl::robin_map
INFO [Superbuild] -- Successfully found target nanoflann::nanoflann
INFO [Superbuild] -- Successfully found target colormap::colormap
INFO [Superbuild] -- Successfully found target tinyply::tinyply
CMake Error at cmake/external.cmake:13 (get_target_property):
INTERFACE_LIBRARY targets may only have whitelisted properties. The
property "IMPORTED_RELEASE_LOCATION" is not allowed.
Call Stack (most recent call first):
CMakeLists.txt:51 (include)

INFO Eigen3::Eigen NOTFOUND
INFO /home/lingbo/open-source-project/ct_icp/install/Ceres/lib/libceres.so.2.0.0
INFO /home/lingbo/open-source-project/ct_icp/install/glog/lib/libglog.so.0.5.0
CMake Error at cmake/external.cmake:13 (get_target_property):
INTERFACE_LIBRARY targets may only have whitelisted properties. The
property "IMPORTED_RELEASE_LOCATION" is not allowed.
Call Stack (most recent call first):
CMakeLists.txt:51 (include)

INFO tsl::robin_map NOTFOUND
INFO /home/lingbo/open-source-project/ct_icp/install/yaml-cpp/lib/libyaml-cpp.so.0.6.3
CMake Error at cmake/external.cmake:13 (get_target_property):
INTERFACE_LIBRARY targets may only have whitelisted properties. The
property "IMPORTED_RELEASE_LOCATION" is not allowed.
Call Stack (most recent call first):
CMakeLists.txt:51 (include)

INFO colormap::colormap NOTFOUND
INFO /home/lingbo/open-source-project/ct_icp/install/tinyply/lib/libtinyply.so
INFO -- [CT-ICP] -- Appending to the INSTALL RPATH the RPATH to the external libraries:
[:/home/lingbo/open-source-project/ct_icp/install/Ceres/lib:/home/lingbo/open-source-project/ct_icp/install/glog/lib:/home/lingbo/open-source-project/ct_icp/install/yaml-cpp/lib:/home/lingbo/open-source-project/ct_icp/install/tinyply/lib]
INFO [CT_ICP] -- "WITH_GTSAM=OFF gtsam dependent targets will not be built"
-- Configuring incomplete, errors occurred!
See also "/home/lingbo/open-source-project/ct_icp/cmake-build-release/CMakeFiles/CMakeOutput.log".
See also "/home/lingbo/open-source-project/ct_icp/cmake-build-release/CMakeFiles/CMakeError.log".

Modify superbuild ceres version

Hello,
is possible to modify the Ceres version downloaded during the dependency installation from https://gitlab.kitware.com/keu-computervision/MappingResearchKEU/Superbuild ?

At the moment Kitware use Ceres 2.0.0, but I wish to use the latest stable version (2.1.0).
How can I do?

Doubt about CT_ICP_GN function.

Hi,
Thanks for sharing. Your CT_ICP paper is very useful, and the code is beautiful.
But I'm confused. While studying your paper and code, I found that there are some formula that haven't mentioned in your paper. During the step 4 in the "CT_ICP_GN"(Gauss-Newton solver) function, I haven't understand the vector u(cbx, cby, cbz, nbx, nby, nbz, cex, cey, cez, nex, ney, nez) represents in your paper. What's the result of the previous point cross product the closest point normal used for? I'm doubt that I loss some import information.
Could you please tell me where I can find related paper or math formula?

[Ceres] double free or corruption (out), Aborted (core dumped)

Hi

I am using CT-ICP, ICRA 2022 and found some errors in ct_icp.cpp. I successfully compile and built this package.

When I run this code, an error occured in the function of CT_ICP_CERES.

In my terminal it says,

double free or corruption (out)
Aborted (core dumped)

I debugged that code, I found where the problem starts.

ceres::Solve(ceres_options, problem.get(), &summary);

Here is my environment.

Ubuntu 20.04

cmake 3.18.0

gcc/g++ 9.4.0
Ceres solver 2.1.0

robin-map 1.0.0

How can I fix this problem?

How to get the Derivatives (Jacobians)

Hi, @jedeschaud

I think you've done a great job in the field of SLAM. The results of CT-ICP is significant. The coding is good too. Would you please tell me how to get the derivatives (jacobians) of CTPointToPlaneFunctor with respect to the corresponding two poses? I see you didn't use any form of cost function defined in ceres such as AutoDiffCostFunction. So i wonder how the optimization works by gradients?

Eigen::Quaternion<T> quat_inter = quat_begin.slerp(T(alpha_timestamps_), quat_end);

Mismatching data field in code and config files

The field rotation_diff_threshold under odometry_options which appears in multiple config files is not actually used in the code. The code attempts to read the field orientation_error_threshold instead, and will always use the default value.

RPath Handling

Problem:

After correctly building, run_odometry does not find external

The problem is that when building the CMAKE project, the path to the external shared libraries is not set in the runpath of the executable

This is a cmake problem, and can be seen when running

readelf -d run_odometry

Dynamic section at offset 0x5b7f0 contains 35 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libCT_ICP.so]
 0x0000000000000001 (NEEDED)             Shared library: [libSlamCore.so]
 0x0000000000000001 (NEEDED)             Shared library: [libglog.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libyaml-cpp.so.0.6]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000001d (RUNPATH)            Library runpath: [/home/ivizzo/dev/slam/ct_icp/install/CT_ICP/lib]
 0x000000000000000c (INIT)               0x15000
 0x000000000000000d (FINI)               0x4e0a4
 0x0000000000000019 (INIT_ARRAY)         0x5b440
 0x000000000000001b (INIT_ARRAYSZ)       24 (bytes)
 0x000000000000001a (FINI_ARRAY)         0x5b458
 0x000000000000001c (FINI_ARRAYSZ)       8 (bytes)
 0x000000006ffffef5 (GNU_HASH)           0x3b0
 0x0000000000000005 (STRTAB)             0x59c0
 0x0000000000000006 (SYMTAB)             0x1640
 0x000000000000000a (STRSZ)              43715 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000015 (DEBUG)              0x0
 0x0000000000000003 (PLTGOT)             0x5ca60
 0x0000000000000002 (PLTRELSZ)           3984 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x13610
 0x0000000000000007 (RELA)               0x10b98
 0x0000000000000008 (RELASZ)             10872 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000000000001e (FLAGS)              BIND_NOW
 0x000000006ffffffb (FLAGS_1)            Flags: NOW PIE
 0x000000006ffffffe (VERNEED)            0x10a28
 0x000000006fffffff (VERNEEDNUM)         4
 0x000000006ffffff0 (VERSYM)             0x10484
 0x000000006ffffff9 (RELACOUNT)          336
 0x0000000000000000 (NULL)               0x0

the line:
0x000000000000001d (RUNPATH) Library runpath: [/home/ivizzo/dev/slam/ct_icp/install/CT_ICP/lib]
Should have all path to the installed shared libraries

How to run with pyLiDAR-SLAM on KITTI-corrected?

Hello authors. Thank you all for your excellent work. It's amazing!

I can reproduce the results of KITTI-corrected in your paper (Table I), and I wish to run your ct_icp with pyLiDAR-SLAM (as it produces a loop closure function if I understand your code correctly). However, in your repo and pyLiDAR-SLAM, I cannot find any script to execute pyLiDAR-SLAM with your ct_icp module.

Could you please let me know how to run it or if you could directly upload the pose results of KITTI-corrected (with loop closure)?

I sincerely appreciate your work and consideration! Thanks again!

Run ct_icp on Jetson Nano

Hello, I would like to run this slam on my Jetson Nano 4Gb.
I have manage to install and build on it, but even if I use Ceres as solver, I can not manage to run the solver on the board GPU.
I know that only some type of Ceres option are currently supperted by CUDA:

"CUDA If you have an NVIDIA GPU then Ceres Solver can use it accelerate the solution of the Gauss-Newton linear systems using the CMake flag USE_CUDA. Currently this support is limited to using the dense linear solvers that ship with CUDA. As a result GPU acceleration can be used to speed up DENSE_QR, DENSE_NORMAL_CHOLESKY and DENSE_SCHUR. This also enables CUDA mixed precision solves for DENSE_NORMAL_CHOLESKY and DENSE_SCHUR. Optional."

So, I would like to know which dense linear solver have you use.

Debian/testing: build OK

Running debian/testing, compilation fails:

>> cmake --build . --target install --config Release --parallel 4
[  1%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/pointcloud.cxx.o
[  2%] Building CXX object src/SlamCore/CMakeFiles/SlamCore.dir/utils.cxx.o
In file included from /usr/include/signal.h:328,
                 from /home/fhoussen/Workspaces/ct_icp/src/SlamCore/utils.cxx:16:
/home/fhoussen/Workspaces/ct_icp/src/SlamCore/utils.cxx:118:32: error: size of array ‘alternate_stack’ is not an integral constant-expression
  118 | static uint8_t alternate_stack[SIGSTKSZ];
      |                                ^~~~~~~~
gmake[2]: *** [src/SlamCore/CMakeFiles/SlamCore.dir/build.make:146: src/SlamCore/CMakeFiles/SlamCore.dir/utils.cxx.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
gmake[1]: *** [CMakeFiles/Makefile2:307: src/SlamCore/CMakeFiles/SlamCore.dir/all] Error 2
gmake: *** [Makefile:136: all] Error 2

>> g++ --version
g++ (Debian 12.2.0-13) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

>> cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Any clue how to fix this?

kitti-correct point cloud distort

hi, appreciate with your work.
i notice "The odometry benchmark proposes motion-corrected scans (using the camera to distort the scans): we called this KITTI-corrected".
where did you find the method of kitti distort point cloud using camera? can you tell me?
thanks.

Running ct_icp using another dataset

Hi, I have recenlty built and run ct_icp successfully!

But I have difficulty running another dataset.

I wonder how ct_icp exactly knows about timestamp between frames.

While studying your paper and code, I found something new.

Like this default_config.yaml (permalink highlighted), I found that ct_icp code uses KITTI dataset in the form of frame_####.ply format.

But It cannot work on my own data(*.ply)


When I visualize it on CloudCompare,
here the **red** one is **frame_0001.ply**, the **black** one is **frame_0005.ply**.
We can think the ego vehicle moves forward.

Selection_012


Here, I found something new.

In CloudCompare I got to know the ply file of KITTI has x, y, z and timestamp fields.

Selection_014

On the other hand, I have my own data like

Selection_013

I think the difference is whether it has a field of timestamp(PLY_FLOAT32)


Here is my real question!

Could you explain the ply format and how ct_icp uses that format briefly if you can.

Plus, I want to convert my .bag/.pcd file to .ply which has only x, y, z and timestamp file format.

I couldn't find any solution about that.

Best regards.

Build with ROS option

The following is what I have done:

git clone https://github.com/jedeschaud/ct_icp.git
cd ct_icp
mkdir .cmake-build-superbuild && cd .cmake-build-superbuild
cmake ../superbuild -DWITH_ROS=ON

Then the prompt is

-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    WITH_ROS


-- Build files have been written to: /home/hteng/ct_icp/.cmake-build-superbuild

I have checked the source files and neither the main CMakeLists nor the superbuild CMakeLists has such a flag.

Can you please update the instructions on how to build with ROS wrapper?

Superbuild issue

when I superbuild i met this issue

cmake --build . --config Release
Scanning dependencies of target MappingResearchKEU_superbuild
[ 12%] Creating directories for 'MappingResearchKEU_superbuild'
[ 25%] Performing download step (git clone) for 'MappingResearchKEU_superbuild'
Cloning into 'MappingResearchKEU_superbuild'...
Already on 'master'
Your branch is up to date with 'origin/master'.
[ 37%] No patch step for 'MappingResearchKEU_superbuild'
[ 50%] Performing update step for 'MappingResearchKEU_superbuild'
Current branch master is up to date.
[ 62%] Performing configure step for 'MappingResearchKEU_superbuild'
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
INFO [Superbuild] -- [Generation] -- Generating GTest dependency
INFO [Superbuild] -- [Generation] -- Generating GLOG dependency
INFO [Superbuild] -- [Generation] -- Generating Eigen3 dependency
INFO [Superbuild] -- [Generation] -- Generating Ceres dependency
INFO [Superbuild] -- [Generation] -- Generating yaml-cpp dependency
INFO [Superbuild] -- [Generation] -- Generating cereal dependency
INFO [Superbuild] -- [Generation] -- Generating tessil dependency
INFO [Superbuild] -- [Generation] -- Generating nanoflann dependency
INFO [Superbuild] -- [Generation] -- Generating tclap dependency
CMake Error at CMakeLists.txt:527 (add_library):
add_library INTERFACE library requires no source arguments.

CMake Error at CMakeLists.txt:528 (target_include_directories):
Cannot specify include directories for target "tclap" which is not built by
this project.

CMake Error at CMakeLists.txt:468 (install):
install TARGETS given target "tclap" which does not exist.
Call Stack (most recent call first):
CMakeLists.txt:531 (SUPERBUILD_INSTALL_TARGET)

INFO [Superbuild] -- [Generation] -- Generating colormap dependency
INFO [Superbuild] -- [Generation] -- Generating tinyply dependency
-- Configuring incomplete, errors occurred!
See also "/home/user/rosProject/ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-build/CMakeFiles/CMakeOutput.log".
make[2]: *** [CMakeFiles/MappingResearchKEU_superbuild.dir/build.make:107: MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild-stamp/MappingResearchKEU_superbuild-configure] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/MappingResearchKEU_superbuild.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

My ubuntu is 20.04

Point time stamp of New College dataset

Hi authors, I wish to know how to produce time stamp of each point in raw scan.

As far as I know, there is no timestamp for each point in the New College dataset.

I'm really sorry if I'm wrong about that.

Thank you!

fail to clone imgui.git

Hi,thanks for your work.
it seems download imgui.git failed, when I run “./ct_icp_build.sh Release "Unix Makefiles" ON ON”.

and the terminal outputs like this:
[ 11%] Performing download step (git clone) for 'imgui-populate'
Cloning into 'imgui-src'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Cloning into 'imgui-src'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Cloning into 'imgui-src'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
-- Had to git clone more than once:
3 times.
CMake Error at imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitclone.cmake:31 (message):
Failed to clone repository: '[email protected]:pierdell/imgui.git'

hope for your reply. thanks.

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.