采用Java的水下遥控机器人监控系统

2022-03-25 04:45戴晓强朱延栓郑宇航杨淦华
软件导刊 2022年3期
关键词:手柄线程蓝牙

兰 武,戴晓强,朱延栓,郑宇航,杨淦华

(江苏科技大学 电子信息学院,江苏 镇江 212003)

0 引言

随着海上贸易和资源开发项目的增多,海洋事故的发生次数也越来越多,如韩国世越号事件[1]、俄罗斯远东号事件[2],这些事故造成了巨大的生命代价与经济损失。由于海底压力大、环境异常恶劣、可视度低,打捞与救援工作的难度较大,一般设备很难完成指定任务[3]。水下遥控机器人(Remotely Operated Vehicles,ROV)具备操作性好、动力充足[4]、适应水下恶劣环境[5]等优点,在潜水员不能到达的深度和不安全的水域,可利用ROV 完成水下搜寻和救援[6]、水质环境调查[7]、打捞[8]等任务,保障工作人员人身安全[9]。

1 相关研究

很多学者对水下机器人进行了研究,例如常润发等[10]设计了基于STM32 微控制器的嵌入式控制系统,并对其进行了姿态和深度控制的水下试验;肖朋振等[11]从运动控制算法和系统架构的角度出发,设计了一种ROV 控制系统;张玮康等[12]提出一种以一体化工业加固计算机为水面监控单元,PC104 嵌入式工业控制计算机为水下主控单元,各驱动板为驱动单元的控制系统架构;余明刚[13]对便携式水下机器人的研究进展进行了综述。

在进行水下作业时,监控系统的作用十分重要,其是水下机器人能够准确完成工作的核心保障[14]。监控系统能实时显示水下机器人的状态信息、监测故障、预警周围环境,操控人员也可以通过监控系统对水下机器人进行自由操控。目前常见的监控系统软件包括C#[15]、QT[16]、Lab-VIEW[17]等,但都有其自身局限性。

Java 语言的语法与C 和C++类似[18],但不使用C 与C++中难以理解的指针,因此更加容易学习。此外,Java 还可提供内存回收机制,使程序方便易懂,安全性更高[19]。Java API 提供了大量图形用户界面,降低了监控系统界面的编写难度。Java 还具有移植性好的特点[20],因此可用于Web应用程序、桌面应用程序和嵌入式系统程序等的开发。基于此,本文采用Java 平台进行监控系统软件开发,利用Java多线程和灵活实用的优点,在程序设计和网络编程的基础上完成系统上层监控界面的搭建。该监控系统可实现与底层机器人的通信,实时获取机器人本体携带的惯导、深度计、温湿度传感器等数据并在监控界面显示,还可利用摄像头显示水下机器人周围的作业环境,实现其运动控制。该系统通过内嵌SQL 语言查询和操控数据库,实现了对接收数据的分析、存储和管理功能。相较于其他监控系统,本文系统具有以下特点:①舍弃了控制板设计而选用蓝牙手柄,优化了整体结构,使监控系统的操作更加简便,亦减少了开发时间;②使用网络通信,使通信速度和质量更佳;③采用Java 语言进行开发,使得可移植性和安全性更高;④通过建立数据库实现了数据存储。

2 监控系统硬件框架

本文所述水下机器人系江苏科技大学自主设计并研发的一款应用于船体检测与作业的开架式ROV。水下机器人监控系统硬件结构如图1 所示,包含水面控制系统和水下机器人本体。水面控制系统由蓝牙手柄、监控电脑、脐带缆和供电箱组成。机器人操控员通过脐带缆连接监控电脑和水下机器人,观测监控电脑反馈信息,利用蓝牙手柄给电脑发送控制指令,由电脑发送给机器人进行运动控制,供电箱负责给机器人供电。水下控制系统由主控制器、从控制器、DCDC 电源模块、推进器模块、视频采集和传输模块、报警模块、温湿度采集模块、深度采集模块和导航模块组成。使用STM32F407VET6 微型工控机作为水下机器人的主控制器,通过四芯网线使用TCP/IP 协议接收水面控制系统发送的控制指令,对舱内各设备进行任务分配。DCDC 电源模块将供电箱提供的电源分级处理后根据需求提供给舱内的各个部件。推进器模块由4 个电机驱动组成,分别对应4 个电机,这4 个电机两两分布在机器人本体尾部及上方。从控制器通过CAN 通讯接收主控器获取的控制指令,根据指令输出不同的PWM 波驱动电机转动(高电平正转,低电平反转),通过控制电机转速实现水下机器人的上浮、下潜、前进、后退、左转、右转、定航、定深。报警模块通过检测高低电平判断舱内是否漏水(高电平为漏水)。温湿度采集模块负责检测舱内温度和湿度,并将采集到的数据发送给主控制器。深度采集模块负责采集水下机器人的深度信息,与主控制器之间采用485 通讯。导航模块由微型航姿参考系统(AHRS)组成,负责采集水下机器人在X 轴、Y 轴、Z 轴方向的角度和加速度信息,通过232 串口通信发送给主控制器。视频采集和传输模块由摄像头和传输设备组成,视频信号通过脐带缆传送至岸上,监控电脑通过四芯网线使用TCP/IP 协议将其显示在监控界面上。

Fig.1 Hardware structure block diagram of underwater vehicle monitoring system图1 水下机器人监控系统硬件结构

3 监控系统软件框架

3.1 水面控制系统软件

3.1.1 Java 监控系统功能结构

根据图1 设计,Java 监控系统程序应满足以下要求:①实时显示水下摄像头采集的视频信号,能够完成拍照、录像等功能,根据需求对云台进行上下左右的控制和对焦;②能够完整接收水下机器人各个传感器收集处理好的数据,包括姿态、深度、温湿度、电压等,并根据这些数据建立水下机器人的姿态模型,确定其当前姿态;③可根据操作人员命令控制水下机器人的推进器实现前进后退、左转右转、上浮下潜、定深定航等功能,并对水下灯进行开关控制;④当水下机器人舱内温度过高、发生漏水、电压或电流温度异常时,监控系统能进行报警显示。图2 为基于Java的水下机器人监控系统功能结构。

3.1.2 Java 网络通信软件设计

监控界面程序运行在Windows 环境下,使用Java 作为监控系统的计算机语言。由于上下位机之间通信需要获取水下机器人的姿态、温湿度、深度、视频、故障等大量信息,为确保数据的完整性和准确性,采用C/S 架构,基于TCP/IP 协议的Socket 方式进行通信,使用全双工模式,以机器人本体搭载的主控制器作为服务器端,上位机作为客户端。表1 和表2 分别为上行数据和下行指令的格式。

Fig.2 Function structure of AUV monitoring system based on Java图2 基于Java的水下机器人监控系统功能结构

Table 1 Uplink data format表1 上行数据格式

Table 2 Downward instruction format表2 下行指令格式

使用Java 编写的监控程序软件采用多线程方法,线程1 负责接收蓝牙手柄发送的信息,将按键转化为水下机器人的操作指令,每200ms 接收一次;线程2 负责与水下机器人主控板进行网络通讯,将线程1 转化的操作指令发送给水下机器人主控板,在接收信号后对数据进行解析,通过滤波处理去除冗余和错误数据,将遍历信号加入线程3 运行路径规划算法;线程4 对线程2 获取的水下机器人所感知的环境信息和舱内指标进行处理后将其显示在监控界面上。监控系统流程如图3 所示。

3.2 水下控制系统软件设计

水下控制系统主控板以STM32F407VET6 为主控制器件进行编程,使用RTX 系统实现多线程处理、软件定时、内存和任务管理等功能。该系统拥有轻量化操作系统内核,适合本文机器人使用,相较于其他嵌入式操作系统,其具有成本低、可移植的优势。主控制板软件流程如图4所示。

Fig.3 Flow of monitoring system图3 监控系统流程

Fig.4 Software flow of main control board图4 主控制板软件流程

4 实验结果与分析

首先在陆地上对各个模块的性能进行测试,包括推进器、水下灯、云台摄像机、蓝牙手柄、惯性导航,然后通过整体联调进行进一步测试与优化。本文设计制作的水下机器人本体、电源箱和水面操作装置分别如图5、图6 和图7所示。

Fig.5 Remote control underwater robot图5 遥控水下机器人实物

Fig.6 ROV power box图6 ROV 电源箱

Fig.7 Water surface control device图7 水面操控装置

为验证该系统是否能有效实现水下机器人的运动控制和状态监测功能,本文多次在1 个长10m、宽5m、深2m的实验水池和小湖中进行运动控制实验。实验时,操控员使用蓝牙手柄对机器人进行遥控,实现了前进倒退、左转右转、上浮下潜、定深定航等动作。同时测试了监控软件的使用效果,观测机器人的水下运动控制是否实时有效、监控图像是否清晰等。图8 为实验室水池运动测试图,图9为船厂测试人员遥控操作图,图10 为Java 监控系统界面。测试结果表明,操控人员可控制水下机器人自由运作,视频信号无延时且云台可自由控制,截图和录像画质清晰,上下位机之间通讯正常且持续运行半小时以上无丢包现象发生。

Fig.8 Motion test of underwater robot pool图8 水下机器人水池运动测试

Fig.9 Remote control operation图9 遥控操作

Fig.10 Java monitoring system screen图10 Java 监控系统画面

5 结语

本文针对水下机器人监控系统研发成本高、时间长、通用性和扩展性较差的问题,设计了一种基于Java的监控系统。验证实验表明,该监控系统具有较好的人机交互性能,操作人员能直观地观测到水下机器人的周边环境并准确有效地进行水下作业。相较于以往的水面控制台,该监控系统取消了控制信息采集板,选择使用蓝牙手柄进行控制,系统整体更加轻便;通过Java 监控程序生成调用手柄,简化了水下机器人的软硬件开发流程;采用网络通信代替串口通信,提高了数据传输速度,可以发送大量数据。采用Java 实现的水下监控软件具有较强的稳定性,大大减少了系统开发时间。此外,基于Java 在网络开发上的便利性,该系统具备较强的扩展性,便于后期建立云操控。

猜你喜欢
手柄线程蓝牙
基于PLC控制的手柄座钻孔攻丝一体机的研发
简单、易用,可玩性强Q AcousticsBT3蓝牙音箱
一种多功能无线手柄的设计
适合自己的才是最好的 德生(TECSUN) BT-50蓝牙耳机放大器
浅谈linux多线程协作
紧急:蓝牙指尖陀螺自燃!安全隐患频出
银行家
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究
么移动中间件线程池并发机制优化改进