• 【工程总结】Apollo-Cyber RT 中间件总结1


    【问题01】驱动同事在工控机上进行 odom 消息收发测试碰到的问题

    驱动同事需要进行 odom 驱动消息发送,他只需要【×××工程】编译的库以及 Apollo-Cyber 编译的库以及对应的头文件,准备好头文件和库文件即可。

    头文件只需要把 【××× 工程】拿出来,把不是 .h 文件全部删除,把 .proto 文件替换成已经生成的 .pb.h和.pb.cc 文件,这样组成了头文件。

    库文件把【××× 工程】和 Apollo-Cyber 工程 CMakeLists.txt 中所有生成的库文件,在 docker 容器内打包到一个文件夹内,就是组成的库文件。

    在工控机上运行时,缺什么库就去 docker 容器内找,之后在工控机上将库的文件夹路径添加到环境变量中。

    打包库时,如果看库是真正的库还是软链接,在当前文件夹内执行命令

    ll
    
    • 1

    就可以看到该文件夹下所有文件是不是有链接关系。

    执行命令

    ldd [库文件]
    
    • 1

    就可以看到这个库文件依赖于哪些库。

    打包库是最好不要破坏软链接关系,打包命令

    tar -zcvf [压缩包名].tar.gz [要压缩的包名或文件夹]
    
    • 1

    解压命令

    tar -zxvf [压缩包名].tar.gz
    
    • 1

    从 docker 内复制到 docker 外的文件或文件夹的所属用户和所属群组需改变,才能在 dokcer 外看见或是 可以 scp。

    更改文件或文件夹的所属用户和所属群组的命令

    sudo chown luxianying:luxianying *
    // 或
    sudo chown luxianying:luxianying [需要改变所属用户和所属群组的文件或文件夹]
    
    • 1
    • 2
    • 3

    区别于 chown 命令和 chmod 命令

    chmod 命令用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。

    该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

    sudo chmod -R 777 *
    // 或
    sudo chmod -R 777 [需要改变所属用户和所属群组的文件或文件夹]
    
    • 1
    • 2
    • 3

    将包含库文件,头文件和可执行文件的目录打包成压缩包,发送到工控机上

    scp [压缩包名].tar.gz [工控机用户名]@[工控机IP地址]:[工控机目录]
    // 如
    scp test_odom.tar.gz nvidia@192.168.30.46:/home/nvidia/
    
    • 1
    • 2
    • 3

    将包含库文件,头文件和可执行文件的目录打包成压缩包,从工控机上发送到本地当前目录下

    scp [工控机用户名]@[工控机IP地址]:[工控机目录]/[压缩包名].tar.gz ./
    // 如
    scp nvidia@192.168.30.46:/home/nvidia/test_odom.tar.gz ./
    
    • 1
    • 2
    • 3
    【问题02】测试用例编译问题
    问题背景

    在 apollo/src/cm/art 下,新建 test_odom 文件夹,进行 odom 驱动消息收发测试用例编写,写好之后,我直接在 test_odom 下新建 build,之后执行

    cmake ..
    make
    
    • 1
    • 2

    编译报错。

    解决方法

    这个问题,首先 test_odom 下的 CMakeLists.txt 中,会包含 apollo_cm 库,会包含 【××× 工程】的其他库,直接 make,肯定不能链接其他库

    应该在最外层执行

    ./compile.sh x86 ART
    
    • 1

    编译整个工程,在 【××× 工程】/src/cm/art 下的 CMakeLists.txt 中要添加

    add_directory(test_odom)
    
    • 1

    在整个工程下编译 test_odom 测试用例。

    【问题03】camera 驱动和定位驱动库相冲突
    问题背景

    驱动的同事首先打通了 camera 驱动的收发消息,用的是中间件同事第 2 版的 Apollo 编译生成的库文件,

    把这些库文件放在工控机上命名为 libs1 的文件夹内。

    后面驱动的同事要打通了定位驱动的收发消息,用的是中间件同事第 1 版的 Apollo 编译生成的库文件,

    把这些库文件放在工控机上命名为 libs2 的文件夹内。

    第 1 版生成的库文件,是源码编译生成的库文件中抽取出关于消息收发的库文件,是源码编译生成库文件的子集

    第 2 版是对源码编译生成的整个的库文件,是总的库文件。

    当用第 2 版在工控机上运行,进行 camera 驱动收发测试时,需要添加这些库文件的路径到环境变量中

    sudo vim /etc/ld.so.conf
    
    • 1

    添加 libs1 的路径

    /home/nvidia/luxy/test_odom/libs1
    
    • 1

    环境变量生效

    sudo ldconfig
    
    • 1

    当用第 1 版在工控机上运行,进行定位驱动收发测试时,需要添加这些库文件的路径到环境变量中

    sudo vim /etc/ld.so.conf
    
    • 1

    添加 libs1 的路径

    /home/nvidia/luxy/test_odom/libs2
    
    • 1

    环境变量生效

    sudo ldconfig
    
    • 1

    此时,ld.so.conf 的内容为

    /home/nvidia/luxy/test_odom/libs1
    /home/nvidia/luxy/test_odom/libs2
    
    • 1
    • 2

    执行 test_odom 可执行文件时,会报错

    解决方法

    然而,把第一行注释掉

    #/home/nvidia/luxy/test_odom/libs1
    /home/nvidia/luxy/test_odom/libs2
    
    • 1
    • 2

    即可正常执行 test_odom 可执行程序。

    原因可能是 libs2 的 Apollo-Cyber 库是 libs1 的 Apollo-Cyber 库的子集,libs1 中对于某个的定义和 libs 2不一样。

    当在 /home/nvidia/luxy/test_odom/libs1 中找到库,不管是不是那个库,库名是那个库,那么就会停止从 /home/nvidia/luxy/test_odom/libs2 中找库。

  • 相关阅读:
    VS2019新建页面找不到Qt项目解决方法
    如何校准Linux服务器时间
    C#让程序运行更稳健——异常、调试和测试(代码没看懂)
    [开源]基于流程编排的自动化测试工具,插件驱动,测试无限可能
    微信小程序开发---条件渲染和列表渲染
    大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s
    Bootstrap关于盒子(盒模型)边距的设置
    正确部署Baichuan2(Ubuntu20.4) 步骤及可能出现的问题
    【PMI-PMP®模考三】2022
    Redisson分布式锁实战
  • 原文地址:https://blog.csdn.net/DMLearner/article/details/132769356