From cc859ef6e63d78707b684935ca86fbb39f1c0f3d Mon Sep 17 00:00:00 2001 From: Chris Pham Date: Thu, 15 Mar 2018 12:04:05 -0700 Subject: [PATCH 1/6] removed self.lat/long, waiting for GPS --- .../src/Framework/MapSystems/RoverMapCoordinator.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py index 2cd3b00..9ab0d45 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py @@ -132,11 +132,13 @@ class RoverMapCoordinator(QtCore.QThread): return temp_list def update_overlay(self): + longitude = 44.567161, + latitude = -123.278432, navigation_list = self._get_table_elements(self.navigation_label) # landmark_list = self._get_table_elements(self.landmark_label) landmark_list = [] - self.overlay_image_object.update_new_location(self.latitude, - self.longitude, + self.overlay_image_object.update_new_location(latitude, + longitude, 70, navigation_list, landmark_list) From 0903aa65cce1a8997759a8b6a55431c3ed651140 Mon Sep 17 00:00:00 2001 From: Chris Pham Date: Thu, 15 Mar 2018 12:07:47 -0700 Subject: [PATCH 2/6] Change to float --- .../ground_station/src/Framework/MapSystems/RoverMap.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py index d3b4975..faeb795 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py @@ -410,11 +410,11 @@ class OverlayImage(object): size = 5 draw = PIL.ImageDraw.Draw(self.big_image) for element in navigation_list: - x, y = self._get_cartesian(element[1], element[2]) + x, y = self._get_cartesian(float(element[1]), float(element[2])) draw.ellipsis((x-size, y-size, x+size, y+size), fill="red") - for element in navigation_list: - x, y = self._get_cartesian(element[1], element[2]) - draw.ellipsis((x-size, y-size, x+size, y+size), fill="blue") + # for element in landmark_list: + # x, y = self._get_cartesian(element[1], element[2]) + # draw.ellipsis((x-size, y-size, x+size, y+size), fill="blue") self._draw_rover(latitude, longitude, compass) self.update() From c03775868881c9a80ecfa785f7d924319d1db24b Mon Sep 17 00:00:00 2001 From: Chris Pham Date: Thu, 15 Mar 2018 12:11:26 -0700 Subject: [PATCH 3/6] Element Logger --- .../src/Framework/MapSystems/RoverMapCoordinator.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py index 9ab0d45..862ee3c 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py @@ -135,6 +135,8 @@ class RoverMapCoordinator(QtCore.QThread): longitude = 44.567161, latitude = -123.278432, navigation_list = self._get_table_elements(self.navigation_label) + for x in navigation_list: + self.logger.debug(str(x)) # landmark_list = self._get_table_elements(self.landmark_label) landmark_list = [] self.overlay_image_object.update_new_location(latitude, From cd6b3c5c030b1860bee6fd8673dee156891c375c Mon Sep 17 00:00:00 2001 From: Chris Pham Date: Thu, 15 Mar 2018 12:15:05 -0700 Subject: [PATCH 4/6] change access method for QtTable --- .../src/Framework/MapSystems/RoverMapCoordinator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py index 862ee3c..dd6ebab 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py @@ -124,9 +124,9 @@ class RoverMapCoordinator(QtCore.QThread): temp_list = [] count = UI_element.rowCount() for row in range(0, count): - num = UI_element.item(row, 0) - lat = UI_element.cellWidget(row, 1) - lng = UI_element.cellWidget(row, 2) + num = UI_element.itemAt(row, 0) + lat = UI_element.itemAt(row, 1) + lng = UI_element.itemAt(row, 2) temp_tuple = (num, lat, lng) temp_list.append(temp_tuple) return temp_list From b52407a527eaa7c9b343c27f785682f5666cd83e Mon Sep 17 00:00:00 2001 From: Chris Pham Date: Thu, 15 Mar 2018 12:17:15 -0700 Subject: [PATCH 5/6] access data of QtTableItem --- .../src/Framework/MapSystems/RoverMapCoordinator.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py index dd6ebab..dbd641e 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py @@ -124,9 +124,9 @@ class RoverMapCoordinator(QtCore.QThread): temp_list = [] count = UI_element.rowCount() for row in range(0, count): - num = UI_element.itemAt(row, 0) - lat = UI_element.itemAt(row, 1) - lng = UI_element.itemAt(row, 2) + num = UI_element.itemAt(row, 0).data + lat = UI_element.itemAt(row, 1).data + lng = UI_element.itemAt(row, 2).data temp_tuple = (num, lat, lng) temp_list.append(temp_tuple) return temp_list From 566b4367354cb4c619548f09bda3699a0df107ee Mon Sep 17 00:00:00 2001 From: Corwin Perren Date: Thu, 15 Mar 2018 15:31:30 -0700 Subject: [PATCH 6/6] Ken fixed statuses. Chris got map indicator working. --- .../src/Framework/MapSystems/RoverMap.py | 26 +++++---- .../MapSystems/RoverMapCoordinator.py | 19 +++---- .../src/Framework/StatusSystems/StatusCore.py | 57 +++++++++---------- .../src/Framework/StatusSystems/Timer.py | 28 ++++----- 4 files changed, 62 insertions(+), 68 deletions(-) diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py index faeb795..a7b7ebe 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py @@ -360,6 +360,7 @@ class OverlayImage(object): self.upper_y = (self.center_y - (self.height/2)) self.generate_image_files() + self.write_once = True def generate_image_files(self): """ @@ -372,6 +373,7 @@ class OverlayImage(object): self.display_image = self.helper.new_image(self.width, self.height, True) self.generate_dot_and_hat() + self.indicator.save("location.png") def _get_cartesian(self, lat, lon): """ @@ -389,11 +391,8 @@ class OverlayImage(object): # print viewport_lon_diff, viewport_lat_diff - bigimage_width = self.width - bigimage_height = self.height - - pixel_per_lat = bigimage_height / viewport_lat_diff - pixel_per_lon = bigimage_width / viewport_lon_diff + pixel_per_lat = self.big_height / viewport_lat_diff + pixel_per_lon = self.big_width / viewport_lon_diff # print "Pixel per:", pixel_per_lat, pixel_per_lon new_lat_gps_range_percentage = (viewport_lat_nw - lat) @@ -410,12 +409,12 @@ class OverlayImage(object): size = 5 draw = PIL.ImageDraw.Draw(self.big_image) for element in navigation_list: - x, y = self._get_cartesian(float(element[1]), float(element[2])) - draw.ellipsis((x-size, y-size, x+size, y+size), fill="red") + x, y = self._get_cartesian(float(element[2]), float(element[1])) + draw.ellipse((x-size, y-size, x+size, y+size), fill="red") # for element in landmark_list: # x, y = self._get_cartesian(element[1], element[2]) # draw.ellipsis((x-size, y-size, x+size, y+size), fill="blue") - self._draw_rover(latitude, longitude, compass) + self._draw_rover(longitude, latitude, compass) self.update() return self.display_image @@ -429,14 +428,21 @@ class OverlayImage(object): def _draw_rover(self, lat, lon, angle=0): x, y = self._get_cartesian(lat, lon) + print x,y # Center of the circle on the indicator is (12.5, 37.5) x = x - 50 y = y - 50 rotated = self.indicator.copy() rotated = rotated.rotate(angle, expand=True) - self.display_image.paste(self.indicator, (x, y)) - # self.display_image.save("Something.png") + rotated.save("rotated.png") + self.big_image.paste(rotated, (x, y), rotated) + if self.write_once: + self.display_image.save("Something.png") + self.write_once = False def update(self): self.display_image.paste(self.big_image, (-self.left_x, -self.upper_y)) + def connect_signals_and_slots(self): + pass + diff --git a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py index dbd641e..cf1d8f2 100644 --- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py +++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py @@ -55,7 +55,7 @@ class RoverMapCoordinator(QtCore.QThread): self.setup_map_flag = False else: self._get_map_image() - self.msleep(3) + self.msleep(30) self.logger.debug("Stopping Map Coordinator Thread") @@ -73,7 +73,7 @@ class RoverMapCoordinator(QtCore.QThread): 720, 44.567161, -123.278432, - 14, + 18, 'satellite', None, 20) self.overlay_image_object = ( @@ -124,23 +124,22 @@ class RoverMapCoordinator(QtCore.QThread): temp_list = [] count = UI_element.rowCount() for row in range(0, count): - num = UI_element.itemAt(row, 0).data - lat = UI_element.itemAt(row, 1).data - lng = UI_element.itemAt(row, 2).data + num = UI_element.item(row, 0).text() + lat = float(UI_element.item(row, 1).text()) + lng = float(UI_element.item(row, 2).text()) temp_tuple = (num, lat, lng) temp_list.append(temp_tuple) return temp_list def update_overlay(self): - longitude = 44.567161, - latitude = -123.278432, + longitude = 44.567161 + latitude = -123.278432 navigation_list = self._get_table_elements(self.navigation_label) - for x in navigation_list: - self.logger.debug(str(x)) # landmark_list = self._get_table_elements(self.landmark_label) landmark_list = [] - self.overlay_image_object.update_new_location(latitude, + self.overlay_image = self.overlay_image_object.update_new_location(latitude, longitude, 70, navigation_list, landmark_list) + # self.overlay_image.save("something.png") diff --git a/software/ros_packages/ground_station/src/Framework/StatusSystems/StatusCore.py b/software/ros_packages/ground_station/src/Framework/StatusSystems/StatusCore.py index 7774371..aa7d549 100644 --- a/software/ros_packages/ground_station/src/Framework/StatusSystems/StatusCore.py +++ b/software/ros_packages/ground_station/src/Framework/StatusSystems/StatusCore.py @@ -4,6 +4,7 @@ import rospy from rover_status.msg import * from PyQt5 import QtWidgets, QtCore, QtGui, uic from std_msgs.msg import Empty +# import Timer REQUEST_UPDATE_TOPIC = "/rover_status/update_requested" @@ -40,7 +41,6 @@ class SensorCore(QtCore.QThread): frsky_stylesheet_change_ready__signal = QtCore.pyqtSignal(str) - def __init__(self, shared_objects): super(SensorCore, self).__init__() @@ -87,7 +87,7 @@ class SensorCore(QtCore.QThread): self.jetson_msg = JetsonInfo() self.misc_msg = MiscStatuses() - rospy.Publisher(REQUEST_UPDATE_TOPIC, Empty, queue_size=1).publish(Empty()) + self.update_requester = rospy.Publisher(REQUEST_UPDATE_TOPIC, Empty, queue_size=10) def __camera_callback(self, data): self.camera_msg.camera_zed = data.camera_zed @@ -95,28 +95,28 @@ class SensorCore(QtCore.QThread): self.camera_msg.camera_chassis = data.camera_chassis self.camera_msg.camera_main_navigation = data.camera_main_navigation - if self.camera_msg.camera_zed is False: + if data.camera_zed is False: # self.zed.setStyleSheet("background-color: red;") self.camera_zed_stylesheet_change_ready__signal.emit("background-color: darkred;") else: # self.zed.setStyleSheet("background-color: darkgreen;") self.camera_zed_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - if self.camera_msg.camera_undercarriage is False: + if data.camera_undercarriage is False: # self.under_cam.setStyleSheet("background-color: darkred;") self.camera_under_stylesheet_change_ready__signal.emit("background-color: darkred;") else: # self.under_cam.setStyleSheet("background-color: darkgreen;") self.camera_under_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - if self.camera_msg.camera_chassis is False: + if data.camera_chassis is False: # self.chassis_cam.setStyleSheet("background-color: darkred;") self.camera_chassis_stylesheet_change_ready__signal.emit("background-color: darkred;") else: # self.chassis_cam.setStyleSheet("background-color: darkgreen;") self.camera_chassis_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - if self.camera_msg.camera_main_navigation is False: + if data.camera_main_navigation is False: # self.main_cam.setStyleSheet("background-color: darkred;") self.camera_main_stylesheet_change_ready__signal.emit("background-color: darkred;") else: @@ -136,21 +136,21 @@ class SensorCore(QtCore.QThread): self.bogie_msg.bogie_connection_2 = data.bogie_connection_2 self.bogie_msg.bogie_connection_3 = data.bogie_connection_3 - if self.bogie_msg.bogie_connection_1 is False: + if data.bogie_connection_1 is False: # self.bogie_right.setStyleSheet("background-color: darkred;") self.bogie_connection_1_stylesheet_change_ready__signal.emit("background-color: darkred;") else: # self.bogie_right.setStyleSheet("background-color: darkgreen;") self.bogie_connection_1_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - if self.bogie_msg.bogie_connection_2 is False: + if data.bogie_connection_2 is False: # self.bogie_left.setStyleSheet("background-color: darkred;") self.bogie_connection_2_stylesheet_change_ready__signal.emit("background-color: darkred;") else: # self.bogie_left.setStyleSheet("background-color: darkgreen;") self.bogie_connection_2_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - if self.bogie_msg.bogie_connection_3 is False: + if data.bogie_connection_3 is False: # self.bogie_rear.setStyleSheet("background-color: darkred;") self.bogie_connection_3_stylesheet_change_ready__signal.emit("background-color: darkred;") else: @@ -158,55 +158,48 @@ class SensorCore(QtCore.QThread): self.bogie_connection_3_stylesheet_change_ready__signal.emit("background-color: darkgreen;") def __jetson_callback(self, data): - self.jetson_msg.jetson_CPU = data.jetson_CPU + self.jetson_cpu_update_ready__signal.emit(str(data.jetson_CPU)) - # self.cpu_read.setText(str(self.jetson_msg.jetson_CPU)) - # self.cpu.setText(str(self.jetson_msg.jetson_CPU)) - self.jetson_cpu_update_ready__signal.emit(str(self.jetson_msg.jetson_CPU)) - - if self.jetson_msg.jetson_CPU > 79: + if data.jetson_CPU > 79: self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: orange;") - elif self.jetson_msg.jetson_CPU > 89: + elif data.jetson_CPU > 89: self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: darkred;") else: self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - self.jetson_ram_update_ready__signal.emit(str(self.jetson_msg.jetson_RAM)) + self.jetson_ram_update_ready__signal.emit(str(data.jetson_RAM)) - if self.jetson_msg.jetson_RAM > 79: + if data.jetson_RAM > 79: self.jetson_ram_stylesheet_change_ready__signal.emit("background-color: orange;") - elif self.jetson_msg.jetson_RAM > 89: + elif data.jetson_RAM > 89: self.jetson_ram_stylesheet_change_ready__signal.emit("background-color: darkred;") else: self.jetson_ram_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - self.jetson_gpu_temp_update_ready__signal.emit(str(self.jetson_msg.jetson_GPU_temp)) + self.jetson_gpu_temp_update_ready__signal.emit(str(data.jetson_GPU_temp)) - if self.jetson_msg.jetson_GPU_temp > 64: + if data.jetson_GPU_temp > 64: self.jetson_gpu_temp_stylesheet_change_ready__signal.emit("background-color: orange;") - elif self.jetson_msg.jetson_GPU_temp > 79: + elif data.jetson_GPU_temp > 79: self.jetson_gpu_temp_stylesheet_change_ready__signal.emit("background-color: darkred;") else: self.jetson_gpu_temp_stylesheet_change_ready__signal.emit("background-color: darkgreen;") - self.jetson_emmc_update_ready__signal.emit(str(self.jetson_msg.jetson_EMMC)) + self.jetson_emmc_update_ready__signal.emit(str(data.jetson_EMMC)) - if self.jetson_msg.jetson_EMMC > 79: + if data.jetson_EMMC > 79: self.jetson_emmc_stylesheet_change_ready__signal.emit("background-color: orange;") - elif self.jetson_msg.jetson_EMMC > 89: + elif data.jetson_EMMC > 89: self.jetson_emmc_stylesheet_change_ready__signal.emit("background-color: darkred;") else: self.jetson_emmc_stylesheet_change_ready__signal.emit("background-color: darkgreen") def __gps_callback(self, data): self.GPS_msg.UTC_GPS_time = data.UTC_GPS_time - self.GPS_msg.GPS_connection_status = data.GPS_connection_status - if self.GPS_msg.GPS_connection_status is False: - # self.gps.setStyleSheet("background-color: darkred") + if not data.GPS_connection_status: self.gps_stylesheet_change_ready__signal.emit("background-color: darkred;") else: - # self.gps.setStyleSheet("background-color: darkgreen;") self.gps_stylesheet_change_ready__signal.emit("background-color: darkgreen;") def __misc_callback(self, data): @@ -218,12 +211,14 @@ class SensorCore(QtCore.QThread): def __display_time(self): time = QtCore.QTime.currentTime() - temp = time.toString('hh:mm:ss') + temp = time.toString('hh:mm') self.clock.display(temp) def run(self): while self.run_thread_flag: - self.msleep(100) + self.update_requester.publish(Empty()) + self.__display_time() + self.msleep(1000) def connect_signals_and_slots(self): self.jetson_cpu_update_ready__signal.connect(self.cpu.setText) diff --git a/software/ros_packages/ground_station/src/Framework/StatusSystems/Timer.py b/software/ros_packages/ground_station/src/Framework/StatusSystems/Timer.py index b734925..86f5f9e 100644 --- a/software/ros_packages/ground_station/src/Framework/StatusSystems/Timer.py +++ b/software/ros_packages/ground_station/src/Framework/StatusSystems/Timer.py @@ -10,11 +10,11 @@ TICK_TIME = 2**6 class Timer(Qt.QMainWindow): - def __init__(self, parent=None): - super().__init__(parent) + def __init__(self): + super(Timer, self).__init__() - self.reset.clicked.connect(self.do_reset) - self.start.clicked.connect(self.do_start) + # self.reset.clicked.connect(self.do_reset) + # self.start.clicked.connect(self.do_start) self.timer = Qt.QTimer() self.timer.setInterval(TICK_TIME) @@ -22,14 +22,8 @@ class Timer(Qt.QMainWindow): self.do_reset() - def keyPressEvent(self, event): - if event.key() == Qt.Qt.Key_Escape: - self.close() - else: - super().keyPressEvent(event) - def display(self): - self.lcd.display("%d:%05.2f" % (self.time // 60, self.time % 60)) + self.timer.display("%d:%05.2f" % (self.time // 60, self.time % 60)) @Qt.pyqtSlot() def tick(self): @@ -39,16 +33,16 @@ class Timer(Qt.QMainWindow): @Qt.pyqtSlot() def do_start(self): self.timer.start() - self.start.setText("Pause") - self.start.clicked.disconnect() - self.start.clicked.connect(self.do_pause) + # self.start.setText("Pause") + # self.start.clicked.disconnect() + # self.start.clicked.connect(self.do_pause) @Qt.pyqtSlot() def do_pause(self): self.timer.stop() - self.start.setText("Start") - self.start.clicked.disconnect() - self.start.clicked.connect(self.do_start) + # self.start.setText("Start") + # self.start.clicked.disconnect() + # self.start.clicked.connect(self.do_start) @Qt.pyqtSlot() def do_reset(self):