车载以太网之要火系列 - 番外篇5:DDS学完回头看,入门容易精通难
五十多篇DDS,从Topic到QoS,从RTPS报文到发现阶段,从发布订阅到与SOME/IP分工,一路写下来,终于到了可以“回头看”的时候。
学DDS之前,老是听人说“DDS是自动驾驶的标配”“DDS比SOME/IP强大”“DDS有QoS,SOME/IP没有”……听多了,心里痒痒的,觉得这东西一定很厉害。
现在学完了,不敢说精通,但至少——它是什么,能干什么,怎么干,心里有底了。
这种感觉,比光听别人说强太多了。
一、如果只用一句话介绍DDS
DDS = 数据分发服务 = 让一个数据同时发给多个接收方,还能按需配置服务质量。
传统通信是你问他答(SOME/IP),DDS是我发你收。
摄像头拍到的图像,不需要等域控来问,直接往Topic里扔,谁订阅谁收。域控收了做感知,座舱收了做显示,记录仪收了做保存——一个数据,三个用途,摄像头只发一次。
这就是DDS最核心的价值。
二、学完DDS,我最想说的三件事
第一,DDS的“自动发现”不是魔法。
以前听人讲DDS,总说“自动发现”“自动匹配”,听起来很玄乎。学完之后才知道,就是SPDP广播“我上线了”,SEDP广播“我要发什么”“我要收什么”,本地一对比,暗号对上了就自动连。
不是魔法,是提前约定好的暗号。
第二,QoS是DDS的灵魂,但不是万能的。
刹车指令配RELIABLE+HIGH+1ms,摄像头图像配BEST_EFFORT+NORMAL+100ms。QoS搞错了,轻则性能差,重则根本连不上。
但QoS不是万能的。它只能在DDS协议栈的能力范围内优化,网络带宽不够、硬件性能不足,QoS也救不了。
第三,DDS和SOME/IP不是竞争对手。
以前以为DDS要干掉SOME/IP,学完才知道,它们各管一摊。自动驾驶大数据用DDS,车身控制RPC用SOME/IP。一个域控制器同时跑DDS和SOME/IP,不打架,不冲突。
不是谁取代谁,是谁更适合什么。
三、那些学的时候“迷迷糊糊”,现在“有点明白”的地方
关于Topic
以前觉得Topic就是“话题”,很抽象。现在理解就是“数据的名字”。摄像头图像叫/camera/front,刹车指令叫/brake/cmd。名字定好了,发和收对得上就行。
关于RTPS报文
以前看到52 54 50 53(RTP S)就觉得头疼。现在看到,知道“哦,这是DDS的报文”,然后看里面是DATA还是Heartbeat还是AckNack。
关于发现阶段
以前觉得“自动发现”很智能。现在知道,就是SPDP→SEDP→匹配→单播。四步走完,连接建立。不智能,但可靠。
关于QoS
以前觉得QoS是“高级配置”。现在知道,就是告诉DDS“这个数据重要,那个数据可以随便”。刹车指令不能丢,摄像头图像丢了就丢了。
关于与SOME/IP的分工
以前觉得DDS和SOME/IP是竞争对手。现在知道,它们各管一摊,甚至可以同时跑在一个ECU上。
四、学完之后,我不得不承认的几个事实
DDS不是银弹,解决不了所有问题。配置复杂,资源消耗大,QoS不匹配就连不上。但它解决的问题——大数据分发、一对多通信、服务质量保证——是SOME/IP解决不了的。
DDS的报文比SOME/IP复杂得多,但复杂有复杂的道理。SOME/IP一个RPC调用,12字节头部就够了。DDS要传图像,需要分片、重传、确认。
学了DDS,不代表SOME/IP就没用了。车身控制还是SOME/IP顺手,自动驾驶才需要DDS。
五、下一步:TSN(时间敏感网络)
DDS学完了,下一步准备研究TSN。
如果说DDS解决了“数据怎么分发给多个人”的问题,那TSN要解决的是“数据怎么准时到达”的问题。
刹车指令1ms内不到,车可能就撞了。摄像头图像100ms内不到,自动驾驶反应就慢了。普通以太网是“尽力而为”,不保证时间;TSN通过时间同步、流量整形、带宽预留,给关键数据开专用通道。
DDS + TSN,一个管分发,一个管准时——可能是自动驾驶通信的“黄金搭档”。
TSN的内容大概能写多少篇,现在还没想好。但估计不会少于DDS的篇幅。老规矩,一边学一边写,不赶进度,不给自己太大压力。
写在最后
从第50篇到第61篇,DDS系列写完了。
不敢说精通,只能说——入门了,心里有底了。
技术这个东西,学一遍是不够的。过段时间回头看,肯定又有新的理解。但至少,我不再是那个只听过DDS、说不出所以然的门外汉了。
学完DoIP、UDS、SOME/IP、DDS,车载以太网的几大块算是有了个框架。虽然每块都还有很多细节没摸透,但下一步的方向已经清楚了——TSN,让数据准时到达。
这篇番外,不是技术笔记,是一路学过来的真实感受。
如果你也在学DDS,学得有点迷糊,不妨停下来,回头看看。有些东西,不是一遍能搞定的。
温故而知新,可以为师矣,爬着爬着也学就成大咖了,嘿嘿。
打完收工,886。
