Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
main.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2from PyQt5 import QtCore, QtGui, QtWidgets
3
4from PyQt5.QtWidgets import QMenu
5from PyQt5.QtWidgets import QAction, QFileDialog, QLabel, QWidget, QSizePolicy, QMessageBox, QLineEdit, QFormLayout, QDialog, QPushButton
6from PyQt5.QtGui import QBrush, QPen, QPixmap, QImage, QResizeEvent, QTransform, QColor, QColorConstants, QPainter, QIcon, QDoubleValidator, QRegExpValidator
7from PyQt5.QtCore import Qt, QRect, QSize, Qt, QRegExp
8
9import drawView
10import guiLogic
11
12import numpy as np
13
14
15class MyWindow(QtWidgets.QMainWindow):
16 def __init__(self, *args, **kwargs):
17 super().__init__(*args, **kwargs)
18 self.guiLogic = None
19 self.ui = None
20
21 def keyPressEvent(self, event):
22 super().keyPressEvent(event)
23 if(event.key() == Qt.Key_0):
24 self.ui.changeLandmarkType(guiLogic.landmarkType.UNDEFINED, ui.coneUnknownOption)
25 elif(event.key() == Qt.Key_1):
26 self.ui.changeLandmarkType(guiLogic.landmarkType.BLUE, ui.coneBlueOption)
27 elif(event.key() == Qt.Key_2):
28 self.ui.changeLandmarkType(guiLogic.landmarkType.YELLOW, ui.coneYellowOption)
29 elif(event.key() == Qt.Key_3):
30 self.ui.changeLandmarkType(guiLogic.landmarkType.ORANGE, ui.coneOrangeOption)
31 elif(event.key() == Qt.Key_4):
32 self.ui.changeLandmarkType(guiLogic.landmarkType.BIG_ORANGE, ui.coneBigOrangeOption)
33 elif(event.key() == Qt.Key_5):
34 self.ui.changeLandmarkType(guiLogic.landmarkType.INVISIBLE, ui.coneInvisibleOption)
35 elif(event.key() == Qt.Key_C):
36 self.guiLogic.editorMode = guiLogic.editorMode.LANE_CONNECT_LEFT
37 self.ui.deactiveOptionsExcept(self.ui.laneConnectOption)
38 self.ui.activateLaneConnection()
39 elif(event.key() == Qt.Key_T):
40 self.ui.activateTimeKeepingLine()
41 elif(event.key() == Qt.Key_P):
42 self.ui.startPoseSettings()
43 elif(event.key() == Qt.Key_G):
44 self.ui.gnssSettings()
45
46 elif(event.key() == Qt.Key_Escape):
47 self.guiLogic.editorMode = guiLogic.editorMode.ADD
48 self.ui.graphicsView.checkTimeKeepingLines()
49 self.guiLogic.graphicsView.resetLaneConnections()
50 self.guiLogic.graphicsView.addModeInit()
51 self.ui.changeLandmarkType(self.guiLogic.landmarkType, self.ui.lastLandmarkOption)
52
53
54class Ui_MainWindow(object):
55 def setupUi(self, MainWindow):
56 self.MainWindow = MainWindow
57 self.MainWindow.setObjectName("MainWindow")
58 self.MainWindow.setWindowTitle("Track editor")
59
60 self.MainWindow.resize(800, 600)
61 self.MainWindow.setWindowIcon(QIcon('icons/icon.png'))
62 self.centralwidget = QtWidgets.QWidget(self.MainWindow)
63 sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
64 sizePolicy.setHorizontalStretch(0)
65 sizePolicy.setVerticalStretch(0)
66 sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
67 self.centralwidget.setSizePolicy(sizePolicy)
68 self.centralwidget.setLayoutDirection(QtCore.Qt.LeftToRight)
69 self.centralwidget.setObjectName("centralwidget")
70 self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
71 self.verticalLayout.setObjectName("verticalLayout")
72 self.horizontalLayout = QtWidgets.QHBoxLayout()
73 self.horizontalLayout.setObjectName("horizontalLayout")
75 self.graphicsView.setRenderHints(QtGui.QPainter.HighQualityAntialiasing|QtGui.QPainter.SmoothPixmapTransform|QtGui.QPainter.TextAntialiasing)
76 self.graphicsView.setObjectName("graphicsView")
77 self.horizontalLayout.addWidget(self.graphicsView)
78 self.verticalLayout.addLayout(self.horizontalLayout)
79 self.MainWindow.setCentralWidget(self.centralwidget)
80 self.menuBar = QtWidgets.QMenuBar(self.MainWindow)
81 # self.menuBar.setGeometry(QtCore.QRect(0, 0, 500, 20))
82 self.menuBar.setObjectName("menuBar")
84 self.menuFile = QMenu("&File")
85 self.menuFile.addAction(self.openFileAction)
86 self.menuFile.addAction(self.saveFileAction)
87 self.menuBar.addMenu(self.menuFile)
88 self.menuHelp = QMenu("&Help")
89 self.menuHelp.addAction(self.controlsHelpAction)
90 self.menuHelp.addAction(self.aboutAction)
91 self.menuBar.addMenu(self.menuHelp)
92
93 self.MainWindow.setMenuBar(self.menuBar)
94
95 self.statusbar = QtWidgets.QStatusBar(MainWindow)
96 self.statusbar.setObjectName("statusbar")
97 MainWindow.setStatusBar(self.statusbar)
98 self.label = QLabel("", self.MainWindow)
99 self.label.setAlignment(Qt.AlignRight)
100 self.statusbar.addWidget(self.label)
101 # self.statusbar.setAlignment(Qt.AlignRight)
102 # self.statusbar.showMessage("hi")
104 self.toolBar = QtWidgets.QToolBar(self.MainWindow)
105 self.toolBar.setObjectName("toolBar")
106 self.toolBar.setWindowTitle("toolBar")
107 self.toolBar.addAction(self.coneBlueOption)
108 self.toolBar.addAction(self.coneYellowOption)
109 self.toolBar.addAction(self.coneOrangeOption)
110 self.toolBar.addAction(self.coneBigOrangeOption)
111 # self.toolBar.addAction(self.timeKeepingOption)
112 self.toolBar.addAction(self.coneInvisibleOption)
113 self.toolBar.addAction(self.coneUnknownOption)
114 self.toolBar.addAction(self.laneConnectOption)
115 self.toolBar.insertSeparator(self.laneConnectOption)
116 self.toolBar.addAction(self.timeKeepingLineOption)
117 self.toolBar.insertSeparator(self.startPoseOption)
118 self.toolBar.addAction(self.startPoseOption)
119 self.toolBar.addAction(self.gnssSettingsOption)
121 self.toolBar.insertSeparator(self.rulesComplianceCheckAction)
122 for o in self.toolBar.actions():
123 o.setCheckable(True)
124 self.lastLandmarkOption = ui.coneBlueOption
125 self.MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
126 self.widget = None
127
128 QtCore.QMetaObject.connectSlotsByName(self.MainWindow)
129 self.guiLogic = None
131 self.modeActionMap[guiLogic.landmarkType.UNDEFINED] = self.coneUnknownOption
132 self.modeActionMap[guiLogic.landmarkType.BLUE] = self.coneBlueOption
133 self.modeActionMap[guiLogic.landmarkType.YELLOW] = self.coneBlueOption
134 self.modeActionMap[guiLogic.landmarkType.ORANGE] = self.coneOrangeOption
135 self.modeActionMap[guiLogic.landmarkType.BIG_ORANGE] = self.coneBigOrangeOption
136 self.modeActionMap[guiLogic.landmarkType.INVISIBLE] = self.coneInvisibleOption
137
139 file = ""
140 filename, ok = QFileDialog.getSaveFileName(
141 self.MainWindow,
142 "Select a File",
143 file,
144 "Pacsim map yaml (*.yaml)"
145 )
146 if filename:
147 self.guiLogic.writeMapFile(filename)
148
150 file = ""
151 filename, ok = QFileDialog.getOpenFileName(
152 self.MainWindow,
153 "Select a File",
154 file,
155 "Pacsim map yaml (*.yaml)"
156 )
157 if filename:
158 self.graphicsView.removeAllCones()
159 self.graphicsView.resetAll()
160 guiLogic.readMapFile(filename)
161 guiLogic.drawCones()
162 self.graphicsView.scene().originCar.setTransform(self.guiLogic.startPosition, self.guiLogic.startOrientation)
163 self.graphicsView.scene().updateOriginLines()
164 # self.guiLogic.writeMapFile(filename)
165
167 self.openFileAction = QAction("&Open file")
168 self.openFileAction.setShortcut("Ctrl+O")
169 self.openFileAction.setStatusTip('Open file')
171
172 self.saveFileAction = QAction("&Save File")
173 self.saveFileAction.setShortcut("Ctrl+S")
174 self.saveFileAction.setStatusTip('Save File')
176 self.controlsHelpAction = QAction("&Controls")
177 self.aboutAction = QAction("&About")
178
179 def changeLandmarkType(self, t, option):
180 self.goBackToAdd()
181 self.guiLogic.landmarkType = t
182 self.lastLandmarkOption = option
183 self.deactiveOptionsExcept(option)
184
185 def goBackToAdd(self):
186 if(self.guiLogic.editorMode == guiLogic.editorMode.LANE_CONNECT_LEFT or self.guiLogic.editorMode == guiLogic.editorMode.LANE_CONNECT_RIGHT):
187 self.guiLogic.graphicsView.resetLaneConnections()
188 if(self.guiLogic.editorMode != guiLogic.editorMode.ADD):
189 self.graphicsView.checkTimeKeepingLines()
190 self.guiLogic.graphicsView.addModeInit()
191 self.guiLogic.editorMode = guiLogic.editorMode.ADD
192 self.deactiveOptionsExcept(self.modeActionMap[self.guiLogic.landmarkType])
193 self.modeActionMap[self.guiLogic.landmarkType].setChecked(True)
194
195 def deactiveOptionsExcept(self, option):
196 for i in self.toolBar.actions():
197 if option is not i:
198 i.setChecked(False)
199 else:
200 i.setChecked(True)
201
203 self.guiLogic.editorMode = guiLogic.editorMode.LANE_CONNECT_LEFT
204 self.graphicsView.resetLaneConnections()
205 self.laneConnectOption.setChecked(True)
207
209 self.guiLogic.editorMode = guiLogic.editorMode.TIMEKEEPING_START
210 # self.graphicsView.resetLaneConnections()
211 self.timeKeepingLineOption.setChecked(True)
213
214 def rulesCheck(self):
215 self.rulesComplianceCheckAction.setChecked(False)
216 trackLength = self.guiLogic.getTrackLength()
217 minTrackWidth = self.guiLogic.getMinTrackWidth()
218 minOuterDiameter = 2*self.guiLogic.getMinOuterRadius()
219 maxLaneDistance = self.guiLogic.getMaxLaneDistance()
220 isCompliant = (trackLength <= 500 and trackLength >= 200) and (minTrackWidth >= 3) and (abs(minOuterDiameter) >= 9) and (maxLaneDistance <= 5)
221 statusString = "Rules complaint" if isCompliant else "Not rules complaint"
222 stringTrackLength = "Track length: " + str(round(trackLength,2)) + "m"
223 stringTrackWidth = "Minimum track width: " + str(round(minTrackWidth,2)) + "m"
224 stringOuterDiameter = "Minimum outer track diameter: " + str(round(minOuterDiameter,2)) + "m"
225 stringMaxLaneDistance = "Max cone distance in lane: " + str(round(maxLaneDistance,2)) + "m"
226 msgBox = QMessageBox(parent=self.MainWindow)
227 msgBox.setText(statusString + "\n" + stringTrackLength + "\n" + stringTrackWidth + "\n" + stringOuterDiameter + "\n" + stringMaxLaneDistance)
228 msgBox.setStandardButtons(QMessageBox.Ok)
229 msgBox.setWindowIcon(QIcon('icons/icon.png'))
230 msgBox.setWindowTitle("Rules check")
231 msgBox.exec()
232
234 guiLogic.graphicsView.updateCompass()
235 if(self.widget):
236 self.widget.close()
237 self.startPoseOption.setChecked(False)
238 self.widget = QDialog(parent=self.MainWindow)
239 self.widget.setWindowFlags(self.widget.windowFlags() & ~Qt.WindowType.WindowContextHelpButtonHint)
240 self.widget.setWindowTitle("Start pose settings")
241 self.linePoseX = QLineEdit()
242 self.linePoseX.setValidator(QDoubleValidator())
243 self.linePoseX.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
244 self.linePoseX.setText(str(self.guiLogic.startPosition[0]))
245 self.linePoseY = QLineEdit()
246 self.linePoseY.setValidator(QDoubleValidator())
247 self.linePoseY.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
248 self.linePoseY.setText(str(self.guiLogic.startPosition[1]))
249 self.linePoseZ = QLineEdit()
250 self.linePoseZ.setValidator(QDoubleValidator())
251 self.linePoseZ.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
252 self.linePoseZ.setText(str(self.guiLogic.startPosition[2]))
253
254 r2d = 180.0 / np.pi
255 self.linePoseAlpha = QLineEdit()
256 self.linePoseAlpha.setValidator(QDoubleValidator())
257 self.linePoseAlpha.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
258 self.linePoseAlpha.setText(str(r2d*self.guiLogic.startOrientation[0]))
259 self.linePoseBeta = QLineEdit()
260 self.linePoseBeta.setValidator(QDoubleValidator())
261 self.linePoseBeta.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
262 self.linePoseBeta.setText(str(r2d*self.guiLogic.startOrientation[1]))
263 self.linePoseGamma = QLineEdit()
264 self.linePoseGamma.setValidator(QDoubleValidator())
265 self.linePoseGamma.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
266 self.linePoseGamma.setText(str(r2d*self.guiLogic.startOrientation[2]))
267
268 flo = QFormLayout()
269 flo.addRow("x/m",self.linePoseX)
270 flo.addRow("y/m",self.linePoseY)
271 flo.addRow("z/m",self.linePoseZ)
272
273 flo.addRow("alpha/deg",self.linePoseAlpha)
274 flo.addRow("beta/deg",self.linePoseBeta)
275 flo.addRow("gamma/deg",self.linePoseGamma)
276
277 button = QPushButton("Set")
278 button.clicked.connect(self.saveStartPosesaveStartPose)
279 flo.addRow(button)
280
281 self.widget.setLayout(flo)
282 self.widget.show()
283
284 def saveStartPose(self):
285 anyEmpty = len(self.linePoseX.text()) == 0 and len(self.linePoseY.text()) == 0 and len(self.linePoseZ.text()) == 0
286 anyEmpty = anyEmpty and len(self.linePoseAlpha.text()) == 0 and len(self.linePoseBeta.text()) == 0 and len(self.linePoseGamma.text()) == 0
287 if not anyEmpty:
288 d2r = np.pi / 180.0
289 self.guiLogic.startPosition = np.array([float(self.linePoseX.text()), float(self.linePoseY.text()), float(self.linePoseZ.text())])
290 self.guiLogic.startOrientation = d2r * np.array([float(self.linePoseAlpha.text()), float(self.linePoseBeta.text()), float(self.linePoseGamma.text())])
291 self.graphicsView.scene().originCar.setTransform(self.guiLogic.startPosition, self.guiLogic.startOrientation)
292 self.graphicsView.scene().updateOriginLines()
293 self.widget.close()
294 self.widget = None
295
296 def gnssSettings(self):
297 if(self.widget):
298 self.widget.close()
299 self.gnssSettingsOption.setChecked(False)
300 self.widget = QDialog(parent=self.MainWindow)
301 self.widget.setWindowFlags(self.widget.windowFlags() & ~Qt.WindowType.WindowContextHelpButtonHint)
302 self.widget.setWindowTitle("GNSS settings")
303 self.lineLatitude = QLineEdit()
304 self.lineLatitude.setValidator(QDoubleValidator())
305 self.lineLatitude.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
306 self.lineLatitude.setText(str(self.guiLogic.originGeodeticCoordinates[0]))
307 self.lineLongitude = QLineEdit()
308 self.lineLongitude.setValidator(QDoubleValidator())
309 self.lineLongitude.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
310 self.lineLongitude.setText(str(self.guiLogic.originGeodeticCoordinates[1]))
311 self.lineGeodeticHeight = QLineEdit()
312 self.lineGeodeticHeight.setValidator(QDoubleValidator())
313 self.lineGeodeticHeight.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
314 self.lineGeodeticHeight.setText(str(self.guiLogic.originGeodeticCoordinates[2]))
315
316 r2d = 180.0 / np.pi
317 self.ENURotAlpha = QLineEdit()
318 self.ENURotAlpha.setValidator(QDoubleValidator())
319 self.ENURotAlpha.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
320 self.ENURotAlpha.setText(str(r2d*self.guiLogic.originENURotation[0]))
321 self.ENURotBeta = QLineEdit()
322 self.ENURotBeta.setValidator(QDoubleValidator())
323 self.ENURotBeta.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
324 self.ENURotBeta.setText(str(r2d*self.guiLogic.originENURotation[1]))
325 self.ENURotGamma = QLineEdit()
326 self.ENURotGamma.setValidator(QDoubleValidator())
327 self.ENURotGamma.setValidator(QRegExpValidator(QRegExp("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?")))
328 self.ENURotGamma.setText(str(r2d*self.guiLogic.originENURotation[2]))
329
330 flo = QFormLayout()
331 flo.addRow("Latitude/deg",self.lineLatitude)
332 flo.addRow("Longitude/deg",self.lineLongitude)
333 flo.addRow("Geodetic height/m",self.lineGeodeticHeight)
334
335 flo.addRow("alpha/deg",self.ENURotAlpha)
336 flo.addRow("beta/deg",self.ENURotBeta)
337 flo.addRow("gamma/deg",self.ENURotGamma)
338
339 button = QPushButton("Set")
340 button.clicked.connect(self.saveGNSSsaveGNSS)
341 flo.addRow(button)
342
343 self.widget.setLayout(flo)
344 self.widget.show()
345
346 def saveGNSS(self):
347 anyEmpty = len(self.lineLatitude.text()) == 0 and len(self.lineLongitude.text()) == 0 and len(self.lineGeodeticHeight.text()) == 0
348 anyEmpty = anyEmpty and len(self.ENURotAlpha.text()) == 0 and len(self.ENURotBeta.text()) == 0 and len(self.ENURotGamma.text()) == 0
349 if not anyEmpty:
350 d2r = np.pi / 180.0
351 self.guiLogic.originGeodeticCoordinates = np.array([float(self.lineLatitude.text()), float(self.lineLongitude.text()), float(self.lineGeodeticHeight.text())])
352 self.guiLogic.originENURotation = d2r * np.array([float(self.ENURotAlpha.text()), float(self.ENURotBeta.text()), float(self.ENURotGamma.text())])
353 self.widget.close()
354 self.graphicsView.updateCompass()
355 self.widget = None
356
358 self.coneUnknownOption = QAction()
359 self.coneUnknownOption.setText("Unknown cone (0)")
360 self.coneUnknownOption.setIcon(QIcon("icons/coneUnknown.png"))
361 self.coneUnknownOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.UNDEFINED, self.coneUnknownOption))
362 self.coneBlueOption = QAction()
363 self.coneBlueOption.setText("Blue cone (2)")
364 self.coneBlueOption.setIcon(QIcon("icons/coneBlue.png"))
365 self.coneBlueOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.BLUE, self.coneBlueOption))
366 self.coneYellowOption = QAction()
367 self.coneYellowOption.setText("Yellow cone (1)")
368 self.coneYellowOption.setIcon(QIcon("icons/coneYellow.png"))
369 self.coneYellowOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.YELLOW, self.coneYellowOption))
370 self.coneOrangeOption = QAction()
371 self.coneOrangeOption.setText("Orange cone (3)")
372 self.coneOrangeOption.setIcon(QIcon("icons/coneOrange.png"))
373 self.coneOrangeOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.ORANGE, self.coneOrangeOption))
374 self.coneBigOrangeOption = QAction()
375 self.coneBigOrangeOption.setText("Big orange cone (4)")
376 self.coneBigOrangeOption.setIcon(QIcon("icons/coneBigOrange.png"))
377 self.coneBigOrangeOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.BIG_ORANGE, self.coneBigOrangeOption))
378 self.coneInvisibleOption = QAction()
379 self.coneInvisibleOption.setText("Invisible cone (5)")
380 self.coneInvisibleOption.setIcon(QIcon("icons/coneInvisible.png"))
381 self.coneInvisibleOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.INVISIBLE, self.coneInvisibleOption))
382 self.timeKeepingOption = QAction()
383 self.timeKeepingOption.setText("Timekeeping (6)")
384 self.timeKeepingOption.setIcon(QIcon("icons/timeKeeping.png"))
385 self.timeKeepingOption.triggered.connect(lambda: self.changeLandmarkType(guiLogic.landmarkType.TIMEKEEPING, self.timeKeepingOption))
386
387 self.laneConnectOption = QAction()
388 self.laneConnectOption.setText("Connes lanes (C)")
389 self.laneConnectOption.setIcon(QIcon("icons/laneConnectIcon.png"))
390 self.laneConnectOption.triggered.connect(lambda: self.activateLaneConnection())
391
392 self.timeKeepingLineOption = QAction()
393 self.timeKeepingLineOption.setText("Timekeeping (T)")
394 self.timeKeepingLineOption.setIcon(QIcon("icons/timeKeeping.png"))
395 self.timeKeepingLineOption.triggered.connect(lambda: self.activateTimeKeepingLine())
396
397 self.gnssSettingsOption = QAction()
398 self.gnssSettingsOption.setText("GNSS settings (G)")
399 self.gnssSettingsOption.setIcon(QIcon("icons/gnss.png"))
400 self.gnssSettingsOption.triggered.connect(lambda: self.gnssSettings())
401
402 self.startPoseOption = QAction()
403 self.startPoseOption.setText("Start pose (P)")
404 self.startPoseOption.setIcon(QIcon("icons/start.png"))
405 self.startPoseOption.triggered.connect(lambda: self.startPoseSettings())
406
407 self.rulesComplianceCheckAction = QAction()
408 self.rulesComplianceCheckAction.setText("Rules compliance check (R)")
409 self.rulesComplianceCheckAction.setIcon(QIcon("icons/rulesIcon.png"))
410 self.rulesComplianceCheckAction.triggered.connect(lambda: self.rulesCheck())
411
412 # self.gnssSettingsOption.triggered.connect(lambda: self.activateTimeKeepingLine())
413
414
416 self.label.setText(str)
417
418if __name__ == "__main__":
419 import sys
420 guiLogic = guiLogic.guiLogic()
421 app = QtWidgets.QApplication(sys.argv)
422 MainWindow = MyWindow()
423 MainWindow.guiLogic = guiLogic
425 ui.setupUi(MainWindow)
426 ui.guiLogic = guiLogic
427 MainWindow.ui = ui
428 guiLogic.graphicsView = ui.graphicsView
429 guiLogic.graphicsView.mainWindow = MainWindow
430 guiLogic.graphicsView.guiLogic = guiLogic
431 guiLogic.drawCones()
432 guiLogic.graphicsView.scene().originCar.setTransform(guiLogic.startPosition, guiLogic.startOrientation)
433 guiLogic.graphicsView.scene().updateOriginLines()
434 MainWindow.show()
435 guiLogic.graphicsView.updateCompass()
436 sys.exit(app.exec_())
keyPressEvent(self, event)
Definition main.py:21
__init__(self, *args, **kwargs)
Definition main.py:16
deactiveOptionsExcept(self, option)
Definition main.py:195
gnssSettings(self)
Definition main.py:296
startPoseSettings(self)
Definition main.py:233
goBackToAdd(self)
Definition main.py:185
_createMenuBarOptions(self)
Definition main.py:166
saveStartPose(self)
Definition main.py:284
save_file_dialog(self)
Definition main.py:138
setupUi(self, MainWindow)
Definition main.py:55
_creatToolbarOptions(self)
Definition main.py:357
updateMousePositionDisplay(self, str)
Definition main.py:415
activateLaneConnection(self)
Definition main.py:202
rulesCheck(self)
Definition main.py:214
activateTimeKeepingLine(self)
Definition main.py:208
changeLandmarkType(self, t, option)
Definition main.py:179
open_file_dialog(self)
Definition main.py:149
double round(double number, int n)
round to n decimal places
Definition tests.cpp:17