【SLAM】点线特征的VINS-Mono:PL-VINS算法测试

0.前言

感谢作者开源:https://github.com/cnqiangfu/PL-VINS

之前已经安装过VIns-Mono和Vins-Fusion。所以基于Vins-Mono改进的PL-VINS与前者所需环境一致,不需要额外配置。

测试系统环境为Ubuntu18.04,ROS1 Melodic,Eigen-3.3.3,Opencv-3.2.0,Ceresolver-1.14.0。

1.编译

基本流程跟VINS-Mono一样,非常熟悉直接写命令了:

bash 复制代码
mkdir -p ~/origin_pl_vins/src
cd ..
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH
cd src
git clone https://github.com/cnqiangfu/PL-VINS.git

到这里先停一下,直接编译会feature_tracker节点会报错,显示找不到OpenCV的一些相关方法。返回到Github中发现是作者也进行了提醒,原因是在feature_tracker文件夹下Cmakelist里面将OpenCV路径写成绝对路径给写死了,所以需要改成自己的环境路径。

如果是编译安装的OpenCV,去找类似这个路径:opencv-3.2.0/build

如果是安装ROS Melodic自带的OpenCV3.2.0,去找这个路径:/usr/share/OpenCV,其中有OpenCVConfig.cmake 和OpenCVConfig-version.cmake是确保find_package这个命令能找到包的。要么直接注释掉。

一共要改动的是三处位置:

  1. 第17行OpenCV路径:# Set(OpenCV_DIR "/usr/share/OpenCV")
  2. 第27行头文件路径:include_directories(...)
  3. 第58行链接库命令:target_link_libraries(...)
bash 复制代码
catkin_make

上面配置文件都是测试过100%通过的。

如果你是OpenCV4系列的用户,要么重新配置环境,要么修改源代码,注意cv_bridge和一些头文件的问题。

2.EuRoc数据集测试

github上作者十分自信自己的算法,建议选择难度数据集来测试。

bash 复制代码
source ~/origin_pl_vins/devel/setup.bash
roslaunch plvins_estimator euroc_fix_extrinsic.launch

上面的指令会打开节点和rviz。

bash 复制代码
rosbag play V2_03_difficult.bag

延迟有点高啊...,前端feature_tracker呢??

问题1:运行roslaunch plvins_estimator plvins-show-linepoint.launch节点进程died

这个问题是源代码中加载相机模型的yaml配置文件使用了相对路径,需要改成绝对路径:

cpp 复制代码
  m_camera = camodocal::CameraFactory::instance()->generateCameraFromYamlFile("/home/h/origin_pl_vins/src/PL-VINS/config/euroc/euroc_config_fix_extrinsic.yaml");

这个问题会解决节点挂掉的问题。但是在rviz中不显示tracker image话题的问题还是没法解决。

问题2:rviz订阅不到tracker image,无法显示图像

这个问题比较复杂,作者好像自己的代码版本有出入,所以在坐标转换的时候发布到了其他没有的channels中,在github的一大半issue中都在提问和探讨这个话题,参考#issue8#issue16中讨论的:

加入投影函数:

cpp 复制代码
void project(cv::Point2f& pt, cv::Mat const& K)                                                                                                                                                        
 {                                                                                                                                                                                                      
     pt.x = K.at<float>(0, 0) * pt.x + K.at<float>(0, 2);                                                                                                                                               
     pt.y = K.at<float>(1, 1) * pt.y + K.at<float>(1, 2);                                                                                                                                               
 } 

重新定义发布:

cpp 复制代码
    cv::remap(img1, show_img, undist_map1_, undist_map2_, CV_INTER_LINEAR);
    for(int i=0; i<line_feature_msg->points.size(); i++)
    {
        // cv::Point startPoint = cv::Point(line_feature_msg->channels[3].values[i], line_feature_msg->channels[4].values[i]);
        // cv::Point endPoint = cv::Point(line_feature_msg->channels[5].values[i], line_feature_msg->channels[6].values[i]);
        cv::Point2f startPoint = cv::Point2f(line_feature_msg->points[i].x, line_feature_msg->points[i].y);
        project(startPoint, K_);
        cv::Point2f endPoint = cv::Point2f(line_feature_msg->channels[1].values[i], line_feature_msg->channels[2].values[i]);
        project(endPoint, K_);   
        cv::line(show_img, startPoint, endPoint, cv::Scalar(0, 0, 255),2 ,8);
    }

问题解决。

3.测试自己的数据集

rosabg play前先要

相关推荐
bianshaopeng1 小时前
ubuntu go 环境变量配置
开发语言·ubuntu·golang
Fireworkitte13 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil90013 小时前
ubuntu常见问题汇总
linux·ubuntu
我是哈哈hh2 天前
【MySQL】在UBuntu环境安装以及免密码登录入门
linux·数据库·mysql·ubuntu
clever1012 天前
在ubuntu系统上离线安装jenkins的做法
ubuntu·servlet·jenkins
Nie_Xun3 天前
ubuntu网络共享
linux·运维·ubuntu
wuicer3 天前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
shuangrenlong4 天前
ubuntu更新chrome版本
linux·chrome·ubuntu
基于python的毕设4 天前
C语言栈的实现
linux·c语言·ubuntu
穷人小水滴4 天前
在 windows 运行 flatpak 应用 (WSL)
linux·windows·ubuntu