优秀网页翻译:关于您的下一个汽车友好型原型

原文链接:
https://medium.com/inatech/about-your-next-automotive-friendly-prototype-53ce5f2923e7

关于您的下一个汽车友好型原型

你有很酷的项目想法,你想让原型更兼容汽车世界吗?这里有一些设计选择供您选择……

当然,一些在微控制器上运行裸机的老式硬实时 C 代码总是会重新点燃汽车工程师的心,但对于快速原型设计来说,它绝对不是最方便的目标。另一方面,不幸的是,使用基于 Linux 的目标不是实时的,但可以利用许多开源库。

本文使用 inastitch 作为示例项目,通过一个实际示例来解释每个库是如何使用的。
在这里插入图片描述
上图:inastitch 3D 打印外壳中的 3 相机硬件原型

Inastitch 是数字后视镜的原型,通过将 3 个实时视频流拼接成一个更宽的流。每台摄像机都是独立的并连接到网络。

使用 DLT 进行日志记录

虽然 LTTng 是登录开源世界的著名选择,但 DLT 更面向汽车。 DLT 由博世设计为 Autosar 标准,请参阅这份冗长的规范 PDF

使用 DLT 的一个设计目标是拥有一个跟踪,其中包含调试由多个 ECU 组成的系统所需的一切。当需要对特定行为进行解释时,我们的想法是为专家提供单个 DLT 跟踪文件,该文件应包含所需的所有内容,而不是总是要求更多的跟踪。

inastitch 中,按照 DLT 术语,每个摄像头都是一个 ECU,每个二进制文件是一个不同的 APP。上下文 (CTX) 遵循以下模式:

  • APP:MAIN 用于一般信息,例如二进制版本(即 git tag)和 git hash 以跟踪相应的源代码。启动参数也记录在这里。
  • APP:FRAM 用于汇总视频帧信息。单帧不应该被追踪,因为它的频率太高并且会超载追踪预算。
  • SYS:JOUR 用于系统日志。整个目标的 Linux 系统日志被复制到 DLT。它将有助于检查来自 Linux 系统的副作用。
    在这里插入图片描述
    上图:显示实时跟踪的 DLT 查看器

要跟踪的其他有趣信息(未在 inastitch 中实现):

  • 总体和每个进程的 CPU 负载和内存分配。它将有助于调试无限循环和内存泄漏。

DLT 开源实现是:https://github.com/GENIVI/dlt-daemon
许可证:Mozilla 公共许可证 (MPL 2.0)。

使用 WireShark 检查 DLT 数据包

最近在 WireShark 3.2.0 版本中添加了用于 DLT 的数据包解析器。
在这里插入图片描述
上图:使用 WireShark 解码 DLT 帧

注意:
每个 ECU 上的 dlt-daemon 将跟踪保存在本地缓冲区中,直到 dlt-client 连接。如果没有 DLT 查看器(例如)正在读取跟踪,则不会有任何 DLT 通信需要解码。同样,客户端可以选择不同级别的跟踪,并且只有那些跟踪将通过网络发送。

DLT 和文件传输

Inastitch 具有生成调试图像的校准功能。与其将它们写入 /tmp 并期望通过 SSH 获取它们,不如将它们转储到 DLT 跟踪中更实际。

在 DLT 查看器中启用 FileTransfer 插件后,可以从跟踪本身中提取文件。
在这里插入图片描述
上图;显示文件传输的 DLT 查看器

DLT 和核心转储

同样,为了让所有内容都有一个单一的跟踪文件,在 DLT 中嵌入压缩的核心转储也很方便。

请参阅 DLT 构建参数 WITH_DLT_COREDUMPHANDLER 和此 wiki 页面

TODO:在 inastitch 中启用 DLT coredump 处理程序。

DLT注入

对于更复杂的调试,可以使用更多跟踪(超出跟踪预算)和更多检查(即运行时断言)的调试模式来扩展应用程序。这些调试功能通常可以通过使用特殊参数(如 --verbose)重新启动应用程序来启用。

对于更适合汽车的解决方案,我宁愿建议通过 DLT 注入启用这些调试模式。 DLT 通信不仅仅以一种方式工作(即,从 dlt-daemon 到 dlt-client)。来自客户端的请求(也称为注入)可以转发到应用程序。

这种方法的优点是:

  • 不需要对目标的 SSH 访问
  • 无需重新启动应用程序即可启用或禁用调试模式
  • 如果有人稍后分析,所有内容都会记录在跟踪中

TODO:在 inastitch 中添加一些 DLT 注入。

使用 SOME/IP 进行远程控制

SOME/IP 是 BMW 创建的一个 RPC 框架。它也是博世支持的 Autosar 标准。请参阅此规格 PDF

SOME/IP 可以通过在所有相关节点上定义所有方法和事件来静态工作,但这种架构难以维护和更新。

这个框架的一个优点是服务发现(又名 SD)。它使设计可以由来自不同供应商的应用程序提供的界面变得更加容易,这些应用程序可能以不同的配置运行。

在 inastitch 中,SOME/IP 用于控制相机设置。所有三个摄像头都订阅了拼接板发布的远程事件。当请求的相机设置为 ch

受拼接器应用程序的影响,SOME/IP 负责通知所有订阅者。

SOME/IP 开源实现是:https://github.com/GENIVI/vsomeip
许可证:Mozilla 公共许可证 (MPL 2.0)。

使用 DLT 跟踪 SOME/IP

通过启用 vsomeip.json 中的跟踪和 dlt 选项,可以在 TC 上下文中记录 DLT 中的每个 SOME/IP 通信。不幸的是,DLT 查看器的开源版本没有附带 SOME/IP 解码器插件。
在这里插入图片描述
上图:使用 DLT 查看器显示 SOME/IP 事件

使用 WireShark 检查一些/IP 数据包

最近在 WireShark 3.2.0 版本中添加了 SOME/IP 的数据包解析器。
在这里插入图片描述
上图:使用 WireShark 解码 SOME/IP 事件

与 DLT 查看器不同,WireShark 将解码一些/IP 请求和事件。

带有 AVTP 的视频流

AVB 是为专业音频/视频世界创建的标准。它现在在汽车领域获得了很大的吸引力。 AVTP 是 AVB 流的传输协议。

由于 AVB 网络用于既不是视频也不是音频的通信,因此添加了新功能并称为 TSN。它代表时间敏感网络。

AVB/TSN 网络是标准以太网的扩展,增加了对从一个或多个 Talker 到一个或多个 Listener 的流数据包传送的保证。

在 inastitch 中,所有三个摄像头的视频帧都以同步方式发送,以便可以在不缓冲的情况下拼接它们(即不增加延迟)。

使用 WireShark 检查 AVTP 数据包

在这里插入图片描述

上图:在 WireShark 上使用自定义解析器解码 UDP/AVTP

注意:AVTP 可以嵌入到原始以太网中。为了节省 inastitch 的实施工作,流通过 UDP 和 IP 发送。
这是官方指定的替代方案。

与 gPTP 的时钟同步

在 AVB 世界中,时钟同步对于提供音频/视频流至关重要。 gPTP 是 PTP 的特殊配置文件,即精确时间协议。

在 inastitch 中,PTP 在摄像头板之间同步 Linux 系统时钟。然后将该时钟用作帧对齐的参考。

使用 WireShark 检查 PTP 数据包

从 1.0.0 版开始,WireShark 中提供了用于 PTP 的数据包解析器。
在这里插入图片描述
上图:使用 WireShark 解码 PTP

注意:PTP 在 inastitch 中配置为通过 UDP 运行,但它也可以在原始以太网中运行。

其他注意事项

使用软件包更新

我知道,通过电子邮件发送压缩和静态构建的二进制文件是最好的 😅

在 inastitch 中,相机和拼接器应用程序都作为 Debian 软件包提供。使用 CMake 的 CPack 扩展可以轻松生成这样的包。该解决方案与 Raspberry PI OS 很好地集成在一起。

如果操作系统是从头开始构建的(例如,yocto linux recipes),另一个更轻量级的选择是使用 OPKG 作为包管理器。

开源许可证

开源软件很棒,但有些许可证会迫使您发布源代码,有时还会发布 ECU 固件的构建工具。

在 inastitch 中,库依赖关系被简化为具有许可许可证的简单库。

例如:

带有许可 Boost 许可证的 libboost
带有 BSD 许可证的 libturbojpeg
带有 MPL 许可证的 libdlt 和 libvsomeip
带有 BSD 许可证的 OpenCV

使用 clang 进行更好的代码分析

许多项目都是用 gcc 构建的。

即使最终的二进制文件总是使用 gcc 构建,保留使用 clang 构建的选项也会带来使用 Google Sanitizer 的可能性,例如 MemorySanitizer(又名 MSAN)。

系统和看门狗

Systemd 具有限制服务的内存使用或其他资源的选项。也可以有一个由 systemd 管理的看门狗。

构建静态库

Inastitch 将其大部分依赖项构建为静态库。因此,stitcher 二进制文件无需修改即可在 Raspberry Pi 和 Nvidia Jetson Nano 上运行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值