コード例 #1
0
    def run(self):
        """Run the thread."""
        frequency = self.axis._state_publishing_frequency
        rate = rospy.Rate(frequency)

        state_publisher = DiagnosedPublisher(
            rospy.Publisher("camera/ptz", PTZ, queue_size=100),
            self._diagnostic_updater, FrequencyStatusParam({'min': frequency, 'max': frequency}, tolerance=0.2), TimeStampStatusParam()
        )
        joint_states_publisher = DiagnosedPublisher(
            rospy.Publisher("camera/joint_states", JointState, queue_size=100),
            self._diagnostic_updater, FrequencyStatusParam({'min': frequency, 'max': frequency}, tolerance=0.2), TimeStampStatusParam()
        )
        parameter_updates_publisher = rospy.Publisher("axis_ptz/parameter_updates", Config, queue_size=100)

        while not rospy.is_shutdown():
            # publish position forever
            try:
                # get camera position from API
                camera_position = self.api.get_camera_position()  # we use deprecated param values
                message_time = rospy.Time.now()

                # Create and publish the PTZ message
                message = self._create_camera_position_message(camera_position, message_time)
                state_publisher.publish(message)

                # Create and publish JointState
                joint_states_message = self._create_camera_joint_states_message(camera_position, message_time)
                joint_states_publisher.publish(joint_states_message)

                # Publish the parameter updates (because of backwards compatibility)
                parameter_updates_message = self._create_parameter_updates_message(camera_position)
                parameter_updates_publisher.publish(parameter_updates_message)

                # set the parameters (because of backwards compatibility)
                rospy.set_param("axis_ptz/pan", camera_position['pan'])
                rospy.set_param("axis_ptz/tilt", camera_position['tilt'])
                rospy.set_param("axis_ptz/zoom", camera_position['zoom'])

                # Create and publish the deprecated Axis message
                self.cameraPosition = camera_position  # backwards compatibility
                self.publishCameraState()  # backwards compatibility
            except (IOError, ValueError, RuntimeError) as e:
                rospy.logwarn("Could not determine current camera position. Waiting 1 s. Cause: %s" % repr(e.args))
                rospy.sleep(1)

            self._diagnostic_updater.update()

            try:
                rate.sleep()
            except rospy.ROSTimeMovedBackwardsException:
                rospy.logwarn("Detected jump back in time.")
コード例 #2
0
    def run(self):
        """Run the thread."""
        frequency = self.axis._state_publishing_frequency
        rate = rospy.Rate(frequency)

        state_publisher = DiagnosedPublisher(
            rospy.Publisher("camera/ptz", PTZ, queue_size=100),
            self._diagnostic_updater,
            FrequencyStatusParam({
                'min': frequency,
                'max': frequency
            },
                                 tolerance=0.2), TimeStampStatusParam())
        joint_states_publisher = DiagnosedPublisher(
            rospy.Publisher("camera/joint_states", JointState, queue_size=100),
            self._diagnostic_updater,
            FrequencyStatusParam({
                'min': frequency,
                'max': frequency
            },
                                 tolerance=0.2), TimeStampStatusParam())
        parameter_updates_publisher = rospy.Publisher(
            "axis_ptz/parameter_updates", Config, queue_size=100)

        while not rospy.is_shutdown():
            # publish position forever
            try:
                # get camera position from API
                camera_position = self.api.get_camera_position(
                )  # we use deprecated param values
                message_time = rospy.Time.now()

                # Create and publish the PTZ message
                message = self._create_camera_position_message(
                    camera_position, message_time)
                state_publisher.publish(message)

                # Create and publish JointState
                joint_states_message = self._create_camera_joint_states_message(
                    camera_position, message_time)
                joint_states_publisher.publish(joint_states_message)

                # Publish the parameter updates (because of backwards compatibility)
                parameter_updates_message = self._create_parameter_updates_message(
                    camera_position)
                parameter_updates_publisher.publish(parameter_updates_message)

                # set the parameters (because of backwards compatibility)
                rospy.set_param("axis_ptz/pan", camera_position['pan'])
                rospy.set_param("axis_ptz/tilt", camera_position['tilt'])
                rospy.set_param("axis_ptz/zoom", camera_position['zoom'])

                # Create and publish the deprecated Axis message
                self.cameraPosition = camera_position  # backwards compatibility
                self.publishCameraState()  # backwards compatibility
            except (IOError, ValueError, RuntimeError) as e:
                rospy.logwarn(
                    "Could not determine current camera position. Waiting 1 s. Cause: %s"
                    % repr(e.args))
                rospy.sleep(1)

            self._diagnostic_updater.update()

            try:
                rate.sleep()
            except rospy.ROSTimeMovedBackwardsException:
                rospy.logwarn("Detected jump back in time.")
コード例 #3
0
ファイル: axis.py プロジェクト: tradr-project/axis_camera
 def run(self, stat):
     if self._axis._streaming_thread is None or  self._axis._streaming_thread.is_paused():
         stat.summary(DiagnosticStatusWrapper.OK, "Video not subscribed")
     else:
         stat = DiagnosedPublisher.run(self, stat)
     return stat
コード例 #4
0
ファイル: axis.py プロジェクト: tradr-project/axis_camera
 def __init__(self, axis, pub, diag, freq, stamp):
     DiagnosedPublisher.__init__(self, pub, diag, freq, stamp)
     self._axis = axis