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

news/2024/12/23 9:27:07/

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

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

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

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

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

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

ll

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

执行命令

ldd [库文件]

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

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

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

解压命令

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

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

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

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

区别于 chown 命令和 chmod 命令

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

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

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

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

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

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

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

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

cmake ..
make

编译报错。

解决方法

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

应该在最外层执行

./compile.sh x86 ART

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

add_directory(test_odom)

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

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

问题背景

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

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

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

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

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

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

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

sudo vim /etc/ld.so.conf

添加 libs1 的路径

/home/nvidia/luxy/test_odom/libs1

环境变量生效

sudo ldconfig

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

sudo vim /etc/ld.so.conf

添加 libs1 的路径

/home/nvidia/luxy/test_odom/libs2

环境变量生效

sudo ldconfig

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

/home/nvidia/luxy/test_odom/libs1
/home/nvidia/luxy/test_odom/libs2

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

解决方法

然而,把第一行注释掉

#/home/nvidia/luxy/test_odom/libs1
/home/nvidia/luxy/test_odom/libs2

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

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

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


http://www.ppmy.cn/news/1106069.html

相关文章

React 使用合成事件(SyntheticEvent)

React 使用合成事件(SyntheticEvent) React 使用合成事件(SyntheticEvent)来处理浏览器原生事件的跨浏览器兼容性问题。合成事件是一个封装了原生事件的对象,提供了一致的跨浏览器接口,使您能够在不同浏览…

Verify-and-Edit: A Knowledge-Enhanced Chain-of-Thought Framework

本文是LLM系列文章,针对《Verify-and-Edit: A Knowledge-Enhanced Chain-of-Thought Framework》的翻译。 验证与编辑:一个知识增强的思想链框架 摘要1 引言2 相关工作3 验证和编辑框架4 实验设置5 结果与分析6 结论局限性 摘要 由于大型语言模型&…

9月8日作业

思维导图 栈stack.h #ifndef STACK_H #define STACK_H #include <iostream> #define MAXSIZE 128using namespace std; class Stack { public://构造函数Stack();//析构函数~Stack();//拷贝构造函数Stack(const Stack &other);//入栈bool push(int value);//出栈并返…

串行数据发送器

框图 THR&#xff1a;发送保持寄存器 定义了两种状态&#xff1a;空&#xff0c;满数据写入端口地址&#xff1a;00H状态读出端口地址&#xff1a;00H当THR不满时&#xff0c;可以向THR写入数据 TSR&#xff1a;发送移位寄存器 一旦TSR空而THR中有数据时&#xff0c;THR中的数…

目标检测YOLO实战应用案例100讲-端到端的单阶段水下目标检测(中)

目录 3 基于数据增强的水下目标检测 3.1 引言 3.2 数据增强 3.2.1 数据增强算法

线性代数的学习和整理22:矩阵的点乘(草稿)

4 矩阵乘法 A,B两个同阶同秩N阵&#xff0c;看上去结构一样&#xff0c;但两厢相乘&#xff0c;在做在右&#xff0c;地位差别巨大。 在左&#xff0c;你就是基&#xff0c;是空间的根本&#xff0c;是坐标系&#xff0c;是往哪去、能到哪的定海神针&#xff0c;是如来佛手&a…

蚂蚁开源编程大模型,提高开发效率

据悉&#xff0c;日前蚂蚁集团首次开源了代码大模型 CodeFuse&#xff0c;而这是蚂蚁自研的代码生成专属大模型&#xff0c;可以根据开发者的输入提供智能建议和实时支持&#xff0c;帮助开发者自动生成代码、自动增加注释、自动生成测试用例、修复和优化代码等kslouitusrtdf。…

Docker安装部署Nexus3作为内网镜像代理缓存容器镜像

Docker安装部署Nexus3作为内网镜像代理 一、背景描述 基础镜像比较小&#xff0c;仓库使用阿里云或者腾讯云拉取速度挺快&#xff0c;但是时光飞逝几年时间过去&#xff0c;再加上AI加持的情况下&#xff0c;有些镜像的大小已经接近20G&#xff01; 这种情况下不管是测试环境…