PyQT GUI + ROS melodic get freezing
I tried to make a GUI in ROS melodic using PyQT. I tried monitoring my robot's attitude by subscribing to the topics and showing the values using LCDNumber. But, I got an issue when I was running the GUI. It is freezing after I run it for over 20 minutes. Any suggestion for this issue ?
I also attached my code file below :
#!/usr/bin/env python import rospy from std_msgs.msg import Int64, Float32, Float64 from gb_msgs.msg import Valeport_Altimeter from cola2_msgs.msg import LinkquestDvl from gb_msgs.msg import Spatial, Gui from sensor_msgs.msg import NavSatFix import math as mat
from PyQt5 import QtTest from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import os
basedir = os.path.dirname(os.path.abspath(__file__))
PATH = basedir + '/Gambar_GUI'
sys.path.insert(0, PATH)
import source_rc
class Ui_Form(object):
def __init__(self) :
self.x_velo, self.y_velo, self.z_velo = 0.0, 0.0, 0.0
self.depth_data = 0.0
self.roll_deg, self.pitch_deg, self.yaw_deg = 0.0, 0.0, 0.0
self.lat_, self.long_ = 0.0, 0.0
# surge #
self.sp_surge, self.actual_surge = 0.0, 0.0
# mm_pitch #
self.mm_des, self.mm_actual = 0, 0
# mm_roll #
self.sp_roll, self.actual_roll = 0.0, 0.0
# yaw #
self.sp_yaw, self.actual_yaw = 0.0, 0.0
# heave #
self.heave_ = 0.0
# battery #
self.volt_, self.cur_ = 0.0, 0.0
self.status_ = 0
rospy.Subscriber('/gather_gui', Gui, self.callback_)
self.pub = rospy.Publisher("/status", Int64, queue_size=10)
def callback_(self, data) :
self.x_velo = round(data.velocity_x,4)
self.y_velo = round(data.velocity_y,4)
self.z_velo = round(data.velocity_z,4)
self.depth_data = round(data.depth_data,4)
self.roll_deg = round(data.roll_data,4)
self.pitch_deg = round(data.pitch_data,4)
self.yaw_deg = round(data.yaw_data,4)
self.lat_ = round(data.lat,8)
self.long_ = round(data.long,8)
self.callback_print()
def callback_print(self) :
# Showing the value into GUI whenever data has been subscribed #
self.lcdNumber.display(self.x_velo)
self.lcdNumber_2.display(self.y_velo)
self.lcdNumber_3.display(self.z_velo )
# # calculate surge #
# self.actual_surge = mat.sqrt(pow(data.velocity_x,2) + pow(data.velocity_y,2))
self.lcdNumber_4.display(self.depth_data)
self.lcdNumber_5.display(self.roll_deg )
self.lcdNumber_6.display(self.pitch_deg )
self.lcdNumber_7.display(self.yaw_deg )
self.lcdNumber_8.display(self.lat_)
self.lcdNumber_9.display(self.long_)
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(1850, 868)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
Form.setFont(font)
Form.setStyleSheet("QWidget{\n"
" background-color:\"#0D083B\"\n"
"}")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(10, 20, 151, 61))
self.label.setStyleSheet("image: url(:/newPrefix/auv-2.png);")
self.label.setText("")
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(1660, 850, 191, 17))
self.label_2.setStyleSheet("QLabel{\n"
" color:\"white\"\n"
"}")
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(210, 100, 141, 61))
font = QtGui.QFont()
font.setPointSize(25)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setStyleSheet("QLabel{\n"
" color:\"white\"\n"
"}")
self.label_3.setAlignment(QtCore.Qt ...