本地编译Apollo Cyber系统

本文介绍 本地编译Apollo Cyber系统

本地编译Apollo Cyber系统

This article was original written by XRBLS, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

我们在玩Apollo的时候,其实大多数时候并不需要其他的模块,可能只需要一个Cyber,那么其实可以比较简单的编译cyber的。这篇教程就是教大家如果不用docker换来换去,直接在本地编译Cyber。它有什么用呢?

  • 当你需要尝试,仅仅只是想使用cyber左右一个分布式的机器人操作系统的时候有用;
  • 当你只是想Parse Cyber录制的包的时候有用。

那么,开始吧。(另外笔者不太喜欢用bazel,不知道是否有大佬用cmake维护cyber的,有的话可以分享一下。有时候将cyber当成一个库来用可能更方便一些。)

## 先来一个简单版本

我们暂时不修改任何apollo的源代码,我们仅仅使本地的依赖满足apollo的要求。首先需要将apollo的一些本地依赖拷贝到本机:

docker cp  4f2f73aafd1d:/home/tmp /home/tmp

其中4f2f.... 是你的docker container的ID,把里面的文件拷贝到你本机。为什么这么做呢?因为你会发现apollo的bazel WORKSPACE里面引用的是本地文件依赖,比如:

http_archive (
    name = "gtest",
    build_file = "gtest.BUILD",
    sha256 = "58a6f4277ca2bc8565222b3bbd58a177609e9c488e8a72649359ba51450db7d8",
    strip_prefix = "googletest-release-1.8.0",
    url = "file:///home/tmp/gtest.tar.gz",
)

这个时候如果你直接用:

bazel build cyber:cyber

去build cyber系统的时候,会找不到依赖的,因此我们直接将docker里面的文件拷贝到本机对饮的路径即可。至于为什么apollo要使用本地依赖而不是直接用url,不得而知,有人知道的可以留言。。。

然后就是一个可能需要的依赖,比如protobuf,google test, glog等等,这些大家应该本机都自带了把,毕竟搞DL和C++机器没有这些库不科学,当然也有PCL1.9之类的库。大家自行安装。

比较可能没有的是这么一些库。

  • Fast RTPS: 这个是一个开源的C++的publish-subscribe的通讯库,没想到啊,apollo居然也依赖于这么一个库,说好的完全自主开发的呢?不过话说回来,好像ROS2用的也是这个库。

    开源地址:

    https://github.com/eProsima/Fast-RTPS.git
    

    这个库很重要,但是也是大坑,要安装它,需要安装asio,tinyxml2等依赖,当然还有foonathan memory这个库:

    sudo apt install libasio-dev libtinyxml2-dev
    
    # install foonathan_memory
    git clone https://github.com/foonathan/memory.git
    cd memory
    git submodule update --init --recursive
    cmake -DCMAKE_BUILD_TYPE="buildtype" -DFOONATHAN_MEMORY_BUILD_EXAMPLES=OFF -DFOONATHAN_MEMORY_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local .
    cmake --build . -- install
    
    
    # install Fast-RTPS source
    https://github.com/eProsima/Fast-RTPS.git
    cd Fast-RTPS
    git submodule update --init --recursive
    

    总的来说,还是比较难安装的,但请注意,这个就是一个比较核心的库了,ROS2里面用的也是它,因此假如你要从源码编译ROS2的话,那么也得用这个库。

    上面cmake foonathan_memory这个库好像… 似乎…要FQ才能下载一些依赖的东西。

    note: 这一步的最终目的是要编译安装fastrtps库,但是它的依赖比较难搞,尤其是memory那个哭,它默认编译的是静态链接库,所以你得在源码的CMakeLists里面改一下,改成动态,否则无法编译fastrtps的动态库。

  • libtf2.so: 这个是ros的库,其实你可以通过安装ros来安装libtf2.so,但更简单的方法是通过apt来安装这个单独的依赖:

    sudo apt install libtf2-dev
    

    但是有个问题,通过apt安装的tf2默认是在/usr/include 而Apollo里面的写的是 /usr/local/include 将其改为我们安装的位置。注意,连带 third_party/tf2.BUILD 。也要修改.

通过上面的步骤之后,基本上就没有依赖问题了,可以开始编译cyber。记得修改一下zlib:

cc_library(
    name = "zlib",
    # srcs = [
    #     "lib/libz.so",
    #     "lib/libz.so.1",
    # ],
    linkopts = [
        "-L/usr/lib/x86_64-linux-gnu",
        "-lz",
    ],
)

apollo里面配置的路径跟通常情况zlib的位置不一致,本地无法找到zlib,修改一下即可找到。

进一步debug

编译cyber开始之后呢,由于我们的fastrtps的版本可能存在不一致的情况。 出现了一个error。

Apollo Cyber RT是基于Apollo自动驾驶开放平台的一种实时仿真工具。它能够对自动驾驶算法进行快速的模拟测试和验证。 Apollo Cyber RT可以在没有物理车辆的情况下,使用虚拟仿真环境对自动驾驶系统进行全面的测试。它提供了高度逼真的虚拟场景,包括各种路况、天气条件、道路标志和交通规则。用户可以在这个仿真环境中,验证自动驾驶算法在各种复杂情况下的性能和稳定性。 Apollo Cyber RT还提供了丰富的仿真工具和API接口,可以进行车辆动力学仿真、传感器数据仿真、车辆控制仿真等。用户可以根据实际需求,快速搭建自己的仿真场景,并通过API接口与自己的自动驾驶算法进行集成。这样,用户就可以在不同场景下进行大规模的仿真测试,测试自动驾驶系统对各种情况的应对能力。 与传统的实地测试相比,Apollo Cyber RT的优势在于它可以大大缩短测试周期和降低测试成本。传统的实地测试需要耗费大量的时间和资源,并且受到地理和气候等限制。而Apollo Cyber RT可以在任何时间和地点进行仿真测试,同时还可以通过调整仿真参数、重复测试等方式,快速地验证和迭代自动驾驶算法。 总之,Apollo Cyber RT是一种基于Apollo开放平台的实时仿真工具,它能够帮助用户快速测试和验证自动驾驶算法。它提供了丰富的虚拟场景和仿真工具,可以满足用户在不同场景下的测试需求,同时还能显著缩短测试周期和降低测试成本。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值