コード例 #1
0
    def __init__(self, body_model, body_controller, leg_indices, delta_heights,
                 max_velocity, acceleration):
        logger.info("New path.",
                    path_name="TrapezoidalFeetLiftLower",
                    leg_indices=leg_indices,
                    delta_height=delta_heights,
                    max_velocity=max_velocity,
                    acceleration=acceleration)

        self.leg_indices = leg_indices
        self.model = body_model
        self.controller = body_controller

        self.final_joint_positions = self.controller.getTargetJointAngleMatrix(
        )

        self.foot_paths = [None for i in range(NUM_LEGS)]

        if isinstance(delta_heights, (int, long, float, complex)):
            delta_heights = [delta_heights] * 6

        for i in self.leg_indices:
            current_leg_pos = self.model.getLegs()[i].footPosFromLegState(
                [self.controller.getTargetJointAngleMatrix()[i],
                 0])  # self.model.getFootPositions()[i]
            desired_leg_pos = current_leg_pos + [0, 0, delta_heights[i]]

            self.foot_paths[i] = TrapezoidalFootMove(
                self.model.getLegs()[i],
                self.controller.getLimbControllers()[i], desired_leg_pos,
                max_velocity, acceleration)

        self.done = False
コード例 #2
0
def update(time, yaw, hip_pitch, knee_pitch, shock_depth, command=None):
    global path, state

    # Update model
    time_sources.global_time.updateTime(time)
    model.setSensorReadings(yaw, hip_pitch, knee_pitch, shock_depth)
    model.updateFootOnGround()

    # Init path. Do this after the first update.
    if path is None:
        path = Pause(model, controller, 5.0)

    # Monitor leg_paths
    if path.isDone():
        if state == S_INIT:
            print "Move" * 1000
            path = TrapezoidalFootMove(model, controller,
                                       array([1.5, 0.0, -0.4]), 0.5, 0.5)
            state = S_MOVE_JOINT
        elif state == S_MOVE_JOINT:
            print "Done" * 1000
            state = S_DONE
            pass
        logger.info("State changed.", state=state)

    print "Foot:", model.getFootPos()
    # Evaluate path and joint control
    controller.update(model.getJointAngles(), path.update())

    # Send commands
    return controller.getLengthRateCommands()
コード例 #3
0
    def __init__(self, body_model, body_controller, final_height, max_velocity,
                 acceleration):
        logger.info("New path.",
                    path_name="TrapezoidalSitStand",
                    final_height=final_height,
                    max_velocity=max_velocity,
                    acceleration=acceleration)

        self.model = body_model
        self.controller = body_controller
        self.final_foot_positions = self.model.getFootPositions()
        self.feet_path = []

        for i in range(NUM_LEGS):
            self.final_foot_positions[i][2] = final_height

        for i in range(NUM_LEGS):
            self.feet_path = append(
                self.feet_path,
                TrapezoidalFootMove(self.model.getLegs()[i],
                                    self.controller.getLimbControllers()[i],
                                    self.final_foot_positions[i], max_velocity,
                                    acceleration))

        self.done = False
コード例 #4
0
 def moveToInitialPosition( self, time, yaw, hip_pitch, knee_pitch, shock_depth, command=None ):
     self.model.setSensorReadings(yaw, hip_pitch, knee_pitch, shock_depth)
     if not hasattr(self, 'initial_path'):
         print "Starting move to initial position"
         self.initial_path = TrapezoidalFootMove(self.model, self.controller,\
                                    array([1.6, 0.0, -1.15]),\
                                    0.4, 0.2)
     self.controller.update(self.model.getJointAngles(), self.initial_path.update())
     if self.initial_path.isDone():
         self.callback = self.pause
     lr = self.controller.getLengthRateCommands()
     return lr
コード例 #5
0
ファイル: safe_move.py プロジェクト: braingram/Main
    def __init__(self,
                 leg_model,
                 limb_controller,
                 final_foot_pos,
                 max_velocity,
                 acceleration,
                 z_plane=-0.67865):
        leg_logger.logger.info("New path.",
                               path_name="TrapezoidalFootMove",
                               final_foot_pos=final_foot_pos,
                               max_velocity=max_velocity,
                               acceleration=acceleration)

        self.model = leg_model
        self.controller = limb_controller
        self.final_foot_pos = final_foot_pos
        self.final_joint_angles = self.model.jointAnglesFromFootPos(
            final_foot_pos, shock_depth=0.0)
        self.max_vel = max_velocity
        self.vel = 0.0
        self.acc = acceleration
        self.z_plane = z_plane
        self.initial_foot_pos = self.model.footPosFromLegState(
            [self.controller.getDesiredPosAngle(), 0])
        self.initial_joint_angles = self.controller.getDesiredPosAngle()
        self.target_angles = self.initial_joint_angles

        self.projected_initial = [
            self.initial_foot_pos[0], self.initial_foot_pos[1], z_plane
        ]
        self.projected_final = [
            self.final_foot_pos[0], self.final_foot_pos[1],
            max(self.final_foot_pos[2], z_plane)
        ]

        self.done = False

        self.LIFT = 1
        self.TRANSLATE = 2
        self.LOWER = 3
        self.state = self.LIFT

        self.path = TrapezoidalFootMove(self.model, self.controller,
                                        self.projected_initial, self.max_vel,
                                        self.acc)

        if self.initial_foot_pos[2] > self.z_plane:
            self.state = self.TRANSLATE
            self.path = TrapezoidalJointMove(
                self.model, self.controller,
                self.model.jointAnglesFromFootPos(self.projected_final),
                self.max_vel, self.acc)
コード例 #6
0
ファイル: row_the_cart.py プロジェクト: braingram/Main
def update(time, yaw, hip_pitch, knee_pitch, shock_depth, command=None):
    global path, state

    # Update model
    time_sources.global_time.updateTime(time)
    model.setSensorReadings(yaw, hip_pitch, knee_pitch, shock_depth)
    model.updateFootOnGround()

    # Init path. Do this after the first update.
    if path is None:
        path = Pause(model, controller, 1.0)

    # Monitor leg_paths
    if path.isDone():
        if state == S_MOVE3:
            path = TrapezoidalFootMove(model, controller,
                                       array([1.5, -0.6, -0.4]), 0.2, 0.1)
            state = S_MOVE1
        elif state == S_MOVE1:
            path = PutFootOnGround(model, controller, 0.05)
            state = S_LOWER
        elif state == S_LOWER:
            ground_level = model.getFootPos()[Z]
            path = TrapezoidalFootMove(model, controller,
                                       array([1.5, .6, ground_level]), 0.2,
                                       0.1)
            state = S_MOVE2
        elif state == S_MOVE2:
            path = TrapezoidalFootMove(model, controller,
                                       array([1.5, 0.6, -0.4]), 0.2, 0.1)
            state = S_MOVE3
        logger.info("State changed.", state=state)

    # Evaluate path and joint control
    controller.update(model.getJointAngles(), path.update())

    # Send commands
    return controller.getLengthRateCommands()
コード例 #7
0
 def __init__(self, body_model, body_controller, max_velocity=2.0, acceleration=1.0):
     leg_logger.logger.info("New path.",
                            path_name="GoToStandardHexagon",
                            max_velocity=max_velocity,
                            acceleration=acceleration)
     
     self.model = body_model
     self.controller = body_controller
     self.max_velocity = max_velocity
     self.acceleration = acceleration
     
     self.final_joint_positions = self.controller.getTargetJointAngleMatrix()
     self.foot_paths = [None for i in range(NUM_LEGS)]
     
     self.lifted = array([1.651 ,  0 ,  0])
     self.lowered = array([1.651 , 0 , -1.6764])
     
     self.NONE = 0
     self.LOWER_ALL = 1
     self.EVENS = 2
     self.LOWER_EVENS = 3
     self.ODDS = 4
     self.LOWER_ODDS = 5
     self.STAND = 6
     
     self.state = self.LOWER_ALL
     
     self.on_ground = [leg.isFootOnGround() for leg in self.model.getLegs()]
     self.in_place = [False] * 6
     
     # Put all 6 legs in place
     for i in range(NUM_LEGS):
         if not self.on_ground[i] and not self.in_place[i]:
             self.foot_paths[i] = TrapezoidalFootMove(self.model.getLegs()[i],
                                                      self.controller.getLimbControllers()[i],
                                                      self.lifted,
                                                      self.max_velocity, self.acceleration)
             self.in_place[i] = True
     
     
     self.phase_done = False
     self.done = False        
コード例 #8
0
ファイル: row_the_cart_dumb.py プロジェクト: braingram/Main
def update(time, yaw, hip_pitch, knee_pitch, shock_depth, command=None):
    global points, path, index

    # Update model
    time_sources.global_time.updateTime(time)
    model.setSensorReadings(yaw, hip_pitch, knee_pitch, shock_depth)
    model.updateFootOnGround()

    # Init path. Do this after the first update.
    if path is None:
        path = Pause(model, controller, 1.0)

    if path.isDone():
        path = TrapezoidalFootMove(model, controller, array(points[index]),
                                   0.5, 0.4)
        index = (index + 1) % len(points)

    # Evaluate path and joint control
    controller.update(model.getJointAngles(), path.update())

    # Send commands
    return controller.getLengthRateCommands()
コード例 #9
0
ファイル: safe_move.py プロジェクト: braingram/Main
    def update(self):
        if not self.isDone():
            self.target_angles = self.path.update()
            self.done = self.path.isDone()

        if self.isDone():
            if self.state == self.LIFT:
                self.state = self.TRANSLATE
                self.path = TrapezoidalJointMove(
                    self.model, self.controller,
                    self.model.jointAnglesFromFootPos(self.projected_final),
                    self.max_vel, self.acc)
                self.done = False
            elif self.state == self.TRANSLATE and self.final_foot_pos[
                    2] < self.z_plane:
                self.state = self.LOWER
                self.path = TrapezoidalFootMove(self.model, self.controller,
                                                self.final_foot_pos,
                                                self.max_vel, self.acc)
                self.done = False

        return self.target_angles
コード例 #10
0
    def update(self):        
        active_paths = []
        active_index = []
        for i in range(NUM_LEGS):
            if self.foot_paths[i] is not None:
                active_index.append(i)
                active_paths.append(self.foot_paths[i])

        if self.phase_done:
            self.on_ground = [leg.isFootOnGround() for leg in self.model.getLegs()]
            
            if self.state == self.LOWER_ALL:
                for i in range(NUM_LEGS):
                    if not self.on_ground[i]:
                        self.foot_paths[i] = PutFootOnGround(
                            self.model.getLegs()[i],
                            self.controller.getLimbControllers()[i],
                            self.max_velocity / 5)
                        self.in_place[i] = True
                self.state = self.EVENS
                if all(self.in_place):
                    self.state = self.STAND 
                self.phase_done = False
            elif self.state == self.EVENS:
                for i in range(NUM_LEGS):
                    if not i % 2 and not self.in_place[i]:
                        self.foot_paths[i] = TrapezoidalFootMove(
                            self.model.getLegs()[i],
                            self.controller.getLimbControllers()[i],
                            self.lifted,
                            self.max_velocity, self.acceleration)
                self.state = self.LOWER_EVENS
                self.phase_done = False
            elif self.state == self.LOWER_EVENS:
                for i in range(NUM_LEGS):
                    if not self.on_ground[i]:
                        self.foot_paths[i] = PutFootOnGround(
                            self.model.getLegs()[i],
                            self.controller.getLimbControllers()[i],
                            self.max_velocity / 5)
                        self.in_place[i] = True
                self.state = self.ODDS
                self.phase_done = False
            elif self.state == self.ODDS:
                for i in range(NUM_LEGS):
                    if i % 2 and not self.in_place[i]:
                        self.foot_paths[i] = TrapezoidalFootMove(
                            self.model.getLegs()[i],
                            self.controller.getLimbControllers()[i],
                            self.lifted,
                            self.max_velocity, self.acceleration)
                self.state = self.LOWER_ODDS
                self.phase_done = False
            elif self.state == self.LOWER_ODDS:
                for i in range(NUM_LEGS):
                    if not self.on_ground[i]:
                        self.foot_paths[i] = PutFootOnGround(
                            self.model.getLegs()[i],
                            self.controller.getLimbControllers()[i],
                            self.max_velocity / 5)
                        self.in_place[i] = True
                self.state = self.STAND
                self.phase_done = False
            elif self.state == self.STAND:
                for i in range(NUM_LEGS):
                    self.foot_paths[i] = TrapezoidalFootMove(
                        self.model.getLegs()[i],
                        self.controller.getLimbControllers()[i],
                        self.lowered,
                        self.max_velocity, self.acceleration * .1)
                self.state = self.NONE
                self.phase_done = False
            elif self.state == self.NONE:
                self.done = True
                return self.final_joint_positions
        elif not self.phase_done:
            #logically and all of the isdone results from the joint move paths
            self.phase_done = all(map(lambda p: p.isDone(), active_paths))
        if not self.done:
            for i in active_index:
                self.final_joint_positions[i] = self.foot_paths[i].update()
            return self.final_joint_positions
コード例 #11
0
ファイル: smart_move.py プロジェクト: braingram/Main
    def update(self,
               time,
               yaw,
               hip_pitch,
               knee_pitch,
               shock_depth,
               command=None):
        # Update model
        time_sources.global_time.updateTime(time)
        self.model.setSensorReadings(yaw, hip_pitch, knee_pitch, shock_depth)
        self.model.updateFootOnGround()

        # Init path. Do this after the first update.
        if self.path is None:
            self.path = Pause(self.model, controller, 1.0)

        if self.path.isDone():
            self.path = TrapezoidalFootMove(
                self.model, controller, array(self.points[self.index][0:3]),
                self.points[self.index][3], 0.4)
            self.index = (self.index + 1) % len(self.points)

        # Evaluate path and joint control
        present_angles = self.model.getJointAngles()
        target_angles = self.path.update()
        controller.update(present_angles, target_angles)

        control_lin_rates = [
            self.joint_controllers[i].update(target_angles[i],
                                             present_angles[i])
            for i in range(3)
        ]
        target_lin_rates = [
            c.getDesiredLengthRate() for c in self.joint_controllers
        ]
        measured_lin_rates = [
            c.getLengthRate() for c in self.joint_controllers
        ]

        if 0:
            s = ''
            m = self.pist_helpers[0].clay_pit_pos.mem
            for i in range(len(m)):
                if not i % 8:
                    s += '%2.2f ' % (m[i])
            print s

        commands = [
            self.pist_helpers[i].update(control_lin_rates[i],
                                        measured_lin_rates[i])
            for i in range(3)
        ]
        #commands  = [self.pist_helpers[0].update(control_lin_rates[0], measured_lin_rates[0]),0,0]

        if 0:
            target_ang_rates = [c.desired_vel for c in self.joint_controllers]
            measured_ang_rates = [
                c.getAngleRate() for c in self.joint_controllers
            ]
            s = 'Measured: '
            for m in measured_ang_rates:
                s += '%1.3f ' % (m * 180 / pi)
            print s
            s = 'Target:   '
            for m in target_ang_rates:
                s += '%1.3f ' % (m * 180 / pi)
            print s
            s = 'M Lin'
            for m in measured_lin_rates:
                s += '%1.3f ' % m
            print s
            s = 'T Lin'
            for m in target_lin_rates:
                s += '%1.3f ' % m
            print s
            self.pist_helpers[0].clay_pit_pos.printpit()

        return commands