1 minute read

ct_icp:连续时间的配准方法

1. 项目基本信息

  • 系统:Ubuntu 20.04
  • ROS 版本:Noetic
  • 项目地址https://github.com/jedeschaud/ct_icp
  • 这是我的复现过程记录,并非教程,因此会有一些不必要的操作

2. 算法复现

步骤: 找个路径git clone一下,创建catkin工作空间,catkin-workspace/src 注意git clone的ct-icp文件夹不要在你创建的catkin-workspace/src里,二者分开 我的路径如下:

sd10@sd10-MS-7D76:~/slam$ mkdir ct_icp
sd10@sd10-MS-7D76:~/slam$ cd ct_icp/
sd10@sd10-MS-7D76:~/slam/ct_icp$ ls
sd10@sd10-MS-7D76:~/slam/ct_icp$ pwd
/home/sd10/slam/ct_icp
sd10@sd10-MS-7D76:~/slam/ct_icp$ mkdir -p catkin_ws/src
sd10@sd10-MS-7D76:~/slam/ct_icp$ ls
catkin_ws
sd10@sd10-MS-7D76:~/slam/ct_icp$ git clone https://github.com/jedeschaud/ct_icp.git
sd10@sd10-MS-7D76:~/slam/ct_icp$ ls
catkin_ws  ct_icp
sd10@sd10-MS-7D76:~/slam/ct_icp$ 

然后教程中的step1、2和3的前半部分在克隆的ct_icp文件夹里进行相关操作 step3的后半部分在catkin_ws(名字随意起)路径下操作

在:

sd10@sd10-MS-7D76:~/slam/ct_icp$ cd catkin_ws/
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws$ ls
src
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws$ cd src
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws/src$ catkin_init_workspace
Creating symlink "/home/sd10/slam/ct_icp/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/noetic/share/catkin/cmake/toplevel.cmake"
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws/src$ ln -s /home/sd10/slam/ct_icp/ct_icp/ros/catkin_ws/ct_icp_odometry ct_icp_odometry 
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws/src$ ln -s /home/sd10/slam/ct_icp/ct_icp/ros/catkin_ws/slam_roscore slam_roscore
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws/src$ ls
CMakeLists.txt  ct_icp_odometry  slam_roscore
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws/src$ 
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws/src$ cd ..
sd10@sd10-MS-7D76:~/slam/ct_icp/catkin_ws$ catkin_make -DSUPERBUILD_INSTALL_DIR=/home/sd10/slam/ct_icp/ct_icp/install

可视化的话 对应命令为:cmake ../superbuild -DWITH_VIZ3D=ON , 即如果加-DWITH_VIZ3D=ON的话,在cmake ..对应的命令那块加 , 执行 cmake --build . --config Release 时报错:

build结果

尝试解决

2.1 glog

卸载自己系统中安装的glog。

sudo apt remove libgoogle-glog-dev 
sudo apt autoremove

如果不行可以再安装:

sudo apt update
sudo apt install libgoogle-glog-dev

不行!!!!无法解决

再尝试解决 手动安装 glog 0.5.0(版本在 ct_icp/.cmake-build-superbuild/MappingResearchKEU_superbuild/src/MappingResearchKEU_superbuild/CMakeLists.txt中可以看到) 下载源码,解压后,cd进入, 配置构建(指定安装路径)

cmake -S . -B build  -DCMAKE_INSTALL_PREFIX=/home/sd101t/slam/ct_icp/ct_icp/install/glog    -DCMAKE_BUILD_TYPE=Release
# 安装路径前半段根据自己的具体路径设置
cmake --build build --parallel 6      # 编译
cmake --build build --target install  # 安装


# 提示:
-- Installing: /home/sd101t/slam/ct_icp/ct_icp/install/glog/lib/cmake/glog/glog-targets-release.cmake

成功

2.2 cmake 报错

cmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_VIZ3D=ON 

报错: cmake结果

参考:https://github.com/jedeschaud/ct_icp/issues/75

在/home/sd101t/slam/ct_icp/ct_icp/cmake/external.cmake文件中第13行修改

#get_target_property(__LOCATION ${target} IMPORTED_RELEASE_LOCATION)  #原来的
get_target_property(__LOCATION ${target} IMPORTED_LOCATION_RELEASE)   #修改的

并更新cmake到3.20版本,参考 https://github.com/Kitware/CMake/releases/tag/v3.20.6 下载对应的脚本文件,参考:https://blog.csdn.net/weixin_42156097/article/details/126932003 进行升级,然后执行 cmake .. -DCMAKE_BUILD_TYPE=Release -DWITH_VIZ3D=ON 成功

2.3 catkin_make 报错

执行 catkin_make -DSUPERBUILD_INSTALL_DIR=/home/sd10/slam/ct_icp/ct_icp/install ,报错: ccatkin_make结果

安装gmock:sudo apt-get install libgmock-dev 成功。 运行nclt数据集:配置文件:https://github.com/jedeschaud/ct_icp/blob/master/config/odometry/nclt_config.yaml 不会 sequence_name: 2013-01-10 # 这个必须和你的数据文件夹名匹配 只试过: roslaunch ct_icp_odometry urban_loco_CAL.launch rosbag:=/home/sd101t/Downloads/backups/datasets/ct_icp/CA-20190828190411_blur_align-005.bag 这个命令

3. 之前进行过的一些没有必要的操作

3.1 升级GCC(尝试新旧版本gcc共存)

添加 Ubuntu 官方的“工具链测试”PPA,这是一个包含 GCC 11 的源: sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update 安装:sudo apt install gcc-11 g++-11 安装完成后,可以使用 update-alternatives 设置默认的 GCC 版本: gcc

# 添加 gcc 选择项
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 20
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 10

# 添加 g++ 选择项
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 10

# 数字“10”和“20”表示优先级,数字越大优先级越高。我设置的默认gcc9
# 可以根据实际路径调整命令中的路径,例如 /usr/bin/gcc-11。
# 然后运行以下命令来选择默认版本:
sudo update-alternatives --config gcc

gcc