def _record_timestamp(self): """Helper for updating current timestamp in parameters""" now = datetime.datetime.now() ParametersStore.set('record_date', now.strftime('%Y-%m-%d'), notify=False) ParametersStore.set('record_time', now.strftime('%H:%M:%S'), notify=False)
def _camera_parameter_changed(self, key, val): self.logger.debug('camera parameter changed: %s: %s', key, val) if key not in CAMERA_PARAMETERS: self.logger.debug('parameter %s is not a camera parameter', key) return try: ParametersStore.set(key, val) except KeyError: self.logger.exception('parameter %s = %s not supported', key, val)
def apply_other_parameter(self, param): """Apply parameter directly in parameter store, i.e. skipping any interaction with external devices. :param param Parameter: :rtype: bool :return: True""" value = param.value name = param.name ParametersStore.set(name, value) return True
def _update_camera_parameters(self, cam): """Update camera related parameters""" self.logger.debug('updating camera parameters') for param in CAMERA_PARAMETERS: try: val = self._get_param(cam, param) self.logger.debug('current value: %s -> %s', param, val) ParametersStore.set(param, val) except dbus.DBusException: self.logger.exception('failed to obtain parameter %s from camera %s', param, cam.object_path)
def _update_servo_parameters(self): """Update servo parameters after connecting""" if not self.servo: return for param in SERVO_PARAMETERS: try: val = self.servo.getValue(param) ParametersStore.set(param, val) except dbus.DBusException: self.logger.exception('failed to update parameter %s from servo', param)
def test_set_value(self): self.assertNotEqual(ParametersStore.DEPENDENCIES, {}) pdesc_bar = ParametersStore.get('bar') ParametersStore.set('foo', 3) bar_val = ParametersStore.get_value('bar') # bar = foo + 1 self.assertEqual(bar_val, 4) baz_val = ParametersStore.get_value('baz') # baz = foo * bar + 1 self.assertEqual(baz_val, 13) # cafe = baz ** 2 + bar cafe_val = ParametersStore.get_value('cafe') self.assertEqual(cafe_val, 173)
def _camera_state_changed(self, state): self.logger.debug('camera status changed: %d -> %d', self.camera_state, state) if state == self.CAMERA_STATE_ACTIVE_RECORDING: record_state = 1 else: record_state = 0 ParametersStore.set('record_state', record_state) if (state, self.camera_state) in self.SNAPSHOT_STATES: # take snapshot self.service.controller.take_snapshot() # update current camera state self.camera_state = state
def test_set(self): # test that a parameter can be set test_param = 'focus_distance_m' test_val = 10.0 self.assertTrue(ParametersStore.set(test_param, test_val)) focus_set = ParametersStore.get(test_param) self.assertEqual(focus_set.value, test_val)
def test_called(self): # verify that a callback was called only once for each set tmock = mock.Mock() test_param = 'focus_distance_m' test_value = 10.0 # register mock callback a couple of times, only one # registration is used ParametersStore.change_listeners.add(tmock) ParametersStore.change_listeners.add(tmock) ParametersStore.change_listeners.add(tmock) # set a parameter ParametersStore.set(test_param, test_value) # has to be called self.assertTrue(tmock.called) # called only once self.assertEquals(tmock.call_count, 1) self.assertEquals(len(tmock.call_args), 2) # grab the first list parameter pdesc = tmock.call_args[0][0] self.assertIsInstance(pdesc, Parameter) self.assertEquals(pdesc.name, test_param) self.assertEquals(pdesc.value, test_value) # set once again ParametersStore.set(test_param, test_value + 1) self.assertEquals(tmock.call_count, 2) # grab the first list parameter pdesc = tmock.call_args[0][0] self.assertEquals(pdesc.value, test_value + 1) # remove callback ParametersStore.change_listeners.remove(tmock) # and again, should not fail ParametersStore.change_listeners.remove(tmock) # now something different ParametersStore.change_listeners.remove(None)
def test_set_convert(self): # test that parameter can be set, and the value is # automatically converted to proper type test_param = 'focus_distance_m' test_val = 10 expecting_type = float # test value is an int self.assertIsInstance(test_val, int) # first read it param = ParametersStore.get(test_param) self.assertEqual(param.value_type, expecting_type) self.assertIsInstance(param.value, expecting_type) # set ParametersStore.set(test_param, test_val) as_set = ParametersStore.get(test_param) # the type should have been converted according to parameter # description self.assertIsInstance(as_set.value, expecting_type) self.assertEqual(as_set.value, expecting_type(test_val))
def test_baseline_changed(self): #Set initial values ParametersStore.set('frame_width_px', 1920, evaluate=False) ParametersStore.set('focal_length_mm', 25, evaluate=False) ParametersStore.set('baseline_mm', 50.0, evaluate=False) ParametersStore.set('frame_width_mm', 15.84, evaluate=False) ParametersStore.set('distance_screen_m', 5.2, evaluate=False) ParametersStore.set('distance_object1_m', 4.4, evaluate=False) ParametersStore.set('distance_object2_m', 9.5, evaluate=False) #Change baseline to different value so convergence evaluation starts ParametersStore.set('baseline_mm', 20, evaluate=True) #Check new values convergence_px = ParametersStore.get_value('convergence_px') self.assertEquals(round(convergence_px, 2), 12.03) convergence_deg = ParametersStore.get_value('convergence_deg') self.assertEquals(round(convergence_deg, 2), 0.22)
def test_focal_length_changed(self): #Set initial values ParametersStore.set('focal_length_mm', 25, evaluate=False) ParametersStore.set('baseline_mm', 50.0, evaluate=False) ParametersStore.set('frame_width_mm', 15.84, evaluate=False) ParametersStore.set('frame_height_mm', 8.91, evaluate=False) ParametersStore.set('distance_screen_m', 3.15, evaluate=False) ParametersStore.set('distance_near_m', 1.04, evaluate=False) #Change focal_length to check evaluation ParametersStore.set('focal_length_mm', 20, evaluate=True) #Check new values parallax_near_percent = ParametersStore.get_value( 'parallax_near_percent') self.assertEquals(round(parallax_near_percent, 2), -4.07) real_width_near_m = ParametersStore.get_value('real_width_near_m') self.assertEquals(round(real_width_near_m, 2), 0.82) real_height_near_m = ParametersStore.get_value('real_height_near_m') self.assertEquals(round(real_height_near_m, 2), 0.46)
def test_focal_length_changed(self): #Set initial values ParametersStore.set('focal_length_mm', 25, evaluate=False) ParametersStore.set('baseline_mm', 50.0, evaluate=False) ParametersStore.set('frame_width_mm', 15.84, evaluate=False) ParametersStore.set('frame_height_mm', 8.91, evaluate=False ) ParametersStore.set('distance_screen_m', 3.15, evaluate=False) ParametersStore.set('distance_near_m', 1.04, evaluate=False) #Change focal_length to check evaluation ParametersStore.set('focal_length_mm', 20, evaluate=True) #Check new values parallax_near_percent = ParametersStore.get_value('parallax_near_percent') self.assertEquals(round(parallax_near_percent, 2), -4.07) real_width_near_m = ParametersStore.get_value('real_width_near_m') self.assertEquals(round(real_width_near_m, 2), 0.82) real_height_near_m = ParametersStore.get_value('real_height_near_m') self.assertEquals(round(real_height_near_m, 2), 0.46)
def _servo_value_changed(self, parameter, motor, limit, in_progress, value): """pl.ros3d.servo.valueChanged signal handler""" self.logger.debug('got signal for parameter %s, value: %d', parameter, value) value = Infinity.convert_from(value) ParametersStore.set(parameter, value) self.logger.debug('parameter value updated')