度过考试周和作业周,终于有时间可以搞自己的东西啦,半个月前学习的东西忘得差不多了,现在凭借着仅剩的记忆回顾一下😄末尾有小惊喜,嘿嘿!
1、Ceres Solver1.14、livox-sdk的安装(之前编译horizon_loam已安装过,不用重复安装。未安装的可以参考如下步骤:)
sudo apt-get install -y libgoogle-glog-dev
sudo apt-get install -y libatlas-base-dev
wget -O ~/Downloads/ceres.zip https://github.com/ceres-solver/ceres-solver/archive/1.14.0.zip
cd ~/Downloads/ && unzip ceres.zip -d ~/Downloads/
cd ~/Downloads/ceres-solver-1.14.0
mkdir ceres-bin && cd ceres-bin
cmake ..
sudo make install -j4
GitHub - Livox-SDK/Livox-SDK: Drivers for receiving LiDAR data and more
sudo apt install cmake
git clone https://ghproxy.com/https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install
2、下载livox_ros_driver并编译(这一步对于后续的lili_om编译很重要)
git clone https://ghproxy.com/https://github.com/Livox-SDK/livox_ros_driver.git ws_livox1/src
需要更改的就是这一行链接后的工作空间名称,这个顺带也建立好了工作空间(名字自取ws_livox1)后面带个/src不要忘喽
3、注意lili_om所需的依赖,我先前没有安装过GTSAM 4.0,所以需要安装一下
参考这篇https://www.icode9.com/content-3-1352823.html,注意一下ROS版本哈,noetic、melodic、kinetic😊
4、下载lili_om源码并编译
cd ~/ws_livox1/src
git clone https://ghproxy.com/https://github.com/KIT-ISAS/lili-om
cd ..
catkin build livox_ros_driver
catkin build lili_om
catkin build lili_om_rot
这里一定要注意看好是catkin build,之前编译的时候习惯用catkin_make,用catkin_make建立工程后再用catkin build会报错(The build space at '/home/ws_livox/build' was previously built by 'catkin_make'. Please remove the build space or pick a different build space.)
大家可以参考此博文:catkin build和catkin_make的区别和使用_benchuspx的博客-CSDN博客
5、接下来可以运行(运行.launch文件或者播放bag)
cd ~/工作空间
source ./devel/setup.bash //环境不要忘了
roslaunch lili_om run_fr_iosb.launch
//运行livox_lidar_msg.launch文件(另外打开新的窗口)
source ./devel/setup.bash
roslaunch livox_ros_driver livox_lidar_msg.launch
//我先前有录制好的ROS bag,播放即可
source ./devel/setup.bash
rosbag play 2022-06-06-19-45-29.bag
哈哈哈哈,以为搞定了可以愉快地耍了,没想到问题接踵而至了。
问题一:无论运行launch文件还是播放bag,rviz上面没有画面显示, 并且lili_om的launch窗口报错
后端报错,进程杀死,百度寻找解决方案,一下午一直无果,然后我尝试查看该算法的配置文件(yaml),尝试看看参数是否不对应,发现问题所在。(在工作空间下搜索yaml,出现一系列的yaml文件)
我的改成:imu_topic: "/livox/imu"
我将所有yaml中的imu_topic都改成了/livox/imu
不清楚自己话题的可以通过ROS bag查看
rosbag info 2022-06-06-19-45-29.bag
问题二: [pcl::VoxelGrid::applyFilter] Leaf size is too small for the input dataset. Integer indices would overflow (一大堆重复警告看得我眼睛都不开心😊)
又开始愉快的百度之路,大概得到的解释是:在使用PCL的voxelgrid filter时,若点云过大,而设置的voxel比较小,可能会导致voxel的数量超过int32的上限,从而会出现警告:“Leaf size is too small for the input dataset”。所以我的第六感觉得问题出现在代码中,于是开心的翻代码😊(我重点放在了里程计和后端上面)
这个我感觉没什么需要改的,尝试改了依旧报错,改的太大的话我怕关键点云数目减少
// VoxelGrid滤波器参数,即进行滤波时的创建的体素边长为filter_size_surf_min
downSizeFilterSurf.setLeafSize(0.4, 0.4, 0.4);
// VoxelGrid滤波器参数,即进行滤波时的创建的体素边长为filter_size_map_min
downSizeFilterMap.setLeafSize(0.4, 0.4, 0.4);
接着尝试看看后端的cpp文件
似曾相识的感觉,没错,刚刚配置文件里面看到过edge_ds、surf_ds、mapping_ds ,尝试改大看看,问题解决。【为什么这样,我现在还不懂,希望懂得大佬可以教教我。】
目前的问题是没什么了,后续出现问题的话我会接着放在这篇文章后,我是超级小白,希望得到大家的指点。放几张画滴画(搞不出问题的解压方式)