基于Simulink 的水下机器人设计研发
2022-06-04胡斯阳
胡斯阳,周 俊
(上海工程技术大学 机械与汽车工程学院,上海 201620)
0 引言
海洋蕴含着丰富的资源,是人类生存的第二空间,合理利用、开发和监测海洋资源对于人类社会的可持续发展将起到巨大的作用。水下机器人为人类进行海洋资源的开发提供了强有力的工具[1]。水下机器人它是接近人类所不能到达的水下空间的唯一手段,其应用范围很广[1]。但是我国水下机器人起步相对较晚,还处于行业发展初期,对操作简单、功能齐全的水下机器人进行快速设计的方式还有待深入研究。
基于Simulink 建模与仿真,使用MATLAB/Simulink 软件的MBD 技术对水下机器人的各模块进行研究和设计。首先在计算机上通过Simulink 搭建模型;然后用Simulink 进行模型的仿真;再根据目标需求对仿真结果进行评价及验证;当满足设计要求后,利用TSP 工具生成嵌入式代码。通过Simulink Coder/Embedded Coder 等模块将代码进行优化和测试来实现控制算法的开发和验证,最后将代码传输至目标硬件开发板中对硬件进行调用,实现水下机器人的各模块的快速设计,提高设计的效率[2]。
1 水下机器人硬件的选取及模块设计
水下机器人本体硬件主要由电控模块、传感器模块、电源模块、机械臂模块和动力模块组成,其结构分析图如图1 所示。
图1 水下机器人的设计模块
电控模块的硬件主要包括Arduino 开发板、扩展模块和电子调速器,负责接收传感器的信号并通过电子调速器来调节电机的电压大小来调节电机的转速。
传感器模块的硬件主要包括流速传感器、陀螺仪、温度传感器、姿态传感器等,不同的传感器能及时将不同的信号传输给主控制板,从而让主控制板通过程序对其他的系统起到宏观的调控。
机械臂模块的硬件主要包括亚克力板和防水舵机,机械臂由无线通信模块进行控制,可对一定样品进行抓取、回收或者放置。而电源模块主要由锂电池和继电器模组组成,能够实现变压和供电,为各个系统稳定的持续供电。
动力模块主要由两种型号不同的推进器组成,一种叫游离推进器负责在水平面上给予无人机动力,另一种叫垂直推进器负责维持无人机在垂直方向上的动力,游离推进器的动力主要受到流速传感器的控制,垂直推进器的动力受姿态传感器和陀螺仪的控制。
推进系统由游行推进器和垂直推进器组成。在经过多方面的考察评估后,本系统采用无刷电机作为推进系统的电机。无刷电机电动机的定子绕组多为三相对称星形接法,与同三相异步电动机十分相似,但无刷直流电动机是以自控式运行的,所以不需要另加启动绕组,也不会在负载发生突变时产生振荡或失步。
本设计中的主控制板采用Arduino Mega ADK 开发板,其引脚资源丰富,从低端的LED 控制到要求比较高的用户图形界面设计都能满足[3]。而且Arduino开源电子平台使用方便,同时,MATLAB/Simulink 对Arduino 提供了丰富的硬件支持包,用户可根据实际需求进行选择。
2 基于模型的设计建模与仿真
2.1 无刷电机的模型仿真与建立
使用MBD 技术对无刷电机模块进行设计,先模拟无刷电机在正常供电下的运转,采用稳定的电流电压给电机供能,而Simulink 中Pulse Generator 模块可以用于产生脉冲信号,因此考虑使用Pulse Generator模拟电机输出的脉冲信号进行信号源输入,并预设0 ~2 s 内电机输出频率为50 Hz,幅值为1,占空比为0.5 的脉冲信号(100 个脉冲),其仿真模型图如图2 所示。
图2 无刷电机仿真模型图
根据Simulink 库中的范例可以对无刷电机工作进行仿真与测试,以下模型测试了无刷直流电机在一定条件下的速度。其速度与时间关系图和扭矩与时间关系图(图3),可以得出负载扭矩是一个恒定值,始终与轴的旋转方向相反的结论。
图3 速度与时间关系图和扭矩与时间关系图
在根据模型的仿真结果规定了电机的速度与扭矩后,运用TSP 工具箱进行代码的生成和运行。完成代码的生成后,再对Arduino 中的电子调速器以及PWM 信号的取值进行优化,并且根据输入与速度的变化规定电机在不同工作条件下合适的信号输入。
2.2 水下机器人主要部件的建模与仿真
机械臂与传感器的设计充分利用MBD 技术的优势,通过Arduino 的硬件支持包提供的元件与引脚模块,快速完成模型的建立与调试,为设计过程提供便利[4]。
机械臂的运动主要通过伺服电机的转动带动机械结构的运动来实现(图4)。先通过Simulink 中的Arduino 硬件支持包(TSP)直接在Simulink 中建立伺服电机的模型,如图5 所示。单个伺服电机模型将Arduino 模拟引脚A0 的值映射为舵机转动角度,对舵机的角度实施控制。因为模拟引脚A0 的输出范围为0 ~1023,为了维持舵机转动在0 ~180°内,从Simulink Math Operations 库将Gain 模块拖到模型中,并将其放在连接Analog Input 和Standard Servo Write模块的线上,将增益模块的K值设置为0.1760。
水下机器人通过无线模块建立通信系统,使用WiFi 模块来进行模型建立与仿真,如图5 所示。串口WIFI 模块一般会包含射频电路、MAC 地址、无线安全协议、WIFI 驱动和协议、等多个部分。其功能是将串口或TTL 电平转换为符合WIFI 无线网络通信标准的数据传输模块,从而实现无线数据传输、采集或控制。
图5 WIFI 模块仿真模型图
在Simulink 中使用工具栏上的Deploy to Hardware 按钮,等待WIFI Shield Link LED 亮起,若亮起则表示已成功连接到WIFI 网络。再打开TCP/IP 的主机发送模型,使用TCP/IP 发送块,确保IP 地址和端口号与之前指定的WIFI Shield 设置相匹配。主机模型使用Instrument Control Toolbox 中的模块向目标硬件发送和接收TCP/IP 或UDP 消息。
对于水下机器人传感器的使用这里采用一种测量水温的温度传感器来制作传感器的模型,Simulink中Arduino 硬件的支持包能使用I2C 接口与基于I2C的设备通信。所以选择用数字温度传感器来通信,该传感器通过I2C 总线与Arduino 板连接。默认情况下,它将发送分辨率为0.0625 ℃的12 位温度值。还可以将此传感器配置为提供13 位温度测量的扩展模式,具体操作如下。
对温度传感器模块的系统进行建模(图6),在此模型中数据类型转换模块将读取的数据转换至int16来处理温度。Gain 模块用于将int16 数据右移4 位(除以16)并将12 位数据与0.0625 的传感器分辨率相乘,以获得相应的温度(摄氏度为单位)。值为1 和0 的两个Constant 模块与Switch 模块一起使用,将温度读数与27 ℃的阈值进行比较。当温度传感器读数超过指定的温度阈值时,这会在引脚13 处点亮Arduino 的板载LED。
图6 温度传感器仿真模型图
2.3 模型代码的生成
在完成水下机器人的主要部件的建模与仿真后,需要完成模型向代码转化,由模型生成代码的过程如图8 所示。首先通过rtw build 命令将Simulink 模型转化为rtw 文件,然后用Simulink Coder/Embedded Coder 中的目标语言编译器(Target Language Compiler)将rtw 文件转换各类源文件(主要为C 文件,h 文件),在模型的源代码生成之后,使用Simulink 提供的模版自动生成makefile 来编译各链接得到目标文件,最终将目标文件的程序代码通过Arduino IDE 下载到开发板中进行仿真或实机运行[5]。如图7 所示。
图7 代码生成流程图
2.4 实验结果与分析
在完成模型向代码的转化后,需要将代码烧录进Arduino 开发板、或仿真平台,验证代码的可靠性,本设计采用兼容Arduino 的一个模拟仿真平台对生成的代码进行适用性的验证,其仿真的模型如图8 所示。在进行模拟仿真后确认了生成的代码能够按照规定和需求对硬件实监控与调整,达到了设计的目的和需求。
图8 Arduino 各模块模拟仿真
基于模型的设计方法,本设计通过调试数学函数模型建立目标模型,并进行仿真与调试,在仿真结果符合需求的前提下运用TSP 工具进行代码的自动生成与优化,系统由MATLAB 发起连接请求并与Arduino 建立连接后,开始数据的采集、分析与显示。Arduino 端的数据预处理模块功能如由MATLAB 来完成,则可省略,只需将所有原始数据由串口输出即可。结果是优化了开发产品的过程,避免了在Arduino中的繁琐的编程工作。但是MATLAB 的数据分析与处理模块中涉及算法也需根据系统需求设计,不能完全依赖于所设计的模型。使用这种设计研发方式节约了编写代码和优化代码的时间,是一种可推广的研发方式。
3 总结
基于Simulink 的模型建造和仿真与Arduino 合作设计产品结合起来有助于快速建立系统研究所需的仿真环境。从设计阶段就可以通过模型仿真对设计思想进行早期验证,从而降低传统开发流程中到了测试阶段发现问题再回头修改设计并重新进行测试流程的风险,而且自动代码生成消除了手写代码引入的bug,提高了产品开发和研究效率[6]。