Пример #1
0
class MotorSpeed(Configurable):

    l_value = traitlets.Float()
    r_value = traitlets.Float()

    def __init__(self, astar, *args, **kwargs):
        super(MotorSpeed, self).__init__(*args, **kwargs)  # initializes traitlets
        self._astar = astar

        atexit.register(self._release)

    @traitlets.observe('l_value')
    def _observe_value_left(self, change):
        logging.basicConfig(stream=sys.stdout, level=logging.INFO)
        logger = logging.getLogger()
        logging.info("Updating l_value: " + str(change['new']) + " using existing r_value: " + str(self.r_value))
        self._write_value(change['new'], self.r_value)

    @traitlets.observe('r_value')
    def _observe_value_right(self, change):
        logging.basicConfig(stream=sys.stdout, level=logging.INFO)
        logger = logging.getLogger()
        logging.info("Updating r_value: " + str(change['new']) + " using existing l_value: " + str(self.l_value))
        self._write_value(self.l_value, change['new'])

    def _write_value(self, left_speed, right_speed):
        self._astar.motors(int(min(left_speed, 1) * 400), int(min(right_speed, 1) * 400))

    def _release(self):
        """Stops motor by releasing control"""
        self._write_value(0, 0)
Пример #2
0
class Motor(Configurable):

    value = traitlets.Float()
    
    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, driver, channel, *args, **kwargs):
        super(Motor, self).__init__(*args, **kwargs)  # initializes traitlets

        self._driver = driver
        atexit.register(self._release)
        self.channel = channel
        
    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        """Sets motor value between [-1, 1]"""
        speed = int(255 * (self.alpha * value + self.beta))

	# Set Motor Controls: .set_drive( motor number, direction, speed)
	# Motor Number: A = 0, B = 1
	# Direction: FWD = 0, BACK = 1
	# Speed: (-255) - 255 (neg. values reverse direction of motor)

        self._motor = self._driver.set_drive(self.channel, 0, speed)
        self._driver.enable()
            
    def _release(self):
        """Stops motor by releasing control"""
        self._motor.disable()
Пример #3
0
class Motor(Configurable):

    value = traitlets.Float()

    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, driver, channel, *args, **kwargs):
        super(Motor, self).__init__(*args, **kwargs)  # initializes traitlets

        self._driver = driver
        self._channel = channel
        atexit.register(self._release)

    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        # value: -1 ~ +1
        speed = int(100.0 * (self.alpha * value + self.beta))
        self._driver.move(self._channel, speed)

    def _release(self):
        self._driver.reset()
Пример #4
0
class Racecar(traitlets.HasTraits):
    steering = traitlets.Float()
    throttle = traitlets.Float()
    direction = traitlets.Int()
    
    @traitlets.default('direction')
    def _default_direction(self):
        return 1
    
    @traitlets.validate('steering')
    def _clip_steering(self, proposal):
        if proposal['value'] > 1.0:
            return 1.0
        elif proposal['value'] < -1.0:
            return -1.0
        else:
            return proposal['value']
        
    @traitlets.validate('throttle')
    def _clip_throttle(self, proposal):
        if proposal['value'] > 1.0:
            return 1.0
        elif proposal['value'] < -1.0:
            return -1.0
        else:
            return proposal['value']
    
    @traitlets.validate('direction')
    def _clip_direction(self, proposal):
        if proposal['value'] > 0:
            return 1
        elif proposal['value'] < 0:
            return -1
        else:
            return 0
Пример #5
0
class Scatter(widgets.DOMWidget):
    _view_name = Unicode('ScatterView').tag(sync=True)
    _view_module = Unicode('ipyvolume').tag(sync=True)
    _model_name = Unicode('ScatterModel').tag(sync=True)
    _model_module = Unicode('ipyvolume').tag(sync=True)
    x = Array(default_value=None).tag(sync=True, **create_array_binary_serialization('x'))
    y = Array(default_value=None).tag(sync=True, **create_array_binary_serialization('y'))
    z = Array(default_value=None).tag(sync=True, **create_array_binary_serialization('z'))
    vx = Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('vx'))
    vy = Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('vy'))
    vz = Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('vz'))
    selected = Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('selection', update_from_js=True))
    sequence_index = Integer(default_value=0).tag(sync=True)
    size = traitlets.Union([traitlets.Float().tag(sync=True),
                           Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('size'))],
                           default_value=5).tag(sync=True)
    size_selected = traitlets.Union([traitlets.Float().tag(sync=True),
                           Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('size_selected'))],
                           default_value=7).tag(sync=True)
    color = traitlets.Union([Unicode().tag(sync=True),
                             Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('color'))],
                             default_value="red").tag(sync=True)
    color_selected = traitlets.Union([Unicode().tag(sync=True),
                             Array(default_value=None,allow_none=True).tag(sync=True, **create_array_binary_serialization('color_selected'))],
                             default_value="green").tag(sync=True)
    geo = traitlets.Unicode('diamond').tag(sync=True)
Пример #6
0
class ColorMaps(ipywidgets.Widget):
    """Colormapping widget used to collect available colormaps """

    _model_name = traitlets.Unicode('CMapModel').tag(sync=True)
    _model_module = traitlets.Unicode('@data-exp-lab/yt-widgets').tag(sync=True)
    _model_module_version = traitlets.Unicode(EXTENSION_VERSION).tag(sync=True)

    cmaps = traitlets.Dict({}).tag(sync=True, config=True)
    map_name = traitlets.Unicode('autumn').tag(sync=True, config=True)
    is_log = traitlets.Bool(False).tag(sync=True, config=True)
    min_val = traitlets.Float().tag(sync=True, config=True)
    max_val = traitlets.Float().tag(sync=True, config=True)
    generation = traitlets.Int(0).tag(sync=True, config=True)

    def __init__(self, *args, **kwargs):
        self.cmaps = self.get_mpl_cmaps()
        super(ColorMaps, self).__init__()

    def get_mpl_cmaps(self):
        """ Adds available colormaps from matplotlib."""
        colormaps = {}
        import matplotlib.cm as mplcm
        cmap_list =  mplcm.cmap_d.keys()
        for colormap in cmap_list:
            cmap = mplcm.get_cmap(colormap)
            vals = (cmap(np.mgrid[0.0:1.0:256j])*255).astype("uint8")
            # right now let's just flatten the arrays. Later we can
            # serialize each cmap on its own.
            table = vals.flatten().tolist()
            colormaps[colormap] = table
        return colormaps
Пример #7
0
class SpaceDim(tr.HasTraits):
    minval = tr.Float()
    maxval = tr.Float()
    num = tr.Int()
    vals = tr.Any()

    def __init__(self, minval, maxval, num):
        super().__init__()
        self.minval = minval
        self.maxval = maxval
        self.num = num

        self.init_logic()
        self.update()

    # Deal only with num for simplicity

    def spacing_from_num(self):
        self.spacing = (self.maxval - self.minval) / self.num

    def assign_linspace(self):
        self.vals = np.arange(self.minval, self.maxval, self.spacing)

    def update(self, *args):
        self.spacing_from_num()
        self.assign_linspace()

    def init_logic(self):
        self.observe(self.update, names=['minval', 'maxval', 'num'])
Пример #8
0
class AngleDim(tr.HasTraits):
    num = tr.Int()
    minval = tr.Float()
    maxval = tr.Float()
    vals = tr.Any()

    def __init__(self, minval, maxval, num):
        super().__init__()
        self.minval = minval
        self.maxval = maxval
        self.num = num
        self.update()
        self.init_logic()

    def assign_legendre(self):
        self.vals = self.affine_transform(vals=leggauss(self.num)[0],
                                          oldmin=-1,
                                          oldmax=1,
                                          newmin=self.minval,
                                          newmax=self.maxval)

    #def angular_integral(self):
    #   pass

    def affine_transform(self, vals, oldmin, oldmax, newmin, newmax):
        return newmin + (newmin - newmax) / (oldmin - oldmax) * (vals - oldmin)

    def update(self, *args):
        self.assign_legendre()

    def init_logic(self):
        self.observe(self.update, names='num')
Пример #9
0
class Motor(Configurable):

    value = traitlets.Float()

    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, driver, channel, *args, **kwargs):
        super(Motor, self).__init__(*args, **kwargs)  # initializes traitlets

        self._driver = driver
        self._motor = self._driver.getMotor(channel)
        atexit.register(self._release)

    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        """Sets motor value between [-1, 1]"""
        # ジョイスティック等の値ブレ対策
        if abs(value) <= 0.05:
            value = 0.0

        #モータの目標速度(mm/s)に変換。※最高1300mm/s
        mapped_value = int(1300.0 * (self.alpha * value + self.beta))
        speed = min(max(mapped_value, -1300), 1300)
        self._motor.setSpeed(speed)

    def _release(self):
        """Stops motor by releasing control"""
        self._motor.setSpeed(0)
Пример #10
0
class NvidiaRacecar(Racecar):
    #set offsets for my car
    #after changing values, re-run setup.py
    i2c_address = traitlets.Integer(default_value=0x40)
    steering_gain = traitlets.Float(default_value=1)
    steering_offset = traitlets.Float(default_value=0.15)
    steering_channel = traitlets.Integer(default_value=0)
    throttle_gain = traitlets.Float(default_value=1)
    throttle_channel = traitlets.Integer(default_value=1)
    throttle_offset = traitlets.Float(default_value=0.13)

    def __init__(self, *args, **kwargs):
        super(NvidiaRacecar, self).__init__(*args, **kwargs)
        self.kit = ServoKit(channels=16, address=self.i2c_address)
        self.steering_motor = self.kit.continuous_servo[self.steering_channel]
        self.throttle_motor = self.kit.continuous_servo[self.throttle_channel]
        self.steering_motor.throttle = self.steering_offset
        self.throttle_motor.throttle = self.throttle_offset

    @traitlets.observe('steering')
    def _on_steering(self, change):
        self.steering_motor.throttle = change[
            'new'] * self.steering_gain + self.steering_offset

    @traitlets.observe('throttle')
    def _on_throttle(self, change):
        self.throttle_motor.throttle = change[
            'new'] * self.throttle_gain + self.throttle_offset
Пример #11
0
class TimeCode(ipywidgets.HTML):
    """Nicely-formatted timecode text display
    """
    _view_name =   traitlets.Unicode('TimeCodeView').tag(sync=True)
    _view_module = traitlets.Unicode(__npm_module_name__).tag(sync=True)
    _view_module_version = traitlets.Unicode('^' + __npm_module_version__).tag(sync=True)

    _model_name =   traitlets.Unicode('TimeCodeModel').tag(sync=True)
    _model_module = traitlets.Unicode(__npm_module_name__).tag(sync=True)
    _model_module_version = traitlets.Unicode('^' + __npm_module_version__).tag(sync=True)

    # Public information
    timecode = traitlets.Float().tag(sync=True)
    timebase = traitlets.Float().tag(sync=True)

    def __init__(self, timebase=1/30):
        """Create new widget instance
        """
        super().__init__()

        self.timebase = timebase

        self.layout.border = '1px solid grey'
        self.layout.justify_content = 'center'
        self.layout.align_items = 'center'
        self.layout.align_self = 'center'
        self.layout.width = 'fit-content'
Пример #12
0
class Motor(Configurable):

    value = traitlets.Float()
    
    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, driver, channel, *args, **kwargs):
        super(Motor, self).__init__(*args, **kwargs)  # initializes traitlets

        self._motor = "J" + str(channel)
        atexit.register(self._release)
        
    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        """Sets motor value between [-3, 3] rad/s"""
        mapped_value = float(3 * (self.alpha * value + self.beta))
        subprocess.call(["motor_util", "-n", self._motor, "set", "--mode", "4", "--velocity", str(mapped_value)])

    def _release(self):
        """Stops motor by releasing control"""
        subprocess.call(["motor_util", "-n", self._motor, "set", "--mode", "0"])
Пример #13
0
class Motor(Configurable):

    value = traitlets.Float()

    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, driver, channel, *args, **kwargs):
        super(Motor, self).__init__(*args, **kwargs)  # initializes traitlets

        self._driver = driver
        self._motor = self._driver.getMotor(channel)
        atexit.register(self._release)

    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        """Sets motor value between [-1, 1]"""
        mapped_value = int(255.0 * (self.alpha * value + self.beta))
        speed = min(max(abs(mapped_value), 0), 255)
        self._motor.setSpeed(speed)
        if mapped_value < 0:
            self._motor.run(Adafruit_MotorHAT.FORWARD)
        else:
            self._motor.run(Adafruit_MotorHAT.BACKWARD)

    def _release(self):
        """Stops motor by releasing control"""
        self._motor.run(Adafruit_MotorHAT.RELEASE)
Пример #14
0
class Motor2(Configurable):

    value = traitlets.Float()

    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, channel, *args, **kwargs):
        super(Motor2, self).__init__(*args, **kwargs)  # initializes traitlets
        self.channel = channel
        atexit.register(self._release)

    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        """Sets motor value between [-1, 1]"""
        mapped_value = int(255.0 * (self.alpha * value + self.beta))
        speed = min(max(abs(mapped_value), 0), 255)

        if mapped_value < 0:
            mapped_value = 0
        else:
            mapped_value = 1

        if self.channel >= 1 and self.channel <= 2:
            bus.write_i2c_block_data(addr, self.channel, [mapped_value, speed])

    def _release(self):
        """Stops motor by releasing control"""
        if self.channel >= 1 and self.channel <= 2:
            bus.write_i2c_block_data(addr, self.channel, [0, 0])
Пример #15
0
class Motor(Configurable):

    value = traitlets.Float()

    # config
    alpha = traitlets.Float(default_value=1.0).tag(config=True)
    beta = traitlets.Float(default_value=0.0).tag(config=True)

    def __init__(self, driver, channel, *args, **kwargs):
        super(Motor, self).__init__(*args, **kwargs)  # initializes traitlets

        self._motor = driver
        self._channel = channel
        atexit.register(self._release)

    @traitlets.observe('value')
    def _observe_value(self, change):
        self._write_value(change['new'])

    def _write_value(self, value):
        """Sets motor value between [-1, 1]"""
        mapped_value = int(255.0 * (self.alpha * value + self.beta))

        if mapped_value < 0:  # 306=パルス幅1.5ms(stop),204=パルス幅1.0ms(forward),408=パルス幅2.0ms(backward)
            self._motor.set_pwm(self._channel, round(306 - 102 * abs(value)))
        else:
            self._motor.set_pwm(self._channel, round(306 + 102 * abs(value)))

    def _release(self):
        """Stops motor by releasing control"""
        self._motor.set_pwm(0, 306)
        self._motor.set_pwm(1, 306)
Пример #16
0
class PerspectiveCamera(Camera):
    focal_length = tl.Float(50)
    sensor_width = tl.Float(36)

    @property
    def field_of_view(self):
        return 2 * np.arctan(self.sensor_width / 2. / self.focal_length)
Пример #17
0
class Padding(LayoutOptionWidget):
    """The padding to be left to a parent element’s border when placing child
    elements. This can also serve as an output option of a layout algorithm if
    node size calculation is setup appropriately.

    https://www.eclipse.org/elk/reference/options/org-eclipse-elk-padding.html
    """

    identifier = "org.eclipse.elk.padding"
    metadata_provider = "core.options.CoreOptions"
    applies_to = ["parents", "nodes"]

    top = T.Float(min_value=0, default_value=12)
    bottom = T.Float(min_value=0, default_value=12)
    left = T.Float(min_value=0, default_value=12)
    right = T.Float(min_value=0, default_value=12)

    _traits = ["top", "bottom", "left", "right"]

    def _ui(self) -> List[W.Widget]:

        sliders = []
        for trait in self._traits:
            slider = W.FloatSlider(description=f"{trait.title()} Padding")
            T.link((self, trait), (slider, "value"))
            sliders.append(slider)
        return sliders

    @T.observe("top", "bottom", "left", "right")
    def _update_value(self, change: T.Bunch = None):
        padding = ",".join([f"{t}={getattr(self, t)}" for t in self._traits])
        self.value = f"[{padding}]"
Пример #18
0
class Robot(SingletonConfigurable):

    left_motor = traitlets.Instance(Motor)
    right_motor = traitlets.Instance(Motor)
    brush_motor = traitlets.Instance(Motor)  #

    # config
    i2c_bus = traitlets.Integer(default_value=1).tag(config=True)
    left_motor_channel = traitlets.Integer(default_value=1).tag(config=True)
    left_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)
    right_motor_channel = traitlets.Integer(default_value=2).tag(config=True)
    right_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)

    brush_motor_channel = traitlets.Integer(default_value=3).tag(
        config=True)  #
    brush_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)  #

    def __init__(self, *args, **kwargs):
        super(Robot, self).__init__(*args, **kwargs)
        self.motor_driver = Adafruit_MotorHAT(i2c_bus=self.i2c_bus)
        self.left_motor = Motor(self.motor_driver,
                                channel=self.left_motor_channel,
                                alpha=self.left_motor_alpha)
        self.right_motor = Motor(self.motor_driver,
                                 channel=self.right_motor_channel,
                                 alpha=self.right_motor_alpha)

        self.brush_motor = Motor(self.motor_driver,
                                 channel=self.brush_motor_channel,
                                 alpha=self.brush_motor_alpha)  #

    def set_motors(self, left_speed, right_speed):
        self.left_motor.value = left_speed
        self.right_motor.value = right_speed

    def forward(self, speed=1.0, duration=None):
        self.left_motor.value = speed
        self.right_motor.value = speed

    def backward(self, speed=1.0):
        self.left_motor.value = -speed
        self.right_motor.value = -speed

    def left(self, speed=1.0):
        self.left_motor.value = -speed
        self.right_motor.value = speed

    def right(self, speed=1.0):
        self.left_motor.value = speed
        self.right_motor.value = -speed

    def stop(self):
        self.left_motor.value = 0
        self.right_motor.value = 0

    def brush(self, speed=1.0):
        self.brush_motor.value = speed
Пример #19
0
class GeoJsonDataSource(DataSource):
    """
    GeoJsonDataSource

    Parameters
    ----------

    sourceUri : str
        Overrides the url to use for resolving relative links.
    describe : GeoJsonDataSource~describe, default GeoJsonDataSource.defaultDescribeProperty
        A function which returns a Property object (or just a string), which converts the properties into an html description.
    markerSize : int, default GeoJsonDataSource.markerSize
        The default size of the map pin created for each point, in pixels.
    markerSymbol : str, default GeoJsonDataSource.markerSymbol
        The default symbol of the map pin created for each point.
    markerColor : Color, default GeoJsonDataSource.markerColor
        The default color of the map pin created for each point.
    stroke : Color, default GeoJsonDataSource.stroke
        The default color of polylines and polygon outlines.
    strokeWidth : int, GeoJsonDataSource.strokeWidth
        The default width of polylines and polygon outlines.
    fill : Color, default GeoJsonDataSource.fill
        The default color for polygon interiors.
    """

    _props = [
        'describe', 'markerSize', 'markerSymbol', 'markerColor', 'stroke',
        'strokeWidth', 'fill'
    ]

    markerSize = traitlets.Float(allow_none=True)
    markerSymbol = traitlets.Unicode(allow_none=True)
    markerColor = MaybeTrait(klass=cesiumpy.color.Color, allow_none=True)
    stroke = MaybeTrait(klass=cesiumpy.color.Color, allow_none=True)
    strokeWidth = traitlets.Float(allow_none=True)
    fill = MaybeTrait(klass=cesiumpy.color.Color, allow_none=True)

    def __init__(self,
                 sourceUri,
                 describe=None,
                 markerSize=None,
                 markerSymbol=None,
                 markerColor=None,
                 stroke=None,
                 strokeWidth=None,
                 fill=None):
        super(GeoJsonDataSource, self).__init__(sourceUri=sourceUri)

        self.describe = com.notimplemented(describe)

        self.markerSize = markerSize
        self.markerSymbol = markerSymbol
        self.markerColor = markerColor
        self.stroke = stroke
        self.strokeWidth = strokeWidth
        self.fill = fill
Пример #20
0
class Robot(SingletonConfigurable):

    pwm_driver = traitlets.Instance(PCA9685)
    left_motor = traitlets.Instance(Motor)
    right_motor = traitlets.Instance(Motor)

    # config
    left_motor_channel = traitlets.Integer(default_value=0).tag(config=True)
    left_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)
    right_motor_channel = traitlets.Integer(default_value=1).tag(config=True)
    right_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)

    def __init__(self, *args, **kwargs):
        super(Robot, self).__init__(*args, **kwargs)

        # Create a i2c bus interface, a simple PCA9685 class instance and set the pwn frequency.
        # You can optionally provide a finer tuned reference clock speed to improve the accuracy of the
        # timing pulses. This calibration will be specific to each board and its environment. See the
        # calibration.py example in the PCA9685 driver.
        # pca = PCA9685(i2c, reference_clock_speed=25630710)
        _i2c = busio.I2C(SCL, SDA)
        _pwm_driver = PCA9685(_i2c)
        _pwm_driver.frequency = 50

        self.left_motor = Motor(_pwm_driver,
                                channel=self.left_motor_channel,
                                alpha=self.left_motor_alpha,
                                beta=0.05)
        self.right_motor = Motor(_pwm_driver,
                                 channel=self.right_motor_channel,
                                 alpha=self.right_motor_alpha,
                                 beta=0.05)

    def set_motors(self, left_speed, right_speed):
        self.left_motor.value = left_speed
        self.right_motor.value = right_speed

    def forward(self, speed=1.0, duration=None):
        self.left_motor.value = speed
        self.right_motor.value = -speed

    def backward(self, speed=1.0):
        self.left_motor.value = -speed
        self.right_motor.value = speed

    def left(self, speed=1.0):
        self.left_motor.value = -speed
        self.right_motor.value = -speed

    def right(self, speed=1.0):
        self.left_motor.value = speed
        self.right_motor.value = speed

    def stop(self):
        self.left_motor.value = 0.0
        self.right_motor.value = 0.0
Пример #21
0
class Frond(tr.HasTraits):
    fs = tr.Float()
    fr = tr.Float()
    ft = tr.Float()

    def __init__(self):
        super().__init__()
        self.fs = .5
        self.fr = 2
        self.ft = .0015
Пример #22
0
class TransferFunctionWidgetJs3(TransferFunction):
	_model_name = Unicode('TransferFunctionWidgetJs3Model').tag(sync=True)
	_model_module = Unicode('ipyvolume').tag(sync=True)
	level1 = traitlets.Float(0.1).tag(sync=True)
	level2 = traitlets.Float(0.5).tag(sync=True)
	level3 = traitlets.Float(0.8).tag(sync=True)
	opacity1 = traitlets.Float(0.01).tag(sync=True)
	opacity2 = traitlets.Float(0.05).tag(sync=True)
	opacity3 = traitlets.Float(0.1).tag(sync=True)
	width1 = traitlets.Float(0.1).tag(sync=True)
	width2 = traitlets.Float(0.1).tag(sync=True)
	width3 = traitlets.Float(0.1).tag(sync=True)


	def control(self, max_opacity=0.2):
		import ipywidgets
		l1 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level1)
		l2 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level2)
		l3 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level3)
		o1 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity1)
		o2 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
		o3 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
		ipywidgets.jslink((self, 'level1'), (l1, 'value'))
		ipywidgets.jslink((self, 'level2'), (l2, 'value'))
		ipywidgets.jslink((self, 'level3'), (l3, 'value'))
		ipywidgets.jslink((self, 'opacity1'), (o1, 'value'))
		ipywidgets.jslink((self, 'opacity2'), (o2, 'value'))
		ipywidgets.jslink((self, 'opacity3'), (o3, 'value'))
		return ipywidgets.VBox(
			[ipywidgets.HBox([ipywidgets.Label(value="levels:"), l1, l2, l3]),
			 ipywidgets.HBox([ipywidgets.Label(value="opacities:"), o1, o2, o3])]
		)
Пример #23
0
class JetbotRacecar(Racecar):

    steering_gain = traitlets.Float(default_value=-0.65)
    steering_offset = traitlets.Float(default_value=0)
    throttle_gain = traitlets.Float(default_value=0.8)

    i2c_bus = traitlets.Integer(default_value=1).tag(config=True)
    left_motor_channel = traitlets.Integer(default_value=1).tag(config=True)
    right_motor_channel = traitlets.Integer(default_value=2).tag(config=True)

    def __init__(self, *args, **kwargs):
        super(JetbotRacecar, self).__init__(*args, **kwargs)
        self.motor_driver = Adafruit_MotorHAT(i2c_bus=self.i2c_bus)
        self.left_motor = DcMotor(self.motor_driver,
                                  channel=self.left_motor_channel)
        self.right_motor = DcMotor(self.motor_driver,
                                   channel=self.right_motor_channel)

    def _move_car(self):
        """Moves car with 2 wheels (left, right)"""
        value_y = self.steering * self.steering_gain + self.steering_offset
        value_x = self.throttle * self.throttle_gain

        # convert steering and throttle to left/right thrust values
        theta = np.arctan2(value_y, value_x)
        radial_x = abs(value_x) * np.cos(theta)
        radial_y = abs(value_y) * np.sin(theta)
        radius = np.sqrt(pow(radial_x, 2) + pow(radial_y, 2)) * 100.
        theta_radial_degrees = degrees(np.arctan2(radial_y, radial_x))
        left_thrust, right_thrust = throttle_angle_to_thrust(
            radius, theta_radial_degrees)

        # set motors values
        self.left_motor.value = float(left_thrust / 100.)
        self.right_motor.value = float(right_thrust / 100.)

    @traitlets.observe('steering')
    def _on_steering(self, change):
        self._move_car()

    @traitlets.observe('throttle')
    def _on_throttle(self, change):
        self._move_car()

    @traitlets.observe('throttle_gain')
    def _on_throttle_gain(self, change):
        self._move_car()

    @traitlets.observe('steering_gain')
    def _on_steering_gain(self, change):
        self._move_car()

    @traitlets.observe('steering_offset')
    def _on_steering_offset(self, change):
        self._move_car()
Пример #24
0
class ImageryProvider(_CesiumProvider):

    _props = [
        'url', 'fileExtension', 'rectangle', 'tillingScheme', 'ellipsoid',
        'tileWidth', 'tileHeight', 'tileDiscardPolicy', 'minimumLevel',
        'maximumLevel', 'credit', 'proxy', 'subdomains'
    ]

    url = traitlets.Unicode(allow_none=True)
    fileExtension = traitlets.Unicode(allow_none=True)
    rectangle = MaybeTrait(klass=cartesian.Rectangle, allow_none=True)

    tileWidth = traitlets.Float(allow_none=True)
    tileHeight = traitlets.Float(allow_none=True)

    minimumLevel = traitlets.Float(allow_none=True)
    maximumLevel = traitlets.Float(allow_none=True)

    credit = traitlets.Unicode(allow_none=True)

    def __init__(self,
                 url=None,
                 fileExtension=None,
                 rectangle=None,
                 tillingScheme=None,
                 ellipsoid=None,
                 tileWidth=None,
                 tileHeight=None,
                 tileDiscardPolicy=None,
                 minimumLevel=None,
                 maximumLevel=None,
                 credit=None,
                 proxy=None,
                 subdomains=None):

        self.url = url
        self.fileExtension = fileExtension
        self.rectangle = rectangle

        self.tillingScheme = com.notimplemented(tillingScheme)
        self.ellipsoid = com.notimplemented(ellipsoid)

        self.tileWidth = tileWidth
        self.tileHeight = tileHeight
        self.tileDiscardPolicy = com.notimplemented(tileDiscardPolicy)

        self.minimumLevel = minimumLevel
        self.maximumLevel = maximumLevel

        self.credit = credit

        self.proxy = com.notimplemented(proxy)
        self.subdomains = com.notimplemented(subdomains)
Пример #25
0
class KpointSettings(ipw.VBox):

    # The default of `kpoints_distance` must be linked to the `protocol`
    kpoints_distance_default = traitlets.Float(default_value=0.15)
    kpoints_distance = traitlets.Float(allow_none=True)
    degauss = traitlets.Float(allow_none=True)

    kpoints_distance_description = ipw.HTML("""<p>
        The k-points mesh density is set by the chosen <b>protocol</b>.
        Untick the box to override the default.
    </p>""")

    def __init__(self, **kwargs):

        self._set_kpoints_distance_automatically = ipw.Checkbox(
            description="Use default k-points distance.",
            indent=False,
            value=True,
        )
        self._kpoints_distance = ipw.FloatText(
            value=self.kpoints_distance_default,
            step=0.05,
            description="K-points distance:",
            disabled=False,
            style={"description_width": "initial"},
        )
        ipw.dlink(
            (self._set_kpoints_distance_automatically, "value"),
            (self._kpoints_distance, "disabled"),
        )

        self._kpoints_distance.observe(self.set_kpoints_distance_trait,
                                       "value")
        self._set_kpoints_distance_automatically.observe(
            self.set_kpoints_distance_trait, "value")
        self.set_kpoints_distance_trait()

        super().__init__(
            children=[
                self.kpoints_distance_description,
                ipw.HBox([
                    self._set_kpoints_distance_automatically,
                    self._kpoints_distance
                ]),
            ],
            layout=ipw.Layout(justify_content="space-between"),
            **kwargs,
        )

    def set_kpoints_distance_trait(self, _=None):
        self.kpoints_distance = (self.kpoints_distance_default if
                                 self._set_kpoints_distance_automatically.value
                                 else self._kpoints_distance.value)
Пример #26
0
class Bones(traitlets.HasTraits):

    fwdspd = traitlets.Float(default_value=0.0)
    angspd = traitlets.Float(default_value=0.0)
    cmd_vel_msg = Twist()

    def __init__(self, *args, **kwargs):
        super(Bones, self).__init__(*args, **kwargs)

        self.time_last_twist = time.clock()
        self.last_rot_spd = 0.0
        self.last_fwd_spd = 0.0

    def fwd_cb(self, change):
        self.cmd_vel_msg.linear.x = change.new

    def ang_cb(self, change):
        self.cmd_vel_msg.angular.z = change.new

## Twist publishes the cmd_vel_msg, which is a ROS Twist message type.
## the rate is throttled to prevent banging the arduino with too much commmunication.

    def twist(self):
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def forward(self, speed):
        self.cmd_vel_msg.linear.x = speed
        self.cmd_vel_msg.angular.z = 0
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def backward(self, speed):
        self.cmd_vel_msg.linear.x = -speed
        self.cmd_vel_msg.angular.z = 0
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def left(self, speed):
        self.cmd_vel_msg.linear.x = 0
        self.cmd_vel_msg.angular.z = speed
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def right(self, speed):
        self.cmd_vel_msg.linear.x = 0
        self.cmd_vel_msg.angular.z = -speed
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def stop(self):
        self.fwdspd = 0.0
        self.angspd = 0.0
        self.cmd_vel_msg.linear.x = 0
        self.cmd_vel_msg.angular.z = 0
        pub_cmd_vel.publish(self.cmd_vel_msg)
Пример #27
0
class Bones(HasTraits):

    fwdspd = traitlets.Float(default_value=0.0)
    angspd = traitlets.Float(default_value=0.0)
    cmd_vel_msg = Twist()

    def __init__(self, *args, **kwargs):
        super(Bones, self).__init__(*args, **kwargs)

    @observe('fwdspd')
    def _observe_value(self, change):
        self.forward(change.new)

    @observe('angspd')
    def _observe_value(self, change):
        self.left(change.new)

    def fwd_cb(self, change):
        self.forward(change.new)

    def ang_cb(self, change):
        self.left(change.new)

    def forward(self, speed):
        self.cmd_vel_msg.linear.x = speed
        self.cmd_vel_msg.angular.z = 0
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def backward(self, speed):
        self.cmd_vel_msg.linear.x = -speed
        self.cmd_vel_msg.angular.z = 0
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def left(self, speed):
        self.cmd_vel_msg.linear.x = 0
        self.cmd_vel_msg.angular.z = speed
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def right(self, speed):
        self.cmd_vel_msg.linear.x = 0
        self.cmd_vel_msg.angular.z = -speed
        pub_cmd_vel.publish(self.cmd_vel_msg)

    def stop(self):
        self.fwdspd = 0.0
        self.angspd = 0.0
        self.cmd_vel_msg.linear.x = 0
        self.cmd_vel_msg.angular.z = 0
        pub_cmd_vel.publish(self.cmd_vel_msg)
Пример #28
0
class Robot(SingletonConfigurable):

    left_motor = traitlets.Instance(Motor)
    right_motor = traitlets.Instance(Motor)

    # config
    left_motor_channel = traitlets.Integer(default_value=1).tag(config=True)
    left_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)
    right_motor_channel = traitlets.Integer(default_value=2).tag(config=True)
    right_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)

    def __init__(self, *args, **kwargs):
        super(Robot, self).__init__(*args, **kwargs)
        self.motor_driver = None  # for compatibility with jetbot
        self.left_motor = Motor(self.motor_driver,
                                channel=self.left_motor_channel,
                                alpha=self.left_motor_alpha)
        self.right_motor = Motor(self.motor_driver,
                                 channel=self.right_motor_channel,
                                 alpha=self.right_motor_alpha)

    def set_motors(self, left_speed, right_speed):
        self.left_motor.value = left_speed
        self.right_motor.value = right_speed

    def forward(self, speed=1.0):
        self.left_motor.value = speed
        self.right_motor.value = speed

    def backward(self, speed=1.0):
        self.left_motor.value = -speed
        self.right_motor.value = -speed

    def left(self, speed=1.0):
        self.left_motor.value = -speed
        self.right_motor.value = speed

    def right(self, speed=1.0):
        self.left_motor.value = speed
        self.right_motor.value = -speed

    def stop(self):
        self.left_motor.value = 0
        self.right_motor.value = 0

    def free(self):
        self.left_motor.release()
        self.right_motor.release()
Пример #29
0
class Scatter(widgets.DOMWidget):
    _view_name = Unicode('ScatterView').tag(sync=True)
    _view_module = Unicode('ipyvolume').tag(sync=True)
    _model_name = Unicode('ScatterModel').tag(sync=True)
    _model_module = Unicode('ipyvolume').tag(sync=True)
    _view_module_version = Unicode(semver_range_frontend).tag(sync=True)
    _model_module_version = Unicode(semver_range_frontend).tag(sync=True)
    x = Array(default_value=None).tag(sync=True,
                                      **array_sequence_serialization)
    y = Array(default_value=None).tag(sync=True,
                                      **array_sequence_serialization)
    z = Array(default_value=None).tag(sync=True,
                                      **array_sequence_serialization)
    vx = Array(default_value=None,
               allow_none=True).tag(sync=True, **array_sequence_serialization)
    vy = Array(default_value=None,
               allow_none=True).tag(sync=True, **array_sequence_serialization)
    vz = Array(default_value=None,
               allow_none=True).tag(sync=True, **array_sequence_serialization)
    selected = Array(default_value=None,
                     allow_none=True).tag(sync=True,
                                          **array_sequence_serialization)
    sequence_index = Integer(default_value=0).tag(sync=True)
    size = traitlets.Union([
        Array(default_value=None, allow_none=True).tag(
            sync=True, **array_sequence_serialization),
        traitlets.Float().tag(sync=True)
    ],
                           default_value=5).tag(sync=True)
    size_selected = traitlets.Union([
        Array(default_value=None, allow_none=True).tag(
            sync=True, **array_sequence_serialization),
        traitlets.Float().tag(sync=True)
    ],
                                    default_value=7).tag(sync=True)
    color = Array(default_value="red",
                  allow_none=True).tag(sync=True, **color_serialization)
    color_selected = traitlets.Union([
        Array(default_value=None, allow_none=True).tag(sync=True,
                                                       **color_serialization),
        Unicode().tag(sync=True)
    ],
                                     default_value="green").tag(sync=True)
    geo = traitlets.Unicode('diamond').tag(sync=True)
    connected = traitlets.CBool(default_value=False).tag(sync=True)
    visible = traitlets.CBool(default_value=True).tag(sync=True)
    visible_lines = traitlets.CBool(default_value=False).tag(sync=True)
    visible_markers = traitlets.CBool(default_value=True).tag(sync=True)
Пример #30
0
class Robot(SingletonConfigurable):

    left_motor = traitlets.Instance(Motor)
    right_motor = traitlets.Instance(Motor)

    # config
    #i2c_bus = traitlets.Integer(default_value=1).tag(config=True)
    left_motor_channel = traitlets.Integer(default_value=1).tag(config=True)
    left_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)
    right_motor_channel = traitlets.Integer(default_value=2).tag(config=True)
    right_motor_alpha = traitlets.Float(default_value=1.0).tag(config=True)

    def __init__(self, *args, **kwargs):
        super(Robot, self).__init__(*args, **kwargs)

        self.motor_driver = qwiic_scmd.QwiicScmd()
        self.left_motor = Motor(self.motor_driver,
                                channel=self.left_motor_channel,
                                alpha=self.left_motor_alpha)
        self.right_motor = Motor(self.motor_driver,
                                 channel=self.right_motor_channel,
                                 alpha=self.right_motor_alpha)
        self.motor_driver.enable()

    def set_motors(self, left_speed, right_speed):
        self.left_motor.value = left_speed
        self.right_motor.value = right_speed
        self.motor_driver.enable()

    # Set Motor Controls: .set_drive( motor number, direction, speed)
    # Motor Number: A = 0, B = 1
    # Direction: FWD = 0, BACK = 1
    # Speed: (-255) - 255 (neg. values reverse direction of motor)

    def forward(self, speed=1.0, duration=None):
        self.set_motors(speed, speed)

    def backward(self, speed=1.0):
        self.set_motors(-speed, -speed)

    def left(self, speed=1.0):
        self.set_motors(-speed, speed)

    def right(self, speed=1.0):
        self.set_motors(speed, -speed)

    def stop(self):
        self.motor_driver.disable()