环境安装主要参考SVO作者,网址。
首先你要有装ROS melodic,这里不再多说。总共要安装两个库,分别是Sophus和FAST。
然后在主目录创建一个文件夹,命名为workspace,执行以下命令安装Sophus库。
cd workspace git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout a621ff mkdir build cd build cmake .. make sudo make install
执行以下命令安装FAST库。
cd workspace git clone https://github.com/uzh-rpg/fast.git cd fast mkdir build cd build cmake .. make
sudo make instal
这两个库都是在workspace文件夹下的,然后在workspace中再创建dataset和src文件夹,一个用来装数据集一个用来装代码。数据集下载链接,1.8G
然后下载vikit,它提供了SVO需要的相机模型、数学和插值函数等。执行以下命令。
cd src git clone https://github.com/uzh-rpg/rpg_vikit.git
安装ROS依赖项。执行以下命令
sudo apt-get install ros-melodic-cmake-modules
下载SVO代码。执行以下命令。
cd src git clone https://github.com/uzh-rpg/rpg_svo.git
cd ..
最后执行catkin_make命令,当然这是理想的流程,接下去介绍我在实际操作中出现的错误。
Sophus 错误:fatal error: sophus/se3.h: No such file or directory
将src文件夹中rpg_svo/svo目录下的cmakelists.txt中,在73行左右,${Sophus_INCLUDE_DIRS}改为绝对路径,我的是"/home/wjb1804/workspace/Sophus",
同样的操作还要对在rpg_svo/svo_ros下的cmakelists.txt进行,在58行。
然后对rpg_vikit/vikit_common下的cmakelists.txt也进行同样操作,在33行。还要修改66行的链接库地址,也改成绝对路径,我的是在"/usr/local/lib/libSophus.so"
对rpg_vikit/vikit_ros,在cmakelists.txt的29行,修改成绝对路径"/home/wjb1804/workspace/Sophus"
改完所有cmakelists.txt后再进行catkin_make操作。
错误:unit_complex_.real() = 1.; ^~
unit_complex_.imag() = 0.;
^~
解决方法:找到workspace/Sophus/sophus/so2.cpp,打开,将第31行改成unit_complex_.real(1.);
32行改成unit_complex_.imag(0.);
然后进行catkin_make操作,应该能编译完成。
然后开始跑代码,总共需要打开四个终端,一个roscore,另外三个启动程序:
可以直接在之前的终端中按ctrl+shift+T来添加终端,按三次,原来的终端输入roscore,另外三个终端需要执行的命令如下(确保三个终端都在workspace目录下即cd workspace)。
source devel/setup.bash
roslaunch svo_ros test_rig3.launch
会有黄色的警告提示没找到参数,这没关系。
第二个终端启动rviz,改成你对应的src/rpg_svo/svo_ros/rviz_config.rviz路径。
source devel/setup.bash
rosrun rviz rviz -d src/rpg_svo/svo_ros/rviz_config.rviz
第三个终端。
source devel/setup.bash rosbag play dataset/airground_rig_s3_2013-03-18_21-38-48.bag
然后我又出错,报错内容:[svo-1] process has died [pid 2709, exit code -11
解决方法,修改cmaklists.txt,删除-march=native。
src/rpg_svo/svo_ros目录下的cmaklists.txt的第8行。
src/rpg_svo/svo目录下的cmaklists.txt的第34行。
src/rpg_vikit/vikit_common目录下的cmaklists.txt的第10行。
src/rpg_vikit/vikit_ros目录下的cmaklists.txt的第8行。
然后重新catkin_make操作即可,再运行代码。
成功截图: