vinsfusion运行过程中出现Assertion “!px=0“ failed问题的解决

环境:ubuntu16

vinsfusion源码:

https://github.com/HKUST-Aerial-Robotics/VINS-Fusion

一、BUG

报错中指出 Assertion "!px=0" failed。仔细阅读内容发现是一个 share_ptr(智能指针出现错误),这个指针指向的类型是Cmera类。到这里只想说好家伙,不给具体出错文件的位置,得要我一个一个文件找,这个visnfusion的作者能不能上传一个没有错误的源码啊,心累。

debug过程我在第二部分讲,最终的解决方案我放在第三部分(不想听我啰嗦的,直接看第三部分就可)

二、debug过程

camera类是定义在camera.h文件中,命名了两个指针指向camera类:

翻阅每个文件找到最初的指针初始化位置。结果是在feature_tracker.h头文件中定义了一个装cameraptr指针的容器,在feature_tracker.cpp文件中readparameters函数中中对指针做了初始化赋值,通过输出调试发现这哥函数并没有出错

既然不是智能指针初始化出错,那就不好办了,所以我就用最笨的方法去定位出错的代码行,最终找到程序终止的地方 camera类中的liftprojective函数,我这里是用的鱼眼相机所以执行的是catacamera中的liftprojective函数。

但是发现这个cam指针根本无法执行liftproject函数,所以还是指针的赋值问题,那么找到这里的cam究竟赋值成了什么。然后发现指针赋值的时候,有一个配置文件无法读取,返回一个空指针。

 那么找到配置文件是如何读取的,最终发现它的文件路径包含了两个文件,一个是配置文件和相机标定文件,这样肯定不行,怎么可能打开两个文件的,然后发现他是要打开相机的标定文件,因为配置文件已经读取成功了。

 三、解决方案

对parameter.cpp文件中的157行和165行的文件路径做修改,这个文件路径只需要相机的标定文件,他这里不知道咋回事把配置文件合在一起,读取的时候又不分开。

去掉congfigpath和/,只留下cam0calib

std::string cam0Path=cam0Calib;
std::string cam1Path=cam1Calib;

然后就可以成功运行了!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值