mirror of
https://github.com/OSURoboticsClub/Rover_2017_2018.git
synced 2025-11-08 18:21:15 +00:00
RoverVideoCoordinator now kind of working with VideoReceiver dynamically
This commit is contained in:
64
ground_station/.idea/workspace.xml
generated
64
ground_station/.idea/workspace.xml
generated
@@ -24,8 +24,8 @@
|
||||
<file leaf-file-name="RoverVideoReceiverOld.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="282">
|
||||
<caret line="44" column="45" selection-start-line="44" selection-start-column="42" selection-end-line="44" selection-end-column="68" />
|
||||
<state relative-caret-position="-433">
|
||||
<caret line="54" column="43" selection-start-line="54" selection-start-column="39" selection-end-line="54" selection-end-column="43" />
|
||||
<folding>
|
||||
<element signature="e#0#10#0" expanded="true" />
|
||||
</folding>
|
||||
@@ -36,8 +36,8 @@
|
||||
<file leaf-file-name="RoverVideoReceiver.py" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="540">
|
||||
<caret line="45" column="8" selection-start-line="45" selection-start-column="8" selection-end-line="45" selection-end-column="47" />
|
||||
<state relative-caret-position="720">
|
||||
<caret line="100" column="92" selection-start-line="100" selection-start-column="92" selection-end-line="100" selection-end-column="92" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -66,11 +66,11 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="RoverVideoCoordinator.py" pinned="false" current-in-tab="false">
|
||||
<file leaf-file-name="RoverVideoCoordinator.py" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-312">
|
||||
<caret line="42" column="8" selection-start-line="42" selection-start-column="8" selection-end-line="43" selection-end-column="56" />
|
||||
<state relative-caret-position="138">
|
||||
<caret line="62" column="48" selection-start-line="62" selection-start-column="48" selection-end-line="62" selection-end-column="48" />
|
||||
<folding>
|
||||
<element signature="e#110#152#0" expanded="true" />
|
||||
</folding>
|
||||
@@ -78,10 +78,10 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="RoverGroundStation.py" pinned="false" current-in-tab="true">
|
||||
<file leaf-file-name="RoverGroundStation.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="624">
|
||||
<state relative-caret-position="1434">
|
||||
<caret line="167" column="43" selection-start-line="167" selection-start-column="43" selection-end-line="167" selection-end-column="43" />
|
||||
<folding>
|
||||
<element signature="e#132#142#0" expanded="true" />
|
||||
@@ -103,10 +103,10 @@
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/Framework/LoggingSystems/Logger.py" />
|
||||
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py" />
|
||||
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py" />
|
||||
<option value="$PROJECT_DIR$/Framework/StartupSystems/ROSMasterChecker.py" />
|
||||
<option value="$PROJECT_DIR$/RoverGroundStation.py" />
|
||||
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py" />
|
||||
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
@@ -539,16 +539,6 @@
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/.PyCharm2016.3/system/remote_sources/-1418177152/1376253408/cv_bridge/core.py" />
|
||||
<entry file="file://$USER_HOME$/.PyCharm2016.3/system/remote_sources/-1418177152/1376253408/rospy/topics.py" />
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="282">
|
||||
<caret line="44" column="45" selection-start-line="44" selection-start-column="42" selection-end-line="44" selection-end-column="68" />
|
||||
<folding>
|
||||
<element signature="e#0#10#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/.PyCharm2016.2/system/remote_sources/-1418177152/1376253408/rospy/client.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="196">
|
||||
@@ -567,19 +557,19 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py">
|
||||
<entry file="file://$PROJECT_DIR$/Framework/StartupSystems/ROSMasterChecker.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-312">
|
||||
<caret line="42" column="8" selection-start-line="42" selection-start-column="8" selection-end-line="43" selection-end-column="56" />
|
||||
<state relative-caret-position="774">
|
||||
<caret line="43" column="38" selection-start-line="43" selection-start-column="38" selection-end-line="43" selection-end-column="38" />
|
||||
<folding>
|
||||
<element signature="e#110#152#0" expanded="true" />
|
||||
<element signature="e#110#152#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="624">
|
||||
<state relative-caret-position="1434">
|
||||
<caret line="167" column="43" selection-start-line="167" selection-start-column="43" selection-end-line="167" selection-end-column="43" />
|
||||
<folding>
|
||||
<element signature="e#132#142#0" expanded="true" />
|
||||
@@ -587,24 +577,34 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Framework/StartupSystems/ROSMasterChecker.py">
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="774">
|
||||
<caret line="43" column="38" selection-start-line="43" selection-start-column="38" selection-end-line="43" selection-end-column="38" />
|
||||
<state relative-caret-position="-433">
|
||||
<caret line="54" column="43" selection-start-line="54" selection-start-column="39" selection-end-line="54" selection-end-column="43" />
|
||||
<folding>
|
||||
<element signature="e#110#152#0" expanded="true" />
|
||||
<element signature="e#0#10#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="540">
|
||||
<caret line="45" column="8" selection-start-line="45" selection-start-column="8" selection-end-line="45" selection-end-column="47" />
|
||||
<state relative-caret-position="720">
|
||||
<caret line="100" column="92" selection-start-line="100" selection-start-column="92" selection-end-line="100" selection-end-column="92" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="138">
|
||||
<caret line="62" column="48" selection-start-line="62" selection-start-column="48" selection-end-line="62" selection-end-column="48" />
|
||||
<folding>
|
||||
<element signature="e#110#152#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
<component name="webServersAuthStorage">
|
||||
<data>AAAAsC92Kuu3oLrABnhEDJd2fqLpSLKMDnz1RoGljcqcyx6rWWvT/BV+wcLNHGnvYk97nqnk/pKm4cGIiar9MRU3nZkNwyjJxPVtt3haC8iDCZdLJZ6CmktPYqrohRIav09rau96cPFO/I//1EIneIP/1ljcNiibrP6ukAATwUH19NLQaGz1/EYXXVq+qowSGeFE7dAFp107pLkmub5CsKj/8zF+PCqHoF8AEDn937Vn/JpXGWVGlieBMxMrucAQD8JqIA==</data>
|
||||
|
||||
@@ -27,6 +27,8 @@ EXCLUDED_CAMERAS = ["zed"]
|
||||
# RoverVideoCoordinator Class Definition
|
||||
#####################################
|
||||
class RoverVideoCoordinator(QtCore.QThread):
|
||||
pixmap_ready_signal = QtCore.pyqtSignal(str)
|
||||
|
||||
def __init__(self, shared_objects):
|
||||
super(RoverVideoCoordinator, self).__init__()
|
||||
|
||||
@@ -34,8 +36,8 @@ class RoverVideoCoordinator(QtCore.QThread):
|
||||
self.shared_objects = shared_objects
|
||||
self.right_screen = self.shared_objects["screens"]["right_screen"]
|
||||
self.primary_video_display_label = self.right_screen.primary_video_label # type:QtWidgets.QLabel
|
||||
self.primary_video_display_label = self.right_screen.secondary_video_label # type:QtWidgets.QLabel
|
||||
self.primary_video_display_label = self.right_screen.tertiary_video_label # type:QtWidgets.QLabel
|
||||
self.secondary_video_display_label = self.right_screen.secondary_video_label # type:QtWidgets.QLabel
|
||||
self.tertiary_video_display_label = self.right_screen.tertiary_video_label # type:QtWidgets.QLabel
|
||||
|
||||
# ########## Get the settings instance ##########
|
||||
self.settings = QtCore.QSettings()
|
||||
@@ -49,25 +51,26 @@ class RoverVideoCoordinator(QtCore.QThread):
|
||||
self.setup_cameras_flag = True
|
||||
|
||||
# ########## Class Variables ##########
|
||||
self.global_start_signal = None
|
||||
self.global_connect_signals_and_slots_signal = None
|
||||
self.global_kill_signal = None
|
||||
|
||||
# Camera variables
|
||||
self.camera_threads = {}
|
||||
self.valid_cameras = []
|
||||
|
||||
self.camera_threads = {}
|
||||
|
||||
# ########## Setup cameras ##########
|
||||
# Setup cameras
|
||||
self.__get_cameras()
|
||||
self.__setup_video_threads()
|
||||
|
||||
self.primary_label_current_setting = 0
|
||||
self.secondary_label_current_setting = 1
|
||||
self.tertiary_label_current_setting = 0
|
||||
|
||||
self.camera_data = {x: {"new_opencv": False} for x in self.valid_cameras}
|
||||
print self.camera_data
|
||||
|
||||
def run(self):
|
||||
self.logger.debug("Starting Video Coordinator Thread")
|
||||
|
||||
while self.run_thread_flag:
|
||||
if self.setup_cameras_flag:
|
||||
|
||||
self.setup_cameras_flag = False
|
||||
self.msleep(100)
|
||||
|
||||
self.__wait_for_camera_threads()
|
||||
@@ -101,7 +104,8 @@ class RoverVideoCoordinator(QtCore.QThread):
|
||||
self.camera_threads[camera].wait()
|
||||
|
||||
def connect_signals_and_slots(self):
|
||||
pass
|
||||
for thread in self.camera_threads:
|
||||
self.camera_threads[thread].image_ready_signal.connect(self.pixmap_ready__slot)
|
||||
|
||||
def setup_signals(self, start_signal, signals_and_slots_signal, kill_signal):
|
||||
start_signal.connect(self.start)
|
||||
@@ -111,6 +115,16 @@ class RoverVideoCoordinator(QtCore.QThread):
|
||||
for camera in self.camera_threads:
|
||||
self.camera_threads[camera].setup_signals(start_signal, signals_and_slots_signal, kill_signal)
|
||||
|
||||
def pixmap_ready__slot(self, camera):
|
||||
if self.valid_cameras[self.primary_label_current_setting] == camera:
|
||||
self.primary_video_display_label.setPixmap(self.camera_threads[camera].pixmap_1280x720_image)
|
||||
|
||||
if self.valid_cameras[self.secondary_label_current_setting] == camera:
|
||||
self.secondary_video_display_label.setPixmap(self.camera_threads[camera].pixmap_640x360_image)
|
||||
|
||||
if self.valid_cameras[self.tertiary_label_current_setting] == camera:
|
||||
self.tertiary_video_display_label.setPixmap(self.camera_threads[camera].pixmap_640x360_image)
|
||||
|
||||
def on_kill_threads_requested__slot(self):
|
||||
self.run_thread_flag = False
|
||||
|
||||
|
||||
@@ -25,8 +25,7 @@ FONT = cv2.FONT_HERSHEY_TRIPLEX
|
||||
# RoverVideoReceiver Class Definition
|
||||
#####################################
|
||||
class RoverVideoReceiver(QtCore.QThread):
|
||||
publish_message_signal = QtCore.pyqtSignal()
|
||||
image_ready_signal = QtCore.pyqtSignal()
|
||||
image_ready_signal = QtCore.pyqtSignal(str)
|
||||
|
||||
def __init__(self, camera_name):
|
||||
super(RoverVideoReceiver, self).__init__()
|
||||
@@ -54,12 +53,15 @@ class RoverVideoReceiver(QtCore.QThread):
|
||||
|
||||
# Image variables
|
||||
self.raw_image = None
|
||||
self.opencv_image = None
|
||||
self.pixmap = None
|
||||
self.opencv_1280x720_image = None
|
||||
self.opencv_640x360_image = None
|
||||
|
||||
self.pixmap_1280x720_image = None
|
||||
self.pixmap_640x360_image = None
|
||||
|
||||
# Processing variables
|
||||
self.bridge = CvBridge() # OpenCV ROS Video Data Processor
|
||||
self.video_enabled = False
|
||||
self.video_enabled = True
|
||||
self.new_frame = False
|
||||
|
||||
# Assign local callbacks
|
||||
@@ -80,10 +82,26 @@ class RoverVideoReceiver(QtCore.QThread):
|
||||
|
||||
def __show_video_enabled(self):
|
||||
if self.new_frame:
|
||||
self.opencv_image = self.bridge.compressed_imgmsg_to_cv2(self.raw_image, "rgb8")
|
||||
self.opencv_image = cv2.resize(self.opencv_image, (1280, 720))
|
||||
self.pixmap = QtGui.QPixmap.fromImage(qimage2ndarray.array2qimage(self.opencv_image))
|
||||
self.image_ready_signal.emit()
|
||||
opencv_image = self.bridge.compressed_imgmsg_to_cv2(self.raw_image, "rgb8")
|
||||
|
||||
height, width, _ = opencv_image.shape
|
||||
|
||||
if width != 1280 and height != 720:
|
||||
self.opencv_1280x720_image = cv2.resize(opencv_image, (1280, 720))
|
||||
else:
|
||||
self.opencv_1280x720_image = opencv_image
|
||||
|
||||
if width != 640 and height != 360:
|
||||
self.opencv_640x360_image = cv2.resize(opencv_image, (640, 360))
|
||||
else:
|
||||
self.opencv_640x360_image = opencv_image
|
||||
|
||||
self.pixmap_1280x720_image = QtGui.QPixmap.fromImage(qimage2ndarray.array2qimage(
|
||||
self.opencv_1280x720_image))
|
||||
self.pixmap_640x360_image = QtGui.QPixmap.fromImage(qimage2ndarray.array2qimage(
|
||||
self.opencv_640x360_image))
|
||||
|
||||
self.image_ready_signal.emit(self.camera_name)
|
||||
self.new_frame = False
|
||||
|
||||
def __show_video_disabled(self):
|
||||
@@ -91,13 +109,9 @@ class RoverVideoReceiver(QtCore.QThread):
|
||||
fps_image = np.zeros((720, 1280, 3), np.uint8)
|
||||
|
||||
self.pixmap = QtGui.QPixmap.fromImage(qimage2ndarray.array2qimage(fps_image))
|
||||
self.image_ready_signal.emit()
|
||||
self.image_ready_signal.emit(self.camera_name)
|
||||
self.new_frame = False
|
||||
|
||||
def __on_image_update_ready(self):
|
||||
pass
|
||||
# self.video_display_label.setPixmap(self.pixmap)
|
||||
|
||||
def __image_data_received_callback(self, raw_image):
|
||||
self.raw_image = raw_image
|
||||
self.new_frame = True
|
||||
@@ -117,7 +131,7 @@ class RoverVideoReceiver(QtCore.QThread):
|
||||
self.video_enabled = True
|
||||
|
||||
def connect_signals_and_slots(self):
|
||||
self.image_ready_signal.connect(self.__on_image_update_ready)
|
||||
pass
|
||||
|
||||
def setup_signals(self, start_signal, signals_and_slots_signal, kill_signal):
|
||||
start_signal.connect(self.start)
|
||||
|
||||
Reference in New Issue
Block a user