基于ROS的救援船体机器人控制系统设计
2018-02-26吴志鹏廖志青冼嘉媚曾奕雄
吴志鹏,廖志青,冼嘉媚,曾奕雄,何 威
(华南理工大学广州学院,广东 广州 515000)
0 前言
中国南方地区夏季多雨,特别是长江流域容易发生洪灾;东南沿海地区还会受到台风的影响,容易引发洪水、泥石流等次生灾害;夏季城市容易发生内涝。由于洪涝灾害的危害性很大,它不仅对经济造成严重的损失,而且还夺取了人类的生命。为了解决这个问题,设计了救援船体机器人,由第一代清洁船体机器人(图1)迭代升级,将垃圾清洁装置改为机械臂、抛射器和收绳器,由抛射器加机械臂的结构精准抛射出救生圈,对溺水人员实施救援。
本救援船体机器人中的控制系统有效地解决了救援船体的控制问题,致力于更好的后期算法开发。系统使用基于Linux操作系统上的ROS机器人操作系统,下位机使用基于Cortex-M3内核的32位高性能微控制器STM32F103ZET6为主控制芯片,为底层电机等运动原件提供控制[1]。救援船体机器人所要求的功能为救援动作的实施,如救生圈抛置、机器手抛掷、船体运动、图像传输、路径处理等功能,通过对各项功能进行分析得出将ROS机器人操作系统移植到救援船体机器人上的方案是可以实施的,并且将大大降低对执行机构信息处理的要求,转为对微型电脑的要求。
对于救援船体机器人使用ROS机器人操作系统,一是便于搭建框架整体,二是便于日后升级迭代产品[2],使救援船体机器人可以与时俱进,增添不同模块,适用于不同水域不同情况。下面对设计过程进行阐述。
图1 初代清洁船
1 救援船硬件系统设计
为了救援船实现图片传输、路径规划、船体控制和机械臂控制等功能,下位机芯片使用STM32F103ZET6控制芯片。控制方式是通过上位机PC端发出协议拟定的命令到下位机STM32串口,下位机STM32已经写好指定动作,如收到0x7F010X120103BCC的串口数据则螺旋桨正转等,同过上位机发送不同的指令,实现对清洁船体控制。
1.1 下位机芯片STM32F103ZET6的开发
图2所示为STM32F103ZET6开发系统图,该芯片具有64KB SRAM、512KB FLASH、2个基本定时器、4个通用定时器、2个高级定时器、2个DMA控制器(共 12个通道)、3个 SPI、2个 IIC、5个串口、1个USB、1个 CAN、3个 12位 ADC、1个 12位 DAC、1个SDIO接口、1个FSMC接口以及112个通用IO口[3]。
STM32特点:外设丰富,STM32拥有包括FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等众多外设及功能,具有极高的集成度;优异的实时性能,84个中断,16级可编程优先级,并且所有的引脚都可以作为中断输入;杰出的功耗控制。STM32各个外设都有自己的独立时钟开关,可以通过关闭相应外设的时钟来降低功耗;支持SWD和JTAG两种调试口。SWD调试可以为你的设计带来跟多的方便,只需要2个IO口,即可实现仿真调试。该开发板的部分参数如下:
(1)板子外形 10 mm×8 mm;
(2)主芯片 STM32F103RCT6(64脚);
(3)电源RTC后备电池座;
(4)2个USB取电口;
(5)5 V电源接口;
(6)3.3 V电源接口;
外扩8MB SPI FLASH(W25Q65)和外扩EEPROM 24CO2 SPI;
主芯片 STM32F103RCT6(64脚);
芯片 FLASH:256K和芯片SRAM:48K.
图2 STM32 F103开发系统图
1.2 硬件总体框图设计
为了更好地阐述救援船硬件部分内容,将救援船系统划分为几大系统。救援船体系统由上位机系统、下位机主控系统、机械臂控制器、船体运动控制器组成的控制系统,系统总体框图如图3所示。在下位机各个系统配置了多种编码器、传感器,用于船体、机械臂等。并且设置远程遥控器和图传模块,以便进行人机交互的功能。
图3 硬件总框架
2 机械结构设计
在对机器人的设计研究的过程中,主要是根据机器人所要实现的三个功能进行设计,分别是:抛射救生圈功能、回收救生圈、远程遥控功能。
在初代清洁船的基础上将传送带等清洁功能移除,改为一个三轴机械臂,再在机械臂上安装一个抛射器,抛射器安装有一个气压发射装置,通过触动开关,抛射一个带有绳子的救生圈,通过机械臂关节的移动来改变抛射器的抛射角度,从而达到精准救援,再在救援船底部安装一个由直流无刷电机组成的收绳器,通过电机正转,达到收绳的功能。
船体左右对称分布,船架则为支撑整个船体,船架通过六个定点连接两侧浮筒,限制多个自由度,防止上下左右出现松动情况,更加稳固。对于受力负荷过强的部分船架(如:传动机构板块、调节机构板块)采用三角形定理,增加支架,使得承受负载增大不易变形。船架材料采用硬铝为主,合金钢为辅(部分高强度部位),用以减轻整体船重,同时长时间在水中作业要避免被腐蚀。螺旋桨动力部分负责驱动机器人前进(如图4),螺旋桨的转向由另一个直流无刷电机负责,动力部分安装有伺服驱动、16位绝对式编码器、霍尔传感器来确保转向准确。
图4 动力系统
3 控制系统软件设计
在操作者控制下,操作者通过远程摄像头了解方位与救援需求,通过远程遥控器发射指定信号到PC端,经过ROS信号触发,发布消息到串口节点,再由串口节点发送指令到STM32控制板中,实现控制精准抛投器抛射救生圈。通过摄像头判断出溺水人员已经成功抓牢救生圈时,通过远程遥控器发送指令到PC端,再由PC端发布消息到串口节点,由串口节点发送电机回收指令,使收绳器启动,回收救生圈。
3.1 控制系统初始化
当PC机启动时,预先写好在Service文件中的launch文件会启动,即ROS各个节点程序启动,开始于下位机通讯,发送指令初始化下位机stm32,包括:时钟、GPIO、串口、LCD、中断及其分组、延时函数、定时器、字库等的初始化。后等待遥控器的指令,启动救援船体机器人。
3.2 串口通信
通信部分主要由USART利用STM32内部串口的资源来实现PC端ROS操作系统和下位机的数据传递指令的下达,摇杆遥控带接收器采用433通讯传输方式发送数据到PC端ROS操作系统。在linux系统上使用ROS平台进行上层与下层通讯,使用编程语言C++为基础,调用serial库与下位机STM32进行串口通讯。定义发送至下位机的信息,即x、y轴的速度以及方向角,从ROS中的cmd_vel主题获取发布速度以及方向角,并将方向角转化为四元数,将以上所有信息加上两个停止位存储至列表。初始化串口信息,设置端口号、波特率、通信字节位数等。首先测试是否能成功连接串口,若成功则将存储速度以、方向四元数以及停止位的列表发送至下位机,如不成功则抛出响应问题。接收下位机传输至上位机的信息,对其信息进行解析,可以初略得出救援船体机器人当前所在位置,使用其他传感器更加精确定位。
3.3 图传模块功能实现
图传模块功能,通过5.8 G,200 mW图传发射器,发送摄像头接收到的图片数据,该发射器有40个频点,频率范围在5.645 GHz~5.945 GHz,电压输入范围7~24 V.图传接收器4.3寸接收显示一体机,内置灵敏度5.8 G接收器,接收频率范围为5.645 GHz~5.945 GHz,32频点与5.8 G图传发射器匹配,要求摄像头的图像制式为NTSC内置天线电池。
3.4 船体控制功能、机械臂控制功能实现
船体控制功能,下位机已经封装好各个不同执行机构的动作,如螺旋桨正转反转、机械臂旋转、抛射器发射等,通过遥控器和图传模块进行远程人机交互操控,操控手柄选择螺旋桨旋转等不同动作,操控手柄发送信号到PC端ROS机器人操控系统通过USART通讯将人机交互结果发送至下位机STM32实现船体的位移。
STM32接收程序部分如下:
void USART1_IRQHandler(void)//′串口1中断程序
{
u8 Res;
if(USART_GetITStatus(USART1 , USART_IT_RXNE)!=RESET) //接收中断
{
Res=USART_ReceiveData(USART1); //读取
if(Res==1)
{
ZX0=0;
ZX1=1;
}
else if(Res==2)
{
ZX0=1;
ZX1=0;
}
else if(Res==3)
{
}
else if(Res==4)
{
POWER=0;
OUT0=1;
YEL=0;
BLU=0;
OUT1=0;
YEL_K=1;
BLU_K=1;
OUT1_K=1;
POWER=1;
}
3.5 路径规划功能实现
路径规划功能,因为救援船体上安装要激光雷达等多个传感器,可以检测出湖面礁石、障碍物等,通过传感器下位机stm32串口返回的数据,救援船体机器人传感器模块ROS节点,使用GPS、imu以及下位机传输上来的里程计能进行更加精确的位置定位,使用激光雷达可以进行躲避障碍物的功能。安装GPS,imu相对应的驱动,使用C++编写ROS节点,发布节点消息,使用ekf算法对GPS、imu以及里程计发布的消息进行融合得到更加精确的位置定位。激光雷达进行避障,在确定目标位置时使用global_costmap对总路径进行规划,并不断更行,local_costmap本地路径规划,在救援船体机器人运行时出现障碍物的时候能及时规划躲避路径,完成躲避障碍物的功能。使用摄像头进行图像传输,安装响应节点,打开摄像头,并且使用SSH远程连接,则可以进行远程图像传输。可以实时的对水面以及救援船体机器人进行实况转播,能及时了解船体以及水面当前情况。通过ROS节点处理,可以轻松避开障碍物等阻碍船体运行的物体,实现路径规划的功能。主要通过激光雷达实现即时的规划躲避障碍物,防止救援船体与障碍物相撞,损坏船体。ROS有自带navigation导航包,通过调用导航包,可以检测出船体附件环境等,通过节点反馈,避开路障实现路径规划的功能如图5所示。
图5 避障测试
救援船体机器人平台将运行ROS的PC作服务器端,主要负责复杂的计算和路径规划等复杂程度不一的任务。救援船体机器人由二级功能节点和任务控制等模块组成,这样系统可以在智能化和可靠性上都能满足救援船体机器人的需求。ROS机器人操作系统平台可用于开发一系列机器人系统,也可用于开发多机器人系统和非工业机器人系统,如足球机器人系统、服务类机器人系统、无人机系统等。
4 结束语
救援船体机器人用STM32下位机和机器人开源操作系统ROS设计了一个救援船体机器人系统。该系统首先由机器人平台主控制器对多种传感器进行信息采集和整合,通过STM32各传感器采集数据向上位机发送当前数据然后利用串口通信传输,并能远程控制救援船体机器人进行精确移动,最后对救援船体机器人进行了系统调试和测试,通过对救援船体机器人进行参数校核和完善程序等过程,使机器人系统达到了预期的设计要求。