Everything ready to do sensing of frame rates to adjust quality. Dynamic reconfigure working! :D

This commit is contained in:
2018-01-25 17:55:23 -08:00
parent 39e33fb8c5
commit 219bc0956c
3 changed files with 246 additions and 19 deletions

View File

@@ -24,8 +24,8 @@
<file leaf-file-name="RoverVideoReceiver.py" pinned="false" current-in-tab="true"> <file leaf-file-name="RoverVideoReceiver.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py"> <entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1219"> <state relative-caret-position="1548">
<caret line="74" column="33" selection-start-line="74" selection-start-column="33" selection-end-line="74" selection-end-column="33" /> <caret line="155" column="8" selection-start-line="155" selection-start-column="8" selection-end-line="155" selection-end-column="8" />
<folding> <folding>
<element signature="e#110#152#0" expanded="true" /> <element signature="e#110#152#0" expanded="true" />
</folding> </folding>
@@ -59,11 +59,10 @@
<file leaf-file-name="RoverVideoCoordinator.py" pinned="false" current-in-tab="true"> <file leaf-file-name="RoverVideoCoordinator.py" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py"> <entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="359"> <state relative-caret-position="342">
<caret line="77" column="12" selection-start-line="77" selection-start-column="12" selection-end-line="77" selection-end-column="12" /> <caret line="19" column="22" selection-start-line="19" selection-start-column="22" selection-end-line="19" selection-end-column="32" />
<folding> <folding>
<element signature="e#110#145#0" expanded="true" /> <element signature="e#110#145#0" expanded="true" />
<marker date="1516923718211" expanded="false" signature="2739:4048" ph="..." />
</folding> </folding>
</state> </state>
</provider> </provider>
@@ -108,8 +107,8 @@
<option value="$PROJECT_DIR$/Framework/LoggingSystems/Logger.py" /> <option value="$PROJECT_DIR$/Framework/LoggingSystems/Logger.py" />
<option value="$PROJECT_DIR$/Framework/StartupSystems/ROSMasterChecker.py" /> <option value="$PROJECT_DIR$/Framework/StartupSystems/ROSMasterChecker.py" />
<option value="$PROJECT_DIR$/RoverGroundStation.py" /> <option value="$PROJECT_DIR$/RoverGroundStation.py" />
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py" />
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py" /> <option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py" />
<option value="$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py" />
</list> </list>
</option> </option>
</component> </component>
@@ -149,6 +148,8 @@
<foldersAlwaysOnTop value="true" /> <foldersAlwaysOnTop value="true" />
</navigator> </navigator>
<panes> <panes>
<pane id="Scratches" />
<pane id="Scope" />
<pane id="ProjectPane"> <pane id="ProjectPane">
<subPane> <subPane>
<PATH> <PATH>
@@ -219,8 +220,6 @@
</PATH> </PATH>
</subPane> </subPane>
</pane> </pane>
<pane id="Scope" />
<pane id="Scratches" />
</panes> </panes>
</component> </component>
<component name="PropertiesComponent"> <component name="PropertiesComponent">
@@ -523,6 +522,46 @@
<watches-manager /> <watches-manager />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/Framework/LoggingSystems/Logger.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288">
<caret line="21" column="37" selection-start-line="21" selection-start-column="23" selection-end-line="21" selection-end-column="37" />
<folding>
<element signature="e#110#134#0" expanded="true" />
</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="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#110#145#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2826">
<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" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1134">
<caret line="74" column="18" selection-start-line="74" selection-start-column="16" selection-end-line="74" selection-end-column="142" />
<folding>
<element signature="e#0#10#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/LoggingSystems/Logger.py"> <entry file="file://$PROJECT_DIR$/Framework/LoggingSystems/Logger.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288"> <state relative-caret-position="288">
@@ -539,7 +578,6 @@
<caret line="15" column="9" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="31" /> <caret line="15" column="9" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="31" />
<folding> <folding>
<element signature="e#110#145#0" expanded="true" /> <element signature="e#110#145#0" expanded="true" />
<marker date="1516923718211" expanded="false" signature="2739:4048" ph="..." />
</folding> </folding>
</state> </state>
</provider> </provider>
@@ -580,7 +618,6 @@
<caret line="4" column="25" selection-start-line="4" selection-start-column="25" selection-end-line="4" selection-end-column="25" /> <caret line="4" column="25" selection-start-line="4" selection-start-column="25" selection-end-line="4" selection-end-column="25" />
<folding> <folding>
<element signature="e#110#145#0" expanded="true" /> <element signature="e#110#145#0" expanded="true" />
<marker date="1516923718211" expanded="false" signature="2739:4048" ph="..." />
</folding> </folding>
</state> </state>
</provider> </provider>
@@ -673,18 +710,17 @@
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py"> <entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoCoordinator.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="359"> <state relative-caret-position="647">
<caret line="77" column="12" selection-start-line="77" selection-start-column="12" selection-end-line="77" selection-end-column="12" /> <caret line="117" column="0" selection-start-line="117" selection-start-column="0" selection-end-line="117" selection-end-column="0" />
<folding> <folding>
<element signature="e#110#145#0" expanded="true" /> <element signature="e#110#145#0" expanded="true" />
<marker date="1516923718211" expanded="false" signature="2739:4048" ph="..." />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py"> <entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiver.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1219"> <state relative-caret-position="18">
<caret line="74" column="33" selection-start-line="74" selection-start-column="33" selection-end-line="74" selection-end-column="33" /> <caret line="74" column="33" selection-start-line="74" selection-start-column="33" selection-end-line="74" selection-end-column="33" />
<folding> <folding>
<element signature="e#110#152#0" expanded="true" /> <element signature="e#110#152#0" expanded="true" />
@@ -692,6 +728,172 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/Framework/LoggingSystems/Logger.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288">
<caret line="21" column="37" selection-start-line="21" selection-start-column="23" selection-end-line="21" selection-end-column="37" />
<folding>
<element signature="e#110#134#0" expanded="true" />
</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="162">
<caret line="15" column="9" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="31" />
<folding>
<element signature="e#110#145#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2826">
<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" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1134">
<caret line="74" column="18" selection-start-line="74" selection-start-column="16" selection-end-line="74" selection-end-column="142" />
<folding>
<element signature="e#0#10#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/LoggingSystems/Logger.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="378">
<caret line="21" column="37" selection-start-line="21" selection-start-column="23" selection-end-line="21" selection-end-column="37" />
<folding>
<element signature="e#110#134#0" expanded="true" />
</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="72">
<caret line="4" column="25" selection-start-line="4" selection-start-column="25" selection-end-line="4" selection-end-column="25" />
<folding>
<element signature="e#110#145#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#132#142#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1134">
<caret line="74" column="18" selection-start-line="74" selection-start-column="16" selection-end-line="74" selection-end-column="142" />
<folding>
<element signature="e#0#10#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#132#142#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding>
<element signature="e#132#142#0" expanded="true" />
</folding>
</state>
</provider>
</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://$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">
<caret line="349" column="4" selection-start-line="349" selection-start-column="4" selection-end-line="349" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/LoggingSystems/Logger.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="288">
<caret line="21" column="37" selection-start-line="21" selection-start-column="23" selection-end-line="21" selection-end-column="37" />
<folding>
<element signature="e#110#134#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/StartupSystems/ROSMasterChecker.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>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/RoverGroundStation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2826">
<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" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Framework/VideoSystems/RoverVideoReceiverOld.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1134">
<caret line="74" column="18" selection-start-line="74" selection-start-column="16" selection-end-line="74" selection-end-column="142" />
<folding>
<element signature="e#0#10#0" expanded="true" />
</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="342">
<caret line="19" column="22" selection-start-line="19" selection-start-column="22" selection-end-line="19" selection-end-column="32" />
<folding>
<element signature="e#110#145#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="1548">
<caret line="155" column="8" selection-start-line="155" selection-start-column="8" selection-end-line="155" selection-end-column="8" />
<folding>
<element signature="e#110#152#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component> </component>
<component name="webServersAuthStorage"> <component name="webServersAuthStorage">
<data>AAAAsNHwc2N+8Zbshoe1tr2XDVkf8aGU/l0YnN7t0gOfSXYMOeQZo2dVv+GbvgrFH5EF+uviJzRPHArF3uX1Vb0CuhmnSE0NSLdGfSjyMrpWsoZyS3WBI979X8Y/8lSe/g2O65pafrceXlU4ySEbA9w/JNU42PtXijURL7sXfaZ8kxhE5bYQlRppUyBo5g/qgzvj275mbp6uuZ5w9ssFsOzrJGsGulioJmZ9L9P6O6PVj2sPT2AEw+jC8eGiiappc0lWOA==</data> <data>AAAAsNHwc2N+8Zbshoe1tr2XDVkf8aGU/l0YnN7t0gOfSXYMOeQZo2dVv+GbvgrFH5EF+uviJzRPHArF3uX1Vb0CuhmnSE0NSLdGfSjyMrpWsoZyS3WBI979X8Y/8lSe/g2O65pafrceXlU4ySEbA9w/JNU42PtXijURL7sXfaZ8kxhE5bYQlRppUyBo5g/qgzvj275mbp6uuZ5w9ssFsOzrJGsGulioJmZ9L9P6O6PVj2sPT2AEw+jC8eGiiappc0lWOA==</data>

View File

@@ -15,11 +15,15 @@ import RoverVideoReceiver
##################################### #####################################
CAMERA_TOPIC_PATH = "/cameras/" CAMERA_TOPIC_PATH = "/cameras/"
EXCLUDED_CAMERAS = ["zed"] EXCLUDED_CAMERAS = ["zed"]
#
PRIMARY_LABEL_MAX = (640, 360) PRIMARY_LABEL_MAX = (640, 360)
SECONDARY_LABEL_MAX = (256, 144) SECONDARY_LABEL_MAX = (256, 144)
TERTIARY_LABEL_MAX = (256, 144) TERTIARY_LABEL_MAX = (256, 144)
# PRIMARY_LABEL_MAX = (1280, 720)
# SECONDARY_LABEL_MAX = (640, 360)
# TERTIARY_LABEL_MAX = (640, 360)
##################################### #####################################
# RoverVideoCoordinator Class Definition # RoverVideoCoordinator Class Definition

View File

@@ -9,6 +9,7 @@ import numpy as np
import qimage2ndarray import qimage2ndarray
import rospy import rospy
import dynamic_reconfigure.client
from cv_bridge import CvBridge from cv_bridge import CvBridge
from sensor_msgs.msg import CompressedImage from sensor_msgs.msg import CompressedImage
@@ -19,6 +20,9 @@ from sensor_msgs.msg import CompressedImage
##################################### #####################################
CAMERA_TOPIC_PATH = "/cameras/" CAMERA_TOPIC_PATH = "/cameras/"
QUALITY_MAX = 50
QUALITY_MIN = 15
##################################### #####################################
# RoverVideoReceiver Class Definition # RoverVideoReceiver Class Definition
@@ -51,7 +55,7 @@ class RoverVideoReceiver(QtCore.QThread):
self.current_camera_settings = { self.current_camera_settings = {
"resolution": None, "resolution": None,
"quality_setting": 80, "quality_setting": QUALITY_MAX,
} }
@@ -83,8 +87,13 @@ class RoverVideoReceiver(QtCore.QThread):
self.camera_name_opencv_1280x720_image = None self.camera_name_opencv_1280x720_image = None
self.camera_name_opencv_640x360_image = None self.camera_name_opencv_640x360_image = None
# ROS Dynamic Reconfigure Client
self.reconfigure_clients = {}
# Initial class setup to make text images and get camera resolutions
self.__create_camera_name_opencv_images() self.__create_camera_name_opencv_images()
self.__get_camera_available_resolutions() self.__get_camera_available_resolutions()
self.__setup_reconfigure_clients()
def run(self): def run(self):
self.logger.debug("Starting \"%s\" Camera Thread" % self.camera_title_name) self.logger.debug("Starting \"%s\" Camera Thread" % self.camera_title_name)
@@ -99,6 +108,18 @@ class RoverVideoReceiver(QtCore.QThread):
self.logger.debug("Stopping \"%s\" Camera Thread" % self.camera_title_name) self.logger.debug("Stopping \"%s\" Camera Thread" % self.camera_title_name)
def __perform_quality_check_and_adjust(self):
self.__set_jpeg_quality(self.current_camera_settings["quality_setting"])
def __set_jpeg_quality(self, quality_setting):
self.reconfigure_clients[self.current_camera_settings["resolution"]].update_configuration({"jpeg_quality": quality_setting})
def __setup_reconfigure_clients(self):
for resolution_group in self.camera_topics:
image_topic_string = "image_%sx%s" % resolution_group
full_topic = self.topic_base_path + "/" + image_topic_string + "/compressed"
self.reconfigure_clients[resolution_group] = dynamic_reconfigure.client.Client(full_topic)
def __get_camera_available_resolutions(self): def __get_camera_available_resolutions(self):
topics = rospy.get_published_topics(self.topic_base_path) topics = rospy.get_published_topics(self.topic_base_path)
@@ -132,8 +153,10 @@ class RoverVideoReceiver(QtCore.QThread):
def __show_video_enabled(self): def __show_video_enabled(self):
self.__update_camera_subscription_and_settings() self.__update_camera_subscription_and_settings()
if self.new_frame and self.current_camera_settings["resolution"]: if self.new_frame and self.current_camera_settings["resolution"]:
# if self.raw_image: self.__perform_quality_check_and_adjust()
opencv_image = self.bridge.compressed_imgmsg_to_cv2(self.raw_image, "rgb8") opencv_image = self.bridge.compressed_imgmsg_to_cv2(self.raw_image, "rgb8")
self.__create_final_pixmaps(opencv_image) self.__create_final_pixmaps(opencv_image)
@@ -212,8 +235,6 @@ class RoverVideoReceiver(QtCore.QThread):
else: else:
new_topic = self.camera_topics[self.current_camera_settings["resolution"]] new_topic = self.camera_topics[self.current_camera_settings["resolution"]]
self.video_subscriber = rospy.Subscriber(new_topic, CompressedImage, self.__image_data_received_callback) self.video_subscriber = rospy.Subscriber(new_topic, CompressedImage, self.__image_data_received_callback)
# self.video_subscriber = rospy.Subscriber(self.temp_topic_path, CompressedImage,
# self.__image_data_received_callback)
self.video_enabled = True self.video_enabled = True
def connect_signals_and_slots(self): def connect_signals_and_slots(self):