面向对象Python实现Qt
Node创建
1. python环境配置
为clion添加python2的支持,具体可以参考前面的讲解
在新建的py
文件开头添加环境说明:
| #!/usr/bin/env python
#coding:utf-8
|
修改新建py
文件的权限,添加可执行权限
| chmod +x turtle_control.py
|
2. node源码编写
| import rospy
if __name__ == '__main__':
nodeName = "qt_turle_ctrl";
# 创建ros node
rospy.init_node(nodeName, anonymous=True)
|
Qt UI的创建
1. 窗体继承
| class MainWindow1(QWidget):
def __init__(self):
super(MainWindow1, self).__init__()
|
2. 编写UI
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | # 设置title
self.setWindowTitle("小乌龟控制")
self.resize(400, 120)
# 设置布局
layout = QFormLayout()
self.setLayout(layout)
# 添加控件
self.editLinear = QLineEdit("0")
layout.addRow("线速度", self.editLinear)
self.editAngular = QLineEdit("0")
layout.addRow("角速度", self.editAngular)
self.btnSend = QPushButton("发送")
layout.addRow(self.btnSend)
|
3. 事件添加
| # 添加事件
self.btnSend.clicked.connect(self.clickSend)
def clickSend(self):
pass
|
4. Publisher整合
| # 创建publisher
topicName = "/turtle1/cmd_vel"
self.publisher = rospy.Publisher(topicName, Twist, queue_size=1000)
|
5. 发送消息
| # 创建消息
twist = Twist()
# 填充数据
twist.linear.x = linearX
twist.angular.z = angluarZ * math.pi / 180
# 发送消息
publisher.publish(twist)
|
完整示例代码
MainWindow1.py
turtle_ctrl1.py