예제 #1
0
  def on_first_run(self):
    shm.hydrophones_settings.track_frequency_target.set(PINGER_FREQUENCY)
    shm.hydrophones_settings.track_magnitude_threshold.set(TRACK_MAG_THRESH)
    shm.hydrophones_settings.track_cooldown_samples.set(150000)

    shm.navigation_settings.position_controls.set(1)
    shm.navigation_settings.optimize.set(0)

    self.localizer = Localizer(PINGER_FREQUENCY)

    self.hydro_watcher = watcher()
    self.hydro_watcher.watch(shm.hydrophones_results_track)

    self.time_since_last_ping = self.this_run_time

    self.pinger_positions = collections.deque(maxlen=7)

    self.PINGS_LISTEN = 5
    self.CONSISTENT_PINGS = 3

    self.listens = 0
    self.queued_moves = []
    self.pinger_found = False

    self.silencer = ThrusterSilencer()

    self.available_depths = set([HYDROPHONES_SEARCH_DEPTH,
                                 HYDROPHONES_SEARCH_DEPTH + 0.4,
                                 HYDROPHONES_SEARCH_DEPTH - 0.4])
    self.last_depth = None

    self.observe_from(get_sub_position())
예제 #2
0
    def on_first_run(self, *args, **kwargs):
        self.watcher = watcher()
        self.watcher.watch(shm.wire_results)

        self.consistent_objs = {t: ConsistentObject() for t in self.bar_types}

        self.pull()
예제 #3
0
    def on_first_run(self, *args, **kwargs):
        self.watcher = watcher()
        self.watcher.watch(shm.navigate_results)

        self.consistent_objs = {t: ConsistentObject() for t in self.bar_types}

        self.pull()
예제 #4
0
    def __init__(self, *args, **kwargs):
        super().__init__()

        self.watcher = watcher()
        self.watcher.watch(shm.recovery_vision)

        # Initially pattern-match tubes and ellipses by color and size (later by pos/angle)

        def color_pattern(color_type_func):
            pattern = []
            for i, c in enumerate(constants.colors):
                camera_coord = HeadingInvCameraCoord(0, 0, 0)
                angle = HeadingInvAngle(0, 0)
                color = color_type_func(c)
                complex_color = ComplexColor(color.lab_a, color.lab_b,
                                             color.ycrcb_cr, color.ycrcb_cb)
                pattern.append(
                    Match(
                        i,
                        self.ColorObs(
                            None,
                            camera_coord,
                            angle,
                            complex_color,
                            c.size,
                        )))

            return pattern

        self.tube_matcher = Matcher(color_pattern(lambda c: c.tube_color))
        self.ellipse_matcher = Matcher(
            color_pattern(lambda c: c.ellipse_color))
        self.table_tracker = ConsistentObject()

        self.pull()
예제 #5
0
    def on_first_run(self, *args, **kwargs):
        self.watcher = watcher()
        self.watcher.watch(shm.recovery_vision)
        self.pull_shm()

        self.stacks = [None] * 4
        tracker = lambda: Tracker(self.cam_width * Vision.TRACKING_REJECT_WIDTH_RATIO)
        self.red_stack_tracker = tracker()
        self.green_stack_tracker = tracker()
        self.mark_mappings = {color: ConsistentObject() for color in Vision.COLORS}
        self.region_mappings = {color: ConsistentObject() for color in Vision.COLORS}

        self.pull()
예제 #6
0
    def __init__(self, *args, **kwargs):
        super().__init__()
        # Vision object needs to be ready for rest of mission to access, so must
        # initialize before on_first_run()

        shm.vision_debug.color_r.set(0)
        shm.vision_debug.color_g.set(200)
        shm.vision_debug.color_b.set(255)

        self.bins_matcher = Matcher(
            [], # We don't know the bins' relative positions ahead of time
            num_trackers=2,
        )

        self.watcher = watcher()
        self.watcher.watch(shm.bins_vision)
        self.pull()
예제 #7
0
def daemon():
    watcher = watchers.watcher()
    watcher.watch(switches)

    last_sk = switches.soft_kill.get()
    while 1:
        watcher.wait(new_update=False)
        set_all(0)
        sk = switches.soft_kill.get()
        if sk and not last_sk:
            blink([LEDS["port"]["red"]], 3)
        if switches.hard_kill.get():
            while switches.hard_kill.get():
                LEDS["port"]["red"].set(255)
                sleep(0.5)
                LEDS["port"]["red"].set(0)
                set_group(LEDS["starboard"].values(), 255)
                sleep(0.5)
                set_group(LEDS["starboard"].values(), 0)
            blink([LEDS["port"]["green"], LEDS["starboard"]["green"]], 3)
        if not sk and last_sk:
            blink([LEDS["port"]["blue"], LEDS["starboard"]["blue"]], 3)
        last_sk = sk
예제 #8
0
파일: led.py 프로젝트: teojb/software
def daemon():
    watcher = watchers.watcher()
    watcher.watch(switches)

    last_sk = switches.soft_kill.get()
    while 1:
        watcher.wait(new_update=False)
        set_all(0)
        sk = switches.soft_kill.get()
        if sk and not last_sk:
            blink([LEDS["port"]["red"]], 3)
        if switches.hard_kill.get():
            while switches.hard_kill.get():
                LEDS["port"]["red"].set(255)
                sleep(0.5)
                LEDS["port"]["red"].set(0)
                set_group(LEDS["starboard"].values(), 255)
                sleep(0.5)
                set_group(LEDS["starboard"].values(), 0)
            blink([LEDS["port"]["green"], LEDS["starboard"]["green"]], 3)
        if not sk and last_sk:
            blink([LEDS["port"]["blue"], LEDS["starboard"]["blue"]], 3)
        last_sk = sk
예제 #9
0
    # y_acc_in.get(),
    0,
    0,
    0,
    depth_in.get(),
    0
]]).reshape(8, 1)
# Pass in ftarray, shared memory handle to controller
kalman_position = PositionFilter(kalman_xHat)

watchers = dict()
for var in [
        hdg_input_var, rate_var, rate_var_imu, pitch_var, pitch_rate_var,
        roll_var, roll_rate_var, gx4_q0, gx4_q1, gx4_q2, gx4_q3
]:
    watchers[var] = watcher()
    group = eval(var.__module__)
    watchers[var].watch(group)


def get(var):
    #if watchers[var].has_changed():
    #    return var.get()
    #else:
    #    return None
    return var.get()


start = time.time()

Thread(target=calibrate_depth).start()  # Do a depth calibration on startup
예제 #10
0
 def on_first_run(self, main_task, *args, **kwargs):
     self.main_task = main_task
     self.watcher = watcher()
     self.watcher.watch(shm.navigate_results)
     self.pull()
예제 #11
0
    y_vel_in.get(),
    0,
    # y_acc_in.get(),
    0,
    0,
    0,
    depth_in.get() - depth_offset.get(),
    #depth_in.get() - 8.64,
    0]]).reshape(8,1)
# Pass in ftarray, shared memory handle to controller
kalman_position = PositionFilter(kalman_xHat)


watchers = dict()
for var in [hdg_input_var, rate_var, rate_var_imu, pitch_var, pitch_rate_var, roll_var, roll_rate_var, gx4_q0, gx4_q1, gx4_q2, gx4_q3]:
    watchers[var] = watcher()
    group = eval(var.__module__)
    watchers[var].watch(group)
def get(var):
    #if watchers[var].has_changed():
    #    return var.get()
    #else:
    #    return None
    return var.get()

start = time.time()
iteration = 0
while True:
    while (iteration*dt < (time.time() - start)):

        yaw_rate = get(rate_var_imu)
예제 #12
0
#!/usr/bin/env python2

"""
Watch for hydrophones derp, and reset it
"""

from time import sleep
from shm import hydrophones_results as hr
from shm import sensor_power as sp
from shm import watchers

watcher = watchers.watcher()
watcher.watch(hr)

last_ping_count = hr.ping_count.get()
num_bad_pings = 0

while True:
    watcher.wait(new_update=False)
    if hr.ping_count.get() != last_ping_count:
        last_ping_count = hr.ping_count.get()
        if hr.ping_time.get() < 400:
            num_bad_pings = num_bad_pings + 1
            if num_bad_pings >= 3:
                print "Resetting hydrophones"
                sp.enable_12v_6.set(0)
                sleep(0.1)
                sp.enable_12v_6.set(1)
                num_bad_pings = 0
        else:
            num_bad_pings = 0