1.安装ubuntu18.04
详见从零开始的Linux(5)ubuntu18.04下运行VINS-Mono/VINS-RGBD(保姆级超级详细教程)_vinsrgbd-CSDN博客
该博客中提到的第三方库也一并安装 。
2.下载PL-VINS
直接下进windows就行
修改PL-VINS的三个文件:
1./PL-VINS/feature_tracker/CMakeLists.txt
将opencv路径注释掉,我们直接用ros自带的opencv3.2
还有两个路径,改成自己的
2.feature_tracker/src/linefeature_tracker.h
#include "line_descriptor/include/line_descriptor_custom.hpp"
3. feature_tracker/src/line_descriptor/src/precomp_custom.hpp
#include "../include/line_descriptor_custom.hpp"
3. 编译并运行PL-VINS
我使用的rosbag是D435i录制的,所以运行的lanuch文件和PL-VINS官方的有区别。
1.将realsense文件夹导入/PL-VINS/config
2.PL-VINS/vins_estimator/launch中加入启动文件realsense_color.lanuch,并添加linefeature_tracker和image_node_b节点,相应代码直接黏贴PL-VINS官方lanuch文件。
3./config/realsense的代码中修改接受话题的名称,使之接受相应的rosbag,以及自己的路径
编译:按照PL-VINS官方readme文件中中正常编译
运行:打开两个终端,分别输入
source devel/setup.bash
roslaunch plvins_estimator realsense_color.launch
source devel/setup.bash
roslaunch plvins_estimator vins_rviz.launch
运行数据包:
rosbag play With_more_rotation.bag
4. evo评测
1.安装evo
2.获取数据包提供的真值
在进行评测前,需要获取数据包提供的真值,以我的rosbag为例
打开终端,输入
rosbag info b.bag(你的rosbag的名称)
看到
evo的readme中提到,它可以分割出如下形式的rosbag话题
我的数据包的轨迹真值就是/vrpn_client_node/handheld/pose
终端输入
evo_traj bag b.bag /vrpn_client_node/handheld/pose --save_as_tum
得到轨迹真值文件,将后缀改成txt即可
3.获取PL-VINS运行的轨迹
我们需要修改PL-VINS中的一些代码,不过PL-VINS实际上已经对VINS-MONO的输出格式做了修改,所以我们不需要大改
1.进入vins_estimator/src/utility/visualization.cpp,按ctrl+f进入搜索模式找/home
确保输出流都是如下格式,并且路径都是你自己的
ofstream foutC("/home/nana/catkin_plviss/src/PL-VINS/Trajactory/tum_fast_no_loop.txt", ios::app);
foutC.setf(ios::fixed, ios::floatfield);
foutC.precision(0);
foutC << header.stamp.toSec() * 1e9<< " ";
foutC.precision(5);
foutC << correct_t.x() << " "
<< correct_t.y() << " "
<< correct_t.z() << " "
<< correct_q.w() << " "
<< correct_q.x() << " "
<< correct_q.y() << " "
<< correct_q.z() <<endl;
foutC.close();
2.进入pose_graph/src/pose_graph.cpp,按ctrl+f进入搜索模式找/home
确保输出流都是如下格式,并且路径都是你自己的
ofstream foutC("/home/nana/catkin_plviss/src/PL-VINS/Trajactory/tum_fast_plvins_loop.txt", ios::app);
foutC.setf(ios::fixed, ios::floatfield);
foutC.precision(0);
foutC << cur_kf->time_stamp * 1e9<< " ";
foutC.precision(5);
foutC << P.x() << " "
<< P.y() << " "
<< P.z() << " "
<< Q.w() << " "
<< Q.x() << " "
<< Q.y() << " "
<< Q.z() << endl;
foutC.close();
3. 进入pose_graph/src/pose_graph_node.cpp,按ctrl+f进入搜索模式找/home
把路径都改成自己的
std::ofstream foutC("/home/nana/catkin_plviss/src/PL-VINS/Trajactory/tum_fast_plvins_loop.txt", std::ios::out);
foutC.close();
std::ofstream foutC1("/home/nana/catkin_plviss/src/PL-VINS/Trajactory/evo_fast_plvins_loop.txt", std::ios::out);
foutC1.close();
修改main函数中的VINS_RESULT_PATH,改成
VINS_RESULT_PATH = VINS_RESULT_PATH + "/vins_result_loop.txt";
运行 PL-VINS,可以看到你设置的路径中出现了loop和no_loop的txt文件
4.评测
1.可视化
二维可视化:
evo_traj tum pose.txt b.txt(输出轨迹) --ref=pose.txt(用真值做参考) -p --plot_mode=xz --align --correct_scale
三维可视化:
evo_traj tum pose.txt b.txt(输出轨迹) --ref=pose.txt(用真值做参考) -p --plot_mode=xyz --align --correct_scale
2.误差评测
evo_ape tum pose.txt pl.txt -va(绝对位姿误差)
evo_rpe tum pose.txt pl.txt -va(相对位姿误差)
5.PL-VINS可视化
代码运行后,rviz能显示轨迹,看不到提取的点线特征图像,显示No Image
解决方法:ubuntu18.04运行PL-VINS问题记录_18.04如何运行plvio-CSDN博客
适配D435i:realsenseD435i跑PL-VINS_no image received-CSDN博客
6.虚拟机内存不足问题
主页显示隐藏目录,进入 .cache/vmware/drag_and_drop中,这是一个缓存区,这里的文件都可以删除
windows里也有对应的缓存区,不过电脑管家就可以自动删掉了