文章|英特尔中国研究院Intel HERO是一套性能强大、配置灵活、接口丰富的异构计算平台,适合作为服务机器人、小型无人系统、汽车等智能自主系统的计算核心。
集成的Intel Core i5/i7 CPU和Intel Arria 10 FPGA芯片可以实时处理大量数据并运行多种智能算法。
对于算法研究人员和软件工程师来说,如何才能充分发挥FPGA的性能,让我们的算法在HERO平台上快速飞翔?本文将告诉你答案。
1、为什么异构计算需要不同的芯片架构来完成不同的任务。
对于需要高并行性和低延迟的计算和控制任务,例如视觉处理、自主定位、运动规划和控制等,FPGA凭借其强大的并行计算能力可以轻松应对。
CPU作为高速串行处理器,可以从大吞吐量的常规计算中解放出来,可以专注于高层任务规划、决策和人机交互。
两者相辅相成,构成了机器人最强大的大脑。
事实上,人脑也有类似的工作机制。
心理学家认为,人脑中有两个系统。
一是完全自动化、高度并行,随时处理大量数据并获取高层抽象信息,如FPGA的功能;另一个系统是你的“意识”。
接收这个抽象信息并思考,类似于CPU。
例如,当人们开车时,识别车道、区分汽车和行人等任务根本不需要大脑的思维带宽。
有经验的司机甚至可以边说边笑地变道超车。
这些都得益于强大而灵活的异构大脑。
2. HERO SDK HERO SDK是支持HERO平台的软件集合,可以帮助开发者快速创建基于HERO平台的机器人产品。
HERO SDK目前包含SLAM、智能导航、视觉重定位、运动规划、字符识别和语音交互等许多机器人和无人车所需的功能模块。
其中SLAM、运动规划以及一些深度神经网络模型都已经通过FPGA进行了加速。
整个系统基于ROS(机器人操作系统)构建,灵活便捷。
FPGA逻辑设计采用OpenCL编程模型,直接用C语言开发。
此外,该系统还配备了基于英特尔SGX技术开发的一整套安全机制,确保机器人或无人车即使受到黑客远程入侵也不会做出危险动作。
3. HERO SDK 异构计算案例 下面我们介绍几个基于 HERO SDK 的异构计算案例,看看如何更好地将运动规划、定位和导航应用到智能机器人中: 1. 异构计算案例一:FPGA 加速的机器人运动规划在今年9月底召开的机器人领域顶级会议IROS上,虽然深度学习成为热门话题,但排名第一的关键词仍然是Motion & Path Planning。
在运动规划方面,目前最常用的算法是基于采样的算法。
典型代表包括RRT、PRM及其变体。
这类算法会在机器人的配置空间中进行随机采样,并将位置相近的有效采样点连接起来,形成树或图结构,最终找到一条连接起点和目标点的路径。
采样方法面临的一个常见问题是它无法保证路径的质量——样本越多,越有可能找到更短的路径,但计算时间也就越长。
事实上,在整个路径规划过程中,大部分时间都用于判断采样点的有效性。
这是因为有效性判断涉及到机器人本身的碰撞检测(比如手和头是否碰撞),以及机器人与机器人之间的碰撞检测。
环境之间的碰撞检测,无论是机器人本体还是环境,一般都有非常复杂的模型。
例如,研究中常用的Baxter双臂机器人模型仅躯干部分就包含20,000个三角形——这是为了碰撞检测而专门简化的。
我们开发的绝地双臂机器人,全身模型包含了近50万个三角形。
因此,我们首先选择三角网格模型之间的碰撞检测任务作为FPGA加速的目标。
如上图所示,HERO平台使用MoveIt!作为运动规划框架。
OMPL 是 MoveIt! 的默认规划算法库,也是开发基于采样的机器人运动规划算法的首选框架。
在规划过程中,它调用MoveIt!提供的碰撞检测方法。
通过虚拟函数接口,实际的碰撞检测由HCL(HERO Collision Library)进行——这是专门为HERO平台开发的具有FPGA加速功能的碰撞检测。
库,替换了 MoveIt! 最初使用的碰撞检测库 FCL!为了充分发挥FPGA的性能,我们还修改了OMPL和MoveIt!可以一次发起多个检测请求,从而减少CPU和FPGA之间的交互次数。
最后,对于自碰撞检测请求,HCL的处理速度达到了FCL的近两倍。
2、异构计算案例二:采用FPGA加速的SLAM算法长期关注英特尔中国研究院的朋友都知道,研究院基于低成本FPGA SoC完成了完整的激光雷达SLAM系统的开发——Cyclone去年V。
设计。
现在有了HERO平台的支持,开发类似的系统会变得更加容易吗?答案是肯定的!事实上,我们使用OpenCL开发流程重新创建了一个版本的FPGA SLAM,设计了新的软硬件交互接口,用C语言重写了核??心计算逻辑,使用模拟器进行调试和验证,编译成硬件逻辑,并在搭载HERO平台的机器人上使用。
测试完成于。
只需几天时间就能实现这一目标!经测试,新版FPGA SLAM中通过OpenCL生成的逻辑在性能上超越了高级硬件工程师用HDL设计的版本,并且比Intel Core i5 CPU上深度优化的软件版本快了五倍。
结合我们的FastScan技术,更快的执行速度使我们能够以更高的频率调用定位算法,最终让搭载HERO平台的机器人或自动驾驶车辆能够以更高的速度稳定行驶。
4. FPGA快速开发经验,前线高能,疏散非战斗人员!尽管FPGA近年来极其流行,但许多软件工程师仍然对它敬而远之。
毕竟,光是复杂的传统开发流程就足以让人望而生畏。
OpenCL的出现改变了一切。
使用OpenCL,您可以直接用C语言开发运行在FPGA上的内核程序,并只需一条命令即可将其编译成包含硬件逻辑的aocx文件。
在主机端,只需在C或C++程序中使用OpenCL接口加载文件,就可以像调用普通函数一样执行FPGA逻辑并获得结果。
根据我们的经验,软件工程师可以在短短几周内掌握整个开发流程,并能够根据可视化硬件逻辑综合报告对内核代码进行分析和优化。
以下是开发者可能关心的问题。
您想得到什么答案吗?问:使用OpenCL开发FPGA逻辑需要什么样的开发环境? A:在Ubuntu系统上,只需复制Intel FPGA SDK for OpenCL并在bash中设置相应的环境变量即可。
不需要GUI,非常方便。
问:内核可以在没有 FPGA 硬件的机器上执行吗? A:编译时设置模拟器选项,获取aocx文件的软件版本。
执行时不需要FPGA硬件,非常适合功能验证和调试。
Q:编译内核需要很长时间吗? A:编译模拟器速度非常快,堪比编译软件;编译硬件逻辑的时间取决于内核的复杂程度,一般需要一小时到几个小时,但第一阶段编译完成后(通常只需一分钟)即可获得高级综合报告和FPGA资源使用情况。
问:如何调试内核代码? A:建议使用模拟器调试功能。
编译模拟器时,内核代码中可以正常使用printf,可以使用gdb进行调试。
问:C语言的所有特性都可以在内核中使用吗?答:基本上都是可以的。
全局变量和静态变量不能直接使用,但可以使用OpenCL和Intel提供的关键字来指定变量的地址空间,以达到类似的效果。
问:调用内核和调用普通函数有什么区别? A:首先,不能直接传递指针作为参数。
需要利用OpenCL提供的接口将要访问的数据复制到FPGA的内存中(也可以反向复制),然后传入对应的地址。
其次,所有参数的字节总数都有限制。
问:使用OpenCL开发的程序性能如何?答:取决于节目类型。
对于一般计算密集型任务,使用 OpenCL 开发的逻辑性能可以轻松与经验丰富的硬件工程师使用 HDL 设计的逻辑性能相媲美。
然而,对于需要频繁内存访问的任务,OpenCL 可能不会自动提供最佳的内存管理。
这种方法需要开发者根据任务的特点仔细调整代码。