【发布时间】:2021-06-12 03:38:23
【问题描述】:
我正在尝试使用 pcl::transformPoint(my_point, my_affine) 转换点来转换点 my_point。但是,当尝试使用 catkin_make 编译以下代码时,我在 lubuntu 18.04、ros melodic(使用 pcl 1.8.1)下出现编译错误。当尝试在 ubuntu 16.04 下使用 ros kinetic(使用 pcl 1.7.2)编译完全相同的代码时,我的代码示例编译并可以毫无问题地执行。
我不知道为什么代码在 melodic/PCL 1.8 下不起作用以及我必须更改什么。
这是我尝试使用的代码:
#include <iostream>
#include <pcl/common/transforms.h>
#include <matrixHandling.h>
int main(){
pcl::PointXYZ my_point;
Eigen::Affine3d my_affine;
Matrix4d my_matrix;
my_point= pcl::PointXYZ(1,2,3);
std::cout << my_point << std::endl;
my_matrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 1;
my_affine.matrix() = my_matrix;
std::cout << my_affine.matrix()<< std::endl;
my_point = transformPoint(my_point, my_affine);
std::cout << my_point << std::endl;
return 0;
}
我在 ros melodic/PCL 1.8.1 下得到以下编译错误:
In file included from /usr/include/eigen3/Eigen/Core:419:0,
from /usr/include/eigen3/Eigen/StdVector:14,
from /usr/include/pcl-1.8/pcl/point_cloud.h:46,
from /usr/include/pcl-1.8/pcl/common/transforms.h:42,
from /home/admin/catkin_ws/src/project/cpp/tools/transforming.cpp:2:
/usr/include/eigen3/Eigen/src/Core/Product.h: In instantiation of ‘struct Eigen::internal::traits<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >’:
/usr/include/eigen3/Eigen/src/Core/Product.h:115:7: required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0, 3>’
/usr/include/eigen3/Eigen/src/Core/Product.h:147:7: required from ‘class Eigen::ProductImpl<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0, Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h:71:7: required from ‘class Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>’
/usr/include/eigen3/Eigen/src/Geometry/Transform.h:1390:72: required from ‘static Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::ResultType Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::run(const TransformType&, const MatrixType&) [with TransformType = Eigen::Transform<double, 3, 2>; MatrixType = Eigen::Map<const Eigen::Matrix<float, 3, 1>, 0, Eigen::Stride<0, 0> >; Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::ResultType = Eigen::Matrix<float, 3, 1>]’
/usr/include/eigen3/Eigen/src/Geometry/Transform.h:442:80: required from ‘const typename Eigen::internal::transform_right_product_impl<Eigen::Transform<Scalar, Dim, Mode, _Options>, OtherDerived>::ResultType Eigen::Transform<Scalar, Dim, Mode, _Options>::operator*(const Eigen::EigenBase<OtherDerived>&) const [with OtherDerived = Eigen::Map<const Eigen::Matrix<float, 3, 1>, 0, Eigen::Stride<0, 0> >; _Scalar = double; int _Dim = 3; int _Mode = 2; int _Options = 0; typename Eigen::internal::transform_right_product_impl<Eigen::Transform<Scalar, Dim, Mode, _Options>, OtherDerived>::ResultType = Eigen::Matrix<float, 3, 1>]’
/usr/include/pcl-1.8/pcl/common/impl/transforms.hpp:319:37: required from ‘PointT pcl::transformPoint(const PointT&, const Eigen::Transform<Scalar, 3, 2>&) [with PointT = pcl::PointXYZ; Scalar = double]’
/home/admin/catkin_ws/src/project/cpp/tools/transforming.cpp:17:55: required from here
/usr/include/eigen3/Eigen/src/Core/Product.h:29:127: error: no type named ‘ReturnType’ in ‘struct Eigen::ScalarBinaryOpTraits<double, float, Eigen::internal::scalar_product_op<double, float> >’
typedef typename ScalarBinaryOpTraits<typename traits<LhsCleaned>::Scalar, typename traits<RhsCleaned>::Scalar>::ReturnType Scalar;
^~~~~~
In file included from /usr/include/eigen3/Eigen/Core:415:0,
from /usr/include/eigen3/Eigen/StdVector:14,
from /usr/include/pcl-1.8/pcl/point_cloud.h:46,
from /usr/include/pcl-1.8/pcl/common/transforms.h:42,
from /home/admin/catkin_ws/src/project/cpp/tools/transforming.cpp:2:
/usr/include/eigen3/Eigen/src/Core/DenseBase.h: In instantiation of ‘class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >’:
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:48:34: required from ‘class Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >’
/usr/include/eigen3/Eigen/src/Core/Product.h:115:7: required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0, 3>’
/usr/include/eigen3/Eigen/src/Core/Product.h:147:7: required from ‘class Eigen::ProductImpl<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0, Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h:71:7: required from ‘class Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>’
/usr/include/eigen3/Eigen/src/Geometry/Transform.h:1390:72: required from ‘static Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::ResultType Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::run(const TransformType&, const MatrixType&) [with TransformType = Eigen::Transform<double, 3, 2>; MatrixType = Eigen::Map<const Eigen::Matrix<float, 3, 1>, 0, Eigen::Stride<0, 0> >; Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::ResultType = Eigen::Matrix<float, 3, 1>]’
/usr/include/eigen3/Eigen/src/Geometry/Transform.h:442:80: required from ‘const typename Eigen::internal::transform_right_product_impl<Eigen::Transform<Scalar, Dim, Mode, _Options>, OtherDerived>::ResultType Eigen::Transform<Scalar, Dim, Mode, _Options>::operator*(const Eigen::EigenBase<OtherDerived>&) const [with OtherDerived = Eigen::Map<const Eigen::Matrix<float, 3, 1>, 0, Eigen::Stride<0, 0> >; _Scalar = double; int _Dim = 3; int _Mode = 2; int _Options = 0; typename Eigen::internal::transform_right_product_impl<Eigen::Transform<Scalar, Dim, Mode, _Options>, OtherDerived>::ResultType = Eigen::Matrix<float, 3, 1>]’
/usr/include/pcl-1.8/pcl/common/impl/transforms.hpp:319:37: required from ‘PointT pcl::transformPoint(const PointT&, const Eigen::Transform<Scalar, 3, 2>&) [with PointT = pcl::PointXYZ; Scalar = double]’
/home/admin/catkin_ws/src/project/cpp/tools/transforming.cpp:17:55: required from here
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:83:17: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::coeff’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::coeff;
^~~~~
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:84:17: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::coeffByOuterInner’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::coeffByOuterInner;
^~~~~~~~~~~~~~~~~
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:85:26: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::operator()’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::operator();
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:86:26: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::operator[]’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::operator[];
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:87:17: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::x’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::x;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:88:17: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::y’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::y;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:89:17: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::z’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::z;
^
/usr/include/eigen3/Eigen/src/Core/DenseBase.h:90:17: error: no members matching ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}::w’ in ‘Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseCoeffsBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>, 0>}’
using Base::w;
^
In file included from /usr/include/eigen3/Eigen/Core:416:0,
from /usr/include/eigen3/Eigen/StdVector:14,
from /usr/include/pcl-1.8/pcl/point_cloud.h:46,
from /usr/include/pcl-1.8/pcl/common/transforms.h:42,
from /home/admin/catkin_ws/src/project/cpp/tools/transforming.cpp:2:
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h: In instantiation of ‘class Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >’:
/usr/include/eigen3/Eigen/src/Core/Product.h:115:7: required from ‘class Eigen::internal::dense_product_base<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0, 3>’
/usr/include/eigen3/Eigen/src/Core/Product.h:147:7: required from ‘class Eigen::ProductImpl<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0, Eigen::Dense>’
/usr/include/eigen3/Eigen/src/Core/Product.h:71:7: required from ‘class Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0>’
/usr/include/eigen3/Eigen/src/Geometry/Transform.h:1390:72: required from ‘static Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::ResultType Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::run(const TransformType&, const MatrixType&) [with TransformType = Eigen::Transform<double, 3, 2>; MatrixType = Eigen::Map<const Eigen::Matrix<float, 3, 1>, 0, Eigen::Stride<0, 0> >; Eigen::internal::transform_right_product_impl<TransformType, MatrixType, 2, 1>::ResultType = Eigen::Matrix<float, 3, 1>]’
/usr/include/eigen3/Eigen/src/Geometry/Transform.h:442:80: required from ‘const typename Eigen::internal::transform_right_product_impl<Eigen::Transform<Scalar, Dim, Mode, _Options>, OtherDerived>::ResultType Eigen::Transform<Scalar, Dim, Mode, _Options>::operator*(const Eigen::EigenBase<OtherDerived>&) const [with OtherDerived = Eigen::Map<const Eigen::Matrix<float, 3, 1>, 0, Eigen::Stride<0, 0> >; _Scalar = double; int _Dim = 3; int _Mode = 2; int _Options = 0; typename Eigen::internal::transform_right_product_impl<Eigen::Transform<Scalar, Dim, Mode, _Options>, OtherDerived>::ResultType = Eigen::Matrix<float, 3, 1>]’
/usr/include/pcl-1.8/pcl/common/impl/transforms.hpp:319:37: required from ‘PointT pcl::transformPoint(const PointT&, const Eigen::Transform<Scalar, 3, 2>&) [with PointT = pcl::PointXYZ; Scalar = double]’
/home/admin/catkin_ws/src/project/cpp/tools/transforming.cpp:17:55: required from here
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:75:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}::coeff’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}’
using Base::coeff;
^~~~~
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:78:17: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}::eval’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}’
using Base::eval;
^~~~
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:81:25: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}::operator*=’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}’
using Base::operator*=;
^~
/usr/include/eigen3/Eigen/src/Core/MatrixBase.h:82:25: error: no members matching ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}::operator/=’ in ‘Eigen::MatrixBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >::Base {aka class Eigen::DenseBase<Eigen::Product<Eigen::Matrix<double, 4, 4>, Eigen::Matrix<float, 4, 1>, 0> >}’
using Base::operator/=;
^~
project/cpp/CMakeFiles/transforming.dir/build.make:62: recipe for target 'project/cpp/CMakeFiles/transforming.dir/tools/transforming.cpp.o' failed
make[2]: *** [project/cpp/CMakeFiles/transforming.dir/tools/transforming.cpp.o] Error 1
CMakeFiles/Makefile2:549: recipe for target 'project/cpp/CMakeFiles/transforming.dir/all' failed
make[1]: *** [project/cpp/CMakeFiles/transforming.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j2 -l2" failed
【问题讨论】: