![6fbab9c8e863e7f27b479ed8b2703f4d.png](https://img-blog.csdnimg.cn/img_convert/6fbab9c8e863e7f27b479ed8b2703f4d.png)
写在最前
ROS系统一般来说是不需要自己弄界面的, 况且ROS有非常强大的rviz工具. 不过有些时候还是需要界面更加方便. ROS添加图形界面可以使用c++也可以使用python. c++稍微复杂一点, 需要对ros库进行配置, 同时涉及到线程编程, 本此采用python编程, 比较容易一点.
pyqt5
首先呢, 我们需要安装pyqt5图形库, 安装方法很简单, ctrl+ shift+ t弹出终端. 输入以下命令
sudo pip install python-qt5
学习pyqt5
开始GUI编程之前, 请大家自学pyqt5的编程, 本篇就不给大家接受pyqt5的相关知识了, 给大家推荐一个网站: pyqt5中文教程, 请大家对照学习即可.
创建ros节点
1, 在scripts文件夹中, 新建pyGUI.py文件.
2, 粘贴以下代码
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets #qt相关
import sys #系统
import rospy #ros
from std_msgs.msg import String #导入std_msg/string这个数据类型
class Ui_MainWindow(object): #UI类
def setupUi(self, MainWindow): #初始化UI
MainWindow.setObjectName("MainWindow") #设置Mainwindow名称
MainWindow.resize(307, 57) #重置Mainwindow大小
#centralwidget
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
#垂直布局
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
#水平布局
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
#添加按钮
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.pushButton.clicked.connect(self.click) #按钮事件
self.horizontalLayout.addWidget(self.pushButton)
#添加文本框
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.verticalLayout.addLayout(self.horizontalLayout)
MainWindow.setCentralWidget(self.centralwidget)
#初始化ROS节点
rospy.init_node("ros_gui")
#创建发布者
self.pub = rospy.Publisher('chatter', String, queue_size=10) #话题的名称chatter
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
#点击事件
def click(self):
self.pub.publish(self.lineEdit.text())
#国际化
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "发布"))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv) # 创建一个QApplication,也就是你要开发的软件app
MainWindow = QtWidgets.QMainWindow() # 创建一个QMainWindow,用来装载你需要的各种组件、控件
ui = Ui_MainWindow() # ui是Ui_MainWindow()类的实例化对象
ui.setupUi(MainWindow) # 执行类中的setupUi方法,方法的参数是第二步中创建的QMainWindow
MainWindow.show() # 执行QMainWindow的show()方法,显示这个QMainWindow
sys.exit(app.exec_()) # 使用exit()或者点击关闭按钮退出QApplication
3, 具体介绍请看注释, 主要是创建了一个按钮和一个文本框, 使用按钮点击实现publisher.
运行ROS节点
1, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入roscore
,启用整个ROS总节点。
2, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test listener
,启用listener节点。
3, 使用vscode的终端中cd命令,定位到pyGUI.py
文件
cd src/ros_test/scripts/
4, 打开pyGUI
python2 pyGUI.py
![7592e88a9be2472591a76e9e9282668d.png](https://img-blog.csdnimg.cn/img_convert/7592e88a9be2472591a76e9e9282668d.png)
5, 通过点击发布按钮, 即可发现发布成功, 被listener接收到.
![dc0b6b75fc4c247f65d5be8f91e2d5d8.png](https://img-blog.csdnimg.cn/img_convert/dc0b6b75fc4c247f65d5be8f91e2d5d8.png)