任务
DSO_PCL已经实现将生成的点云保存到文件,现实现将点云基于ROS通信机制以Topic发布点云消息
踩坑一
教训:安装ROS Indigo时其实自动依赖安装了libboost1.54_dev,切记不要在自己编译安装boost的其他版本
坑:(1)有Node节点,但无此节点的Topic(2)运行到nh.advertise程序中断之类的错误
原因:DSO_PCL使用你新安装的boost库,ROS使用boost1.54版本,混用导致DSO_PCL中存在boost::thread的使用异常,程序退出
解决办法:下载boost1.54源码并编译安装
结果:填坑完毕
踩坑二
教训:在在DSO_PCL的numtype.h文件里里添加#include <Eigen/StdVector>这个头文件
坑:在任何地方加入#include <pcl/io/pcd_io.h>头文件,会定位到usr/include/eigen3/Eigen/src/StlSupport/StdVector.h有如下问题
/usr/include/eigen3/Eigen/src/StlSupport/StdVector.h:69: error: partial specialization of ‘std::vector<T, Eigen::aligned_allocator<U> >’ after instantiation of ‘std::vector<dso::IOWrap::GraphConnection, Eigen::aligned_allocator<dso::IOWrap::GraphConnection> >’ [-fpermissive]
class vector<T,EIGEN_ALIGNED_ALLOCATOR<T> >
^
/usr/include/eigen3/Eigen/src/StlSupport/StdVector.h:69: error: partial specialization of ‘std::vector<T, Eigen::aligned_allocator<U> >’ after instantiation of ‘std::vector<Eigen::Matrix<float, 3, 1>, Eigen::aligned_allocator<Eigen::Matrix<float, 3, 1> > >’ [-fpermissive]
/usr/include/eigen3/Eigen/src/StlSupport/StdVector.h:69: error: partial specialization of ‘std::vector<T, Eigen::aligned_allocator<U> >’ after instantiation of ‘std::vector<dso::FrameFramePrecalc, Eigen::aligned_allocator<dso::FrameFramePrecalc> >’ [-fpermissive]
原因:不知道,网上查也查不到,毕竟我就添加了个头文件就出现这样的问题,很幸运的用第六感解决了
解决办法:在在DSO_PCL的numtype.h文件里里添加#include <Eigen/StdVector>这个头文件
结果:填坑完毕
踩坑三
教训:使用boost::make_shared给boost::shared_ptr赋值,不要使用boost::shared_ptr<T> S(new T) 这种方法
坑:无法描述,如下图
image.png
image.png
原因:不知道
解决办法:使用boost::make_shared给boost::shared_ptr赋值
网友评论