ros学习心得(十)topic通信-ros和Qt主线程

ros学习心得(十)topic通信-ros和Qt主线程_第1张图片

 

在一些案例中,我们代码主要是ROS和Qt的结合,Qt是图形化,在所有的编程和现实中基本上,我们都是在主线程中运行的,主线程的优先级是最高的,主线程的含义是我们看不到的代码部分,我们称之为UI的渲染(死循环),ros中节点启动没有做太多的事情,但是如果ros具备了消息订阅功能,即以下这类代码:

rospy.Subscriber(pose_topic_name,Pose,self.pose_callback)

他就会接收消息,这个ros的那个节点就会创建一个消息接受的容器,默认的时候是在主线程,        qt是在主线程接收,ros也是在主线程接收,而且都是死循环,可能会存在ros的消息收不到,       Qt的界面卡住了,消息收不到。但在python代码中不会出现,pyqt相当于是调用qt的C++,而且qyqt用的是异步的,所以两者之间不会有冲突。

其中要知道的是Qt是可以卡ros的,处理思路是将ros与Qt整合

接管渲染:(QT创建自己的刷新定时器)

#QT创建自己的刷新定时器(self是之前定义的窗口)
updateTimer = QTimer(self)
#设置定时器频率(16毫秒刷新一次,1000除以16大该是一秒刷新60次,即60帧)
updateTimer.setInterval(16)
#启动timer
updateTime.start()
#监听timer事件
update.timeout.connect(self.onUpdate)

渲染逻辑:

def onUpdate(self):
    #手动渲染 在命令行中(按下CTRL键)   
    self.update()
    if rospy.is_shutdown():
    #关闭了
    #需要关闭UI窗口
        self.close()

你可能感兴趣的:(ros基础,qt)