安装运行svin2 中的编译报错(仰卧起坐版)

本文详细描述了一名开发者在编译和运行SVIn项目时遇到的OpenCV版本不匹配、Ceres库问题、CUDA版本升级和依赖关系修复等一系列问题的解决过程,包括软连接、cmake版本更新和ROS包管理等技巧。
摘要由CSDN通过智能技术生成

目录

一、编译篇

1.ceres版本问题报错

2.opencv版本问题,我这里是4.2

3.ceres报错:

4.cuda报错

5.getCallbackQueue函数报错

6.怎么又是cuda那个,绝了​编辑

7.还是cuda的/usr/bin/ld: cannot find -lCUDA::cublas/usr/bin/ld: cannot find -lCUDA::cudart/usr/bin/ld: cannot find -lCUDA::cusolver/usr/bin/ld: cannot find -lCUDA::cusparse

8.ceres

9.找不到/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.4.2.0

10.关于找不到libopencv_xxx_.so.4.2.0(或者.4.2)

二、运行篇

1.运行前需要修改launch文件

2.在本文件夹下运行以下指令

3.播放rosbag


一、编译篇

按官方github步骤安装(GitHub - AutonomousFieldRoboticsLab/SVIn: Underwater Navigation with tightly coupled fusion of Visual Inertial Sonar and Depth Information,有个老版本的svin2不维护了,编译那个会遇到很多编译问题,后来看见人家的声明了,去用了在维护的版本),安装过程仍出现以下问题:

1.ceres版本问题报错

按官方github操作,安装1.14即可

2.opencv版本问题,我这里是4.2

看报错,程序作者应该是用的4.5.5

安装opencv4.5.5,并切换版本,参考:Ubuntu下多版本OpenCV共存和切换_ubuntu 多个opencv版本-CSDN博客

按这个操作完之后还是报错,我索性把原来的4.2卸载了,安装4.5.5,安装教程参考了这个里面安装opencv那部分:

ubuntu 20.04+ORB_SLAM3 安装并行全记录(无坑版)(一)_ubuntu20 orbslam3-CSDN博客

安装完opencv4.5.5之前安装的其他需要opencv的软件也需要重新编译(作者编译以前编译过的其他软件的时候咔咔报错,一朝回到解放前的感觉)

好,先不管以前的软件了,我先把svin安好:

重新编译svin,好,不报之前那个错了,报新错:

这里应该是原程序默认我们把opencv安装在/usr/include/opencv4下,但是实际opencv默认安装在/usr/local/include/opencv4下,加一个软连接:

sudo ln -s /usr/local/include/opencv4 /usr/include/opencv4

好的,opencv问题到这应该是解决了(这块真裂开了,之后学学用docker吧,好像是说可以解决各种版本不兼容问题)

3.ceres报错:

给我整迷糊了,官方不是自己要让装1.14吗?

行吧,我再装回来,这里博主之前装的是2.2,直接在原来2.2的build下重新编译一套就能覆盖老版本(因为都是用的默认安装路径):

cmake ..

make

sudo make install

好了,解决,我们来看新的报错:)

4.cuda报错

这个应该是安装完显卡,环境没有配好的问题,之前在catkin_ws里配置code_utils的时候就遇到过类似的,找不到cuda相关库,我库库整了好几天也没调好,就逃课了,还是逃不过。

看了一下cuda版本

我之前安装zed相机sdk时被默认安装过12.1,这里NVIDIA smi显示要求12.4(可能是这个意思吧),怀疑可能是cuda版本太老了,下一个12.4试试

然后跟着这个配置了一下环境:

NVIDIA GeForce RTX 4070 Ti with CUDA capability sm_89 is not compatible with...报错的完整解决方法_nvidia geforce rtx 4090 with cuda capability sm_89-CSDN博客

我再catkin make一下,可以了!不知道具体是cuda版本不对还是我当时在bashrc里的路径配置的不对,反正跟着佬整了一遍不报错了doge

好了,我们来看新报错:

5.getCallbackQueue函数报错

好像是声呐驱动的问题,之前按官网git clone会报错:

就自己去这个github地址下载了一个,可能是下错版本了还是咋的,我按他的来试试。

gpt了一下,说是:如果您没有该仓库的访问权限,或者您使用的是错误的SSH密钥,您就会遇到这个错误。此外,如果仓库是公开的,您应该使用HTTPS URL来克隆,而不是SSH URL。

指令改成:(后来发现这样下载的是错误版本。。。。)

git clone https://github.com/AutonomousFieldRoboticsLab/sonar_rviz_plugin.git

git clone成功

我再试一下,记得先catkin_make clean,

然后再重新catkin_make

好,同样的报错,不是这个问题,仔细看看,rviz的问题,怀疑安装新opencv后得重新装ros,我试试小乌龟,果然,失败了,好,我重新安装ros,要了老命,参考:

详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)_ubuntu安装ros-CSDN博客

后面我的zed-ros和驱动啥的也得重新安装,沃日了,换opencv之后太麻烦了,很多软件都得重装,所以我准备去学学那个docker,这种重装opencv的方法太窒息了。

好了,ros安装完了,我试试,报新错了找不到tf2,跟着github再走一遍

 sudo apt install ros-noetic-tf2-sensor-msgs

 解决,下一个报错:

6.怎么又是cuda那个,绝了

在okvis_ros的cmakelist里加上find_package(CUDA REQUIRED),不报错了,又来这个:

getcallbackqueue()

问了问同学,发现是我下载错版本了,记得切换版本(别gitclone,去github手动下载,左上角调整版本,默认下载的是main版,我的Ubuntu是20.04,所以手动改成noetic版)

解决,来看下一个报错:

7.还是cuda的/usr/bin/ld: cannot find -lCUDA::cublas
/usr/bin/ld: cannot find -lCUDA::cudart
/usr/bin/ld: cannot find -lCUDA::cusolver
/usr/bin/ld: cannot find -lCUDA::cusparse

(1)参考其他博主,加软连接试试:

sudo ln -s /usr/local/cuda-12.4/lib64/libcublas.so /usr/lib/libcublas.so

sudo ln -s /usr/local/cuda-12.4/lib64/libcudart.so /usr/lib/libcudart.so

sudo ln -s /usr/local/cuda-12.4/lib64/libcusolver.so /usr/lib/libcusolver.so

sudo ln -s /usr/local/cuda-12.4/lib64/libcusparse.so /usr/lib/libcusparse.so

不行,还是报错

(2)设置一下路径然后更新一下:

在 .bashrc 添加:

export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

还是不行

(3)安装新的cmake

考虑到cuda库里有libcublas.so这类文件但是没有CUDA::cublas这个形式的,查了查,结合gpt以及有的博主说肯可能是cmake版本过低,我查了一下我的是3.16,抱着试试的心态,我更新了camke到3.27,参考:

ubuntu重新安装cmake(没有bootstrap文件)_ubuntu找不到bootstrap.sh-CSDN博客

注意,装完新的cmake后,你之前所有用cmake安装的软件(包括opencv、ros、ceres等)都需要重新安装一遍,特别注意,由于catkin是基于cmake的,所以你更新cmake后,你之前catkin_make过的工作区要想使用新的cmake版本,需要删掉这个workspace重新构建并catkin_make,否则还是用之前的cmake标准

编译

cuda问题解决,卡在这好久了,果然就是cmake版本太老了!(虽然又有新报错了。。。。):

8.ceres

额,好像是ceres版本问题,我再切回1.14。。。。又仰卧起坐

好了,这个也解决了,好的,新报错:(我已经麻了,对新的报错表示peace)

9.找不到/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so.4.2.0

参考这个老哥:OpenCV4踩坑总结_error: /usr/local/lib/libopencv*: no such file or -CSDN博客

说是ros的cv_bridge链接的库默认是这个路径,但可能我的opencv之前卸载重新安装过,不在那里

改到对应目录下:

sudo chmod 755 cv_bridgeConfig.cmake

sudo gedit cv_bridgeConfig.cmake

然后把/usr/lib/x86_64-linux-gnu/全都换成了我的opencv安装路径/usr/local/lib/

删掉svin_ws,创建,然后catkin_make

报错发生了变化:

额,这是只要opencv4.2.0???不兼容吗???

我再把库都替换成4.5.5试试,

set(libraries "cv_bridge;/usr/local/lib/libopencv_calib3d.so.4.5.5;/usr/local/lib/libopencv_dnn.so.4.5.5;/usr/local/lib/libopencv_features2d.so.4.5.5;/usr/local/lib/libopencv_flann.so.4.5.5;/usr/local/lib/libopencv_highgui.so.4.5.5;/usr/local/lib/libopencv_ml.so.4.5.5;/usr/local/lib/libopencv_objdetect.so.4.5.5;/usr/local/lib/libopencv_photo.so.4.5.5;/usr/local/lib/libopencv_stitching.so.4.5.5;/usr/local/lib/libopencv_video.so.4.5.5;/usr/local/lib/libopencv_videoio.so.4.5.5;/usr/local/lib/libopencv_aruco.so.4.5.5;/usr/local/lib/libopencv_bgsegm.so.4.5.5;/usr/local/lib/libopencv_bioinspired.so.4.5.5;/usr/local/lib/libopencv_ccalib.so.4.5.5;/usr/local/lib/libopencv_datasets.so.4.5.5;/usr/local/lib/libopencv_dnn_objdetect.so.4.5.5;/usr/local/lib/libopencv_dnn_superres.so.4.5.5;/usr/local/lib/libopencv_dpm.so.4.5.5;/usr/local/lib/libopencv_face.so.4.5.5;/usr/local/lib/libopencv_freetype.so.4.5.5;/usr/local/lib/libopencv_fuzzy.so.4.5.5;/usr/local/lib/libopencv_hdf.so.4.5.5;/usr/local/lib/libopencv_hfs.so.4.5.5;/usr/local/lib/libopencv_img_hash.so.4.5.5;/usr/local/lib/libopencv_line_descriptor.so.4.5.5;/usr/local/lib/libopencv_optflow.so.4.5.5;/usr/local/lib/libopencv_phase_unwrapping.so.4.5.5;/usr/local/lib/libopencv_plot.so.4.5.5;/usr/local/lib/libopencv_quality.so.4.5.5;/usr/local/lib/libopencv_reg.so.4.5.5;/usr/local/lib/libopencv_rgbd.so.4.5.5;/usr/local/lib/libopencv_saliency.so.4.5.5;/usr/local/lib/libopencv_shape.so.4.5.5;/usr/local/lib/libopencv_stereo.so.4.5.5;/usr/local/lib/libopencv_structured_light.so.4.5.5;/usr/local/lib/libopencv_superres.so.4.5.5;/usr/local/lib/libopencv_surface_matching.so.4.5.5;/usr/local/lib/libopencv_text.so.4.5.5;/usr/local/lib/libopencv_tracking.so.4.5.5;/usr/local/lib/libopencv_videostab.so.4.5.5;/usr/local/lib/libopencv_viz.so.4.5.5;/usr/local/lib/libopencv_ximgproc.so.4.5.5;/usr/local/lib/libopencv_xobjdetect.so.4.5.5;/usr/local/lib/libopencv_xphoto.so.4.5.5;/usr/local/lib/libopencv_core.so.4.5.5;/usr/local/lib/libopencv_imgproc.so.4.5.5;/usr/local/lib/libopencv_imgcodecs.so.4.5.5")

出现这个报错

这应该是4.5.5没有这个,只有4.2有,我直接改后缀改错了。

参考这个佬

解决cv_bridge和opencv之间版本匹配问题 - 知乎

然后在svin_ws/src/cmakelists开头加了

set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)  //在find_package前面

编译后

又回到了之前的报错。。。。。

尝试从别的电脑复制了所有OpenCV的so.4.2.0到目标路径下,不报这个错了

下一个报错是找不到一些OpenCV contrib项,去官网下载安装即可

加上路径即可编译成功,但是运行程序时仍报关于OpenCV的so相关错误,猜想复制的so文件最终并不能连接到库,重装OpenCV4.5.5吧,先卸载干净,参考:

Ubuntu20.04安装OpenCV4.5.5和OpenCV_Contrib4.5.5_opencv 4.5 ubuntu-CSDN博客

然后我又去usr文件夹下删除了OpenCV相关文件。

10.关于找不到libopencv_xxx_.so.4.2.0(或者.4.2)

创建软连接即可:

sudo ln -s /usr/local/include/opencv4 /usr/include/opencv4

编译后老朋友依然报错:

我看别人电脑安装完新版本opencv后x86文件夹里还是有.so.4.2文件的

现在怀疑之前卸载opencv4.2的时候删的太干净,把这个文件夹下的.4.2文件误删了,因为ros的cv bridge默认去这里找4.2版本的so文件。

现在尝试把4.2文件装回来,4.2版本是当初使用下面指令默认安装的:

  sudo apt install libsuitesparse-dev libopencv-dev

也只有这个能把so文件安装回x86文件夹

因此,先卸载4.5.5,借鉴:

Ubuntu20.04安装OpenCV4.5.5和OpenCV_Contrib4.5.5_opencv 4.5 ubuntu-CSDN博客

运行上面指令提示零更新,应该是没有卸干净:

运行:

sudo apt-get purge libopencv*

sudo apt-get autoremove

(之前更新版本的时候可能就是用这个误删的,大家更新opencv千万不要用这个,直接用默认指令安装,就可以直接覆盖老版本了,当然如果之前安装到特定路径下,需要在特定路径重新安装覆盖)

这之后opencv算是卸载干净了,可以运行上面的指令,安装opencv4.2

下面就按照官网指令,默认路径下安装4.5.5

然后重装ros、pangolin

之后重新编译svin_ws

终于跑通了,nice,命途多舛啊

二、运行篇

1.运行前需要修改launch文件

默认的launch文件直接运行会找不到yaml文件,导致程序中断报错或者最终轨迹无法保存

以v1为例,找到/home/zql/svin_ws/src/SVIn/okvis_ros/launch下的launch文件:

修改第四行和第七行中的yaml为对应的文件,比如v1改成下面这样即可

2.在本文件夹下运行以下指令


source ~/svin_ws/devel/setup.bash
roslaunch okvis_ros svin_stereorig_v1.launch


3.播放rosbag

最终生成的轨迹文件保存在/home/zql/svin_ws/src/SVIn/pose_graph/svin_results下

OK,svin2的编译运行就到这,下面可以学学源码和框架了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值