std::vector<Eigen::Isometry3d> poses;

 

改为:

std::vector<Eigen::Isometry3d,Eigen::aligned_allocator<Eigen::Isometry3d>>poses;

 

原因见下面的链接:

 

 

reference:

参见 https://blog.csdn.net/reasonyuanrobot/article/details/86614905?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242

 

 

 

 

The case of std::vector

      The situation with std::vector was even worse (explanation below) so we had to specialize it for the Eigen::aligned_allocator type. In practice you must use the Eigen::aligned_allocator (not another aligned allocator), and #include <Eigen/StdVector>.

Here is an example:

  1.  
    #include<Eigen/StdVector>
  2.  
     
  3.  
    /* ... */
  4.  
     
  5.  
    std::vector<Eigen::Vector4f,Eigen::aligned_allocator<Eigen::Vector4f> >

An alternative - specializing std::vector for Eigen types

          As an alternative to the recommended approach described above, you have the option to specialize std::vector for Eigen types requiring alignment. The advantage is that you won't need to declare std::vector all over with Eigen::allocator. One drawback on the other hand side is that the specialization needs to be defined before all code pieces in which e.g. std::vector<Vector2d> is used. Otherwise, without knowing the specialization the compiler will compile that particular instance with the default std::allocator and you program is most likely to crash.

Here is an example:

  1.  
    #include<Eigen/StdVector>
  2.  
     
  3.  
    /* ... */
  4.  
     
  5.  
    EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(Matrix2d)
  6.  
     
  7.  
    std::vector<Eigen::Vector2d>

Explanation: The resize() method of std::vector takes a value_type argument (defaulting to value_type()). So with std::vector<Eigen::Vector4f>, some Eigen::Vector4f objects will be passed by valuewhich discards any alignment modifiers, so a Eigen::Vector4f can be created at an unaligned location. In order to avoid that, the only solution we saw was to specialize std::vector to make it work on a slight modification of, here, Eigen::Vector4f, that is able to deal properly with this situation.