订阅数组 python ros
subscribe to an array python ros
这是我第一次在 ROS 中使用 python,我被语法困住了,我想 python 订阅我已经使用 C++ 发布的一维数组,我还想使用 PyQt 访问此数组的元素并使用它在 window 上显示地图,但我无法访问数组内的数据,因为我不知道语法
第 33 行有错误 (msg.(i+j)==1
)
#!/usr/bin/env python
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from mainw import Ui_Form
#Subscriber
from std_msgs.msg import MultiArrayDimension
from std_msgs.msg import Int32MultiArray
import rospy
class main(QWidget, Ui_Form):
def __init__(self):
QWidget.__init__(self)
self.setupUi(self)
for i in range(0,20):
for j in range(0,20):
self.tableWidget.setItem(i, j, QTableWidgetItem())
def callback(msg):
for i in range(0,19):
for j in range(0,19):
if(msg.(i+j)==1)
self.tableWidget.item(i,j).setBackground(QColor(170, 0, 0))
else if(data.data==2)
self.tableWidget.item(i, j).setBackground(QColor(170, 0, 0))
def TwoDMap():
rospy.init_node('TwoDMap', anonymous=True)
rospy.Subscriber("array", Int32MultiArray, callback)
rospy.spin()
if __name__ == '__main__':
TwoDMap()
app=QApplication(sys.argv)
window =main()
window.show()
app.exec_()
根据Int32MultiArray message,你应该有这样的改变:
if msg.data[i+j] == 1:
# do something
elif msg.data[i+j] == 2:
# do something else
此外,class 中的 .callback()
方法没有 self
参数,并且您在方法调用中有一些错误。因此,您的代码将如下所示:
class Main(QWidget, Ui_Form):
def __init__(self):
QWidget.__init__(self)
self.setupUi(self)
rospy.Subscriber("array", Int32MultiArray, self.callback)
for i in range(0,20):
for j in range(0,20):
self.tableWidget.setItem(i, j, QTableWidgetItem())
def callback(self, msg):
for i in range(0,19):
for j in range(0,19):
if msg.data[i+j] == 1:
self.tableWidget.item(i,j).setBackground(QColor(170, 0, 0))
elif msg.data[i+j] == 2:
self.tableWidget.item(i, j).setBackground(QColor(170, 0, 0))
if __name__ == '__main__':
rospy.init_node('TwoDMap', anonymous=True)
app = QApplication(sys.argv)
obj = Main()
obj.show()
app.exec_()
rospy.spin()
这是我第一次在 ROS 中使用 python,我被语法困住了,我想 python 订阅我已经使用 C++ 发布的一维数组,我还想使用 PyQt 访问此数组的元素并使用它在 window 上显示地图,但我无法访问数组内的数据,因为我不知道语法
第 33 行有错误 (msg.(i+j)==1
)
#!/usr/bin/env python
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
from mainw import Ui_Form
#Subscriber
from std_msgs.msg import MultiArrayDimension
from std_msgs.msg import Int32MultiArray
import rospy
class main(QWidget, Ui_Form):
def __init__(self):
QWidget.__init__(self)
self.setupUi(self)
for i in range(0,20):
for j in range(0,20):
self.tableWidget.setItem(i, j, QTableWidgetItem())
def callback(msg):
for i in range(0,19):
for j in range(0,19):
if(msg.(i+j)==1)
self.tableWidget.item(i,j).setBackground(QColor(170, 0, 0))
else if(data.data==2)
self.tableWidget.item(i, j).setBackground(QColor(170, 0, 0))
def TwoDMap():
rospy.init_node('TwoDMap', anonymous=True)
rospy.Subscriber("array", Int32MultiArray, callback)
rospy.spin()
if __name__ == '__main__':
TwoDMap()
app=QApplication(sys.argv)
window =main()
window.show()
app.exec_()
根据Int32MultiArray message,你应该有这样的改变:
if msg.data[i+j] == 1:
# do something
elif msg.data[i+j] == 2:
# do something else
此外,class 中的 .callback()
方法没有 self
参数,并且您在方法调用中有一些错误。因此,您的代码将如下所示:
class Main(QWidget, Ui_Form):
def __init__(self):
QWidget.__init__(self)
self.setupUi(self)
rospy.Subscriber("array", Int32MultiArray, self.callback)
for i in range(0,20):
for j in range(0,20):
self.tableWidget.setItem(i, j, QTableWidgetItem())
def callback(self, msg):
for i in range(0,19):
for j in range(0,19):
if msg.data[i+j] == 1:
self.tableWidget.item(i,j).setBackground(QColor(170, 0, 0))
elif msg.data[i+j] == 2:
self.tableWidget.item(i, j).setBackground(QColor(170, 0, 0))
if __name__ == '__main__':
rospy.init_node('TwoDMap', anonymous=True)
app = QApplication(sys.argv)
obj = Main()
obj.show()
app.exec_()
rospy.spin()