杨亮亮 窦岩杰 张晖
摘 要:为了解决工业机械臂示教器软件设计成本高、界面不友好等问题,采用基于ARM Cortex-M7内核的STM32H743为主控芯片,并运用实时操作系统FreeRTOS和emWin图形库设计了一种液晶显示的工业机械臂示教器软件。该示教器软件使用emWin图形库进行软件界面的设计与搭建,采用FreeRTOS操作系统来满足软件多任务的运行,并且能够实现多任务之间的通信与同步,再通过LwIP中UDP协议实现示教器与运动控制卡之间的通信,从而实现示教功能。实验结果表明,该示教器软件显示稳定,性能可靠,界面人机交互功能友好,具有实用价值。
关键词:FreeRTOS;emWin图形库;移植;LwIP;示教器软件
中图分类号:TP23 文献标识码:A
Design of Software for Industrial Manipulator Teaching Pendant
based on FreeRTOS and emWin Graphics Library
YANG Liangliang, DOU Yanjie, ZHANG Hui
Abstract: Aiming at the high software design cost and unfriendly interface of the teaching pendant for industrial manipulator, this paper proposes to use a STM32H743 based on the ARM Cortex-M7 core as the main control chip, and design teaching pendant software of LCD display for industrial manipulator by using a real-time operating system FreeRTOS and emWin graphics library. The emWin graphics library in the teaching pendant software is used to design and build the software interface. The FreeRTOS operating system is used for the multi-task operation of the software, and multi-task communication and synchronization can be achieved. Then the UDP protocol in LwIP is used to realize communication between teaching pendant software and a motion control card, so as to implement the teaching function. Finally, experimental results show that the proposed software has stable display, reliable performance, friendly man-machine interaction and practical value.
Keywords: FreeRTOS; emWin graphics library; transplantation; LwIP; teaching pendant software
1 引言(Introduction)
随着现代制造业的发展和“中国制造2025”战略的推进,智能化制造水平不断提升,制造业对工业机械臂的需求越来越大。工业机械臂的主要应用场景有机械加工、码垛、焊接、喷漆等,目前国内工业机械臂在这些场景的运用过程中主要通过示教再现的方式进行控制[1-2]。
常见的工业机械臂示教器软件一般基于嵌入式系统进行开发设计,目前主流的嵌入式操作系统有μC/OS-III、FreeRTOS、RT-Thread等,相比μC/OS-III等商用收费的操作系统,FreeRTOS是一個源码公开的免费实时操作系统,能够很方便地移植到各种微型处理器上,并且降低了开发成本。嵌入式中人机交互GUI图形界面软件有Qt、UCGUI等,由于软件运行环境不同或者图形用户界面软件功能有限,因此很难达到完美的效果[3-4]。图形软件库emWin提供的接口函数使得嵌入式图形界面开发变得更加容易,设计简单,对开发要求低并且资源丰富[5-6]。
通过上述分析,为了降低软件的开发成本、周期与资源需求等,采用FreeRTOS与emWin组合的方式开发嵌入式机械臂示教器软件,既能够保证实现多任务运行,又能够提供一个友好的人机交互界面。以ARM Cortex-M7内核芯片STM32H743作为工业机械臂示教器软件的主控芯片,集成RGB接口的7 寸GT911电容屏进行液晶显示,在实时操作系统FreeRTOS上建立多任务,并通过emWin图形库搭建GUI界面,再选用LAN8720A作为网口通信PHY层芯片,实现上位机示教器软件与下位机运动控制卡之间的UDP网络通信,从而满足工业机械臂示教器软件的设计要求。
2 FreeRTOS操作系统和emWin图形库(FreeRTOS operating system and emWin graphics library)
2.1 FreeRTOS操作系统
FreeRTOS是一款可移植的、开放源代码的微型实时内核,它免费下载,免版税,并可用于商业应用。它为多种不同的处理器架构和开发工具提供移植包,并且提供多个例程用来展示内核特性,加快学习进程,并允许“开箱即用”式的开发。作为一款轻量级操作系统,FreeRTOS提供了任务管理、时间管理、信号量、消息队列、内存管理、记录等功能,可基本满足较小系统的需要[7]。
FreeRTOS的内核支持设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS为可剥夺型内核时,每个任务可根据不同重要程度被赋予一定的优先级,优先级高的任务具有CPU优先使用权,因此总是保证处于就绪态的、优先级最高的任务先运行,这样可以满足系统的实时性要求。而当FreeRTOS为非可剥夺型内核时,处于就绪态的高优先级任务只能等当前运行任务运行完成后主动释放CPU的使用权才能获得运行,CPU的运行效率被提高。因此,在本文工业机械臂示教器软件设计的过程中,将FreeRTOS的内核设置为可剥夺型内核,这样能够满足工业机械臂的实时性,可以在示教器上实时地显示机械臂的姿态以及实现特殊情况下的急停操作(因优先级最高,可剥夺型内核可以保证急停任务优先执行)。
2.2 emWin图形库
emWin是一种复杂高效的图形用户界面,可工作在单任务或多任务环境中,具有模块化的特点,并采用分层结构。emWin的主要功能有:
(1)绘制2-D图形,如绘制椭圆、弧线和线图等。
(2)显示位图文件,提供工具将JPG图片转换为C语言的形式。
(3)显示文字,支持多国文字,如中文、英文。
(4)处理用户输入,如外接键盘输入及触摸屏的人机交互输入。
(5)提供各种窗口对象。这些窗口对象为图形控件,如常见的菜单控件、窗口控件、按键控件等,由于这些控件的存在能够非常容易地制作成简洁的控制界面,降低了开发周期和开发难度[6]。
emWin的这些功能为开发者提供C语言的接口函数,也解决了人机交互应用的设计难点,并且emWin对内存的消耗较低,能够满足工业机械臂示教器软件的要求。
emWin主要分为硬件层、驱动层、图形库层和应用层四个层次,如图1所示。本文示教器软件主要是在emWin应用层上进行开发,编写用户应用程序实现人机交互的功能。示教器软件界面显示是通过调用图形库层提供功能函数接口,然后各个功能函数调用驱动层的驱动函数去实现底层硬件的显示功能。
3 FreeRTOS操作系统与emWin图形库的移植
(FreeRTOS operating system and the transplantation of emWin graphics library)
3.1 FreeRTOS操作系统的移植
本文是针对STM32H743IIT6芯片进行移植,使用的编译软件为Keil 5。首先在工程中添加FreeRTOS官方源码中的Source文件。FreeRTOS的实现主要由list.c、queue.c、task.c
和corutine.c组成,其中list.c是链表的实现源文件,主要给内核调度器使用;queue.c是队列的实现源文件,支持中断和信号量的控制;task.c任务实现是各个任务使用各自的堆栈,支持抢占式调度;而corutine.c任务实现是各任务共享一个堆栈,使得RAM需求缩小[7]。在本文中主要使用前三个源文件,同时还修改FreeRTOSConfig.h头文件对FreeRTOS进行裁减,应用于不同的处理器平台。在配置FreeRTOSConfig.h
時将宏configUSE_TICK_HOOK、configUSE_MALLOC_FAILED_HOOK和configCHECK_FOR_STACK_OVERFLOW定义为0。FreeRTOS中大量使用了内存管理,比如创建任务、信号量、队列等会自动从堆中申请内存。FreeRTOS提供了内存管理函数来申请和释放内存,一共提供了五种内存分配方式。为了避免造成内存碎片化,使用提供的heap_4.c文件,该分配方式能够合并两块相邻的内存空间,使之变大,在使用时能够直接调用函数pvPortMalloc()和vPortFree()来动态申请和释放内存。
3.2 emWin图形库的移植
emWin在特定的硬件平台上运行,需要为emWin提供与底层硬件操作相关的函数接口,主要为内存管理接口、液晶驱动接口和触摸屏接口。移植过程首先添加emWin 5.44版本的源文件和配置文件[8-9]。内存管理接口主要配置GUIConf.c
和GUIConf.h文件,修改配置从外部32 MB SDRAM分配emWin动态内存为8 MB,并设置支持多任务和ARGB。显示驱动接口主要配置LCDConf.c和LCDConf.h文件,配置为多帧缓冲功能,同时设置屏幕显示区域大小为800×480。触摸屏接口为Gt9xx.c文件,软件通过FreeRTOS创建一个触摸任务,30 ms读取一次触摸信息,因此要配置关闭触摸中断的方式。
4 示教器软件设计(Design of teaching pendant software)
4.1 主要框架
机械臂示教器软件具体实现示教功能的框图如图2所示。本文主要是针对示教器软件进行设计,再通过网口方式与机械臂运动控制卡进行通信,然后运动控制卡通过驱动器来控制工业机械臂进行运动。
示教器的硬件与运行环境搭建好后,软件功能的总体框架如图3所示。其主要功能有菜单栏包括文件(新建、保存等)、编辑(剪切、复制、粘贴等)和帮助;模式设置包括运行模式(单步、单次、循环运行)、运行速度和启停;指令显示包括显示区(显示已经编辑好的指令)、删除(删除指定指令)和清空(清空所有指令);指令编辑区包括运动指令(关节、直线、圆弧、圆等的编辑)、逻辑指令(延时、Home点设置等的编辑)、码垛、跟踪和通信;运动与参数设置包括关节运动(按键直接控制关节运动:按下关节移动,释放停止运动)、D-H参数(针对不同机械臂需要改变D-H参数并保存)、最大运动速度(设置每个关节最大的运动速度、加速度等)和回零速度;提示信息与数字键盘主要显示运行过程中的各种信息(错误信息、运行成功等)以及数字键盘用于指令编辑区的指令输入和运动参数的设置等。
根据软件的功能,实时操作系统的任务主要划分为数据处理与传输任务、人机交互控制任务、文件与数据存储任务和界面刷新与显示任务。为了保证数据处理和传输的实时性,数据处理与传输任务处于最高优先级。界面刷新与显示任务主要包括文本、按键和图片等的显示与刷新,由于采用的emWin图形库占用系统资源较大,并且任务时间长,因此设置为最低优先级。考虑到人机交互的响应时间与速度问题,将人机交互控制任务的优先级设置第二优先级,文件与数据存储任务设置为第三优先级。因此,示教器软件系统任务的优先级从高到低分别为数据处理与传输任务、人机交互控制任务、文件与数据存储任务和界面刷新与显示任务。
系统任务之间的通信与同步是通过任务通知与消息队列进行的,如图4所示。
4.2 网络通信
LwIP适用于嵌入式的开源轻型TCP/IP协议栈,可以移植在FreeRTOS操作系统平台上,占用ROM与RAM资源较少,支持较为完整的TCP/IP协议且便于裁减、调试,被广泛应用在32 位控制器上,因此本文的示教器软件采用LwIP进行网口通信[10-11]。LwIP在FreeRTOS操作系统上能够使用NETCONN API与Socket API编程,相较于RAW API编程会更加简便。由于FreeRTOS上能够实现多任务,因此可以单独创建一个任务处理LwIP数据的收发,再通过消息队列(邮箱)实现多个任务之间的通信。Socket通常被称为套接字,在当前网络通信中主流程序设计都是使用Socket进行编程的,因为它简单易用,是一个网络编程标准,能够在不同平台上移植。工业机械臂示教器软件选用LwIP的Socket API编程,在Socket中,通过Socket套接字记录网络的连接情况。TCP/IP协议栈常用通信协议有TCP和UDP,TCP是一种稳定的传输层协议,能够提供面向连接、可靠的传输服务,而UDP则提供一种不可靠的、无连接的服务,但是UDP相对于TCP传输速度快,没有TCP的握手、确认、重传等机制,因此针对示教器软件要求实时显示机械臂的姿态,在这种实时性要求较高的场合中选用UDP协议。
工业机械臂示教器软件套接字使用如下:
第一步,创建套接字:
sock=socket(AF_INET, SOCK_DGRAM, 0);
创建套接字,socket第一个参数为套接字协议簇,对于TCP/IP协议,该值为AF_INET;第二个参数为套接字使用的服务类型,对于UDP协议,该值为SOCK_DGRAM(若为TCP协议,该值为SOCK_STREAM);第三个参数为套接字使用的协议,对于IPv4中的TCP和UDP,该值均为0。
第二步,套接字绑定本地网络信息:
/* udp_localaddr一个sockaddr_in的结构体*/
udp_localaddr.sin_family=AF_INET; //协议簇
udp_localaddr.sin_addr.s_addr=INADDR_ANY; //IP地址信息
udp_localaddr.sin_port=htons(50000); //本地端口
memset(&(udp_localaddr.sin_zero), 0, sizeof(udp_localaddr.sin_zero)); //8字节保留未用
bind(sock, (struct sockaddr *)&udp_localaddr, sizeof(struct sockaddr)); //绑定操作
经过上述两步,已经将sock与本地绑定好,就可以使用UDP进行通信了。UDP通信时发送数据调用Socket API中sendto函数:
sendto(sock, Send_data, send_data_len,0, (struct sockaddr*)&serveraddr, sizeof(struct sockaddr_in));
该函数中sock为套接字;Send_data为存放要发送数据数组的起始地址;send_data_len为发送数据长度;第四个参数为发送时的一些处理,比如外带数据等,此处无处理设置为0;serveraddr为sockaddr结构体,记录了远端运动控制卡的IP地址和端口;最后一个参数为sockaddr结构体长度。
接收时调用recvfrom函数:
recv_data_len=recvfrom(sock, Recv_data, recv_data_maxlen,0, (struct sockaddr*)&serveraddr, &addrlen);
与上述sendto参数基本一致,其中recv_data_len为接收数据长度,Recv_data为存放接收数据数组的起始地址,recv_data_maxlen接收数据长度最大值。
4.3 软件界面显示
工业机械臂示教器软件界面如图5所示,其中數字按键是弹窗式的,点击要编辑的编辑框就会弹出数字键盘,如图6所示。此数字键盘界面是模态的,只有按键界面点击Ok按键结束后才能对其他界面进行操作。
5 应用(Application)
5.1 平台搭建
工业机械臂示教器软件应用平台的搭建如图7所示,主要包括四轴SCARA机械臂本体、驱动器、运动控制卡、机械臂示教器软件等。
5.2 机械臂示教器软件的应用
工业机械臂运动时需要根据初始位姿和终点位姿,从起点运动到终点,但是一般情况下在实际使用过程中无法事先获取始末位姿。机械臂示教器软件一般是示教再实现机械臂的运动,首先将机械臂运动到起始位置,然后通过示教器软件获取位姿并记录下来,再移动到终点位置,示教器软件获取位姿并记录下来。通过获取的始末位置和姿态,再选择运动方式是直线或者圆弧,不断重复地从起始位置运动到终点位置。
如图5和图6所示,在使用机械臂示教器软件示教时,先在运动与参数设置区设置好机械臂的参数,如D-H参数(在List display中设置并显示,如表1所示)、最大运动速度(在Maximum speed中设置并显示)等,再关节输入,通过关节运动指令运动到起始点,此时机械臂的位置和姿态都会显示在指令编辑区的运动指令处。机械臂的位置会显示在Linear move指令窗口的编辑框x、y、z、rz中,此时点击Ok按钮即可在Code Edit处保存并记录当前位置,再用同样的方法保存并记录终点位置,如此便可实现示教重现了。在运行时,需要选择运行模式,如单步运行Step,以及运行速度模式,如60%,再点击Start按钮,软件会对每行指令进行编译解析,如果指令出错会在提示信息区显示错误信息,如果没错会在提示信息区显示编译成功,并下发指令开始运动,如图8所示。
6 结论(Conclusion)
本文利用FreeRTOS操作系统与emWin图形库在STM32H743嵌入式平台上实现了工业机械臂示教器软件的设计,描述了硬件平台上的移植过程、软件界面的搭建与实现以及上下位机之间的UDP通信。示教器软件使用编译器Keil 5
进行编写、下载与调试,通过应用于工业机械臂的实验,证明了示教器软件多个任务运行和同步可靠,反应灵敏,具有高效性;同时有一个简洁友好的人机交互界面,并且可以实现机械臂的关节、直线、圆弧等多种运动方式;通信速度稳定可靠,能够满足工业机械臂的实时显示状态性能,可以很好地运用在实际制造加工过程中,能够降低加工生产的成本、开发周期与资源占用。
参考文献(References)
[1] 申淑丽,黄昕,祝润泽,等.基于Linux系统的通用工业机器人示教器开发[J].机床与液压,2021,49(03):63-68.
[2] 田国富,李晓婷.工业机器人示教器人机界面的设计[J].机械制造,2017,55(12):29-31,35.
[3] 谢鹏程.基于STM32和FreeRTOS的独立式运动控制器设计与研究[D].广州:华南理工大学,2012.
[4] 刘建强,李建义,梁力水,等.基于μCOS-Ⅲ+EMWIN的自动驾驶系统设计[J].廊坊师范学院学报(自然科学版),2018,
18(04):38-42.
[5] 陈新,蒲庆文.基于emWin图形库的电动汽车液晶仪表设计[J].仪表技术与传感器,2013(07):105-107,110.
[6] 肖林京,于鹏杰,于志豪,等.基于STM32和emWin图形库的液晶显示系统设计[J].电视技术,2015,39(01):39-42,50.
[7] 张龙彪,张果,王剑平,等.嵌入式操作系统FreeRTOS的原理与移植实现[J].信息技术,2012,36(11):31-34.
[8] 陈继华,汤涛林,李国栋,等.emWin在stm32和ra8875中的嵌入式设计[J].电子设计工程,2019,27(08):156-160,165.
[9] 张维通,王润洁,康迂勇,等.基于EMWIN和ARM Cortex-M4内核的数字示波器[J].电子世界,2018(12):13-15.
[10] 张文亮,田沛,刘晖,等.基于FreeRTOS的lwip协议栈的移植与测试[J].自动化技术与应用,2015,34(11):25-29.
[11] MENG F R, HUO Y, ZHOU Y. Network multifunctional substation with embedded system in coal mine[J]. Journal of China University of Mining & Technology(English Edition), 2006(02):236-240.
作者簡介:
杨亮亮(1978-),男,博士,副教授.研究领域:高速高精运动控制.
窦岩杰(1996-),男,硕士生.研究领域:机械臂运动控制.
张 晖(1997-),男,硕士生.研究领域:嵌入式系统设计.