厂区无人物流配送车HMI 设计与应用

2024-10-12 00:00:00黄政华罗程王亚东
汽车与驾驶维修(维修版) 2024年9期

摘要:随着自动驾驶技术不断发展与落地,无人驾驶车辆逐渐涌入厂区内物流配送行业。本文以公司厂区内低速无人配送车为载体,在无人驾驶控制器上,建立与无人驾驶控制系统的通讯链路,开发设计一款基于Ubuntu18.04+ROS 系统的可实时控制并显示当前无人物流车位置、电量等基本信息的HMI 应用,同时具备录制& 调整无人物流车的路线以及设置车辆参数等功能,便于无人车运维人员对当前车辆运行状态查看以及对车辆进行调试。

关键词:无人车控制系统;无人物流配;应用开发

中图分类号:U270.2 文献标识码:A

0 引言

具备自主感知定位的低速智能移动机器人逐步替代人工进行生产物料的配送工作,为企业降低人工配送成本[1]。在无人驾驶车辆配送过程中,配送物料的取放过程都需要对车辆进行操控,一个可以和无人车控制器底层交互的车载HMI(HumanMachine Interface,人机界面)就显得十分重要,可在无人物流车的无人驾驶控制系统的基础上增设一个触摸屏,开发一款面向客户的HMI 应用,将系统内部数据信息从系统形式向人们习惯查看的形式转换,这样操作人员就可通过屏幕对车辆的实时状态进行查看及控制车辆启停等。

1 HMI 开发背景简介

自2019 年起,公司无人驾驶物流方案落地,并在2020 年后扩大规模,批量覆盖到各个生产基地。在这样的形势下,新场景开发与批量化部署尤为重要,按开发阶段的部署方案,线路采集和部署都需要以Linux 命令的方式进行,采集的线路有缺陷时需要对线路重新采集,采集的工作量非常大。

同时,在调试过程中需要查看车辆状态也需要通过命令行的方式进行查看,查看的方式以及结果显示更偏向算法开发人员,并不能直观地展示给客户。

2 开发需求分析

由于驾控系统的操作难度过高,团队对现场需求进行深入调研,对于HMI 需要的功能进行归类汇总,主要包括以下几方面。

(1)车辆基础功能控制组件实现,包括对车辆车窗、雨刮、远近光灯等基础控制,车辆电量信息显示等。

(2)无人物流车运行过程控制按钮,包括对正在自动运行的车辆进行暂停或者恢复行驶,下发目标站点或者切换站点,切换手自动等操作。

(3)无人物流车算法模块信息显示,包括对各个算法模块的运行状态进行显示,以及报错提示等。

(4)车辆路线轨迹网格及车辆位置显示,可以显示当前正在运行的路线,以及车辆位于路线上的位置。

(5)线路编辑功能,包括新线路的录制,录制好的线路微调,设置线路点的属性等。

(6)参数设置,包括对线路上各个场景及速度等参数的设置。

(7)拓展功能,包括对当前车辆的OTA 功能开发、软件版本和路线版本维护等。

3 软硬件架构

本文以公司无人物流车搭载的无人驾驶系统为载体,在无人驾驶控制器上通过HDMI 线外接一块屏幕,即可对控制器进行操作及软件开发调试。公司无人物流配送车辆的硬件架构如图1所示,基础车辆通过CAN 总线与无人车控制器进行交互,包括车辆本体的运行速度、转向角度等的数据获取,以及控制器下发控车指令给到车辆执行;无人车的感知定位传感器通过网线或者CAN 总线等形式,将感知定位参数返回到无人车控制器;通过HDMI 线将控制器与屏幕连接,显示控制器的UI 界面,这个架构的核心是控制器,本文采用的是米文Apex Xavier Ⅱ ( 或米文Apex Xavier Ⅱ +) 作为控制核心,各个算法模块的开发主要基于ROS(Robot Operating System, 机器人操作系统) 系统。

无人驾驶控制系统软件采用具备高效通讯架构的ROS 系统进行开发,分别有与车辆底层交互的驱动模块、感知定位模块、规划控制模块以及HMI 模块,各个模块通过定时发布或者解析话题进行交互。本文设计的HMI 应用,采用前后端分离设计,车辆运行数据源于无人车控制系统的各个算法模块发布的ROS 话题[2],通过前后端接口模块对所需的各个话题解析,并定时回传到前端UI 显示。

同样的,当通过UI 控件操控车辆时,控件的事件被触发,通过回调函数自动把指定命令转发到前后端接口模块,接口模块通过命令属性,将控件事件按既定交互协议转换成ROS 的话题发布到系统[3],供底层驱动模块订阅解析,并转发到车辆CAN 总线,控制车辆执行对应命令。

HMI 应用框架如图2 所示,前端主要是UI 布局设计,自定义控件设计、控件事件处理、数据显示等,前端的UI 设计是基于ImGUI 开源库进行开发,该库是一个用于C++ 的用户界面库,跨平台、无依赖,支持OpenGL、DirectX 等多种渲染API ;后端主要是建立无人车控制器和UI 前端交互链路,获取数据并回传前端显示,或者接收前端命令下发到无人车控制器,后端开发主要是通过新建一个ROS 功能包,建立一个专门解析所需数据话题的节点,解析到指定话题后封装成前端所需的数据类型并回传到前端显示。

4 HMI 功能模块设计& 布局

4.1 主页面设计

本文 HMI主页面布局设计主要分为 5 个小模块(图 3)。

(1)模块一显示车辆电量以及车辆车窗、灯光等开关,同时也是设计页面的入口,主要用到的是自定义的按钮控件ButtonWidget、自定义的图文控件ImageWidget 和自定义弹窗控件PopupWidget,在弹窗界面中,设计了车辆的车窗和灯光的控制按键。

(2)模块二显示车辆运行时的实时信息,有行驶速度、转向角度、路程信息等, 主要使用的是ImGUI 自带的文本控件Text。

(3)模块三是部分控制车辆状态的按钮,以及下拉选择目标站点,给车辆下发启动或暂停命令的按钮,使用的都是自定义控件,有下拉控件ListBox,多功能按钮控件MutilFuncButton 等。

(4)模块四显示的是车辆当前行驶的路线,以及车辆在路线上的位置,该线路显示模块是自定义的点、线、图标显示编辑模块Grid,是基于Imgui 库自带的CANVAS 进行重构的,处理显示路线和位置信息,还支持缩放、选择对象的功能。

(5)模块五显示的是无人驾驶控制系统的各个算法模块的状态,主要使用的是自定义的图文显示控件ImageWidget。当算法模块正常运行时,显示绿色打勾,当算法模块异常时,显示红色打叉,并支持查看异常的具体原因。

4.2 设置页面设计

设置页面(图4)是所有子页面的入口,车辆设置或者路线编排之类页面都是排布的设置页面内部。子页面主要包括有标定、参数设置、路线编排、系统设置、系统版本等页面, 该模块使用的控件是自定义的列表控件ListBox,左侧显示主要项目,右侧显示对应的子项目列表,通过选择右侧子列表,可跳转到具体的子页面内部进行相应操作或者返回主页面。

4.3 路线编辑模块设计

无人车行驶过程是依据既有的高精度地图和路线进行循迹行走的,所以在正式部署到生产线上前,需进行高精地图和路线制作[1]。利用HMI 制作路线,只需启动HMI 路线录制功能和车辆定位模块,按既定线路人工驾驶车辆行驶一遍路线,将跑经的线路经度纬度高度以及车辆的转向角度等属性,记录到Json 格式的路线文件内,即可完成线路的初版录制工作。

新路线录制好之后,并非完全没有问题,针对有缺陷的局部路段,可通过路线编辑页面(图5)对线路位置进行重新编排,使得车辆通过该路段更加合理,同样的,对于缺陷太多的路段,只需将该路段删除再重新录制即可,无需全部路线都要重新录制,这样可以极大提高布线工作的效率。

4.4 调试页面设计

在无人车功能开发阶段,除了要制作点云地图和路线外,还需对车辆的基础功能进行反复实验,以及交付使用前的对车辆进行压力测试。针对调试阶段,团队开发一个调试页面(图6),主要包括车辆各个算法模块的状态和故障信息显示、车辆本体VCU\EPS 等模块的状态信息、给车辆下发下一站的功能按键、自动托挂钩的操作等。

4.5 OTA 页面设计

在无人车批量复制和部署过程中,为了减轻大量重复工作,团队还考虑增加OTA 功能,设计了地图和路线以及各个算法的OTA 页面。主要功能是在车辆与云管理平台建立连接后,可通过点击升级按钮,从云端获取指定最新版本的文件并下载保存到指定路径。

5 结束语

本次开发HMI 应用主要是基于客户使用需求及调试和部署过程高效性考虑。HMI 的开发主要是基于ROS 系统和C/C++ 语言进行的,应用的启动使用的是bash 脚本编写,渲染主要利用到ImGUI 开源库[4]。部分控件是团队根据实际需求进行个性化设计的,控件布局使用的是XML 文件[5]。整个应用的开发经过了多个版本迭代,目前已满足现场实际使用。

【参考文献】

[1] 吕冀权. 基于ROS 技术的无人物流配送车[J]. 中文科技期刊数据库( 全文版) 工程技术,2023(12):9-12.

[2] 刘伏志, 朱有鹏著.ROS 机器人编程零基础入门与实践[M]. 北京:机械工业出版社,2023.

[3] 曾俊皓. 基于ROS 的移动机器人系统平台的设计与实现[D]. 广州: 华南理工大学,2018.

[4] 格雷厄姆· 塞勒斯, 小理查德· 赖特, 尼古拉斯· 海梅尔著.OpenGL 超级宝典[M]. 第7 版. 颜松柏, 薛陶, 张林苹, 译. 北京: 人民邮电出版社,2020.

[5] 杨柳青, 孙运强, 姚爱琴.TinyXml 在Linux 平台中的应用研究[J]. 机械工程与自动化,2009(05):41-43.

作者简介:

黄政华,本科,工程师,研究方向为智能驾驶、无人物流。

罗程,本科,工程师,研究方向为智能驾驶、机器视觉。