Quanser无人驾驶实验平台的软件The Software Side of the Quanser Self-Driving Car Research Studio+ 查看更多
作为介绍Quanser无人驾驶实验平台进展的第二篇博客,我将重点关注软件部分,至于QCar的硬件,在第一篇博客中已经进行了详细的描述,在此不多加赘述。
我们所有产品最核心的部分是我们的QUARC软件。我们的产品都专注于教学或研究控制理论的各个方面,所以我们一般是用MATLAB/Simulink来进行代码构建。在Simulink上你可以以图形化的形式搭建和教科书上所见的完全相同的控制图。QUARC在Simulink原有的模块基础上提供了额外400多个模块,以实现新的实时控制功能。
QUARC与我们的自定义交叉编译器配合使用代码生成功能,以自动生成代码并将代码部署到远程目标上(部署在QCar上的Nvidia TX2)。一旦部署,通过QUARC就能在Simulink中得到实时数据,对车辆进行数据的实时更改。最后,也可能是最重要的一点,QUARC提供了一种硬件抽象层,它可以改进和促进代码的可重用性,我稍后将对此进行讨论。
无人驾驶涵盖了工程学和计算机科学的许多方面,所以并不是所有的使用者都使用MATLAB/Simulink进行代码构建,而QUARC不仅支持MATLAB/Simulink,还提供在Java,C,C++,C#,以及VB的支持。它是一个非常强大的工具集合了多种编程接口(API)。QUARC代码库有超过300万行代码,这还不包括我们所有的自定义交叉编译器。这比航天飞机、F-22Raptor或者哈勃望远镜的代码还要多!
新的热门编译语言
如果你已经从事自动驾驶汽车领域,那么你会发现,在QUARC支持的语言列表里,Python并不在其中。而Python在过去的5年里迎来了一次大规模的流行热潮,尤其是在人工智能和机器学习领域,它占据着主导地位。作为无人驾驶实验研究项目的关键部分,所以我们正在在QUARC中添加对Python3的支持。
至于Python 2.7,这个版本计划在2020年1月1日停止支持,而且许多最新的API只提供Python3支持,所以我们选择直接转到那个版本。
QUARC包含了许多子模块库,但我选择了三个用于Python支持的包:HIL、Stream和Media。HIL(硬件在环)
HIL API是QUARC的基础API之一。现在我将解释方才提到的QUARC的关键功能硬件抽象层。在我们的HIL API中,首先调用HIL函数并指定要与之通信的硬件。之后,我们有函数调用来读模拟输入,写PWM输出,设置编码器计数等。那么,假设您之前为QBot 2e地面机器人编写了一个算法,该算法使用传感器融合来结合IMU读数和车轮编码器来估计您的位置。现在你想把这个算法用到你的全新QCar上。您所需要做的就是更改HIL中的参数,该参数表示您现在访问的是QCar而非QBot 2e,其余代码保持不变。QUARC为每个目标,每个平台和每种语言提供了统一的接口。
Python将是我们的QUARC 2020测试版的一部分,最初支持QCar在TX2上的Ubuntu, QBot 2e在Raspberry Pi上的Raspbian,以及Windows。这也意味着您可以使用Python访问这些平台上支持的所有当前数据获取硬件。
Stream
Stream API都是关于通信的。如果您想要定制您的硬件以使其适合您的研究,您可能需要访问串行端口、SPI或I2C。与HIL API一样,Stream API使用与协议无关的接口统一通信。这意味着TX2 SPI端口的访问方式与我们通过QCar的定制硬件提供的高性能SPI端口的访问方式相同。通过跨平台,可以使用相同的代码访问QBot上的SPI端口。只需要修改一些参数,相同的函数就可以与I2C端口通信。如果你构建代码库来访问自定义传感器或其他硬件,那么QUARC可以有助于提高特定代码的可移植性。除了硬件协议,Stream API还支持pipes。这个功能让你可以以最小的开销在QCar上运行的独立进程之间创建通信通道。当然,你可以使用相同的语言在单个进程中编写所有的代码,同时,也为你提供多种语言使用的灵活性。例如,你可以将Python用于AI算法,Simulink用于运动控制器,用C++进行图像处理。Stream API的最终核心用途是用于与TCP/IP和UDP联网。在这个领域,Python已经有很多选择。使用通信进行控制通常意味着很多小的但具时效性的数据包(尝试“nagle”选项)。使用视频通信意味着尽可能高效的传输大量数据(QCar上有8种可能的视频流,这就是每秒千兆字节数据)。Stream API使您可以访问许多参数,因此您可以优化每个通信流。
Media
谈到视频,随着无人驾驶实验平台QCar的发布,我们将首次公开我们的Media API。 像我们的其他API一样,存在硬件抽象和统一。 你可以访问QCar上的深度相机,使用的代码与访问QBot上的深度相机相同,尽管在底层上,这些相机的操作并不同。 你可以插入一个网络摄像头到QCar的USB 3端口和访问我们的一个高速CSI摄像机的方式一样。 我们的软件团队为每个目标平台优化了Media API。 对于QCar,2D媒体功能利用了将CSI摄像头数据DMA直接传输到GPU的能力来管理格式转换。 这样,我们可以将原始摄像机数据有效地转换为与您选择的语言直接兼容的其他格式,以便您可以从360度摄像机覆盖范围中获取高速或高分辨率的视频。
现在是时候讨论一下:ROS机器人操作系统。从2000年代末开始,但它的爆炸式增长始于2016年ROS 2的首个alpha版本,在2017年同时吸引了亚马逊和微软的兴趣。虽然有很多机器人操作系统的选择,但是ROS已经成为一个主导者,研究社区的一个专门分支围绕ROS框架开发他们的工作。
ROS并不是一个真正的操作系统,而是一组工具和API的集合,它们在底层与硬件交互,然后在异构设备之间进行通信。我们基于ROS做了什么?除了说2020年初即将推出,我们还没有准备好讨论其他细节!随着我们向QUARC添加新的Python和C API,您将拥有自己开发所需的所有部分。我保证会尽快给你带来更多的细节。
更多仿真
HIL Simulation是10月QUARC 2019 SP1中发布的一项新功能。这个简单而强大的模块让你能够模拟我们任何的DAQ或设备。例如,在HIL初始化中,您将把板标识符从' 0 '更改为' 0@tcpip://localhost:18000 '。你的控制器现在将与你自己设计的虚拟设备通信。当你在HIL Write上写模拟输出时,它将以模拟输入的形式到达HIL Simulation。模拟模块中的数字输出将作为HIL Read模块,以此类推。这是在物理硬件和虚拟硬件之间进行无缝切换的好方法。
不过,模拟不必是虚拟和物理之间存在明显切换。实际上,仿真和硬件在环更像是频谱。在我们今年早些时候在ICRA上展示的演示中,QCar与通过虚幻引擎4创建的虚拟世界在PC上运行的汽车动力学远程仿真进行通信。来自虚拟RGB和深度摄像头的数据被传输到QCar,因此所有图像处理都在TX2板上完成。这控制了物理驱动电机和转向。转向和测量的车轮速度,然后返回到PC以控制虚拟QCar,从而完成循环:
QCar还可以在现实世界中行驶,你可以使用增强现实将虚拟对象注入到真实数据中。我们将向您展示我们的增强现实实验的更多细节,以及如何在未来几个月结合QCar一起使用。
接下来,我们的无人驾驶实验平台即将完成。我们还有一个月左右的时间来验证所有的硬件,然后我们将开始把这个工作移交给我们的制造团队。我们的软件开发团队为使QCar正常运行做了杰出的工作,他们仍将继续添加更多的功能。我们的应用团队一直在忙着实现图像处理算法,测试人工智能,并创建不同的驾驶场景。他们的目标是为您提供一个良好的起点,以便您能够更快地实现、验证和发布!在下一篇博文中,我们将看看他们都做了哪些工作。最终,我们的驱动动机是为您提供工具,让您按照自己的方式进行研究。