当前位置: 首页 > Linux

远程调试在Linux车机中的应用

时间:2023-04-06 23:17:22 Linux

简介在软件开发过程中,调试是必不可少的环节。与桌面操作系统的调试相比,嵌入式操作系统的调试有很大的不同。可视化调试能力比桌面操作系统弱一些。对于导航等业务场景复杂的程序开发,可视化调试环境可以让我们的业务场景开发更加高效,也可以快速定位导航业务与车内其他模块交互中的问题,提高调试效率。开发过程。远程调试是最方便的实机调试方式。开发者只需在PC端借用强大的调试器,即可完成业务场景的调试。背景Thrift是一种接口描述语言和二进制通信协议。它用于定义和创建跨语言服务。它是Facebook为“大规模跨语言服务”开发的RPC(RemoteProcedureCall)通信框架。在车机系统中,也可以使用Thrift通信框架进行模块间的通信。导航作为一个单独的模块为流程提供服务,只提供导航相关的服务和地图渲染能力。导航HMI界面是车机系统中统一的操作界面,系统HMI界面与导航的交互界面是通过定义的界面描述语言(IDL),使用自动化工具生成本地可调用界面,然后使用Thrift框架完成系统HMI与导航之间的通信。调试方式为了方便开发过程中的调试,我们在PC端搭建了一套模拟器,可以在PC端渲染地图。还实现了一套在PC上使用的系统HMI模拟命令发送工具。模拟工具是作为客户端连接导航提供的服务,可以在PC端模拟发送命令,帮助开发简单的导航服务,但是这种方式存在缺点如下:模拟命令工具只能模拟简单的业务场景,不能模拟多个交互场景。无法操作地图HMI,看不到过程中HMI界面显示和反馈。地图不能滚动,Win32上的鼠标事件接在上面,可以用鼠标滚动,但是这个方法和车里的滚动过程不一致。车内设备无法在PC端使用,比如导航过程中没有导航音,USB无法使用。PC端无法获取车内数据,如车身数据、GPS信号等。调试方案优化针对当前调试方式存在的上述问题。我们优化了调试方案,可以借助车载系统HMI与导航进行交互。实现了车机环境下使用信号的PC端导航业务场景的调试。主要有以下功能:1、PC端模拟器接收车辆发送的信号。本项目将导航相关业务作为服务器,为车内其他模块提供服务。在车载系统中,系统HMI连接导航服务的地址是固定的。我们在车内开发了一个代理——Sandwich,主要功能是启动导航服务。这个导航服务并没有实现真正的导航服务,而是启动了一个空服务,以便于车辆中的其他模块能够成功建立连接。同时,Sandwich作为客户端连接PC模拟器提供的导航服务。PC端的导航服务真正实现了导航服务。Sandwich负责接收车辆发送的业务请求,并将请求转发给PC端模拟器,让PC端模拟器接收车内信号,对接收到的服务请求进行处理,然后反馈处理结果通过Thrift传给车端。在这个过程中,我们打通了车内的信号,发送给PC端的模拟器,可以将处理后的数据反馈给车。2、PC端模拟器向小车发送信号,导航还需要连接车内其他模块提供的服务,如获取车身数据、获取GPS定位信号、向小车发送导航语音数据等语音播放模块等。PC端模拟器需要作为客户端连接到车内的服务。真正的联系是三明治在车上提供的服务。Sandwich作为客户端连接车内其他模块。例如Sandwich连接了Sound模块、GPS模块、CarData模块等,PC端模拟器需要使用车载设备播放导航声音,需要将播放内容发送给Sandwich。Sandwich接收到播放内容后,发送给车载设备中的Sound模块,即可播放导航音。PC连接车内其他模块的工作原理相同。3、将PC端模拟器中显示的地图投影到车端显示器上实现以上两步,一个利用车机信号调试PC端导航程序的环境就基本完成了。已经能够实现车机信号和PC端的双向接收,但是此时导航的渲染能力还停留在PC端,车机内只显示一个系统HMI界面,以及看不到导航地图的效果,这会带来一个问题,一些对地图依赖性强的操作可能无法准确操作,比如点击地图上的某个POI。这时候就需要将PC端的显示同步到车端。为了达到这个目的,我们一般有两种方法:车机和PC同步渲染车机中的导航正常运行。当导航接收到系统模块业务请求时,车机导航先进行处理,处理后将信号转发该方案中,两端导航业务逻辑并行运行。在复杂的业务场景中,两端会同时与车进行交互。这时候可能会出现互斥,可能会出现两端逻辑不同步的场景。达不到预期的效果。将车内渲染的数据投射到车上。这里我们可以把PC端程序每次渲染一帧地图的结果传给小车。车上的三明治负责接收。当Sandwich接收到一帧地图像素数据后,它负责将这帧数据渲染到小车的屏幕上。此时在车内呈现的效果与PC端一致。我们在这个项目中采用了这个解决方案。在这个方案中,真正的导航业务逻辑来自于PC端,车辆只是一个转发过程,所以第一个方案不会有问题。但是在一些特定的环境下,导航绘制会很频繁,会向小车发送大量的数据。频繁的数据传输可能会带来一定的性能开销,性能上可能会出现延迟。在这里您可以通过降低图像质量来减少图像数据。比如可以使用16位或者8位的BMP进行传输,也可以压缩传输,这样1920*720分辨率的图片传输大小可以控制在30-50k左右。总结基于车机系统中的Thrift通信框架,实现了这套远程调试方案。本质是利用车机系统中的Sandwich程序,接管了车机系统中所有与导航交互的界面处理。通过RPC通信转发,实现了使用真实的车辆信号调试导航的目的。有了这套调试环境,我们甚至可以在真车上边开车边直接调试。与以往路测Log分析再现相比,整个调试过程简单、方便、直观。大大提高了开发效率。基于RPC通信的特点,我们可以进一步优化调试方案,增加多客户端调试功能,使用同机环境,不同模块负责人可以同时进行复杂业务场景的联调。