本帖最后由 hirain 于 2020-3-3 10:44 编辑




        大家好,疫情肆虐,首先企盼早日云开雾散。此时此刻响应号召,就安静地看一看文章,为不久后马力全开的工作,积蓄更多的技术储备。







        这一篇我们介绍一下如何在我们的智能驾驶开发、测试平台上面方便快捷地自定义功能。大家也可以借此机会学习了解一下QML。

















QML模块界面




        当我们在做任何的测试开发的工作的时候,我们都需要将各类数据采集下来,然后针对我们要做的测试或者开发对数据进行分析和使用,然而对于人类而言,枯燥的数字总难以直观方便的表现出我们想要获取的信息,诚然,在现实条件限制下,人们有极大的能动性可以去习得这个能力,正如黑客帝国中的数据终端一样,直接从数字符号中读取信息。然而如果我们可以简单高效的实现数据的信息化转换与呈现,又有什么样的理由去为难自己呢。







What is QML


        首先简单说一下什么是QML,在维基百科的QML英文界面称作Qt Modeling Language,貌似曾经的名称是Qt Meta Language,我们姑且兼而用之吧,毕竟在


www.qt.io


网站上没有找到对于QML语言的明确定义(也可能是因为没有仔细的去找)。







        QML是一种声明式语言(declarative language),它通过用户界面的可视组件以及它们之间的相互交互和关联的关系来描述用户界面。它是一种高度可读的语言,旨在使组件能够以动态方式互连,并且允许在用户界面中轻松重用和自定义组件。QML基于JavaScript,属于QtQuick的一部分。在QML文档中描述了一个关于QML元素的对象树,Qt附带的QML元素有一组复杂的基础构建模块(如矩形、图像)和行为(如状态、过渡、动画等)构成。







        使用QtQuick模块,通过QML元素的组合,设计人员和开发人员可以轻松地在QML中构建从简单按钮、滑块到完全支持Internet功能的复杂程序。







        而这也是为什么我们选择在ViCANdo中集成QML的原因。通过QtQuick模块任何人都可以很方便的实现自定义的用户界面的开发。如下面的截图展示了一个通过QML实现的CAN报文发送界面。













Hello World


        在ViCANdo中加在QML模块非常的容易,一个简单的QML模块代码展示如下:













        有兴趣的读者可以将上面的代码拷贝到一个文本文档中,然后保存成扩展名qml的文件,然后打开ViCANdo创建一个工程,在软件的Presentation菜单中,选择QML Quick 2.x presenter,然后在弹出的对话框中选择刚刚保存的QML文件。














        在ViCANdo的主窗口中就会呈现出来刚刚添加的QML模块:Hello World。







        Hello World is easy,但是现在你已经有能力在ViCANdo内创建任何需要的QML组件了。













        细心的读者有可能已经发现截图的软件窗口和菜单和你们正在使用的有所不同,是的当前使用的是MAC版的ViCANdo软件,ViCANdo不仅仅支持Windows、Linux操作系统,也同样的支持苹果的macOS,即便是最新的Catalina。抓紧拿出手里的电脑,下载软件尝试一下吧。(下载地址:


www.zuragon.com










VideoView


        在智能驾驶相关的功能测试中,视频、摄像头数据是非常重要的一环,因此能够在ViCANdo的界面针对视频数据进行处理操作是必要且必须的,比如如下的截图所展示的。我们同时监控两个摄像头数据,并在视频显示窗口叠加显示标尺,标尺可以根据需要任意调整。这在典型的测距、间距检测应用中是十分方便的(这里没有显示视频的数据,因为想要给大家保留第一次显示出视频时的惊喜)。













        对于这样的界面显示实现是非常简单的。首先我们在Qt中建立一个工程,通过拖拽控件的方式建立如下图所示的界面(或者任意想要的界面形式)。













        然后我们在代码编辑界面对刚才创建的工程的代码进行简单的完善,如下图所示,保存之后的qml文件就可以如hello world的例子一样加载进入ViCANdo工程中了。







        “ 篇幅关系,我们没有附上所有的代码,如果有需要可以在公众号留言并留下邮箱我们会提供本例子中的完整代码给大家。”













其他的数据源


        除了刚刚提到的视频数据,我们更多接触到的是总线上传输的各种信号,同样的在ViCANdo的QML功能中,我们可以方便的处理各种需要的信号。







        如下的实例中我们创建了一个展示车辆各种信息的组件。可以方便的显示当前的车辆状态、速度等。













        如下的实例中:









我们可以以前视、俯视、侧视等不同的角度显示传感器的识别信息和视频信息(前视)。













        好了,关于ViCANdo的QML集成功能就给大家介绍到这里了,更多的有意思的功能大家可以自己去探索一下。
















QML插件是ViCANdo二次开发的一个强大的功能,而对于更加复杂的、随心所欲的实现任意的功能的方式,就不能囿于QML,我们还提供开放的SDK可以更灵活的实现各种定制的功能。







ViCANdo


        ViCANdo Suite是针对智能驾驶功能的开发和测试平台,能够同步的采集所需的各类数据,同时工具集成OpenCV,工程师可以直接使用OpenCV的相关函数来进行开发。







        ViCANdo具有一个开放的SDK,允许创建自定义接口,还允许将正在开发中的算法用作ViCANdo本身的一部分,以非常高的性能执行。通过使用ViCANSim中的 Matlab/Simulink扩展,或者利用内置仿真引擎进行网络仿真或视频算法开发







ViCANdo Suite直接支持的数据源













示例应用:









        在VICANdo内实时车道线识别与实时显示,通过在ViCANdo内部直接集成车道线识别算法,方便直观的展示车道线识别算法的识别情况,并利用ViCANdo的扩展功能将识别的车道线、航向等信息与视频叠加展示,可以方便的进行算法的调试。













        在上图的工程中,我们添加了一路摄像头采集道路信息,同时用两路CAN通道采集车辆信息,通过图像提取车道线信息,同时结合车辆的状态信息,在图像上实时叠加显示识别的车道线信息和车辆的航线信息。











示例应用:









        环视摄像头拼接与实时显示,首先通过ViCANdo对LVDS摄像头的支持,可以直接将一般的车载摄像头的视频数据接入到平台中,对于开发的工程师而言不必要再去投入精力到不必要的驱动开发等工作中,在ViCANdo中直接集成基于OpenCV的视频拼接算法,并将拼接结果直接的展示在ViCANdo界面中。













        在上图的工程中,我们通过LVDS板卡实时采集四路车载摄像头的视频信息(非后装摄像头,可以保证算法应用的参数即为原车摄像头的参数),在软件中加载图像拼接算法,并在软件窗口中直接显示,同时显示车载鱼眼摄像头的原始图像。







ViCANdo Suite 产品介绍


        ViCANdo Suite是针对智能驾驶功能的开发和测试平台软件套装。













软件包含如下组件:













ViCANdo:









        ViCANdo是一款跨平台的,针对AD/ADAS开发的数据记录和分析工具,支持运行在Windows、Linux、MacOS等操作系统,支持X86、ARM等平台。







ViCANlog:









        设计用于车端路试采集的软件,可以运行在任何基于linux的硬件设备上,无人值守采集数据。除了一般计算机外,也支持Nvidia TX-2、Xavier,Nexcom等设备。







ViCANdroid:









        安卓端的APP,可以采集CAN总线和视频、音频、GPS等数据,内建FTP服务,可以自动的上传数据到服务器。便于方便的对数据进行处理分析。







ViCANsim:









        通过与OpenCV和Matlab/Simulink™等的集成,方便用户部署自己的算法在ViCANsim上,于此同时也具有与Matlab/Simulink™的接口。









ViCANbedded:









        ViCANbedded的目标是应用于嵌入式环境,与ViCANdo 相同。它旨在轻松地将源代码从 PC 平台移植到到嵌入式环境。目前,它可支持 QTEmbedded 4.X及更高版本、QNX、Velocity、VxWorks等。









        更多ViCANdo相关功能内容,将在后续的文章中发布,敬请关注微信公众号。