Python写机器人上位机
Python写机器人上位机
python界面设计插件
Python写GUI的插件比较多,常用的有Tkinter、pyqt5,本将使用pyqt5写机器人的上位机。
Tkinter
Tkinter 是 Python 的标准 GUI 库,是Python推荐使用的界面创建工具,Python 使用 Tkinter 可以快速的创建 GUI 应用程序。由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
想更多了解Tkinter,可以参考https://www.runoob.com/python/python-gui-tkinter.html
pyqt5
pyqt5是非常优秀的工具,可以快速的开发出机器人的上位机,其与Qt Designer结合,实现界面与代码分离,通过调用界面函数实现相关功能。pyqt5是一套Python绑定Digia QT5应用的框架。它可用于Python 2和3。本教程使用Python 3。Qt库是最强大的GUI库之一。pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法。这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows,Mac OS。pyqt5是双重许可。开发者可以在GPL和商业许可之间进行选择。
pyqt5使用教程
pyqt5主要功能模块如下:
QtCore:包含了核心的非GUI功能。此模块用于处理时间、文件和目录、各种数据类型、流、URL、MIME类型、线程或进程。
QtGui包含类窗口系统集成、事件处理、二维图形、基本成像、字体和文本。
qtwidgets模块包含创造经典桌面风格的用户界面提供了一套UI元素的类。
QtMultimedia包含的类来处理多媒体内容和API来访问相机和收音机的功能。
Qtbluetooth模块包含类的扫描设备和连接并与他们互动。描述模块包含了网络编程的类。这些类便于TCP和IP和UDP客户端和服务器的编码,使网络编程更容易和更便携。
Qtpositioning包含类的利用各种可能的来源,确定位置,包括卫星、Wi-Fi、或一个文本文件。
Enginio模块实现了客户端库访问Qt云服务托管的应用程序运行时。
Qtwebsockets模块包含实现WebSocket协议类。
QtWebKit包含一个基于Webkit2图书馆Web浏览器实现类。
Qtwebkitwidgets包含的类的基础webkit1一用于qtwidgets应用Web浏览器的实现。
QtXml包含与XML文件的类。这个模块为SAX和DOM API提供了实现。
QtSvg模块提供了显示SVG文件内容的类。可伸缩矢量图形(SVG)是一种描述二维图形和图形应用的语言。
QtSql模块提供操作数据库的类。
QtTest包含的功能,使pyqt5应用程序的单元测试
pyqt5基本功能很容易学懂,建议学习中文教程:pyqt5中文教程
Qt Designer使用教程
pyqt5可以调用函数直接创建界面、标签、按钮等,但是代码创建过程中,无法可视化调整框件的位置,Qt Designer可以实现可视化创建界面。
Qt Designer界面如下图所示:左侧是标签、按钮等控件和布局等,右侧是对象查看器,可以在上面修界面上的控件属性,中间的白版是最终的界面。设计好的界面保存为_.ui文件,Python虽然可以直接使用_.ui文件,但是建议通过PyUIC转换为_.py文件使用,当然该文件也可以直接调用函数编写(大佬级)。
学习Qt Designer建议参考:https://blog.****.net/pipisorry/article/details/45999965
ROS通讯机制实现界面与下位机通讯
ROS中最常用的通讯方式话题,其次是服务,最后是动作,通过话题可以接收机器人反馈的关节角度和六维力矩。
当界面设计好后,通过内部的代码使界面具有相应的功能,如下图展示的关节空间规划及用pyqtgraph绘制规划号的数据图。
当点击开始时,通过话题发送规划好的关节角到gazebo或下位机,通过定时器QTimer定时刷新绘图框,实现关节角的在线和关节速度实时显示,如下所示。