面向对象Python实现

Subscriber整合

1. 添加subscriber创建

1
2
poseTopicName = "/turtle1/pose"
rospy.Subscriber(poseTopicName, Pose, self.poseCallback)

2. 添加订阅回调

1
2
def poseCallback(self, msg):
    print msg

3. 调试

与C++不同,调试结果为可以正常接收到订阅的消息。但是关于窗体关闭事件方面只能通过关闭QT界面来关闭进程,不同通过命令行来。

Python可以正常接收到订阅消息的原因,在于Python采用的SIP方式进行操作QT的界面UI的中间是一套异步策略。

但是为了更好的优化体验,我们也是可以和C++实现的代码逻辑想通的。

接管渲染:

1
2
3
4
5
updateTimer = QTimer(self)
updateTimer.setInterval(16)
updateTimer.start()

updateTimer.timeout.connect(self.onUpdate)

渲染逻辑:

1
2
3
4
def onUpdate(self):
    self.update()
    if rospy.is_shutdown():
        self.close()

完整示例代码

MainWindow2.py

turtle_ctrl2.py