cartographer源码分析(13)-transform-rigid_transform.h

本文深入剖析了cartographer库中transform-rigid_transform.h源码,探讨了其在SLAM中的作用,提供了下载链接以及作者在多个平台的发布地址。

源码可在https://github.com/learnmoreonce/SLAM 下载


#ifndef CARTOGRAPHER_TRANSFORM_RIGID_TRANSFORM_H_
#define CARTOGRAPHER_TRANSFORM_RIGID_TRANSFORM_H_

#include <iostream>
#include <string>

#include "Eigen/Core"
#include "Eigen/Geometry"
#include "cartographer/common/lua_parameter_dictionary.h"
#include "cartographer/common/math.h"
#include "cartographer/common/port.h"

namespace cartographer {
namespace transform {

/*
几个名词细微的区别 :

transformation:变换
translation:平移
rotation:旋转
scaling:缩放
counter clock wise rotation:逆时针旋转,counter:反向
Identity():单位矩阵,不同于线性代数的“单位”。在不同的语义下,含义会不同。


Rigid2是对二维刚性变换【旋转与平移】的封装,SE2.对应论文公式(1):


Rigid2表现为先将vector[x0,y0]旋转θ角度得到[x',y'],然后再叠加[dx,dy]得到[x1,y1]
即:
x1=x'+dx,
y1=y'+dy,


模板参数必须是浮点型。(int类型为错误用法)

提供2个操作:
1,按照指定角度θ逆时针旋转。此时dx,dy=0
2,按照指定平移向量dx,dy平移. 此时θ=0

静态成员函数包括:
1,Rotation()
2,Translation()
3,Identity()

Translation()指定对象的2D translation(2D平移)。
第一个参数对应X轴,第二个参数对应Y轴。默认是单位变换。   


[x'       [cosθ , -sinθ           [ x
 y']   =   sinθ ,  cosθ ]   *       y ]

*/
template <typename FloatType> 
//FloatType不能是int类型,不然Rotation2D的cos0==0,丢失角度信息,无法得到正确结果
class Rigid2 {
 public:
  using Vector = Eigen::Matrix<FloatType, 2, 1>;//2行1列,p142
  using Rotation2D = Eigen::Rotation2D<FloatType>;

// 无参构造函数,平移向量为单位向量[1,0]^t,旋转角度为0,debugstring()输出:[1,0,0]
  Rigid2()
      : translation_(Vector::Identity()), rotation_(Rotation2D::Identity()) {}


//Rotation2D(double ): Construct a 2D counter clock wise rotation from the angle a in radian. 

//双参构造函数,给定平移向量[dx,dy]和旋转角度0,进行旋转变换:  
  Rigid2(const Vector& translation, const Rotation2D& rotation)
      : translation_(translation), rotation_(rotation) {}
//同上,给定旋转角度θ,double是弧度值。
  Rigid2(const Vector& translation, const double rotation)
      : translation_(translation), rotation_(rotation) {}

//类的静态成员函数,返回Rigid2,debugstring()是[0,0,θ ]
  static Rigid2 Rotation(const double rotation) { //给定旋转角度θ 
    return Rigid2(Vector::Zero(), rotation);
  }
//同上
  static Rigid2 Rotation(const Rotation2D& rotation) {
  
  //给定旋转矩阵,角度为θ 
    return Rigid2(Vector::Zero(), rotation);
  }
//旋转角度是单位矩阵,即θ为0 ,[dx,dy,0]
  static Rigid2 Translation(const Vector& vector) { 

    return Rigid2(vector, Rotation2D::Identity());//θ为0
  }

//静态成员函数,全为0:
  static Rigid2<FloatType> Identity() {    //返回Rigid2,[0,0,0]
    return Rigid2<FloatType>(Vector::Zero(), Rotation2D::Identity());
  }

/*为什么要加translation_.templa
u1804@u1804-Lenovo-Legion-R9000K2021H:~/study/cartographer_install$ ./auto-carto-build.sh [sudo] u1804 的密码: /home/u1804/study/cartographer_install -- The C compiler identification is GNU 7.5.0 -- The CXX compiler identification is GNU 7.5.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Build type: Release 文件 /home/u1804/study/cartographer_install/cartographer/build/AllFiles.cmake 和 - 不同 -- Looking for pthread.h -- Looking for pthread.h - found -- Performing Test CMAKE_HAVE_LIBC_PTHREAD -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed -- Looking for pthread_create in pthreads -- Looking for pthread_create in pthreads - not found -- Looking for pthread_create in pthread -- Looking for pthread_create in pthread - found -- Found Threads: TRUE -- Found GMock: /usr/local/lib/libgmock_main.a;/usr/local/lib/libgmock.a;/usr/local/lib/libgtest.a;-lpthread CMake Warning (dev) at /usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:438 (message): The package name passed to `find_package_handle_standard_args` (Threads) does not match the name of the calling package (absl). This can lead to problems in calling code that expects `find_package` result variables (e.g., `_FOUND`) to follow a certain pattern. Call Stack (most recent call first): /usr/local/share/cmake-3.20/Modules/FindThreads.cmake:238 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) /usr/local/lib/cmake/absl/abslConfig.cmake:3 (include) CMakeLists.txt:32 (find_package) This warning is for project developers. Use -Wno-dev to suppress it. -- Found Boost: /usr/include (found version "1.65.1") found components: iostreams regex -- Found installed version of Eigen: /usr/lib/cmake/eigen3 -- Found required Ceres dependency: Eigen version 3.3.4 in /usr/include/eigen3 -- Found required Ceres dependency: glog -- Found installed version of gflags: /usr/lib/x86_64-linux-gnu/cmake/gflags -- Detected gflags version: 2.2.1 -- Found required Ceres dependency: gflags -- Found Ceres version: 1.13.0 installed in: /usr/local with components: [LAPACK, SuiteSparse, SparseLinearAlgebraLibrary, CXSparse, SchurSpecializations, C++11, OpenMP] CMake Warning (dev) at /usr/local/share/cmake-3.20/Modules/FindPackageHandleStandardArgs.cmake:438 (message): The package name passed to `find_package_handle_standard_args` (Lua) does not match the name of the calling package (LuaGoogle). This can lead to problems in calling code that expects `find_package` result variables (e.g., `_FOUND`) to follow a certain pattern. Call Stack (most recent call first): cmake/modules/FindLuaGoogle.cmake:211 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) CMakeLists.txt:41 (find_package) This warning is for project developers. Use -Wno-dev to suppress it. -- Found Lua: /usr/lib/x86_64-linux-gnu/liblua5.2.so;/usr/lib/x86_64-linux-gnu/libm.so (found version "5.2.4") -- Found Protobuf: /usr/local/lib/libprotobuf.a;-lpthread (found suitable version "3.4.0", minimum required is "3.0.0") -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") -- Checking for one of the modules 'cairo>=1.12.16' -- Found Sphinx: /usr/bin/sphinx-build -- Configuring done -- Generating done -- Build files have been written to: /home/u1804/study/cartographer_install/cartographer/build [42/381] cd /home/u1804/study/cartogra...all/cartographer/build/AllFiles.cmake" 文件 /home/u1804/study/cartographer_install/cartographer/build/AllFiles.cmake 和 - 不同 [43/381] Building documentation. Running Sphinx v1.6.7 making output directory... loading pickled environment... not yet created building [mo]: targets for 0 po files that are out of date building [html]: targets for 6 source files that are out of date updating environment: 6 added, 0 changed, 0 removed reading sources... [ 16%] configuration reading sources... [ 33%] cost_functions reading sources... [ 50%] evaluation reading sources... [ 66%] index reading sources... [ 83%] pbstream_migration reading sources... [100%] terminology looking for now-outdated files... none found pickling environment... done checking consistency... done preparing documents... done writing output... [ 16%] configuration writing output... [ 33%] cost_functions writing output... [ 50%] evaluation writing output... [ 66%] index writing output... [ 83%] pbstream_migration writing output... [100%] terminology generating indices... genindex writing additional pages... search copying images... [ 50%] high_level_system_overview.png copying images... [100%] autogenerate_groundtruth.png copying static files... done copying extra files... done dumping search index in English (code: en) ... done dumping object inventory... done build succeeded. [265/381] Linking CXX executable cartographer_print_configuration FAILED: cartographer_print_configuration : && /usr/bin/c++ -O3 -DNDEBUG -rdynamic CMakeFiles/cartographer_print_configuration.dir/cartographer/common/print_configuration_main.cc.o -o cartographer_print_configuration libcartographer.a /usr/local/lib/libceres.a -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lspqr -ltbb -ltbbmalloc -lcholmod -lccolamd -lcamd -lcolamd -lamd -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -lgomp -llua5.2 -lm -lboost_iostreams -lboost_regex -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lcairo /usr/local/lib/libprotobuf.a /usr/local/lib/libabsl_leak_check.a /usr/local/lib/libabsl_hash.a /usr/local/lib/libabsl_bad_variant_access.a /usr/local/lib/libabsl_city.a /usr/local/lib/libabsl_raw_hash_set.a /usr/local/lib/libabsl_bad_optional_access.a /usr/local/lib/libabsl_hashtablez_sampler.a /usr/local/lib/libabsl_str_format_internal.a /usr/local/lib/libabsl_synchronization.a /usr/local/lib/libabsl_stacktrace.a /usr/local/lib/libabsl_graphcycles_internal.a /usr/local/lib/libabsl_symbolize.a /usr/local/lib/libabsl_malloc_internal.a /usr/local/lib/libabsl_debugging_internal.a /usr/local/lib/libabsl_demangle_internal.a /usr/local/lib/libabsl_time.a /usr/local/lib/libabsl_strings.a /usr/local/lib/libabsl_strings_internal.a /usr/local/lib/libabsl_throw_delegate.a /usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_dynamic_annotations.a /usr/local/lib/libabsl_spinlock_wait.a -lpthread /usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread && : CMakeFiles/cartographer_print_configuration.dir/cartographer/common/print_configuration_main.cc.o:在函数‘cartographer::common::PrintSubdictionaryById(cartographer::common::LuaParameterDictionary*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’中: print_configuration_main.cc:(.text+0x2c3):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 print_configuration_main.cc:(.text+0x84d):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 CMakeFiles/cartographer_print_configuration.dir/cartographer/common/print_configuration_main.cc.o:在函数‘absl::strings_internal::Splitter<absl::ByChar, absl::SkipEmpty>::ConvertToContainer<std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >, std::basic_string_view<char, std::char_traits<char> >, false>::operator()(absl::strings_internal::Splitter<absl::ByChar, absl::SkipEmpty> const&) const’中: print_configuration_main.cc:(.text._ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_[_ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_]+0x105):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 print_configuration_main.cc:(.text._ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_[_ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_]+0x20d):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 collect2: error: ld returned 1 exit status [266/381] Linking CXX executable cartographer_pbstream FAILED: cartographer_pbstream : && /usr/bin/c++ -O3 -DNDEBUG -rdynamic CMakeFiles/cartographer_pbstream.dir/cartographer/io/pbstream_main.cc.o -o cartographer_pbstream libcartographer.a /usr/local/lib/libceres.a -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lspqr -ltbb -ltbbmalloc -lcholmod -lccolamd -lcamd -lcolamd -lamd -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -lgomp -llua5.2 -lm -lboost_iostreams -lboost_regex -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lcairo /usr/local/lib/libprotobuf.a /usr/local/lib/libabsl_leak_check.a /usr/local/lib/libabsl_hash.a /usr/local/lib/libabsl_bad_variant_access.a /usr/local/lib/libabsl_city.a /usr/local/lib/libabsl_raw_hash_set.a /usr/local/lib/libabsl_bad_optional_access.a /usr/local/lib/libabsl_hashtablez_sampler.a /usr/local/lib/libabsl_str_format_internal.a /usr/local/lib/libabsl_synchronization.a /usr/local/lib/libabsl_stacktrace.a /usr/local/lib/libabsl_graphcycles_internal.a /usr/local/lib/libabsl_symbolize.a /usr/local/lib/libabsl_malloc_internal.a /usr/local/lib/libabsl_debugging_internal.a /usr/local/lib/libabsl_demangle_internal.a /usr/local/lib/libabsl_time.a /usr/local/lib/libabsl_strings.a /usr/local/lib/libabsl_strings_internal.a /usr/local/lib/libabsl_throw_delegate.a /usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_dynamic_annotations.a /usr/local/lib/libabsl_spinlock_wait.a -lpthread /usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread && : libcartographer.a(histogram.cc.o):在函数‘cartographer::common::Histogram::ToString[abi:cxx11](int) const’中: histogram.cc:(.text+0x3f4):对‘absl::strings_internal::CatPieces[abi:cxx11](std::initializer_list<std::basic_string_view<char, std::char_traits<char> > >)’未定义的引用 histogram.cc:(.text+0xb60):对‘absl::strings_internal::AppendPieces(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::initializer_list<std::basic_string_view<char, std::char_traits<char> > >)’未定义的引用 collect2: error: ld returned 1 exit status [282/381] Building CXX object CMakeFiles/car...nal/3d/local_trajectory_builder_3d_test.cc.o ninja: build stopped: subcommand failed. [2/104] Linking CXX executable cartographer_print_configuration FAILED: cartographer_print_configuration : && /usr/bin/c++ -O3 -DNDEBUG -rdynamic CMakeFiles/cartographer_print_configuration.dir/cartographer/common/print_configuration_main.cc.o -o cartographer_print_configuration libcartographer.a /usr/local/lib/libceres.a -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lspqr -ltbb -ltbbmalloc -lcholmod -lccolamd -lcamd -lcolamd -lamd -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -lgomp -llua5.2 -lm -lboost_iostreams -lboost_regex -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lcairo /usr/local/lib/libprotobuf.a /usr/local/lib/libabsl_leak_check.a /usr/local/lib/libabsl_hash.a /usr/local/lib/libabsl_bad_variant_access.a /usr/local/lib/libabsl_city.a /usr/local/lib/libabsl_raw_hash_set.a /usr/local/lib/libabsl_bad_optional_access.a /usr/local/lib/libabsl_hashtablez_sampler.a /usr/local/lib/libabsl_str_format_internal.a /usr/local/lib/libabsl_synchronization.a /usr/local/lib/libabsl_stacktrace.a /usr/local/lib/libabsl_graphcycles_internal.a /usr/local/lib/libabsl_symbolize.a /usr/local/lib/libabsl_malloc_internal.a /usr/local/lib/libabsl_debugging_internal.a /usr/local/lib/libabsl_demangle_internal.a /usr/local/lib/libabsl_time.a /usr/local/lib/libabsl_strings.a /usr/local/lib/libabsl_strings_internal.a /usr/local/lib/libabsl_throw_delegate.a /usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_dynamic_annotations.a /usr/local/lib/libabsl_spinlock_wait.a -lpthread /usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread && : CMakeFiles/cartographer_print_configuration.dir/cartographer/common/print_configuration_main.cc.o:在函数‘cartographer::common::PrintSubdictionaryById(cartographer::common::LuaParameterDictionary*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’中: print_configuration_main.cc:(.text+0x2c3):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 print_configuration_main.cc:(.text+0x84d):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 CMakeFiles/cartographer_print_configuration.dir/cartographer/common/print_configuration_main.cc.o:在函数‘absl::strings_internal::Splitter<absl::ByChar, absl::SkipEmpty>::ConvertToContainer<std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >, std::basic_string_view<char, std::char_traits<char> >, false>::operator()(absl::strings_internal::Splitter<absl::ByChar, absl::SkipEmpty> const&) const’中: print_configuration_main.cc:(.text._ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_[_ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_]+0x105):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 print_configuration_main.cc:(.text._ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_[_ZNK4absl16strings_internal8SplitterINS_6ByCharENS_9SkipEmptyEE18ConvertToContainerISt6vectorISt17basic_string_viewIcSt11char_traitsIcEESaISA_EESA_Lb0EEclERKS4_]+0x20d):对‘absl::ByChar::Find(std::basic_string_view<char, std::char_traits<char> >, unsigned long) const’未定义的引用 collect2: error: ld returned 1 exit status [3/104] Linking CXX executable cartographer.transform.rigid_transform_test FAILED: cartographer.transform.rigid_transform_test : && /usr/bin/c++ -O3 -DNDEBUG -rdynamic CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o -o cartographer.transform.rigid_transform_test libcartographer.a /usr/local/lib/libgmock_main.a /usr/local/lib/libgmock.a /usr/local/lib/libgtest.a -lpthread libcartographer_test_library.a libcartographer.a /usr/local/lib/libceres.a -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lspqr -ltbb -ltbbmalloc -lcholmod -lccolamd -lcamd -lcolamd -lamd -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -lgomp -llua5.2 -lm -lboost_iostreams -lboost_regex -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lcairo /usr/local/lib/libprotobuf.a /usr/local/lib/libabsl_leak_check.a /usr/local/lib/libabsl_hash.a /usr/local/lib/libabsl_bad_variant_access.a /usr/local/lib/libabsl_city.a /usr/local/lib/libabsl_raw_hash_set.a /usr/local/lib/libabsl_bad_optional_access.a /usr/local/lib/libabsl_hashtablez_sampler.a /usr/local/lib/libabsl_str_format_internal.a /usr/local/lib/libabsl_synchronization.a /usr/local/lib/libabsl_stacktrace.a /usr/local/lib/libabsl_graphcycles_internal.a /usr/local/lib/libabsl_symbolize.a /usr/local/lib/libabsl_malloc_internal.a /usr/local/lib/libabsl_debugging_internal.a /usr/local/lib/libabsl_demangle_internal.a /usr/local/lib/libabsl_time.a /usr/local/lib/libabsl_strings.a /usr/local/lib/libabsl_strings_internal.a /usr/local/lib/libabsl_throw_delegate.a /usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_dynamic_annotations.a /usr/local/lib/libabsl_spinlock_wait.a -lpthread /usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread /usr/local/lib/libgmock.a && : CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o:在函数‘std::ostream& cartographer::transform::operator<< <double>(std::ostream&, cartographer::transform::Rigid2<double> const&)’中: rigid_transform_test.cc:(.text._ZN12cartographer9transformlsIdEERSoS2_RKNS0_6Rigid2IT_EE[_ZN12cartographer9transformlsIdEERSoS2_RKNS0_6Rigid2IT_EE]+0x110):对‘absl::substitute_internal::SubstituteAndAppendArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > const*, unsigned long)’未定义的引用 CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o:在函数‘std::ostream& cartographer::transform::operator<< <float>(std::ostream&, cartographer::transform::Rigid2<float> const&)’中: rigid_transform_test.cc:(.text._ZN12cartographer9transformlsIfEERSoS2_RKNS0_6Rigid2IT_EE[_ZN12cartographer9transformlsIfEERSoS2_RKNS0_6Rigid2IT_EE]+0x11c):对‘absl::substitute_internal::SubstituteAndAppendArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > const*, unsigned long)’未定义的引用 CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o:在函数‘cartographer::transform::Rigid3<double>::DebugString[abi:cxx11]() const’中: rigid_transform_test.cc:(.text._ZNK12cartographer9transform6Rigid3IdE11DebugStringB5cxx11Ev[_ZNK12cartographer9transform6Rigid3IdE11DebugStringB5cxx11Ev]+0x20f):对‘absl::substitute_internal::SubstituteAndAppendArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > const*, unsigned long)’未定义的引用 CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o:在函数‘cartographer::transform::Rigid3<float>::DebugString[abi:cxx11]() const’中: rigid_transform_test.cc:(.text._ZNK12cartographer9transform6Rigid3IfE11DebugStringB5cxx11Ev[_ZNK12cartographer9transform6Rigid3IfE11DebugStringB5cxx11Ev]+0x22b):对‘absl::substitute_internal::SubstituteAndAppendArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > const*, unsigned long)’未定义的引用 CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o:在函数‘cartographer::transform::IsNearlyMatcherP2<cartographer::transform::Rigid2<float>, float>::gmock_Impl<cartographer::transform::Rigid2<float> const&>::FormatDescription[abi:cxx11](bool) const’中: rigid_transform_test.cc:(.text._ZNK12cartographer9transform17IsNearlyMatcherP2INS0_6Rigid2IfEEfE10gmock_ImplIRKS3_E17FormatDescriptionB5cxx11Eb[_ZNK12cartographer9transform17IsNearlyMatcherP2INS0_6Rigid2IfEEfE10gmock_ImplIRKS3_E17FormatDescriptionB5cxx11Eb]+0x17f):对‘absl::substitute_internal::SubstituteAndAppendArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > const*, unsigned long)’未定义的引用 CMakeFiles/cartographer.transform.rigid_transform_test.dir/cartographer/transform/rigid_transform_test.cc.o:rigid_transform_test.cc:(.text._ZNK12cartographer9transform17IsNearlyMatcherP2INS0_6Rigid2IdEEdE10gmock_ImplIRKS3_E17FormatDescriptionB5cxx11Eb[_ZNK12cartographer9transform17IsNearlyMatcherP2INS0_6Rigid2IdEEdE10gmock_ImplIRKS3_E17FormatDescriptionB5cxx11Eb]+0x173): 跟着更多未定义的参考到 absl::substitute_internal::SubstituteAndAppendArray(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string_view<char, std::char_traits<char> >, std::basic_string_view<char, std::char_traits<char> > const*, unsigned long) collect2: error: ld returned 1 exit status [4/104] Linking CXX executable cartographer_pbstream FAILED: cartographer_pbstream : && /usr/bin/c++ -O3 -DNDEBUG -rdynamic CMakeFiles/cartographer_pbstream.dir/cartographer/io/pbstream_main.cc.o -o cartographer_pbstream libcartographer.a /usr/local/lib/libceres.a -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lspqr -ltbb -ltbbmalloc -lcholmod -lccolamd -lcamd -lcolamd -lamd -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -llapack -lblas -lf77blas -latlas -lsuitesparseconfig -lrt -lcxsparse -lgomp -llua5.2 -lm -lboost_iostreams -lboost_regex -lglog /usr/lib/x86_64-linux-gnu/libgflags.so.2.2.1 -lcairo /usr/local/lib/libprotobuf.a /usr/local/lib/libabsl_leak_check.a /usr/local/lib/libabsl_hash.a /usr/local/lib/libabsl_bad_variant_access.a /usr/local/lib/libabsl_city.a /usr/local/lib/libabsl_raw_hash_set.a /usr/local/lib/libabsl_bad_optional_access.a /usr/local/lib/libabsl_hashtablez_sampler.a /usr/local/lib/libabsl_str_format_internal.a /usr/local/lib/libabsl_synchronization.a /usr/local/lib/libabsl_stacktrace.a /usr/local/lib/libabsl_graphcycles_internal.a /usr/local/lib/libabsl_symbolize.a /usr/local/lib/libabsl_malloc_internal.a /usr/local/lib/libabsl_debugging_internal.a /usr/local/lib/libabsl_demangle_internal.a /usr/local/lib/libabsl_time.a /usr/local/lib/libabsl_strings.a /usr/local/lib/libabsl_strings_internal.a /usr/local/lib/libabsl_throw_delegate.a /usr/local/lib/libabsl_base.a /usr/local/lib/libabsl_dynamic_annotations.a /usr/local/lib/libabsl_spinlock_wait.a -lpthread /usr/local/lib/libabsl_int128.a /usr/local/lib/libabsl_civil_time.a /usr/local/lib/libabsl_time_zone.a -lpthread && : libcartographer.a(histogram.cc.o):在函数‘cartographer::common::Histogram::ToString[abi:cxx11](int) const’中: histogram.cc:(.text+0x3f4):对‘absl::strings_internal::CatPieces[abi:cxx11](std::initializer_list<std::basic_string_view<char, std::char_traits<char> > >)’未定义的引用 histogram.cc:(.text+0xb60):对‘absl::strings_internal::AppendPieces(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::initializer_list<std::basic_string_view<char, std::char_traits<char> > >)’未定义的引用 collect2: error: ld returned 1 exit status [19/104] Building CXX object CMakeFiles/cart...unctions/landmark_cost_function_3d_test.cc.o ninja: build stopped: subcommand failed. u1804@u1804-Lenovo-Legion-R9000K2021H:~/study/cartographer_install$
最新发布
08-21
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值