Пример #1
0
 def on_first_run(self, *args, **kwargs):
     self.use_task(
         NavigationSpeed(
             Sequential(
                 Depth(recovery_constants.tower_depth, error=0.08),
                 ConsistentTask(Heading(60 * TOWARDS_BOWL_SIGN)),
                 MoveX(30, deadband=0.08),
             ), 0.4))
Пример #2
0
 def on_first_run(self, vision, tower=True, *args, **kwargs):
     obj_func = (lambda: vision.tubes) if tower else (
         lambda: vision.ellipses)
     self.use_task(
         ConsistentTask(
             IdentifyObjects(obj_func, 3),
             success=20,
             total=30,
         ))
Пример #3
0
 def on_first_run(self, vision, bin_func, *args, **kwargs):
     self.use_task(ConsistentTask(PIDLoop(
         input_value=lambda: bin_func().obs.length,
         output_function=RelativeToCurrentDepth(),
         target=1.2,
         deadband=0.02,
         p=0.7,
         d=0.3,
     )))
Пример #4
0
        def AvoidWall():
            if not shm.recovery_world_table.know_pos.get():
                return Sequential(
                    Log('Moving away from wall'),
                    ConsistentTask(Heading(WALL_TOWER_HEADING)),
                    MoveXRough(2),
                )

            else:
                return NoOp()
Пример #5
0
    def on_first_run(self, vision, *args, **kwargs):
        def AvoidWall():
            if not shm.recovery_world_table.know_pos.get():
                return Sequential(
                    Log('Moving away from wall'),
                    ConsistentTask(Heading(WALL_TOWER_HEADING)),
                    MoveXRough(2),
                )

            else:
                return NoOp()

        def Iteration(first_run=False):
            return Sequential(
                # Sequential(
                # Log('Classifying tubes'),
                # Retry(lambda: MoveAboveTower(vision), 3),
                # FunctionTask(vision.classify_tubes),
                # ) if first_run else NoOp(),
                GetTube(vision),
                Succeed(GetTube(
                    vision)),  # It's OK if we don't grab the second tube
                Surface(),
                AvoidWall(),

                # Initially classify ellipses as their size / color may change
                # as tubes are added
                Sequential(
                    Log('Classifying ellipses'),
                    Retry(lambda: MoveAboveTable(vision), 3),
                    FunctionTask(vision.classify_ellipses),
                ) if first_run else NoOp(),
                PlaceTubes(vision),
            )

        self.use_task(
            Except(
                Sequential(
                    Retry(lambda: MoveAboveTable(vision), 1000),
                    Log('Moving towards wall'),
                    ConsistentTask(Heading((WALL_TOWER_HEADING + 180) % 360)),
                    MoveXRough(2),
                    Iteration(first_run=True),
                    While(
                        Iteration,
                        lambda: count_tubes(shm.recovery_world_tower) > 0,
                    ),
                ),
                Fail(Log('Global timeout, done trying recovery T_T')),
                GlobalTimeoutError,
            ))
Пример #6
0
def cons(task, total=1 * 60, success=1 * 60 * 0.85, debug=False):
    return ConsistentTask(task, total=total, success=success, debug=debug)