订阅数组 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()