Exemplo n.º 1
0
class Ui_MainWindow(object):
    def __init__(self):
        self.multirotor_type = 'iris'
        self.multirotor_num = 1
        self.control_type = 'vel'
        self.task = 'Flying'
        self.map = 'indoor1'
        self.initial_point = numpy.array([0.0, 0.0])
        self.terminal_point = numpy.array([0.0, 0.0])
        self.formation2 = 'formation1'
        self.control_type = 'vel'
        self.twist = Twist()
        self.twist.angular.x = 0.0
        self.twist.angular.y = 0.0
        self.cmd2 = 'control the leader'
        self.q_cmd = Queue()
        self.q_ctrl_leader = Queue()
        self.q_forward = Queue()
        self.q_upward = Queue()
        self.q_leftward = Queue()
        self.q_orientation = Queue()
        self.q_stop_flag = Queue()
        self.q_cmd_vel_mask = Queue()
        self.q_close_flag = Queue()

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1142, 798)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setMaximumSize(QtCore.QSize(16777215, 16777215))
        MainWindow.setSizeIncrement(QtCore.QSize(1, 1))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("images/xtd.ico"), QtGui.QIcon.Normal,
                       QtGui.QIcon.Off)
        MainWindow.setWindowIcon(icon)
        MainWindow.setIconSize(QtCore.QSize(32, 32))
        MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(170, 500, 710, 271))
        self.frame.setStyleSheet("border-color: rgb(46, 52, 54);\n"
                                 "background-color: rgb(238, 238, 236);")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setLineWidth(1)
        self.frame.setObjectName("frame")
        self.label_control_board_2 = QtWidgets.QLabel(self.frame)
        self.label_control_board_2.setGeometry(QtCore.QRect(70, 10, 471, 31))
        self.label_control_board_2.setStyleSheet("\n"
                                                 "color: rgb(32, 74, 135);\n"
                                                 "font: 57 23pt \"Ubuntu\";")
        self.label_control_board_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_control_board_2.setObjectName("label_control_board_2")
        self.layoutWidget = QtWidgets.QWidget(self.frame)
        self.layoutWidget.setGeometry(QtCore.QRect(40, 60, 331, 198))
        self.layoutWidget.setObjectName("layoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.label_go_back_2 = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_go_back_2.sizePolicy().hasHeightForWidth())
        self.label_go_back_2.setSizePolicy(sizePolicy)
        self.label_go_back_2.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                           "color: rgb(32, 74, 135);")
        self.label_go_back_2.setObjectName("label_go_back_2")
        self.verticalLayout.addWidget(self.label_go_back_2)
        self.box_go_and_back_2 = QtWidgets.QDoubleSpinBox(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.box_go_and_back_2.sizePolicy().hasHeightForWidth())
        self.box_go_and_back_2.setSizePolicy(sizePolicy)
        self.box_go_and_back_2.setMaximumSize(QtCore.QSize(120, 40))
        self.box_go_and_back_2.setSizeIncrement(QtCore.QSize(0, 30))
        self.box_go_and_back_2.setStyleSheet("color: rgb(32, 74, 135);\n"
                                             "font: 57 12pt \"Ubuntu\";")
        self.box_go_and_back_2.setMinimum(-10.0)
        self.box_go_and_back_2.setMaximum(10.0)
        self.box_go_and_back_2.setSingleStep(0.01)
        self.box_go_and_back_2.setProperty("value", 0.0)
        self.box_go_and_back_2.setObjectName("box_go_and_back_2")
        self.verticalLayout.addWidget(self.box_go_and_back_2)
        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.label_orientation = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_orientation.sizePolicy().hasHeightForWidth())
        self.label_orientation.setSizePolicy(sizePolicy)
        self.label_orientation.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                             "color: rgb(32, 74, 135);")
        self.label_orientation.setObjectName("label_orientation")
        self.verticalLayout_4.addWidget(self.label_orientation)
        self.box_orientation = QtWidgets.QDoubleSpinBox(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum,
                                           QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.box_orientation.sizePolicy().hasHeightForWidth())
        self.box_orientation.setSizePolicy(sizePolicy)
        self.box_orientation.setMaximumSize(QtCore.QSize(120, 40))
        self.box_orientation.setStyleSheet("color: rgb(32, 74, 135);\n"
                                           "font: 57 12pt \"Ubuntu\";")
        self.box_orientation.setMinimum(-0.5)
        self.box_orientation.setMaximum(0.5)
        self.box_orientation.setSingleStep(0.01)
        self.box_orientation.setObjectName("box_orientation")
        self.verticalLayout_4.addWidget(self.box_orientation)
        self.gridLayout.addLayout(self.verticalLayout_4, 1, 1, 1, 1)
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_left_right_2 = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_left_right_2.sizePolicy().hasHeightForWidth())
        self.label_left_right_2.setSizePolicy(sizePolicy)
        self.label_left_right_2.setStyleSheet("color: rgb(32, 74, 135);\n"
                                              "font: 57 12pt \"Ubuntu\";")
        self.label_left_right_2.setObjectName("label_left_right_2")
        self.verticalLayout_2.addWidget(self.label_left_right_2)
        self.box_left_and_right_2 = QtWidgets.QDoubleSpinBox(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.box_left_and_right_2.sizePolicy().hasHeightForWidth())
        self.box_left_and_right_2.setSizePolicy(sizePolicy)
        self.box_left_and_right_2.setMaximumSize(QtCore.QSize(120, 40))
        self.box_left_and_right_2.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                                "color: rgb(32, 74, 135);")
        self.box_left_and_right_2.setMinimum(-10.0)
        self.box_left_and_right_2.setMaximum(10.0)
        self.box_left_and_right_2.setSingleStep(0.01)
        self.box_left_and_right_2.setObjectName("box_left_and_right_2")
        self.verticalLayout_2.addWidget(self.box_left_and_right_2)
        self.gridLayout.addLayout(self.verticalLayout_2, 1, 0, 1, 1)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.label_up_down_2 = QtWidgets.QLabel(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_up_down_2.sizePolicy().hasHeightForWidth())
        self.label_up_down_2.setSizePolicy(sizePolicy)
        self.label_up_down_2.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                           "color: rgb(32, 74, 135);")
        self.label_up_down_2.setObjectName("label_up_down_2")
        self.verticalLayout_3.addWidget(self.label_up_down_2)
        self.box_up_and_down_2 = QtWidgets.QDoubleSpinBox(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum,
                                           QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.box_up_and_down_2.sizePolicy().hasHeightForWidth())
        self.box_up_and_down_2.setSizePolicy(sizePolicy)
        self.box_up_and_down_2.setMaximumSize(QtCore.QSize(120, 40))
        self.box_up_and_down_2.setStyleSheet("color: rgb(32, 74, 135);\n"
                                             "font: 57 12pt \"Ubuntu\";")
        self.box_up_and_down_2.setMinimum(-10.0)
        self.box_up_and_down_2.setMaximum(10.0)
        self.box_up_and_down_2.setSingleStep(0.01)
        self.box_up_and_down_2.setObjectName("box_up_and_down_2")
        self.verticalLayout_3.addWidget(self.box_up_and_down_2)
        self.gridLayout.addLayout(self.verticalLayout_3, 0, 1, 1, 1)
        self.text_control_tips = QtWidgets.QTextBrowser(self.layoutWidget)
        self.text_control_tips.setStyleSheet("")
        self.text_control_tips.setLineWidth(0)
        self.text_control_tips.setOpenLinks(False)
        self.text_control_tips.setObjectName("text_control_tips")
        self.gridLayout.addWidget(self.text_control_tips, 2, 0, 1, 2)
        self.layoutWidget1 = QtWidgets.QWidget(self.frame)
        self.layoutWidget1.setGeometry(QtCore.QRect(430, 60, 234, 191))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.layoutWidget1)
        self.gridLayout_4.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.verticalLayout_7 = QtWidgets.QVBoxLayout()
        self.verticalLayout_7.setObjectName("verticalLayout_7")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.label_send_command = QtWidgets.QLabel(self.layoutWidget1)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_send_command.sizePolicy().hasHeightForWidth())
        self.label_send_command.setSizePolicy(sizePolicy)
        self.label_send_command.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                              "color: rgb(32, 74, 135);")
        self.label_send_command.setAlignment(QtCore.Qt.AlignCenter)
        self.label_send_command.setObjectName("label_send_command")
        self.verticalLayout_5.addWidget(self.label_send_command)
        self.box_command = QtWidgets.QComboBox(self.layoutWidget1)
        self.box_command.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                       "color: rgb(32, 74, 135);")
        self.box_command.setObjectName("box_command")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.box_command.addItem("")
        self.verticalLayout_5.addWidget(self.box_command)
        self.verticalLayout_7.addLayout(self.verticalLayout_5)
        self.label_choose_formation = QtWidgets.QLabel(self.layoutWidget1)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_choose_formation.sizePolicy().hasHeightForWidth())
        self.label_choose_formation.setSizePolicy(sizePolicy)
        self.label_choose_formation.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                                  "color: rgb(32, 74, 135);")
        self.label_choose_formation.setAlignment(QtCore.Qt.AlignCenter)
        self.label_choose_formation.setObjectName("label_choose_formation")
        self.verticalLayout_7.addWidget(self.label_choose_formation)
        self.box_formation = QtWidgets.QComboBox(self.layoutWidget1)
        self.box_formation.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                         "color: rgb(32, 74, 135);")
        self.box_formation.setObjectName("box_formation")
        self.box_formation.addItem("")
        self.box_formation.addItem("")
        self.box_formation.addItem("")
        self.box_formation.addItem("")
        self.verticalLayout_7.addWidget(self.box_formation)
        spacerItem = QtWidgets.QSpacerItem(40, 20,
                                           QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout_7.addItem(spacerItem)
        self.button_stop = QtWidgets.QPushButton(self.layoutWidget1)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.button_stop.sizePolicy().hasHeightForWidth())
        self.button_stop.setSizePolicy(sizePolicy)
        self.button_stop.setStyleSheet(
            "font: 57 12pt \"Ubuntu\";\n"
            "color: rgb(32, 74, 135);\n"
            "border-bottom-color: rgb(186, 189, 182);\n"
            "")
        self.button_stop.setCheckable(True)
        self.button_stop.setObjectName("button_stop")
        self.verticalLayout_7.addWidget(self.button_stop)
        self.gridLayout_4.addLayout(self.verticalLayout_7, 1, 0, 1, 1)
        self.frame_3 = QtWidgets.QFrame(self.centralwidget)
        self.frame_3.setGeometry(QtCore.QRect(170, 0, 710, 470))
        self.frame_3.setStyleSheet("background-color: rgb(238, 238, 236);")
        self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_3.setObjectName("frame_3")
        self.frame_4 = QtWidgets.QFrame(self.centralwidget)
        self.frame_4.setGeometry(QtCore.QRect(880, 0, 261, 771))
        self.frame_4.setStyleSheet("background-color: rgb(238, 238, 236);")
        self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_4.setObjectName("frame_4")
        self.layoutWidget2 = QtWidgets.QWidget(self.frame_4)
        self.layoutWidget2.setGeometry(QtCore.QRect(10, 0, 241, 761))
        self.layoutWidget2.setObjectName("layoutWidget2")
        self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.layoutWidget2)
        self.verticalLayout_13.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_13.setObjectName("verticalLayout_13")
        self.label_control_board_4 = QtWidgets.QLabel(self.layoutWidget2)
        self.label_control_board_4.setStyleSheet("\n"
                                                 "color: rgb(32, 74, 135);\n"
                                                 "font: 57 23pt \"Ubuntu\";")
        self.label_control_board_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_control_board_4.setObjectName("label_control_board_4")
        self.verticalLayout_13.addWidget(self.label_control_board_4)
        self.text_show_info = QtWidgets.QTextBrowser(self.layoutWidget2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(2)
        sizePolicy.setHeightForWidth(
            self.text_show_info.sizePolicy().hasHeightForWidth())
        self.text_show_info.setSizePolicy(sizePolicy)
        self.text_show_info.setObjectName("text_show_info")
        self.verticalLayout_13.addWidget(self.text_show_info)
        self.more_topics = QtWidgets.QPushButton(self.layoutWidget2)
        self.more_topics.setObjectName("more_topics")
        self.verticalLayout_13.addWidget(self.more_topics)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout_13.addLayout(self.horizontalLayout_2)
        self.label_website = QtWidgets.QLabel(self.layoutWidget2)
        self.label_website.setTextFormat(QtCore.Qt.AutoText)
        self.label_website.setAlignment(QtCore.Qt.AlignCenter)
        self.label_website.setOpenExternalLinks(True)
        self.label_website.setObjectName("label_website")
        self.verticalLayout_13.addWidget(self.label_website)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20,
                                            QtWidgets.QSizePolicy.Expanding,
                                            QtWidgets.QSizePolicy.Minimum)
        self.verticalLayout_13.addItem(spacerItem1)
        self.frame_5 = QtWidgets.QFrame(self.centralwidget)
        self.frame_5.setGeometry(QtCore.QRect(0, -10, 181, 781))
        self.frame_5.setStyleSheet("background-color: rgb(238, 238, 236);")
        self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_5.setObjectName("frame_5")
        self.comboBox_controltype = QtWidgets.QComboBox(self.frame_5)
        self.comboBox_controltype.setGeometry(QtCore.QRect(30, 700, 101, 25))
        self.comboBox_controltype.setStyleSheet("color: rgb(32, 74, 135);\n"
                                                "font: 57 12pt \"Ubuntu\";")
        self.comboBox_controltype.setObjectName("comboBox_controltype")
        self.comboBox_controltype.addItem("")
        self.comboBox_controltype.addItem("")
        self.Box_uavnumber = QtWidgets.QSpinBox(self.frame_5)
        self.Box_uavnumber.setGeometry(QtCore.QRect(30, 620, 101, 31))
        self.Box_uavnumber.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                         "color: rgb(32, 74, 135);")
        self.Box_uavnumber.setMinimum(1)
        self.Box_uavnumber.setObjectName("Box_uavnumber")
        self.label_uavnumber = QtWidgets.QLabel(self.frame_5)
        self.label_uavnumber.setEnabled(True)
        self.label_uavnumber.setGeometry(QtCore.QRect(10, 590, 121, 19))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_uavnumber.sizePolicy().hasHeightForWidth())
        self.label_uavnumber.setSizePolicy(sizePolicy)
        self.label_uavnumber.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                           "color: rgb(32, 74, 135);")
        self.label_uavnumber.setObjectName("label_uavnumber")
        self.label_uavnumber_2 = QtWidgets.QLabel(self.frame_5)
        self.label_uavnumber_2.setEnabled(True)
        self.label_uavnumber_2.setGeometry(QtCore.QRect(10, 670, 101, 19))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_uavnumber_2.sizePolicy().hasHeightForWidth())
        self.label_uavnumber_2.setSizePolicy(sizePolicy)
        self.label_uavnumber_2.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                             "color: rgb(32, 74, 135);")
        self.label_uavnumber_2.setObjectName("label_uavnumber_2")
        self.button_run = QtWidgets.QPushButton(self.frame_5)
        self.button_run.setGeometry(QtCore.QRect(20, 740, 141, 27))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.button_run.sizePolicy().hasHeightForWidth())
        self.button_run.setSizePolicy(sizePolicy)
        self.button_run.setStyleSheet(
            "font: 57 12pt \"Ubuntu\";\n"
            "color: rgb(32, 74, 135);\n"
            "border-bottom-color: rgb(186, 189, 182);\n"
            "")
        self.button_run.setCheckable(True)
        self.button_run.setObjectName("button_run")
        self.label_uavnumber_3 = QtWidgets.QLabel(self.frame_5)
        self.label_uavnumber_3.setEnabled(True)
        self.label_uavnumber_3.setGeometry(QtCore.QRect(10, 450, 129, 19))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_uavnumber_3.sizePolicy().hasHeightForWidth())
        self.label_uavnumber_3.setSizePolicy(sizePolicy)
        self.label_uavnumber_3.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                             "color: rgb(32, 74, 135);")
        self.label_uavnumber_3.setObjectName("label_uavnumber_3")
        self.label_control_board_5 = QtWidgets.QLabel(self.frame_5)
        self.label_control_board_5.setGeometry(QtCore.QRect(10, 20, 151, 35))
        self.label_control_board_5.setStyleSheet("\n"
                                                 "color: rgb(32, 74, 135);\n"
                                                 "font: 57 23pt \"Ubuntu\";")
        self.label_control_board_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_control_board_5.setObjectName("label_control_board_5")
        self.label_uavnumber_4 = QtWidgets.QLabel(self.frame_5)
        self.label_uavnumber_4.setEnabled(True)
        self.label_uavnumber_4.setGeometry(QtCore.QRect(10, 520, 121, 19))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.label_uavnumber_4.sizePolicy().hasHeightForWidth())
        self.label_uavnumber_4.setSizePolicy(sizePolicy)
        self.label_uavnumber_4.setStyleSheet("font: 57 12pt \"Ubuntu\";\n"
                                             "color: rgb(32, 74, 135);")
        self.label_uavnumber_4.setObjectName("label_uavnumber_4")
        self.comboBox_maps = QtWidgets.QComboBox(self.frame_5)
        self.comboBox_maps.setGeometry(QtCore.QRect(30, 550, 101, 25))
        self.comboBox_maps.setStyleSheet("color: rgb(32, 74, 135);\n"
                                         "font: 57 12pt \"Ubuntu\";")
        self.comboBox_maps.setObjectName("comboBox_maps")
        self.comboBox_maps.addItem("")
        self.comboBox_maps.addItem("")
        self.comboBox_maps.addItem("")
        self.comboBox_maps.addItem("")
        self.comboBox_maps.addItem("")
        self.comboBox_maps.addItem("")
        self.comboBox_maps.addItem("")
        self.comboBox_vehicle_types = QtWidgets.QComboBox(self.frame_5)
        self.comboBox_vehicle_types.setGeometry(QtCore.QRect(30, 480, 101, 25))
        self.comboBox_vehicle_types.setStyleSheet("color: rgb(32, 74, 135);\n"
                                                  "font: 57 12pt \"Ubuntu\";")
        self.comboBox_vehicle_types.setObjectName("comboBox_vehicle_types")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.comboBox_vehicle_types.addItem("")
        self.line_4 = QtWidgets.QFrame(self.centralwidget)
        self.line_4.setGeometry(QtCore.QRect(420, 471, 16, 27))
        self.line_4.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_4.setObjectName("line_4")
        self.line_5 = QtWidgets.QFrame(self.centralwidget)
        self.line_5.setGeometry(QtCore.QRect(558, 471, 16, 27))
        self.line_5.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_5.setObjectName("line_5")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(170, 470, 411, 29))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.button_world = QtWidgets.QPushButton(self.widget)
        self.button_world.setStyleSheet(
            "background-color: rgb(238, 238, 236);\n"
            "color: rgb(32, 74, 135);\n"
            "font: 57 12pt \"Ubuntu\";")
        self.button_world.setCheckable(True)
        self.button_world.setObjectName("button_world")
        self.horizontalLayout.addWidget(self.button_world)
        self.button_waypoint = QtWidgets.QPushButton(self.widget)
        self.button_waypoint.setStyleSheet(
            "background-color: rgb(238, 238, 236);\n"
            "color: rgb(32, 74, 135);\n"
            "font: 57 12pt \"Ubuntu\";")
        self.button_waypoint.setCheckable(True)
        self.button_waypoint.setObjectName("button_waypoint")
        self.horizontalLayout.addWidget(self.button_waypoint)
        self.button_plot = QtWidgets.QPushButton(self.widget)
        self.button_plot.setStyleSheet(
            "background-color: rgb(238, 238, 236);\n"
            "color: rgb(32, 74, 135);\n"
            "font: 57 12pt \"Ubuntu\";")
        self.button_plot.setCheckable(True)
        self.button_plot.setObjectName("button_plot")
        self.horizontalLayout.addWidget(self.button_plot)
        self.frame_3.raise_()
        self.frame.raise_()
        self.frame_4.raise_()
        self.layoutWidget.raise_()
        self.button_plot.raise_()
        self.frame_5.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionbasic_settings = QtWidgets.QAction(MainWindow)
        self.actionbasic_settings.setObjectName("actionbasic_settings")
        self.actionmulti_comfiguration = QtWidgets.QAction(MainWindow)
        self.actionmulti_comfiguration.setObjectName(
            "actionmulti_comfiguration")
        self.actionselect_worlds = QtWidgets.QAction(MainWindow)
        self.actionselect_worlds.setObjectName("actionselect_worlds")

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.box_command, self.box_orientation)
        MainWindow.setTabOrder(self.box_orientation, self.Box_uavnumber)
        MainWindow.setTabOrder(self.Box_uavnumber, self.comboBox_controltype)
        MainWindow.setTabOrder(self.comboBox_controltype,
                               self.text_control_tips)
        MainWindow.setTabOrder(self.text_control_tips, self.box_go_and_back_2)
        MainWindow.setTabOrder(self.box_go_and_back_2, self.box_up_and_down_2)
        MainWindow.setTabOrder(self.box_up_and_down_2, self.box_formation)
        MainWindow.setTabOrder(self.box_formation, self.button_waypoint)
        MainWindow.setTabOrder(self.button_waypoint, self.text_show_info)
        MainWindow.setTabOrder(self.text_show_info, self.button_run)
        MainWindow.setTabOrder(self.button_run, self.button_stop)
        MainWindow.setTabOrder(self.button_stop, self.box_left_and_right_2)

        self.retranslateUi(MainWindow)
        #self.backend = backendthread()
        self.Set_Slot()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "XTDGroundControl"))
        self.label_control_board_2.setText(
            _translate("MainWindow", "control board"))
        self.label_go_back_2.setText(_translate("MainWindow", "go and back"))
        self.box_go_and_back_2.setToolTip(
            _translate("MainWindow", "maximum:+-10.00"))
        self.label_orientation.setText(_translate("MainWindow", "orientation"))
        self.box_orientation.setToolTip(
            _translate("MainWindow", "maximum:+-0.50"))
        self.label_left_right_2.setText(
            _translate("MainWindow", "left and right"))
        self.box_left_and_right_2.setToolTip(
            _translate("MainWindow", "maximum:+-10.00"))
        self.label_up_down_2.setText(_translate("MainWindow", "up and down"))
        self.box_up_and_down_2.setToolTip(
            _translate("MainWindow", "maximum:+-10.00"))
        self.text_control_tips.setHtml(
            _translate(
                "MainWindow",
                "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
                "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
                "p, li { white-space: pre-wrap; }\n"
                "</style></head><body style=\" font-family:\'Ubuntu\'; font-size:11pt; font-weight:400; font-style:normal;\">\n"
                "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:12pt; color:#204a87;\">Tips: When use the </span><span style=\" font-size:12pt; font-weight:600; color:#204a87;\">offboard mode </span><span style=\" font-size:12pt; color:#204a87;\">to take off, the upforward speed must be greater than 0.3 m/s (by default)</span></p></body></html>"
            ))
        self.label_send_command.setText(
            _translate("MainWindow", "send command"))
        self.box_command.setItemText(
            0, _translate("MainWindow", "control the leader"))
        self.box_command.setItemText(1, _translate("MainWindow",
                                                   "control all"))
        self.box_command.setItemText(2, _translate("MainWindow", "arm"))
        self.box_command.setItemText(3, _translate("MainWindow", "disarm"))
        self.box_command.setItemText(4, _translate("MainWindow",
                                                   "return home"))
        self.box_command.setItemText(5, _translate("MainWindow", "take off"))
        self.box_command.setItemText(6, _translate("MainWindow", "land"))
        self.box_command.setItemText(7, _translate("MainWindow", "offboard"))
        self.box_command.setItemText(8, _translate("MainWindow", "hover"))
        self.label_choose_formation.setText(
            _translate("MainWindow", "choose formation"))
        self.box_formation.setItemText(0, _translate("MainWindow", "waiting"))
        self.box_formation.setItemText(1, _translate("MainWindow",
                                                     "formation1"))
        self.box_formation.setItemText(2, _translate("MainWindow",
                                                     "formation2"))
        self.box_formation.setItemText(3, _translate("MainWindow",
                                                     "formation3"))
        self.button_stop.setText(_translate("MainWindow", "STOP!"))
        self.label_control_board_4.setText(
            _translate("MainWindow", "vehicle states"))
        self.more_topics.setText(_translate("MainWindow", "more topics"))
        self.label_website.setToolTip(_translate("MainWindow", "XTDrone wiki"))
        self.label_website.setText(
            _translate(
                "MainWindow",
                "<a href= https://yuque.com/xtdrone>more information</a>"))
        self.comboBox_controltype.setItemText(0,
                                              _translate("MainWindow", "vel"))
        self.comboBox_controltype.setItemText(
            1, _translate("MainWindow", "accel"))
        self.label_uavnumber.setText(
            _translate("MainWindow", "vehicle number:"))
        self.label_uavnumber_2.setText(
            _translate("MainWindow", "control type:"))
        self.button_run.setText(_translate("MainWindow", "RUN!"))
        self.label_uavnumber_3.setText(
            _translate("MainWindow", "vehicle types:"))
        self.label_control_board_5.setText(_translate("MainWindow",
                                                      "Settings"))
        self.label_uavnumber_4.setText(_translate("MainWindow", "maps:"))
        self.comboBox_maps.setItemText(0, _translate("MainWindow", "indoor1"))
        self.comboBox_maps.setItemText(1, _translate("MainWindow", "indoor2"))
        self.comboBox_maps.setItemText(2, _translate("MainWindow", "indoor3"))
        self.comboBox_maps.setItemText(3, _translate("MainWindow", "outdoor1"))
        self.comboBox_maps.setItemText(4, _translate("MainWindow", "outdoor2"))
        self.comboBox_maps.setItemText(5, _translate("MainWindow", "outdoor3"))
        self.comboBox_maps.setItemText(6, _translate("MainWindow", "robocup"))
        self.comboBox_vehicle_types.setItemText(
            0, _translate("MainWindow", "iris"))
        self.comboBox_vehicle_types.setItemText(
            1, _translate("MainWindow", "solo"))
        self.comboBox_vehicle_types.setItemText(
            2, _translate("MainWindow", "typhoon_h480"))
        self.comboBox_vehicle_types.setItemText(
            3, _translate("MainWindow", "tailsitter"))
        self.comboBox_vehicle_types.setItemText(
            4, _translate("MainWindow", "quadplane"))
        self.comboBox_vehicle_types.setItemText(
            5, _translate("MainWindow", "tiltrotor"))
        self.comboBox_vehicle_types.setItemText(
            6, _translate("MainWindow", "plane"))
        self.comboBox_vehicle_types.setItemText(
            7, _translate("MainWindow", "rovor"))
        self.button_world.setText(_translate("MainWindow", "world"))
        self.button_waypoint.setText(_translate("MainWindow", "way point"))
        self.button_plot.setText(_translate("MainWindow", "plots"))
        self.actionbasic_settings.setText(
            _translate("MainWindow", "basic settings"))
        self.actionmulti_comfiguration.setText(
            _translate("MainWindow", "multi comfiguration"))
        self.actionselect_worlds.setText(
            _translate("MainWindow", "select worlds"))

    def Set_Slot(self):

        self.button_stop.setEnabled(False)
        self.button_run.setEnabled(True)
        self.button_run.clicked.connect(self.on_button_run_clicked)
        self.button_stop.clicked.connect(self.on_button_stop_clicked)
        self.button_world.clicked.connect(self.on_button_world_clicked)
        self.button_waypoint.clicked.connect(self.on_button_waypoint_clicked)

        self.box_go_and_back_2.valueChanged.connect(
            self.valueChange_forward_exp_vel)
        self.box_go_and_back_2.setReadOnly(True)
        self.box_up_and_down_2.valueChanged.connect(
            self.valueChange_upward_exp_vel)
        self.box_up_and_down_2.setReadOnly(True)
        self.box_left_and_right_2.valueChanged.connect(
            self.valueChange_leftward_exp_vel)
        self.box_left_and_right_2.setReadOnly(True)
        self.box_orientation.valueChanged.connect(
            self.valueChange_orientation_exp)
        self.box_orientation.setReadOnly(True)
        self.box_command.currentIndexChanged.connect(self.get_command)
        self.box_formation.currentIndexChanged.connect(self.get_formation)
        self.comboBox_maps.currentIndexChanged.connect(self.initplot)

    def initplot(self):
        self.map = self.comboBox_maps.currentText()
        self.m = PlotCanvas(self, map=self.map)
        self.m.move(170, 0)

    def on_button_waypoint_clicked(self):
        if self.button_world.isChecked():
            self.button_world.toggle()

    def on_button_world_clicked(self):
        if self.button_waypoint.isChecked():
            self.button_waypoint.toggle()

    def on_button_run_clicked(self):
        self.map = str(self.comboBox_maps.currentText())
        self.multirotor_num = int(self.Box_uavnumber.value())
        self.multirotor_type = str(self.comboBox_vehicle_types.currentText())
        self.control_type = str(self.comboBox_controltype.currentText())
        if self.multirotor_num != 6 and self.multirotor_num != 9 and self.multirotor_num != 18:
            self.box_formation.setVisible(False)
        self.box_go_and_back_2.setReadOnly(False)
        self.box_up_and_down_2.setReadOnly(False)
        self.box_left_and_right_2.setReadOnly(False)
        self.box_orientation.setReadOnly(False)
        self.button_stop.setEnabled(True)
        stop_flag = False
        self.q_stop_flag.put(stop_flag)
        self.button_run.setEnabled(False)

    def on_button_stop_clicked(self):
        self.box_go_and_back_2.setProperty("value", 0.0)
        self.box_up_and_down_2.setProperty("value", 0.0)
        self.box_left_and_right_2.setProperty("value", 0.0)
        self.box_orientation.setProperty("value", 0.0)
        self.box_go_and_back_2.setReadOnly(True)
        self.box_up_and_down_2.setReadOnly(True)
        self.box_left_and_right_2.setReadOnly(True)
        self.box_orientation.setReadOnly(True)
        self.button_run.setEnabled(True)
        self.button_stop.setEnabled(False)
        stop_flag = True
        self.q_stop_flag.put(stop_flag)
        self.button_stop.toggle()
        self.button_run.toggle()

    def valueChange_forward_exp_vel(self):
        forward_exp = self.box_go_and_back_2.value()
        #if forward_exp
        self.q_forward.put(forward_exp)
        #print self.box_go_and_back_2.value()
    def valueChange_upward_exp_vel(self):
        upward_exp = self.box_up_and_down_2.value()
        print(upward_exp)
        self.q_upward.put(upward_exp)
        #print('upward_exp:',self.twist.linear.z)
    def valueChange_leftward_exp_vel(self):
        leftward_exp = self.box_left_and_right_2.value()
        self.q_leftward.put(leftward_exp)
        #print('left_ward_exp:',self.twist.linear.y)
    def valueChange_orientation_exp(self):
        orientation_exp = self.box_orientation.value()
        self.q_orientation.put(orientation_exp)
        #print('orientation_exp:',self.twist.angular.z)

    def get_command(self):
        self.cmd2 = str(self.box_command.currentText())
        print('cmd2:' + self.cmd2)
        if self.cmd2 == 'control all':
            cmd = ''
            ctrl_leader = False
            self.q_cmd.put(cmd)
            self.q_ctrl_leader.put(ctrl_leader)
        elif self.cmd2 == 'arm':
            cmd = 'ARM'
            self.q_cmd.put(cmd)
        elif self.cmd2 == 'disarm':
            cmd = 'DISARM'
            self.q_cmd.put(cmd)
        elif self.cmd2 == 'return home':
            cmd = 'AUTO.RTL'
            self.q_cmd.put(cmd)
        elif self.cmd2 == 'take off':
            cmd = 'AUTO.TAKEOFF'
            self.q_cmd.put(cmd)
        elif self.cmd2 == 'land':
            cmd = 'AUTO.LAND'
            self.q_cmd.put(cmd)
        elif self.cmd2 == 'offboard':
            cmd = 'OFFBOARD'
            self.q_cmd.put(cmd)
        elif self.cmd2 == 'hover':
            cmd = 'HOVER'
            self.q_cmd.put(cmd)
            cmd_vel_mask = False
            self.q_cmd_vel_mask.put(cmd_vel_mask)
            self.box_go_and_back_2.setProperty("value", 0.0)
            self.box_up_and_down_2.setProperty("value", 0.0)
            self.box_left_and_right_2.setProperty("value", 0.0)
            self.box_orientation.setProperty("value", 0.0)
        else:
            cmd = ''
            ctrl_leader = True
            self.q_cmd.put(cmd)
            self.q_ctrl_leader.put(ctrl_leader)
        #print('cmd:'+self.cmd)

    def get_formation(self):
        self.formation2 = str(self.box_formation.currentText())
        cmd_vel_mask = True
        self.q_cmd_vel_mask.put(cmd_vel_mask)
        if self.multirotor_num == 6:
            if self.formation2 == 'formation1':
                formation = 'T'
                self.q_cmd.put(formation)
            elif self.formation2 == 'formation2':
                formation = 'diamond'
                self.q_cmd.put(formation)
            elif self.formation2 == 'formation3':
                formation = 'triangle'
                self.q_cmd.put(formation)
            else:
                formation = 'waiting'
                self.q_cmd.put(formation)
        elif self.multirotor_num == 9:
            if self.formation2 == 'formation1':
                formation = 'cube'
                self.q_cmd.put(formation)
            elif self.formation2 == 'formation2':
                formation = 'pyramid'
                self.q_cmd.put(formation)
            elif self.formation2 == 'formation3':
                formation = 'triangle'
                self.q_cmd.put(formation)
            else:
                formation = 'waiting'
                self.q_cmd.put(formation)
        else:
            if self.formation2 == 'formation1':
                formation = 'cuboid'
                self.q_cmd.put(formation)
            elif self.formation2 == 'formation2':
                formation = 'sphere'
                self.q_cmd.put(formation)
            elif self.formation2 == 'formation3':
                formation = 'diamond'
                self.q_cmd.put(formation)
            else:
                formation = 'waiting'
                self.q_cmd.put(formation)
Exemplo n.º 2
0
class Gui2Ros(QMainWindow,xtd_ui.Ui_MainWindow):
    def __init__(self):
        super(Gui2Ros, self).__init__()
        self.setupUi(self)
        self.map = 'indoor1'
        self.comboBox_maps.currentIndexChanged.connect(self.initplot)
        self.button_run.clicked.connect(self.startrun)
        self.close_flag = False
        self.local_pose = PoseStamped()
        self.local_vel = Twist()
        self.m = PlotCanvas(self, self.map)
        self.m.move(180, 0)
        self.flag = 0
        # rospy.init_node('multirotor_pyqt5_control')

    def initplot(self):
        self.map = self.comboBox_maps.currentText()
        self.m.canvas_update(self.map)

    def startrun(self):
        print 'start run!'
        self.init_controller()
        self.pSend2ros = Process(target=self.run_process)
        self.pSend2ros.start()
        self.text_thread = Ros2Gui(self.multirotor_select, self.multirotor_num, self.multi_type)
        self.text_thread.update_text.connect(self.display)
        self.text_thread.plot_array.connect(self.plot)
        self.text_thread.start()
        # self.pSend2ros = Process(target=self.run_process)
        # self.pSend2ros.start()

    def init_controller(self):
        
        self.text_show_info.setPlainText('data')
        self.multi_num = 0
        self.multi_type = []
        counnnt = 0
        print self.multirotor_select
        for j in self.multirotor_select:
            self.multi_num = self.multi_num + self.multirotor_num[j]   
            for id_1 in range(self.multirotor_num[j]):
                self.multi_type.append(self.multirotor_type[j])
                counnnt+=1
        self.color_plot = ['' for i in range(self.multi_num)]
        for i in range(self.multi_num):
            color_R = hex(random.randint(16,255))
            color_G = hex(random.randint(16,255))
            color_B = hex(random.randint(16,255))
            self.color_plot[i] = '#'+str(color_R)+str(color_G)+str(color_B) 
            self.color_plot[i] = self.color_plot[i].replace('0x','')
        

    #publish messages to ros nodes like a keyboard
    def run_process(self):
        rospy.init_node('multirotor_pyqt5_control')
        counnnt = 0
        if self.control_type == 'vel':
            self.multi_cmd_vel_flu_pub = [None] * self.multi_num
            self.multi_cmd_pub = [None] * self.multi_num
            for i in self.multirotor_select:
                for k in range(self.multirotor_num[i]):
                    if i == 7:
                        self.multi_cmd_vel_flu_pub[counnnt] = rospy.Publisher('/ugv_' + str(k) + '/cmd_vel', Twist, queue_size=10)
                        self.multi_cmd_pub[counnnt] = rospy.Publisher('/ugv_' + str(k) + '/cmd', String,queue_size=10)      
                    else:                    
                        self.multi_cmd_vel_flu_pub[counnnt] = rospy.Publisher('/xtdrone/' + self.multi_type[counnnt] + '_' + str(k) + '/cmd_vel_flu', Twist, queue_size=10)
                        self.multi_cmd_pub[counnnt] = rospy.Publisher('/xtdrone/' + self.multi_type[counnnt] + '_' + str(k) + '/cmd', String,queue_size=10)
                    counnnt += 1
            self.leader_cmd_vel_flu_pub = rospy.Publisher("/xtdrone/leader/cmd_vel_flu", Twist, queue_size=10)
            self.leader_cmd_pub = rospy.Publisher("/xtdrone/leader/cmd", String, queue_size=10)

        else:
            self.multi_cmd_accel_flu_pub = [None] * self.multi_num
            self.multi_cmd_pub = [None] * self.multi_num
            for i in self.multirotor_select:
                for k in range(self.multirotor_num[i]):
                    self.multi_cmd_accel_flu_pub[i] = rospy.Publisher(
                        '/xtdrone/' + self.multi_type[counnnt] + '_' + str(k) + '/cmd_accel_flu', Twist, queue_size=10)
                    self.multi_cmd_pub[i] = rospy.Publisher('/xtdrone/' + self.multi_type[counnnt] + '_' + str(k) + '/cmd',
                                                            String,
                                                            queue_size=10)
                    counnnt = 0
            self.leader_cmd_accel_flu_pub = rospy.Publisher("/xtdrone/leader/cmd_accel_flu", Twist, queue_size=10)
            self.leader_cmd_pub = rospy.Publisher("/xtdrone/leader/cmd", String, queue_size=10)
        self.twist = [Twist() for i in range (self.multi_num)]
        self.cmd = ['' for i in range (self.multi_num)]
        self.ctrl_leader = True 
        self.cmd_vel_mask = False
        for j in range(self.multi_num):
            self.twist[j].angular.x = 0.0
            self.twist[j].angular.y = 0.0
        last_forward = [0.0 for i in range(self.multi_num)]
        last_upward = [0.0 for i in range(self.multi_num)]
        last_leftward = [0.0 for i in range(self.multi_num)]
        last_orientation = [0.0 for i in range(self.multi_num)]
        last_ctrl_leader = False
        last_cmd_vel_mask = False
        last_multirotor_get_control = [0 for i in range(self.multi_num)]
        last_forward_all = 0.0
        last_upward_all = 0.0
        last_leftward_all = 0.0
        last_orientation_all = 0.0

        num = 0
        rate = rospy.Rate(30)
        check_stop_flag = False
        print('StartRun!')
        start_flag = False
        flag = False
        time = 0
        while True:
            if not start_flag:
                flag = self.q_start_control_flag.get()
            if flag: 
                time += 1
                start_flag = True
                num += 1
                if self.q_multirotor_get_control.empty():
                    multirotor_get_control = last_multirotor_get_control
                else:
                    multirotor_get_control = self.q_multirotor_get_control.get()
                    last_multirotor_get_control = multirotor_get_control
                if self.q_forward.empty():
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].linear.x = last_forward[i]
                else:
                    forward = self.q_forward.get()
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].linear.x = forward
                            last_forward[i] = self.twist[i].linear.x
                if self.q_upward.empty():
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].linear.z = last_upward[i]
                else:
                    upward = self.q_upward.get()
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].linear.z = upward
                            last_upward[i] = self.twist[i].linear.z
                if self.q_leftward.empty():
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].linear.y = last_leftward[i]
                else:
                    leftward = self.q_leftward.get()
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].linear.y = leftward
                            last_leftward[i] = self.twist[i].linear.y
                if self.q_orientation.empty():
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].angular.z = last_orientation[i]
                else:
                    orientation = self.q_orientation.get()
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.twist[i].angular.z = orientation
                            last_orientation[i] = self.twist[i].angular.z
                if self.q_ctrl_leader.empty():
                    self.ctrl_leader = last_ctrl_leader
                else:
                    self.ctrl_leader = self.q_ctrl_leader.get()
                    last_ctrl_leader = self.ctrl_leader

                if self.q_cmd.empty():
                    for i in range(self.multi_num):
                        if multirotor_get_control[i]:
                            self.cmd[i] = ''
                else:
                    cmd = self.q_cmd.get()
                    if self.ctrl_leader:
                        for i in range(self.multi_num):
                            if i == 1:
                                self.cmd[i] = cmd
                            else:
                                self.cmd[i] = ''
                    else:
                        for i in range(self.multi_num):
                            if multirotor_get_control[i]:
                                self.cmd[i] = cmd
                                print(self.cmd[i])
                
                if self.q_cmd_vel_mask.empty():
                    self.cmd_vel_mask = last_cmd_vel_mask
                else:
                    self.cmd_vel_mask = self.q_cmd_vel_mask.get()
                    last_cmd_vel_mask = self.cmd_vel_mask
                if self.q_stop_flag.empty():
                    pass
                else:
                    check_stop_flag = self.q_stop_flag.get()
                    if check_stop_flag:
                        for i in range(self.multi_num):
                            self.cmd[i] = 'AUTO.RTL'

                if self.ctrl_leader:
                    if self.control_type == 'vel':
                        self.leader_cmd_vel_flu_pub.publish(self.twist[1])
                    else:
                        self.leader_cmd_accel_flu_pub.publish(self.twist[1])
                    self.leader_cmd_pub.publish(self.cmd[1])
                    print self.cmd[1]
             
                else:
                    for i in range(self.multi_num):
                        if not self.cmd_vel_mask:
                            if self.control_type == 'vel':
                                self.multi_cmd_vel_flu_pub[i].publish(self.twist[i])
                            else:
                                self.multi_cmd_accel_flu_pub[i].publish(self.twist[i])
                        self.multi_cmd_pub[i].publish(self.cmd[i])
                    # print self.cmd[0]
            else:
                print 'shut down!'
            rate.sleep()
            
            if check_stop_flag:
                self.q_stop_flag.put(True)
                rospy.signal_shutdown('STOP!')
                break
        

    def display(self, data):
        self.text_show_info.setPlainText(data)

    def plot(self, data):
         for i in range(self.multi_num):
            self.m.ax.plot(data[i][0], data[i][1], color = self.color_plot[i])
            # self.m.canvas_update(self.map)
            self.m.draw()
Exemplo n.º 3
0
class Gui2Ros(QMainWindow, xtd_ui.Ui_MainWindow):
    def __init__(self):
        super(Gui2Ros, self).__init__()
        self.setupUi(self)
        self.map = 'indoor1'
        self.comboBox_maps.currentIndexChanged.connect(self.initplot)
        self.button_run.clicked.connect(self.startrun)
        self.cmd = ''
        self.ctrl_leader = True
        self.cmd_vel_mask = False
        self.close_flag = False
        self.local_pose = PoseStamped()
        self.local_vel = Twist()
        self.m = PlotCanvas(self, self.map)
        self.m.move(180, 0)

    def initplot(self):
        self.map = self.comboBox_maps.currentText()
        self.m.canvas_update(self.map)

    def startrun(self):
        print 'start run!'
        self.color_plot = ['' for i in range(self.multirotor_num)]
        for i in range(self.multirotor_num):
            color_R = hex(random.randint(16, 255))
            color_G = hex(random.randint(16, 255))
            color_B = hex(random.randint(16, 255))
            self.color_plot[i] = '#' + str(color_R) + str(color_G) + str(
                color_B)
            self.color_plot[i] = self.color_plot[i].replace('0x', '')
        self.pSend2ros = Process(target=self.run_process)
        self.pSend2ros.start()
        self.text_thread = Ros2Gui(self.multirotor_num, self.multirotor_type)
        self.text_thread.update_text.connect(self.display)
        self.text_thread.plot_array.connect(self.plot)
        self.text_thread.start()

    #publish messages to ros nodes like a keyboard
    def run_process(self):
        rospy.init_node('multirotor_pyqt5_control')
        self.text_show_info.setPlainText('data')
        if self.control_type == 'vel':
            self.multi_cmd_vel_flu_pub = [None] * self.multirotor_num
            self.multi_cmd_pub = [None] * self.multirotor_num
            for i in range(self.multirotor_num):
                self.multi_cmd_vel_flu_pub[i] = rospy.Publisher(
                    '/xtdrone/' + self.multirotor_type + '_' + str(i) +
                    '/cmd_vel_flu',
                    Twist,
                    queue_size=10)
                self.multi_cmd_pub[i] = rospy.Publisher(
                    '/xtdrone/' + self.multirotor_type + '_' + str(i) + '/cmd',
                    String,
                    queue_size=10)
            self.leader_cmd_vel_flu_pub = rospy.Publisher(
                "/xtdrone/leader/cmd_vel_flu", Twist, queue_size=10)
            self.leader_cmd_pub = rospy.Publisher("/xtdrone/leader/cmd",
                                                  String,
                                                  queue_size=10)

        else:
            self.multi_cmd_accel_flu_pub = [None] * self.multirotor_num
            self.multi_cmd_pub = [None] * self.multirotor_num
            for i in range(self.multirotor_num):
                self.multi_cmd_accel_flu_pub[i] = rospy.Publisher(
                    '/xtdrone/' + self.multirotor_type + '_' + str(i) +
                    '/cmd_accel_flu',
                    Twist,
                    queue_size=10)
                self.multi_cmd_pub[i] = rospy.Publisher(
                    '/xtdrone/' + self.multirotor_type + '_' + str(i) + '/cmd',
                    String,
                    queue_size=10)
            self.leader_cmd_accel_flu_pub = rospy.Publisher(
                "/xtdrone/leader/cmd_accel_flu", Twist, queue_size=10)
            self.leader_cmd_pub = rospy.Publisher("/xtdrone/leader/cmd",
                                                  String,
                                                  queue_size=10)
        last_forward = 0.0
        last_upward = 0.0
        last_leftward = 0.0
        last_orientation = 0.0
        last_ctrl_leader = False
        last_cmd_vel_mask = False
        num = 0
        rate = rospy.Rate(30)
        check_stop_flag = False
        print('StartRun!')
        while True:
            num += 1
            #print(check_stop_flag)
            if self.q_forward.empty():
                self.twist.linear.x = last_forward
            else:
                self.twist.linear.x = self.q_forward.get()
                last_forward = self.twist.linear.x
            if self.q_upward.empty():
                self.twist.linear.z = last_upward
            else:
                self.twist.linear.z = self.q_upward.get()
                last_upward = self.twist.linear.z
            if self.q_leftward.empty():
                self.twist.linear.y = last_leftward
            else:
                self.twist.linear.y = self.q_leftward.get()
                last_leftward = self.twist.linear.y
            if self.q_orientation.empty():
                self.twist.angular.z = last_orientation
            else:
                self.twist.angular.z = self.q_orientation.get()
                last_orientation = self.twist.angular.z
            if self.q_cmd.empty():
                self.cmd = ''
            else:
                self.cmd = self.q_cmd.get()
            if self.q_ctrl_leader.empty():
                self.ctrl_leader = last_ctrl_leader
            else:
                self.ctrl_leader = self.q_ctrl_leader.get()
                last_ctrl_leader = self.ctrl_leader
            if self.q_cmd_vel_mask.empty():
                self.cmd_vel_mask = last_cmd_vel_mask
            else:
                self.cmd_vel_mask = self.q_cmd_vel_mask.get()
                last_cmd_vel_mask = self.cmd_vel_mask
            if self.q_stop_flag.empty():
                pass
            else:
                check_stop_flag = self.q_stop_flag.get()
                if check_stop_flag:
                    self.cmd = 'AUTO.RTL'
            for i in range(self.multirotor_num):
                if self.ctrl_leader:
                    if self.control_type == 'vel':
                        self.leader_cmd_vel_flu_pub.publish(self.twist)
                    else:
                        self.leader_cmd_accel_flu_pub.publish(self.twist)
                    self.leader_cmd_pub.publish(self.cmd)

                else:
                    if not self.cmd_vel_mask:
                        if self.control_type == 'vel':
                            self.multi_cmd_vel_flu_pub[i].publish(self.twist)
                        else:
                            self.multi_cmd_accel_flu_pub[i].publish(self.twist)
                    self.multi_cmd_pub[i].publish(self.cmd)
            rate.sleep()
            if check_stop_flag:
                self.q_stop_flag.put(True)
                rospy.signal_shutdown('STOP!')
                break

    def display(self, data):
        self.text_show_info.setPlainText(data)

    def plot(self, data):
        for i in range(self.multirotor_num):
            self.m.ax.plot(data[i][0], data[i][1], color=self.color_plot[i])
            # self.m.canvas_update(self.map)
            self.m.draw()