基于STM32的无人艇航迹控制器的设计与实现
2018-08-29徐小强
徐小强 盛 磊
(武汉理工大学自动化学院 武汉 430070)
0 引 言
在海洋环境监测、海洋开发和现代化军事装备智能化发展的大背景下,无人艇作为水上的智能航行器在民用和军用领域具有广阔的应用前景[1-2].无人艇是一个横跨多个学科,涉及船舶设计、网络通信、信息融合、智能控制等多个领域的综合设计,其中无人艇系统是一个很复杂的控制系统[3-4].在无人艇控制系统中,航迹跟踪是无人艇自主完成各种复杂任务的关键技术之一,自主巡航、动态避碰等都是依赖于航迹跟踪来实现的.文献[5]结合无人艇的数学模型、自动操舵仪等设备设计了基于嵌入式平台的无人艇控制仿真系统,仿真结果较真实的反映了无人艇的运行状况.文献[6]以某公司的APAX系列的工控机为硬件控制平台,用Visual CJHJ开发无人艇控制系统软件,完成来了无人艇传感器实时数据的采集和无人艇的运动控制.文献[7]采用广义预测控制和PID控制相结合的方式,分别控制无人艇的转艏运动和操舵运动,并采用了分离式控制方案,通过航向控制间接实现了无人艇的航迹跟踪控制,通过Matlab仿真结果可知,该控制器具有良好的航向控制与航迹跟踪的控制效果.文献[8]采用STM32微控制器为控制单元,通过互补滤波算法完成对无人艇的姿态进行解算,通过PID控制算法实现对无人艇的姿态进行控制并在海上进行了实船实验,实验证明了该无人艇的稳定性好,适合海洋环境的监测及海事搜救.
目前,无人艇的控制器设计在仿真实验中取得了很理想的控制效果,然而在实船实验应用中达不到很好的控制效果.本文设计了基于STM32的无人艇航迹控制器,构建局域网进行网络通信,通过Visual C++ 编写船端监控软件,采用分离式控制方案,编写航向保持算法和航迹保持算法,使无人艇沿着指定的路径进行航行,通过实船反复实验,验证了该航迹控制器的实用性.
1 控制器总体设计
无人艇航迹控制器采用分离式的设计方案,将航迹控制算法运行在工控机中的船端监控软件中和单独设计控制无人艇的喷水推进器的航向控制板卡.工控机采用Adipcom的BOX-102型号,其上运行通过Visual C++ 编写的船端监控软件进行无人艇进行统一管理.无人艇的真航向采用七维航测的 AHRS-Ⅱ型号的电罗经,更新频率可配置,精度能达到0.01°,位置信息通过GPS定位模块测得本船的实际位置.它们之间通过RS232串口与工控机相连,工控机中对应的解码软件通过串口读取航向信息和位置信息并进行解析,并按照固定的协议格式推送给船端监控软件使用.航迹控制器硬件组成框图见图1.
图1 航迹控制器硬件组成框
航向控制板是控制无人艇的航向的核心控制板卡,它通过以太网通信接收船端监控软件设定的航向,控制无人艇的喷水推进器摆动,达到控制无人艇航向的目的.航向控制板采用以高性能、低成本和低功耗的32位STM32F103增强型系列的芯片作为控制核心,以太网通信采用实现了全硬件TCP/IP协议栈的以太网控制器芯片W5500,高效的实现与船端监控软件之间的UDP通信.无人艇的喷水推进器转向装置是一个12 V直流电机,通过液压油传导压力控制喷水推进器的喷嘴方向,通过0~184 Ω电阻值作为碰嘴位置反馈.图2为航向控制板的硬件组成框图.
图2 航向控制板的硬件组成框图
系统运行后,工控机中相关解码软件将通过串口读取无人艇的实时航向数据和实时GPS位置信息进行解码,同时传送给船端监控软件.船端监控软件根据不同的控制命令,解析出来待执行的路径任务,每一个路径任务都有一个待航行路径点队列,同时并开启一个定时器任务,周期为2 000 ms,此任务负者判断当前无人艇的经纬度信息是否与当前路径队列中的目标经纬度信息在误差允许的范围之内.当接近目标点时进行减速航行,避免无人艇转向时可能存在的大范围旋回.当不在误差允许的范围之内则按照设定的航速继续航行.在朝着当前路径队列中的目标点航行时,经过计算出本无人艇的实际位置与目标位置的航向角作为设定航向.然后通过以太网按照自定义通信协议格式的UDP数据包发送到航向控制板,航向控制板接收到后进行解析出设定航向,开始设定航向任务,进行航向保持控制.航向控制板根据接收到的电罗经实时测量的本无人艇的真航向,进行PID算法的计算,计算出对应需调整的喷泵位置对应的电阻值.由STM32产生PWM波驱动电机驱动模块去调整喷泵喷嘴的位置.航向控制板根据设定的航向,实时调整喷泵的位置进行航向保持.在这个动态调整的过程中,无人艇从而实现了航迹的跟随控制.
2 硬件设计
航向控制板采用ST公司增强型32位微控制STM32F103作为主控制器,它是专为嵌入式应用而专门设计的基于ARM Cortex-M内核的芯片,具有高性能、低功耗和低成本的优势,工作频率最高为72 MHz.该型号芯片包含两路12位的ADC,多个定时器和一个PWM定时器,还有两个SPI等标准的通信接口.航向控制器通过W5500以太网芯片以UDP协议接收船端监控软件发送过来的实时航向和设定航向,通过增量式PID算法,计算出设定的喷泵位置的电阻值,通过反馈控制输出PWM波驱动连接喷泵的直流电机,控制喷嘴的位置.喷泵喷嘴的位置通过STM32进行分压法测电阻的方式测得碰嘴的实时位置.
2.1 电阻反馈模块电路设计
喷水推进器位置反馈电阻值范围为0~190 Ω,通过测电压的方式计算出对应的电阻值.图3为电阻反馈模块的电路图.通过REF3030稳压电源芯片,输出标准稳定的3.0 V基准电压,精准度在0.2%.它的最大电压漂移为50 μA,输出电流最大为25 mA.标准电压输出端连接一个由OPA365运算放大器组成的电压跟随器,跟随标准电压值,提高输入电阻值到无限大,起到隔离的作用.标准高精度190 Ω电阻与待测电阻串联起来,待采集的电压经过电阻值分压过后,范围在0~1.5 V,STM32主控芯片自带的ADC进行采集分压,经过一定的处理后计算出对应的电阻值.
图3 电阻反馈模块电路图
2.2 喷泵驱动模块电路设计
喷泵是通过12 V的直流电机驱动液压油进行控制碰嘴的位置,从喷泵左满舵可以到右满舵之间进行调控,实现无人艇的航向控制.笔者采用由大功率MOS管组成的H桥驱动电路DC-30A模块,最高额定电流达到30 A,宽电压输入可达12~30 V.STM32主控芯片PB5和PB6引脚连接模块上的A1、A2引脚,控制电机的转向,A1为高电平同时A2为低电平是驱动电机正转,A2为高电平同时A1为低电平是驱动电机反转,当A1和A2同时为低电平时可使电机进入刹车状态.主控芯片PB7是定时器4的PWM脉冲输出引脚,连接模块上的PA引脚,控制电机的转速.电机驱动模块上的驱动电压采用无人艇上蓄电池电压12 V,主控芯片通过控制电机转动的时间来控制喷泵的位置,从而来实现航向调整.
2.3 以太网通信模块电路设计
航向控制板与船端工控机之间的通信采用以太网通信,通信协议采用UDP协议进行数据的传输.笔者采用的某公司推出的高性能以太网接口芯片W5500芯片,它内部集成了全硬件TCP/IP协议栈、以太网数据链路层和以太网物理层.全硬件协议栈采用逻辑门电路来实现复杂的TCP/IP协议簇,通过它来实现以太网通信具有简单快速、可靠性搞、安全性好等显著优势.主控芯片与W5500芯片通过SPI1接口进行通信,通过外部中断引脚PA12来进行收发数据的中断,提高数据处理的响应效率.通过RJ45接口与船端的路由器相连,实现网络通信.
3 软件设计
3.1 系统总体软件设计
无人艇的航迹控制采用分离控制的思想,通过实时改变无人艇的航向来跟踪设定的无人艇轨迹.航迹控制为最外层控制,航向保持控制为中间控制层,喷泵位置控制为最底层的执行机构控制层.航向控制板完成航向保持功能,同时驱动执行机构驱动喷泵位置转向.船端监控软件根据无人艇的设定轨迹进行航迹跟踪,计算出实时跟踪航向,发送到航向控制板,航向控制板完成.通过分离控制便于模块化调试,简化程序代码的设计.
3.2 主要模块程序设计
3.2.1以太网通信模块
无人艇要实现船端到航向控制板,船端到岸端控制系统可靠、有效、无差错的通信,就需要制定自定义的通信协议.通信协议格式见表1船端通信协议报文格式.
航向控制板上电之后初始化W5500的中断向量表、SPI初始化的配置和加载网络的参数(MAC地址、UDP通信模式、本机IP地址和端口等).当接收到数据后产生中断同时置全局中断标志W5500_Interrupt 为true.main函数检测到中断标志为真之后就去处理对应配置的SOCKET 端口的数据,同时按照表1自定义的通信协议解析出接收到的数据.航向控制板每接收到一帧数据包就需要进行一个对应ID的应答,从而确保数据被接收到.航向控制板向船端发送数据时直接通过调用编写的Write_SOCK_Data_ACK_To_IP()函数,填充应答ID、航向控制软件的目的IP地址和端口,将数据写入到W5500的数据发送缓冲区发送出去.
表1 以太网通信协议报文格式
船端监控软件中利用CAsyncSocket 类进行SOCKET编程完成UDP通信.第一步通过Create()函数创建绑定本机指定端口的SOCKET,并设定为UDP模式(SOCK_DGRAM).第二步调用SendTo()函数,向目的IP地址和端口发送指定长度的数据.接收数据通过OnReceive()中断响应函数,利用ReceiveFrom()函数接收从目的IP地址和端口发送来的数据包.接收到的数据包依据自定义的协议进行解析,从而完成通信.
3.2.2喷泵位置控制模块程序设计
喷泵位置控制模块是负责调整无人艇航向控制的关键,它是基于反馈控制的原理来实现的.喷泵的位置通过电阻值来反映的,喷泵在中间的电阻值为92 Ω,左满舵时位置反馈为2 Ω,右满舵时位置反馈为184 Ω.通过STM32F103自身的ADC模块进行采集位置电阻的分压后计算得来.航向控制板初始化完成之后,判断是否需要调整喷泵位置,需要调整的时,根据测得的喷泵位置电阻值与设定要达到的电阻值相比较后产生的误差来调整执行电机进行正转或者反转.当喷泵位置被调整到与期望的电阻值位置在误差(±1.5 Ω)允许的范围内则结束调整.喷泵位置控制程序流程图见图4.期望的待设定电阻值是航向保持控制器的输出值.
图4 喷泵位置控制程序流程图
3.2.3航向保持器程序设计
无人艇在水上航行受风、浪涌等多方面的影响,无人艇通过直接操作喷泵很难沿着固定的航向航行.航向保持器程序采用位置式PID算法,进行负反馈调节,使无人艇能沿着设定的航向进行航行.无人艇当前航向通过电罗经设备采集后进行处理,由船端监控软件通过以太网实时发送到航向控制板.由STM32作主控的航向控制板通过W5500中断后接收到无人艇的实际航向,位置式PID算法根据设定值比较得到的偏差计算出输出值,输出值经过归一化处理后传递给喷泵位置控制程序,作为其设定值进行喷泵的位置控制,从而实现对无人艇的航向控制.在位置式PID控制算法中,综合考虑无人艇的特点取采样时间为1 000 ms.计算出来的输出值经过归一化处理,平移坐标零点到喷泵的位置零点值92,同时限制输出在12~172,作为喷泵位置的电阻设定值.PID的比例系数、积分系数和微分系数通过实际无人艇水上实验调整到合适的值.程序流程图见图5.
图5 航向保持器程序流程图
3.2.4航迹跟踪模块程序设计
无人艇的实际位置由GPS定位模块测得经度和纬度,航迹跟踪采用渐进直线跟踪的方法,将跟踪路径的关键点的经纬度提取出来,存成路径数组,不同的跟踪路径存成不同的路径数组.航迹跟踪模块程序采用Visual C++ 编写,运行在船端工控机上的控制软件中,根据待跟踪的目标点的经纬度,实时计算出待跟踪航向,从而通过UDP协议编写的Write_SOCK_Data_Message_To_IP()函数发送到基于STM32设计的航向控制板中,让航向控制板完成航向保持的任务.
船端监控软件中根据本无人艇的实际位置与跟踪路径的终点位置计算出实际距离,从而判断无人艇是否航迹跟踪完毕.每一段直线轨迹的跟踪采用航向控制器实时跟踪,由本船实际位置与跟踪路径数组中的下一个待航行的坐标点的经纬度计算出来对地航向角,无人艇周期性的计算待跟踪的航向,然后发送到航向控制板,通过航向控制器来让无人艇进行航向跟踪.无人艇根据设定的位置误差20m,从而判断是否航向到下一个跟踪路径的坐标点,到达之后取出后面一个的路径点作为新的跟踪点.无人艇一个个坐标点位置的跟踪最终完成整个路径的跟踪,从而实现了航迹的跟踪.
通过曲线拟合的方式让无人艇沿着分段的直线跟踪航行,可以使无人艇完成各种复杂的跟踪路径.路径中关键点的选取距离不能过短,否则无人艇航向调整没有结束就要进行新的航向跟踪,从而导致整个路径跟踪的失败.
4 实验结果
将已经完成的航向控制板与无人艇船端设备相连接,进行通电测试后,进行实船实验.测试用的无人艇采用长约7.2 m,质量1.2 t左右,动力采用喷水推进的冲锋艇,测试地点在武汉市黄陂区的木兰湖水域,经实测整定和调试,航向保持器PID控制器的参数选择为,比例系数为13,积分系数0.1,微分系数为10.经过十几天的实船重复试验,无人艇在有风和浪的影响下,依旧可以完成良好的折线航迹跟踪、菱形和圆形路径跟踪、W形和复杂曲线的航迹跟踪,验证了无人艇航迹控制器的稳定性.轨迹跟踪最大误差大约5 m,无人艇在复杂水况下依旧能实现良好的跟踪效果.航迹控制器能沿着指定的路径航行为后续的雷达避碰、自主巡航提供良好的技术保障.
5 结 束 语
本文设计的无人艇航迹控制器,采用以STM32为主控芯片,通过W5500以太网通信模块进行制定自定义协议格式进行通信,编写喷泵位置控制程序和航向保持控制程序,完成了无人艇的航迹有效跟踪.采用分离式的设计方法,将喷泵位置控制、航向保持控制和航迹跟踪分开进行设计调试,实验证明了该航迹控制器跟踪误差在允许的范围内,稳定性良好,具有一定的实用价值.