APP下载

便携式水下机器人系统设计与实现

2021-02-04

软件导刊 2021年1期
关键词:终端设备微控制器串口

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

0 引言

水下机器人种类很多,在不同研究领域应用广泛,本文研究一种超小型水下机器人,属于ROV(Remotely Oper⁃ated Vehicle,ROV)系统[1]。ROV 系统一般分为水上控制终端、脐带缆和水下机器人本体[1]。脐带缆负责给水下潜体供电并作为水上水下通信信道,包括视频信号、数据及控制命令。目前设计的水下机器人具备水下探测和简单作业能力,但是整体平台设备繁琐,通过岸上多根线缆连接,需要携带较重的控制箱,只能通过固定操作实现控制[2];文献[3]实现一种基于串口通信的水下机器人平台,分别通过RS232 接口和RS485 实现控制端、转换器和水下本体之间的数据传输。虽然通信效果良好,但视频与数据、控制信号采用不同线缆,增加了成本,视频信号易受干扰;文献[4]设计的小型水下机器人集成多种功能,通过远程控制可完成基本的侦察和清障任务,通过简化设计降低成本与功耗,但是控制平台软件不够完善。本文设计的系统实现水下视频信号、数据和控制命令一体化传输,利用陆上无线网络传输技术的便捷性,设计一种更加灵活方便的水面控制系统,可由手机或电脑控制,适用于个人在水下拍摄与观察。

1 系统总体设计

本系统整体框架采用水下线缆、水上无线方式实现机器人本体与控制终端之间的通信与控制,主要由水下机器人本体、水面通信浮标、水上控制终端以及交互软件组成,系统整体架构如图1 所示。水下机器人本体通过接收经过水面通信浮标转化后的控制命令完成水下运动,并将视频信号和数据信号传输至通信浮标并显示在终端设备上。通信浮标放置于水面,通过线缆与机器人本体连接,以无线方式与终端设备连接,负责本体与控制终端的协议转换、信号处理与转发。水上控制终端负责接收视频与传感器数据,并控制机器人运动和摄像头拍摄。

Fig.1 System overall architecture图1 系统总体架构

水下机器人本体通过100m 的轻型系绳与水面通信浮标连接建立通信,将系绳转换为以太网电缆连接无线模块,以便轻松连接到控制端,其中系绳线通过使用接口板和USB 电缆转换为以太网电缆。缆绳在本体和控制端之间来回传输数据,包括测量数据和视频以及操作命令。为实现视频信号、数据和命令一体化传输系统,在水面平台和机器人本体之间搭建一个局域网,将视频信号、传感器采集的数据、控制信号共用同一链路同时传输,减少系统线缆和视频电路硬件。视频信号经过水面通信浮标处理后传输至终端设备,处理数据信号时采用串口服务器将主控制器输出转化为以太网信号,然后通过通信浮标传输到终端设备,最后将控制命令处理后发送到串口服务器,转换为串口信号传输到主控制器。终端设备与水下机器人本体IP 地址建立连接,即可与该设备建立通信,对水下潜体进行控制。通信系统结构如图2 所示。

Fig.2 Communication system structure图2 通信系统结构

2 硬件结构

2.1 水下机器人本体

机器人本体由主控模块、传感器模块、电源模块和机械动力模块组成,其中控制模块主要负责接收水下传感器传送的数据,直接控制水下机器人硬件(推进器、LED 灯、高清摄像头、摄像头微伺服、红外遥感),是机器人控制中心,核心控制板包括Beagle Bone Black(以下简称BBB)开发板及Arduino Mega2560[5-6]。

Arduino 微控制器连接到BBB。BBB 是机器人系统大脑,使用Node.js 运行系统软件,接收命令并转发给水下机器人硬件。用户从控制端发送BBB 命令,由Arduino 微控制器处理后执行。Arduino 微控制器负责将电机命令转发到每个电机(速度/方向),并接收遥测数据供用户在控制设备上查看。Arduino 微控制器具有较高的时间精度,能有效处理脉冲宽度调制(PWM)信号。除Arduino 微控制器外,还使用3 个电动速度控制器(ESC)控制水下机器人本体中的电机。电子稳定控制系统可改变电子马达的速度和方向。通过使用ESC,用户在操作机器人时不需要考虑每个电机的方向或精确转速,只需发送一个命令信号即可。根据指令信号,Arduino 为每个电子稳定控制系统分配相应的电机操作和转速。

其它硬件包括推进器、LED 灯、高清摄像头、摄像头微伺服、红外遥感、IMU 姿态传感器和电池。HitecHS-81 伺服系统控制摄像头倾斜角度,使用无刷电机作为系统推进器,型号为Turnigy Aerodrive DST-700kv。

系统采用3 个推进器实现水下机器人上升、下降、前进、左移和右移运动[6]。水平方向布局两个推进器,分别为左舷马达和右舷马达,垂直方向布局一个推进器。姿态传感器型号为IMU:BNO055,压力传感器为MS5837,传感器最大工作压力为30 bar(435 psi,水深200m),拥有自动校准罗盘功能,适用于磁北优化的IMU 输出[8],可以平滑显示滚动和俯仰。通过I2C 提供水下机器人深度、导航航向、水温和加速度计/陀螺仪遥测,在终端设备界面显示。

2.2 水面通信浮标与水上控制终端

用于操控和监测水下机器人的水面通信浮标硬件结构较为简单,主要由顶部通信盒、无线路由器、显示和操作的终端设备组成。顶部通信盒组件包含电源管理模块和以太网通信模块,主要负责将锂电池输出电压分别转换为12V、5V 和3.3V,为水下潜体各种设备器件进行供电,并提供以太网RJ-45 接口与无线路由器进行通信。无线路由器通过AP 模式将终端设备接入局域网,把有线网络转换为无线网络,使用DHCP 与水下机器人以太网连接。水下本体DHCP 服务器分发IP 地址并充当DNS 服务器,从而正确解析终端设备上输入的IP 地址,以便操作人员方便地控制水下机器人和观察水下情况。水上控制终端包括用于控制机器人运动的手柄,以及用于显示控制界面的手机或PC,对手柄按键进行编码控制。水下本体发送到通信浮标的传感器数据和视频信号通过手机或PC 的无线串口接收并显示。

3 软件设计

3.1 系统软件工作流程

系统硬件核心主要是BBB 及以Arduino Mega2560 为核心的主控板,这两个硬件核心编程语言并不相同,其中Beagle Bone Black 整体使用Node.js 开发[7],而Arduino Mega2560 主要开发语言为C 或C++。

为了让BBB 请求Arduino 执行命令,必须在客户端、BBB 和Arduino 微控制器之间建立事件驱动编程。通俗地说,事件驱动程序是为响应用户或系统生成的操作而编写的程序[8],这些动作包括点击鼠标、按键或移动操纵杆。本系统客户端、BBB 和Arduino 微控制器都以不同语言运行,图3 为系统客户端、BBB 和Arduino 微控制器之间的简单信号流。每个事件循环包含多个代码文件,用于定义用户触发的函数和任务,执行某些代码文件,如按键含义、电机状态、马达输出功率等。

Fig.3 Workflow system software图3 系统软件工作流程

3.2 通信系统程序设计

在控制信号与数据信号通信协议设计中,主控板与整个局域网之间采用串行服务器通信,采用串行通信协议方式实现。在水下机器人通信系统中数据是逐帧发送的,其中每一帧数据包含一个字节。为解决发送数据有多个字节情况,在发送前用指针存放实际值,把数据信号分为若干字节再打包发送,接收时再还原。在单片机程序中,主控板与终端设备通信协议相同,以减少信号处理的复杂度。后台主程序是一个重复过程,从数据和控制信号的处理然后驱动机器人运动,再将数据打包发送给水上控制端,前台串口利用自动中断接收命令,程序结构如图4 所示。

Fig.4 Control signal program structure图4 控制信号程序结构

通信系统程序主要由水控平台上运行的客户端程序和服务器端运行的服务器程序两部分组成。客户端与服务端程序之间的传输协议为TCP/IP,建立连接之后,通过UDP 维持长时间通信[9]。程序流程如下:客户端认证成功后,持续获取水下机器人通信模块的IP 地址,确保每一次IP 变化都能检测到,然后定时打包发送。等到服务器收到后确认并返回消息,接着更新域名映射关系,如果失败则重复这个流程。服务器会持续检测发送过来的数据包并负责不断更新,保证收发双端的IP 地址与域名相对应,如图5 所示。

Fig.5 The client and server workflow图5 客户端与服务器工作流程

3.3 传感器模块与数据管理程序设计

水下机器人传感器数据采集模块非常重要,该模块可获取水下环境的各种参数(包括温度、深度、机器人俯仰角和偏航角等),这些数据是水下勘探必须获取的基本数据。数据采集模块分为惯性测量单元模块和深度数据采集模块,以I2C 串行总线开发,使用函数及流程如下:Wire.begin(adderss)初始化地址,请求数据发送,使用wire.read()读取发送的数据。调用Transmission()建立双方连接,执行程序后调用write()发送数据至MCU,写入数据后进一步计算处理,最终得到传感器测得的具体数值。

3.4 水面控制平台程序设计

水面控制平台软件设计包括操作水下机器人的人机交互界面和控制系统,是控制水下机器人的核心,并且基于最新的Web 标准与微控制器配合使用,为系统提供远程机器人控制。工作时可以很快连接到移动设备、平板电脑和PC 上,无需安装,在浏览器中可录制和观看视频以及遥测数据,可更改电机配置,增加游戏手柄、键盘和操纵杆控制选项,可添加插件,配置陀螺仪/加速度计以保证水下运动的稳定性。

基于上述网络协议,使用Socket 编程完成水面控制平台程序设计。Socket 是应用层与TCP/IP 协议族通信的中间软件抽象层,是一组接口[10],应用流程如图6 所示。水面平台首先建立并初始化Socket()函数,设置为非阻塞,在后台持续监听整个网络。收到水下机器人本体connect()请求后,水面平台调用accept()函数接收请求,双方建立连接。机器水下本体控制器执行客户端指令,随后发送数据,水面控制端采集客户端数据进行后续处理。

Fig.6 Water platform control program flow图6 水面平台控制程序流程

4 实验与分析

首先测试各个模块硬件的性能和工作情况,包括推进器、电子速度控制器(ESCS)、LED、红外激光以及网络摄像头云台。此外,测试和调试外壳框架、电子舱、无线模块等硬件结构,确保外壳耐水性和整体机械结构合理性[11-14]。确保水面的无线模块稳定性,数据和电源传输线缆连通且互不干扰。完成硬件平台搭建后,对上述模块工作情况进行调试。水下机器人各项指标如表1 所示。

Table 1 Robot the attributes and indicators表1 机器人各项属性与指标

接着测试通信系统,连接电脑,分别进行串口通信测试以及网络调试,完成后访问水下机器人地址。图7、图8为调试界面,图9、图10 为测试结果和实物图。水下机器人控制界面包含指示灯、电池剩余电量、系统延时、LED 灯亮度、镭射灯开关、定深状态、艏向以及摄像头画面等功能。通过手机和PC 在陆上环境中测试,对水下机器人进行控制。通过持续观察视频画面,发现视频能流畅持续显示,并且延迟稳定在140ms,切换拍摄角度未出现卡顿现象。

Fig.7 A serial port debug interface图7 串口调试界面

Fig.8 Network debug interface图8 网络调试界面

Fig.9 Control interface图9 控制界面

最后在水池中进行实验,将水下本体放入水中进行运动姿态测试及系统数据传输测试,水下本体由上位机通过水面通信模块控制。根据操作者离通信模块的遥控距离测试系统丢包率等性能,数据如表2 所示。与文献[15]水下机器人无线遥控数据收发性能相比,在遥控距离同为20m 的情况下,丢包率从5% 提升到3.7%。

Fig.10 Robot ontology图10 机器人本体

Table 2 The wireless remote control test results表2 无线遥控测试结果

5 结语

本文设计了一套便携式超小型水下机器人平台,通过实验测试验证了该系统性能。通过在机器人本体中嵌入一个B/S 架构的Web 服务器,基于TCP 协议进行Socket编程完成数据传输,使用数据和控制命令一体化传输和无线网络传输方法实现水下机器人通信与控制。研究表明,在硬件结构简单的情况下,建立局域网能有效实现水下机器人通信。与其它平台相比,本设计具有体积小、成本低、便于携带、易于操作等特点,适于不同操作系统的终端设备,无需使用体积较大的控制箱。但本系统在软件优化方面还存在不足,后续需要丰富系统功能,增加更多传感器,在软件上实现自主控制,提升系统智能化,使水下机器人远距离工作时状态更加稳定。

猜你喜欢

终端设备微控制器串口
浅谈AB PLC串口跟RFID传感器的通讯应用
视频监视系统新型终端设备接入方案
物联网技术在微控制器实验教学中的应用
配电自动化终端设备在电力配网自动化的应用
车站信号系统终端设备整合及解决方案
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信
Atmel针对新一代物联网应用发布全新32位微控制器
最新STM32设计工具增加对混合信号微控制器的支持
基于并行控制的FPGA多串口拓展实现