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 eca806f..d3b4975 100644
--- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py
+++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMap.py
@@ -349,6 +349,7 @@ class OverlayImage(object):
self.height = height
self.big_image = None
self.display_image = None
+ self.indicator = None
self.helper = MapHelper.MapHelper()
x, y = self._get_cartesian(latitude, longitude)
@@ -370,6 +371,7 @@ class OverlayImage(object):
True)
self.display_image = self.helper.new_image(self.width, self.height,
True)
+ self.generate_dot_and_hat()
def _get_cartesian(self, lat, lon):
"""
@@ -403,30 +405,38 @@ class OverlayImage(object):
return int(x), int(y)
- def update_new_location(self, latitude, longitude, compass):
- self._draw_rover(latitude, longitude, 10, compass)
+ def update_new_location(self, latitude, longitude,
+ compass, navigation_list, landmark_list):
+ size = 5
+ draw = PIL.ImageDraw.Draw(self.big_image)
+ 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="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")
+ self._draw_rover(latitude, longitude, compass)
self.update()
return self.display_image
- def _draw_rover(self, lat, lon, size, scaler):
+ def generate_dot_and_hat(self):
+ self.indicator = self.helper.new_image(100, 100, True)
+ draw = PIL.ImageDraw.Draw(self.indicator)
+ draw.ellipse((50-12, 50-12, 50+12, 50+12), fill="red")
+ draw.line((25, 40, 50, 12), fill="red", width=7)
+ draw.line((50, 12, 75, 40), fill="red", width=7)
+
+ def _draw_rover(self, lat, lon, angle=0):
x, y = self._get_cartesian(lat, lon)
- draw = PIL.ImageDraw.Draw(self.big_image)
- draw.ellipse((x-size, y-size, x+size, y+size), fill="red")
- point_1 = tuple((math.cos(x-2*size * scaler), math.sin(y * scaler)))
- point_2 = tuple((math.cos(x * scaler), math.sin(y+2*size * scaler)))
- point_3 = (math.cos(x+2*size * scaler), math.sin(y * scaler))
- draw.line(
- (point_1,
- point_2),
- fill="red",
- width=600)
- draw.line(
- (point_2,
- point_3),
- fill="red",
- width=600)
- self.display_image.save("Something.png")
+ # 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")
def update(self):
self.display_image.paste(self.big_image, (-self.left_x, -self.upper_y))
+
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 f6e52a2..54ea45d 100644
--- a/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py
+++ b/software/ros_packages/ground_station/src/Framework/MapSystems/RoverMapCoordinator.py
@@ -21,6 +21,7 @@ import RoverMap
class RoverMapCoordinator(QtCore.QThread):
pixmap_ready_signal = QtCore.pyqtSignal()
+ change_waypoint_signal = QtCore.pyqtSignal()
def __init__(self, shared_objects):
super(RoverMapCoordinator, self).__init__()
@@ -28,6 +29,8 @@ class RoverMapCoordinator(QtCore.QThread):
self.shared_objects = shared_objects
self.left_screen = self.shared_objects["screens"]["left_screen"]
self.mapping_label = self.left_screen.mapping_label
+ self.navigation_label = self.left_screen.tableWidget
+ self.landmark_label = self.left_screen.tableWidget_2
self.setings = QtCore.QSettings()
@@ -84,9 +87,18 @@ class RoverMapCoordinator(QtCore.QThread):
def _get_map_image(self):
while self.map_image is None:
self.map_image = self.google_maps_object.display_image
- self.overlay_image_object.update_new_location(44.567161,-123.278432, .7)
- self.map_image.paste(self.overlay_image_object.display_image, (0,0), self.overlay_image_object.display_image)
- # self.map_image = Image.alpha_composite(self.google_maps_object.display_image, self.overlay_image_object.display_image)
+ # self.overlay_image_object.update_new_location(44.567161,
+ # -123.278432,
+ # .7,
+ # [],
+ # [])
+ self.update_overlay()
+ self.map_image.paste(self.overlay_image_object.display_image,
+ (0, 0),
+ self.overlay_image_object.display_image)
+ # self.map_image = Image.alpha_composite(
+ # self.google_maps_object.display_image,
+ # self.overlay_image_object.display_image)
# get overlay here
qim = ImageQt(self.map_image)
self.map_pixmap = QtGui.QPixmap.fromImage(qim)
@@ -94,6 +106,7 @@ class RoverMapCoordinator(QtCore.QThread):
def connect_signals_and_slots(self):
self.pixmap_ready_signal.connect(self.pixmap_ready__slot)
+ self.change_waypoint_signal.connect(self.update_overlay)
def on_kill_threads_requested_slot(self):
self.run_thread_flag = False
@@ -106,3 +119,23 @@ class RoverMapCoordinator(QtCore.QThread):
def pixmap_ready__slot(self):
self.mapping_label.setPixmap(self.map_pixmap)
+
+ def _get_table_elements(self, UI_element):
+ 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)
+ temp_tuple = (num, lat, lng)
+ temp_list.append(temp_tuple)
+ return temp_list
+
+ def update_overlay(self):
+ navigation_list = self._get_table_elements(self.navigation_label)
+ landmark_list = self._get_table_elements(self.landmark_label)
+ self.overlay_image_object.update_new_location(self.latitude,
+ self.longitude,
+ 70,
+ navigation_list,
+ landmark_list)
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 38e65ac..579676f 100644
--- a/software/ros_packages/ground_station/src/Framework/StatusSystems/StatusCore.py
+++ b/software/ros_packages/ground_station/src/Framework/StatusSystems/StatusCore.py
@@ -17,8 +17,29 @@ MISC_TOPIC_NAME = "/rover_status/misc_status"
class SensorCore(QtCore.QThread):
+ # ########## create signals for slots ##########
jetson_cpu_update_ready__signal = QtCore.pyqtSignal(str)
jetson_cpu_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ jetson_emmc_update_ready__signal = QtCore.pyqtSignal(str)
+ jetson_emmc_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ jetson_gpu_temp_update_ready__signal = QtCore.pyqtSignal(str)
+ jetson_gpu_temp_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ jetson_ram_update_ready__signal = QtCore.pyqtSignal(str)
+ jetson_ram_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+
+ bogie_connection_1_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ bogie_connection_2_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ bogie_connection_3_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+
+ camera_zed_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ camera_under_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ camera_chassis_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+ camera_main_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+
+ gps_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+
+ frsky_stylesheet_change_ready__signal = QtCore.pyqtSignal(str)
+
def __init__(self, shared_objects):
super(SensorCore, self).__init__()
@@ -32,6 +53,7 @@ class SensorCore(QtCore.QThread):
self.cpu_read = self.screen_main_window.lineEdit # type: QtWidgets.QLabel
self.ram_read = self.screen_main_window.lineEdit_2 # type: QtWidgets.QLabel
+ # ########## set vars to gui elements
self.rover_conn = self.screen_main_window.rover # type: QtWidgets.QLabel
self.frsky = self.screen_main_window.frsky # type: QtWidgets.QLabel
self.nav_mouse = self.screen_main_window.nav_mouse # type: QtWidgets.QLabel
@@ -47,8 +69,10 @@ class SensorCore(QtCore.QThread):
self.clock = self.screen_main_window.clock # type: QtWidgets.QLCDNumber
self.cpu = self.screen_main_window.cpu # type: QtWidgets.QLabel
self.ram = self.screen_main_window.ram # type: QtWidgets.QLabel
+ self.gpu_temp = self.screen_main_window.gpu_temp # type: QtWidgets.QLabel
+ self.emmc = self.screen_main_window.emmc # type: QtWidgets.QLabel
- # Subscription examples on pulling data from system_statuses_node.py
+ # ########## subscriptions pulling data from system_statuses_node.py ##########
self.camera_status = rospy.Subscriber(CAMERA_TOPIC_NAME, CameraStatuses, self.__camera_callback)
self.bogie_status = rospy.Subscriber(BOGIE_TOPIC_NAME, BogieStatuses, self.__bogie_callback)
self.frsky_status = rospy.Subscriber(FRSKY_TOPIC_NAME, FrSkyStatus, self.__frsky_callback)
@@ -72,32 +96,40 @@ class SensorCore(QtCore.QThread):
self.camera_msg.camera_main_navigation = data.camera_main_navigation
if self.camera_msg.camera_zed is False:
- self.zed.setStyleSheet("background-color: red;")
+ # 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.zed.setStyleSheet("background-color: darkgreen;")
+ self.camera_zed_stylesheet_change_ready__signal.emit("background-color: darkgreen;")
if self.camera_msg.camera_undercarriage is False:
- self.under_cam.setStyleSheet("background-color: red;")
+ # 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.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:
- self.chassis_cam.setStyleSheet("background-color: red;")
+ # 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.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:
- self.main_cam.setStyleSheet("background-color: red;")
+ # self.main_cam.setStyleSheet("background-color: darkred;")
+ self.camera_main_stylesheet_change_ready__signal.emit("background-color: darkred;")
else:
- self.main_cam.setStyleSheet("background-color: darkgreen;")
+ # self.main_cam.setStyleSheet("background-color: darkgreen;")
+ self.camera_main_stylesheet_change_ready__signal.emit("background-color: darkgreen;")
def __frsky_callback(self, data):
self.FrSky_msg.FrSky_controller_connection_status = data.FrSky_controller_connection_status
if self.FrSky_msg.FrSky_controller_connection_status is False:
- self.frsky.setStyleSheet("background-color: red;")
+ self.frsky_stylesheet_change_ready__signal.emit("background-color: darkred;")
else:
- self.frsky.setStyleSheet("background-color: darkgreen;")
+ self.frsky_stylesheet_change_ready__signal.emit("background-color: darkgreen;")
def __bogie_callback(self, data):
self.bogie_msg.bogie_connection_1 = data.bogie_connection_1
@@ -105,19 +137,25 @@ class SensorCore(QtCore.QThread):
self.bogie_msg.bogie_connection_3 = data.bogie_connection_3
if self.bogie_msg.bogie_connection_1 is False:
- self.bogie_right.setStyleSheet("background-color: red;")
+ # 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_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:
- self.bogie_left.setStyleSheet("background-color: red;")
+ # 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_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:
- self.bogie_rear.setStyleSheet("background-color: red;")
+ # self.bogie_rear.setStyleSheet("background-color: darkred;")
+ self.bogie_connection_3_stylesheet_change_ready__signal.emit("background-color: darkred;")
else:
- self.bogie_rear.setStyleSheet("background-color: darkgreen;")
+ # self.bogie_rear.setStyleSheet("background-color: darkgreen;")
+ 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
@@ -128,35 +166,48 @@ class SensorCore(QtCore.QThread):
if self.jetson_msg.jetson_CPU > 79:
self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: orange;")
- # self.cpu.setStyleSheet("background-color: orange;")
elif self.jetson_msg.jetson_CPU > 89:
- self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: red;")
- # self.cpu.setStyleSheet("background-color: red;")
+ self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: darkred;")
else:
self.jetson_cpu_stylesheet_change_ready__signal.emit("background-color: darkgreen;")
- # self.cpu.setStyleSheet("background-color: darkgreen;")
- # self.jetson_msg.jetson_RAM = data.jetson_RAM
- # self.ram.setText(str(self.jetson_msg.jetson_RAM))
- # if self.jetson_msg.jetson_RAM > 79:
- # self.ram.setStyleSheet("background-color: orange;")
- # elif self.jetson_msg.jetson_RAM > 89:
- # self.ram.setStyleSheet("background-color: red;")
- # else:
- # self.ram.setStyleSheet("background-color: darkgreen;")
- #
- # self.jetson_msg.jetson_EMMC = data.jetson_EMMC
- # self.jetson_msg.jetson_NVME_SSD = data.jetson_NVME_SSD
- #rospy.loginfo(self.jetson_msg)
+ self.jetson_ram_update_ready__signal.emit(str(self.jetson_msg.jetson_RAM))
+
+ if self.jetson_msg.jetson_RAM > 79:
+ self.jetson_ram_stylesheet_change_ready__signal.emit("background-color: orange;")
+ elif self.jetson_msg.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))
+
+ if self.jetson_msg.jetson_GPU_temp > 64:
+ self.jetson_gpu_temp_stylesheet_change_ready__signal.emit("background-color: orange;")
+ elif self.jetson_msg.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))
+
+ if self.jetson_msg.jetson_EMMC > 79:
+ self.jetson_emmc_stylesheet_change_ready__signal.emit("background-color: orange;")
+ elif self.jetson_msg.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: red")
+ # self.gps.setStyleSheet("background-color: darkred")
+ self.gps_stylesheet_change_ready__signal.emit("background-color: darkred;")
else:
- self.gps.setStyleSheet("background-color: darkgreen;")
+ # self.gps.setStyleSheet("background-color: darkgreen;")
+ self.gps_stylesheet_change_ready__signal.emit("background-color: darkgreen;")
def __misc_callback(self, data):
self.misc_msg.arm_connection_status = data.arm_connection_status
@@ -177,6 +228,21 @@ class SensorCore(QtCore.QThread):
def connect_signals_and_slots(self):
self.jetson_cpu_update_ready__signal.connect(self.cpu.setText)
self.jetson_cpu_stylesheet_change_ready__signal.connect(self.cpu.setStyleSheet)
+ self.jetson_ram_update_ready__signal.connect(self.ram.setText)
+ self.jetson_ram_stylesheet_change_ready__signal(self.ram.setStyleSheet)
+ self.jetson_emmc_update_ready__signal.connect(self.emmc.setText)
+ self.jetson_emmc_stylesheet_change_ready__signal.connect(self.emmc.setStyleSheet)
+ self.jetson_gpu_temp_update_ready__signal.connect(self.gpu_temp.setText)
+ self.jetson_gpu_temp_stylesheet_change_ready__signal(self.gpu_temp.setStyleSheet)
+ self.bogie_connection_1_stylesheet_change_ready__signal.connect(self.bogie_right.setStyleSheet)
+ self.bogie_connection_2_stylesheet_change_ready__signal.connect(self.bogie_left.setStyleSheet)
+ self.bogie_connection_3_stylesheet_change_ready__signal.connect(self.bogie_rear.setStyleSheet)
+ self.camera_zed_stylesheet_change_ready__signal.connect(self.zed.setStyleSheet)
+ self.camera_under_stylesheet_change_ready__signal.connect(self.under_cam.setStyleSheet)
+ self.camera_chassis_stylesheet_change_ready__signal.connect(self.chassis_cam.setStyleSheet)
+ self.camera_main_stylesheet_change_ready__signal.connect(self.main_cam.setStyleSheet)
+ self.gps_stylesheet_change_ready__signal.connect(self.gps.setStyleSheet)
+ self.frsky_stylesheet_change_ready__signal.connect(self.frsky.setStyleSheet)
def setup_signals(self, start_signal, signals_and_slots_signal, kill_signal):
start_signal.connect(self.start)
diff --git a/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui b/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui
index 8c781e5..0f49ff5 100644
--- a/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui
+++ b/software/ros_packages/ground_station/src/Resources/Ui/left_screen.ui
@@ -80,17 +80,27 @@
0
-
-
+
- background-color: darkgreen;
+ background-color: darkred;
- placeholder
+ <html><head/><body><p align="center"><span style=" font-weight:600;">EMMC</span></p></body></html>
- -
-
+
-
+
+
+ background-color: darkred;
+
+
+ <html><head/><body><p align="center"><span style=" font-weight:600;">GPU </span><span style=" font-weight:600;">Temp</span></p></body></html>
+
+
+
+ -
+
0
@@ -123,7 +133,7 @@
- background-color:darkgreen;
+ background-color:darkred;
Undercarriage Camera
@@ -175,7 +185,7 @@ Connected
false
- background-color:darkgreen;
+ background-color:darkred;
Right Bogie
@@ -237,7 +247,7 @@ Connected
- background-color:darkgreen;
+ background-color:darkred;
QFrame::NoFrame
@@ -282,7 +292,7 @@ Connected
false
- background-color:darkgreen;
+ background-color:darkred;
GPS
@@ -365,7 +375,7 @@ Fix
- background-color:darkgreen;
+ background-color:darkred;
QFrame::NoFrame
@@ -407,7 +417,7 @@ Connected
- background-color:darkgreen;
+ background-color:darkred;
QFrame::NoFrame
@@ -452,7 +462,7 @@ Connected
false
- background-color:darkgreen;
+ background-color:darkred;
3D Nav Mouse
@@ -491,7 +501,7 @@ Connected
- background-color:darkgreen;
+ background-color:darkred;
QFrame::NoFrame
@@ -505,8 +515,31 @@ Connected
- -
-
+
-
+
+
+ -
+
+
+ background-color: darkred;
+
+
+ <html><head/><body><p align="center"><span style=" font-weight:600;">RAM</span></p></body></html>
+
+
+
+ -
+
+
+ background-color: darkred;
+
+
+ <html><head/><body><p align="center"><span style=" font-weight:600;">CPU %</span></p></body></html>
+
+
+
+ -
+
0
@@ -539,7 +572,7 @@ Connected
- background-color:darkgreen;
+ background-color:darkred;
Chassis Camera
@@ -584,7 +617,7 @@ Connected
- background-color:darkgreen;
+ background-color:darkred;
FrSky
@@ -998,7 +1031,7 @@ Connected
-
-
+ Connection
0