当前位置:   article > 正文

apollo ros联合编译进度及问题_apollo cyber rt编译

apollo cyber rt编译

0. 进度:

  • cyber base : 全是头文件,做成INTERFACE 库,cyber::base
  • cyber common:先分开构建,最后合成cyber_common库
  • cyber proto:直接所有cc文件合成一个cyber_proto库
  • common proto:分开编译,最后合成common_proto
  • common util
  • common util color 编译
  • common util eigen_defs 编译
  • common util factory 编译测试
  • common util lru_cache 编译测试
  • common util json 编译测试,有错误通过
  • common util map_util 编译
  • common util future 编译
  • common util message util 编译测试
  • common util perf util 编译测试,涉及静态库问题已解决
  • common util point factory 涉及common math ,先去编译common math
  • common util string util 编译测试,编译common math需要这个包,先编译。
  • common util points downsampler 编译测试
  • comon util util 需要common config的支持,因此先去编译这个。编译测试通过
  • common configs
  • common configs vehicle config helper 编译测试,测试通过,但是gtest core dump,原因不明
  • common math
  • common math uitl 编译测试
  • common math vec2d 编译测试
  • common math geometry 编译测试
  • common math sin table 编译测试
  • common math angle 编译测试
  • common math quaternion 编译测试,这里link的是common proto,没有引用子项
  • common math matrix operations 编译测试,gtest测试全通过,有报错消息,应该是测试的一部分?
  • 其他 ok
  • common status
  • common vehiclestate
  • cyber time
  • cyber time duration 编译/单元测试
  • cyber time time 编译/ 单元测试
  • cyber time rate 编译
  • map
  • map proto
  • map hdmap 编译这些需要relative map navigation proto,编译测试完成
  • map hdmap util
  • map hdmap adapter
  • map hdmap adapter xml parser 需要common status,先去编译common status
  • relative map navigation proto 编译这个需要localization 和perception 的proto
  • pnc map
  • pnc map path中的path_test 需要routing 的proto 先去编译routing poto。pncmap path编译测试通过,测试有error提示
  • pnc map route segment 编译需要common vehicle state,先去编译这个 。编译完成,测试有问题,因为需要特定的地图文件,目前没有仔细调试应该问题不大
  • pnc map库,这个库的编译还需要planning的一些gflags。。。编译完成,测试需要地图数据,未测
  • relative map navigation lane 编译测试通过,注意要调整test过程中的文件路径
  • relative map 剩下的都是需要cyber支持的部分了,
  • routing
  • routing proto 编译
  • routing common 编译
  • routing graph 编译测试通过,有一堆warning
  • routing strategy 编译通过,没有单元测试文件
  • routing core 编译通过,没有单元测试文件
  • routing topo creator ——graph creator 测试通过。整体编译通过
  • tinyxml2
  • localization proto 编译 注意这个包里还有一些其他的没做
  • perception_obstacle_proto 编译
  1. 可以不使用cmake 里 link_directories 和 include_directories, 而是使用target_include_directories 和 target_link_libraries 这样方便对每一个target 进行精细控制

  2. 整体的cmakelist结构可以参照 https://github.com/gokhanettin/cmake-example
    目前我将所有的cmakelist中都放入了“project”关键词,不知道这个会不会对后面有影响

  3. 关于cmake变量影响范围:
    (1)在父级别定义的变量可以在子级别文件中看到。所以将所有的公用变量定义在了顶层
    (2)只要库定义的名字正常,就能在各个级别之间互相引用

  4. protobuf出现的File already exists in database,CHECK failed: generated_database_->Add(encoded_file_descriptor, size)。这个错误,是由于protobuf中存在全局静态的变量,如果引用了两次这个变量,就会产生两个初始化。造成这个错误。
    可以看https://groups.google.com/g/protobuf/c/RZRCnOywdSk/m/s5QvifLCBgAJ?utm_medium=email&utm_source=footer 这个连接里有一些讨论
    在我的情况下是由于common_proto库包含了所有的proto,直接引用产生,把这个改成common_error_proto就会让问题消失,后面再看看会遇到什么问题。

  5. 目前在gtest中还是有core dump的问题。表现是结果全部通过,但是core dump退出。还没有找到解决方案 从后面可以看出可能是:
    (1)环境变量设置需要和apollo对齐

  6. gtest和gmock 中的expect_that函数,存在segmentation fault问题,没有解决

  7. 在运行gtest过程中出现double free detected in tcache 2,然后core dump 的问题。
    在gtest可执行文件的编译过程中,如果去掉gmock,能编译通过,表明没有引用gmock的代码。那么此时运行不会出现segmentfautl 或者coredump的问题
    可能是gmock的版本和引用问题。考虑重新安装新版gtest.
    重新安装过后,依然不行。
    换新版本的过程,遇到DSO错误,提示和pthread相关,在target_link_libraries中添加pthread,注意这里添加的位置也会影响编译结果,不知道为什么。能解决问题,编译用过,运行有问题。没法pass
    如果换回原版本,删除pthread能正常编译,能pass所有test,但是会中间爆出错误,并且最后会segmentation fault,不知道为什么

  8. 在测试cyber time clock的时候,仔细观察打开文件失败等错误,会发现是因为没有在系统中设置cyber路径导致,cyber路径环境变量:export CYBER_PATH=your_path/apollo/cyber设置完之后就可以了

  9. 关于cmake add_custom_command的问题,https://cmake.org/cmake/help/latest/guide/tutorial/Selecting%20Static%20or%20Shared%20Libraries.html。这个官方连接有一些讲解。这个命令应该是可以执行一些shell命令。
    在apollo编译protobuf文件的时候,用到了这个方法添加protoc command
    这个方法也可以用来生成一些源码文件,并把源码文件在后面添加成编译源文件

  10. 关于cmake中INTERFACE PUBLIC PRIVATE关键词的讲解,可以看这个https://leimao.github.io/blog/CMake-Public-Private-Interface/

  11. 在编译common util perf util的过程中,absl link 出错误,说没有办法编译静态库,去absl安装文件发现,编译的都是静态 .a , 所以在这个common_util_perf_util 库的add_library上增加STATIC注释就通过了,但是这导致了这个库和别的类型不太一样,有没有问题需要看看。
    经过测试,在编译abseil库的过程中添加-DCMAKE_

  12. 关于为什么要用target_include_directories(common_math_angle PUBLIC ${common_math_dir}) 这个指令,而不是直接在add_library中添加头文件比如:add_library(common_math_angle angle.cc angle.h)。这样做是为了别人引用的方便,不然引用路径上会有问题

  13. 这个tinyxml2神坑,坑了一上午,之前安装ros之类的时候应该是安了一个版本的tinyxml最后也布吉岛好不好使,现在下了个最新版本的tinyxml2,为了编译它把cmake都换了,也不知道会不会影响后续ros的编译。结果发现只要把tinyxml2的cpp和h 文件放到一个地方直接自己cmake一下就好了,别的库去link它就行,白费了半天时间

  14. map hdmap 这个库的编译比较麻烦,因为它内部的adapter和xml parser没有单元测试代码,所以在这里卡了半天,主要是写cmake list的各种粗心错误。经验是一定要完完全全仔仔细细的按照bazel文件的配置进行编译。编译过程中更新了proj4库,ubuntu18.04本身的库有点老,很多函数没有,更新之后就会少一个link错误。
    还有就是要仔细看编译错误给出的位置,undefined reference错误位置也是对的

  15. 按照Eigen官网推荐的cmakelists配置在ubuntu18.04 下会产生eigen dense no such file or directory问题,直接将所有的Eigen/Dense 替换为eigen3/Eigen/Dense就可以

  16. 并且在包含absl/strings/str_cat.h的时候,同样也会出现no such file or directory 的问题,这个布吉岛是哪的问题,目前解决方案是在顶层cmakelists中添加include_directories(path_to_absl)

  17. 在编译relative map navigation lane lib 的过程中发现,这个bazel写的和我之前理解的又不太一样,感觉缺东西,每每出现undefined reference之后,在根据需求添加相应的link库
    应该是这个lib直接link了cyber库,这样就包含了cyber中的所有lib,但是目前我还没有编译cyber

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/899846
推荐阅读
相关标签
  

闽ICP备14008679号