TartanVO是在TartanAir数据集上提出的一个通用性的视觉里程计,在复现该代码的过程中遇到一系列环境配置问题,做个记录。
-
首先是python的版本选择,最初无脑
python3.10
,相应的numpy、matplotlib、scipy等库也相应地安装了最新版,后来发现原代码是用python2写的,很多函数和用法也都有所变化,于是手动修改了几处报错的代码,又使用python自带的2to3.py脚本升级了代码,最终成功运行了vo_trajectory_from_folder.py对下载好的KITTI数据集进行测试。
-
然而在运行ros节点进行轨迹可视化时,发现ros系统默认使用python2,其中用来对ros图像和openCV图像进行相互转化的CvBridge库也是默认为python2版本的,报错:
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
结合之前发现的原代码本身也是python2编写的,决定退回
python2
。 -
回到python2后,其他的相关库也全部都按照GitHub原文中指定的版本进行安装,结果之前的vo_trajectory_from_folder.py也无法运行了,报错:
RuntimeError:CuDNN error:CUDNN_STATUS_EXECUTION_FAILED
上网查找到这个问题一般是由于cuda、cudnn、pytorch等版本出现问题,GitHub原文中指定cuda版本为9.2/10.1,但是两个版本都不行,后来查到原来3090仅支持cuda11以上的版本,而高版本的cuda和pytorch又不支持python2,所以还是换回
python3
。 -
至于上述所说的CvBridge库版本不匹配问题,解决方法是自己下载并重新编译python3版本的CvBridge库,编译方法参考
【bug】ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
由于此处编译的CvBridge是基于python3.6的,所以也选择了
python3.6
作为最终的python版本。 -
然后conda安装了cudatoolkit11.3、cudnn8.2.1,pip安装了cupy-cuda113,pip安装 torch1.10.0+cu113、torchvision0.11.0+cu113、torchaudio0.10.0 。
网上大多数cuda安装教程都是到官网下载安装,但实际上直接用conda安装即可,只需一行命令,亲测比官网安装好用,使用以下命令可以查看当前支持的cudatoolkit和cudnn版本conda search cudatoolkit --info conda search cudnn --info
然后conda install安装你需要的cudatoolkit和cudann版本即可,实际上conda安装cudnn时会一并安装cudnn所依赖的对应版本的cudatoolkit,所以如无特定版本要求,只需conda安装你需要的cudnn版本即可。conda安装cuda方法可参考
-
最终成功运行了ros节点tartanvo_node.py和publish_image_from_folder.py实现了对EuRoC_V102数据集的预测并在rviz上进行了轨迹的可视化
总结最终的运行环境为:
- ubuntu18.04
- python3.6
- cudatoolkit11.3
- cudnn8.2.1
- cupy-cuda113
- torch1.10.0+cu113
- torchvision0.11.0+cu113
- torchaudio0.10.0
- numpy
- matplotlib
- scipy
- opencv-python4.2.0.32
其中主要关注的是python版本为3.6,然后根据自己的显卡选择合适的cuda和pytorch版本,其他库版本影响不大。
安装和运行过程中遇到问题可参考我上边提到的解决方法。如有遗漏,欢迎补充。