APP下载

基于ROS网桥的跨平台网络化人机交互系统设计

2024-01-12鞠文清潘昱辰朱晟宇李嵩爽

测控技术 2023年12期
关键词:网桥跨平台移动机器人

徐 浩, 鞠文清, 钱 夔, 潘昱辰, 朱晟宇, 李嵩爽

(南京工程学院 自动化学院,江苏 南京 211167)

近年来,随着人工智能、传感器技术和计算机技术的快速发展,移动机器人即时定位与地图构建[1](Simultaneous Localization and Mapping,SLAM)、目标检测、路径规划等算法日趋成熟,移动机器人的应用场景日渐多元化。如今,危险环境下的作业(如隧道探测、变电站巡检等工作)往往由移动机器人进行,为确保移动机器人的作业效率和安全,往往需要对其工作状态和周遭环境进行监控。在此背景下,迫切需要能够远程操控并监控机器人的人机交互软件[2]。

针对此需求,黎振胜等[3]基于LabVIEW 操作者框架设计了一种移动机器人远程人机交互平台并验证了该平台对移动机器人的远程控制效果。徐建明等[4]采用Xenomai(一种实时操作系统)内核和开放实时以太通信网络协议(Ethernet for Control Automation Technology,EtherCAT)主站技术设计软件驱动层,并将搭建的EtherCAT主站运行在ROS(Robot Operating System,机器人操作系统)节点中,最后利用客户机/服务器(Client/Server,C/S)架构设计了远程客户端人机界面,实现了移动机器人的远程控制和自主导航功能。Webviz、Foxglove[5]等开源项目通过WebSocket等技术实现了机器人视频消息和点云信息的可视化功能验证。但以上研究均未能解决跨平台开发和部署问题,也未能实现敏捷开发和控制功能的服务化调用,且大多需要专用工业总线或实时以太网等特殊设备和系统的支持,非专业人员操作十分困难[6]。

为解决以上问题,本文设计了一种基于ROS网桥的跨平台网络化人机交互系统,通过ROS网桥中的WebSocket通道协议进行跨平台的信息交互,解决了传统人机交互系统不能跨平台通信的问题。通过Node.js[7]在Linux平台上创建了服务端,利用Bootstrap框架和jQuery组件建立了交互前端的网络化控制系统架构。最终实现了远程监控和控制移动机器人的目的,从而实现人机交互技术的网络化、服务化和智能化。

1 系统总体结构设计

为了能够使用户舒服、高效并且安全地与机器人互动,使机器人交互技术朝着智能化和服务化的方向发展,本文开发了一款跨平台的人机交互系统。该系统的主要功能是实现跨平台远程监控功能。

所设计的系统总体结构如图1所示,该系统的硬件层主要由移动机器人底盘、传感器设备(如激光雷达、深度相机、惯性测量单元(Inertial Measurement Unit,IMU)等和网络设备组成。

ROS_Web服务层主要包括Roslibjs、Ros2djs、Ros3djs、Web_video_server、Rosbrigde等功能包,实现了ROS与Web端的话题、服务数据交互和模型可视化功能。ROS_Web服务层扩展了ROS的应用范围,将ROS系统中话题通信和Web技术跨平台的优势相结合,从而提高了整体系统的可视化和交互性能。

应用服务层主要包括运动控制硬件驱动、路径规划、机器人导航,以及2D SLAM和3D SLAM等移动机器人本地服务,通过LeGO-LOAM(Lightweight and Ground-Optimized Lidar Odometry and Mapping)、A*等算法实现开放环境下移动机器人的三维地图构建、多点导航和巡航功能。

前端界面采用了Bootstrap框架,通过HTML5、层叠样式表(Cascading Style Sheets,CSS)和JavaScript技术实现。Bootstrap框架是一个在jQuery的基础上进行了个性化完善的前端框架,并且兼容大部分jQuery插件,能够更好地向用户呈现简洁、美观的人机交互界面。

后端服务器使用Node.js的Express框架来搭建,主要负责响应前端请求并对数据或文件进行存取。Node.js是一个基于Chorme V8引擎的JavaScript环境,使用事件驱动、非阻塞式输入输出(Input/Output,I/O)系统模型,让JavaScript运行在服务端的开发平台,用于搭建响应速度快、易于扩展的网络应用。Express是基于Node.js的Web开发框架,具有上手容易、性能高、扩展性强的优点。

1.1 WebSocket通信协议

常见的通信协议有超文本传输协议(Hyper Text Transfer Protocol,HTTP)和WebSocket协议两种,而HTTP是非持久性的协议,客户端想获取服务端的处理进度只能通过使用Ajax进行轮询或者采用长轮询(Long Poll)的方式,但是前者对服务器压力大,后者则会因为一直等待Response(响应)造成阻塞[8]。

WebSocket是一种在单个传输控制协议(Transmission Control Protocol,TCP)连接上进行全双工通信的协议。WebSocket的优势在于:

① 传输效率高。在对移动机器人进行远程监控和控制时需要有很好的实时性,因此对传输效率提出了较高的要求,而WebSocket通信协议通信数据的标头信息只有2 B,有效降低了数据冗余,极大地降低了数据传输的延迟。

② 实用场景广。在移动机器人工作时往往有大量的数据产生,如激光点云信息和远程监控图像等,WebSocket的消息传输优势能够满足机器人在各种场景下的需求。

③ 较强的平台通用性。在机器人系统ROS中,Rosbridge作为机器人和服务器进行通信的核心功能包,同样采用了WebSocket通信协议,能够实现ROS与其他平台的数据传输。

1.2 基于ROS网桥的通信链路

ROS提供了丰富的消息类型,开发人员可以根据具体需求自定义消息。本设计采用JavaScript对象表示法(JavaScript Object Notation,JSON)消息作为数据传输格式,它采用完全独立于编程语言的文本格式来对数据进行存储和表示,并且层次鲜明。同时,考虑到机器人数据传输的效率,本设计采用基于WebSocket协议的ROS网桥通信方式来完成ROS消息和网页消息的相互转换,ROS功能包能够以黑盒应用程序编程接口(Application Programming Interface,API)的形式在网页端对外发布并且能接收网页端的指令[9]。

为了实现ROS程序和非ROS程序通信的目的,利用了Rosbridge提供的JSON接口,将ROS系统的数据消息进行序列化,转换成JSON[10]格式后实现与Web交互的功能。

Rosbridge有3个比较重要的属性:Rosapi、Rosbridge_server和Rosbridge_library。其中,Rosapi的主要作用是连接WebSocket的客户端API;Rosbridge_server主要负责通信的传输层,其主要功能是开启WebSocket服务端,等待客户端的连接请求;Rosbridge_library主要提供ROS消息和JSON消息相互转换的Python API,它几乎包含了ROS的全部核心消息类型,并能根据具体的ROS消息对其进行相应的序列化转换。以相机的图像消息为例,经过Rosbridge转换的JSON消息如表1所示[11]。

表1 Rosbridge消息格式转换表

基于ROS网桥的通信链路如图2所示,用户使用Web应用中的功能模块时,后端将相应的节点启动请求通过WebSocket传输到Rosbridge,Rosbridge负责启动ROS系统中的具体控制算法和硬件驱动,以此开启传感器和主控设备。然后,机器人将自身传感器(如激光雷达、相机、IMU等)数据传输到ROS系统中,经过数据处理算法集成后发布相应话题,Rosbridge将这些话题和服务转换成JSON格式,最后利用WebSocket完成与Web应用端的信息交换。相反地,用户也能通过Rosbridge向ROS端发布话题[12]。

图2 基于ROS网桥的通信链路

2 软件框架设计

在消息的通信链路确定后,需要完成软件框架设计,如图3所示。网页客户端采用HTML5技术展现主体内容,网页风格和各组件的布局由CSS组件决定,基于Three.js和PlaneVisualizer等JavaScript库能够实现三维图形的渲染以及界面的缩放、旋转等功能。Node.js服务器提供了地图保存、数据存取、节点启动等服务。Node.js服务器基于Express框架搭建,Express提供了Web应用程序框架,可以创建路由和处理HTTP请求,用户能够通过POST请求与服务器进行交互,服务器借助Body-parser解析HTTP请求的中间件后利用Child_process生成子进程,通过FS文件系统访问并执行能够启动移动机器人各项组件和服务的脚本文件,以此完成移动机器人的数据管理、运动控制、SLAM建图、机器导航等服务调用。在SLAM建图、机器导航过程中,移动机器人通过Rosbridge服务的WebSocket接口将用户请求的数据交给网页客户端显示。Rosnodejs实现了服务器与ROS通信以及话题的订阅和发布功能。用户能够使用泛平台硬件对机器人的运动过程进行监控。整体项目部署在移动机器人的工控机上,用户无须安装其他插件或依赖,具有模块化、无依赖、轻量化的特点,并且能够实现跨平台操作, 解决了传统人机交互系统跨平台开发和部署困难的问题。

图3 软件框架

2.1 运动控制模块设计

运动控制模块的主要功能是实现移动机器人的远程运动控制。图4为运动控制模块的原理图。该模块主要利用Keyboardteleopjs[13]功能包,首先通过Java-Script对浏览器中键盘按键进行识别,发布相对应的Twist消息。然后,Rosbridge客户端使用JSON命令将Twist消息通过WebSocket接口传递给服务器。在服务器解析命令后,通过控制器实现对机器人的运动控制。

图4 运动控制模块原理图

2.2 视频监控模块设计

本设计在人机交互界面上增加了视频监控模块,能够完整显示视频流。设计视频监控模块的主要目的是防止用户远程操作机器人时发生碰撞事故,此模块能够大幅提高用户操作时的安全性。

本模块采用JSON格式对图像显示参数进行预描述。图像参数在JSON格式中可以看作各种“键/值”对的集合,根据设计要求,本模块主要涉及的“键/值”对参数包括图像的ID、端口地址、图显示的尺寸、订阅的ROS话题等。视频监控功能的实现基于ROS中的Web_video_server[14]功能包,在通信建立后,Web_video_server首先会打开本地端口并等待传入的HTTP请求,一旦用户通过HTTP发出ROS主题的视频流请求,该功能包就会订阅相应主题并创建视频编码器实例,然后将原始的视频数据包提供给客户端,最后通过WebSocket接口进行传输,从而实现Web浏览器中的图像显示功能。此外,为了满足用户对不同类型图像的需求,该模块通过订阅不同的图像话题实现了对彩色图像和深度图像的显示,用户可以通过界面上的按钮自由选择。

2.3 点云显示模块设计

本设计采用RS-LiDAR-16三维激光雷达来提供点云数据,网页端需具备3D可视化功能。因此,本设计利用Ros3djs作为Rosbridge客户端。与视频监控模块类似,本模块也采用JSON数据格式进行传输,其参数包括端口地址、点云显示的尺寸、订阅的ROS话题等。首先需要创建ROS3d.viewer视图对象,用于放置视图内容, 建立ROSlib.tfclient客户端,用于订阅相应的TF数据,并建立ROS3d.ponitcloud2客户端,用于获取点云数据;当ROS系统接收到建图请求后,服务器主动推送点云数据和TF数据,通过Tf2_web_republisher将TF数据通过ROSbridge接口发送给ROS3djsclient和ROSlib.tfclient,在接收到TF数据后,对ROS3d.viewer对象和ROS3d.ponitcloud2对象进行更新,最终实现浏览器中的点云显示[15]。

3 实验结果

本文设计的基于ROS网桥的跨平台网络化人机交互系统主要是实现移动机器人的远程监控和运动控制。

实验环境如图5所示,其由一台配置了Ubuntu的Linux系统工控机、Robuster移动机器人底盘、Intel 3D相机、RS-LiDAR-16激光雷达、一台配置Windows 10的系统主机组成。工控机作为服务器端,Windows系统主机作为客户端,用于远程消息的监控。为保证监控平台能够跨平台通信,需要2台主机处在同一局域网下。为了测试本文所述设计的效果,具体实验步骤如表2所示。

表2 实验步骤

图5 实验环境图

本文设计的人机交互界面如图6所示,图6主体部分左侧是RS-LiDAR-16激光雷达的点云显示情况,右侧是RealSense 3D相机彩色图像的显示情况。节点关系分析如下:Robuster对应的节点/Robuster_mr可以与/Rosbridge_websocket、/Web_video_server节点通信,并将Cmd_vel话题发布到Robuster_mr上,实现了对Robuster的运动控制。与此同时,相机话题被发布到/Web_video_server服务器上,实现了远程在客户端上订阅相机的实时图像信息的功能。

图6 人机交互界面

表3为本文设计的人机交互系统和传统人机交互系统特性的对照。实验结果表明,与传统的人机交互系统相比,该方案摆脱了只能运行在特定单一平台上的限制,能够在泛平台实现移动机器人监控,与传统人机交互系统框架式开发不同的是,本系统采用服务化开发模式,后续功能的开发无须改动整体框架,只需调用相应服务,各模块耦合度较低,方便解耦、移植和功能扩展,使人机交互系统更智能且面向服务。另外,本方案集成部署在移动机器人平台上,用户能够直接通过浏览器控制和监控机器人,实现人机交互系统的轻量化和集成化。总体来说,本设计的跨平台人机交互系统能够较为准确地对移动机器人进行运动控制和状态监控,并且有效可行。

表3 人机交互系统特性对照表

4 结束语

本文设计了一种基于ROS网桥的跨平台网络化人机交互系统。首先,利用HTML5、CSS、JavaScript技术构建了面向ROS的远程监控平台,设计了基于ROS网桥的通信链路,实现了跨平台数据交换。然后,在此基础上采用模块化开发方式开发了人机交互界面,主要功能包括运动控制、图像监控、点云显示等。最后将系统应用于Robuster机器人,检验了本系统的跨平台运动控制、点云显示和视频监控功能。所设计的系统具有跨平台、可移植性强等特点,为人机交互技术的网络化、服务化和智能化提供了基础。另外,基于本文设计的人机交互框架,未来将结合生物电子技术,实现跨模态的人机交互。

猜你喜欢

网桥跨平台移动机器人
移动机器人自主动态避障方法
跨平台APEX接口组件的设计与实现
网桥技术在海外工程项目中的应用
探析网桥优先级
基于Twincat的移动机器人制孔系统
“软隔离”网桥造成的麻烦
基于QT的跨平台输电铁塔监控终端软件设计与实现
基于OPC跨平台通信的电机监测与诊断系统
基于B/S的跨平台用户界面可配置算法研究
极坐标系下移动机器人的点镇定