Пример #1
0
    def __init__(self, name):
        self.name = name

        self.calibrated = rospy.get_param("~" + self.name + "/calibrated")
        self.signEncoder = rospy.get_param("~" + self.name + "/signEncoder")
        self.signJoint = rospy.get_param("~" + self.name + "/signJoint")
        self.name = rospy.get_param("~" + self.name + "/name")
        self.nameEncoder = rospy.get_param("~" + self.name + "/nameEncoder")
        minAngle = rospy.get_param("~" + self.name + "/minAngle")
        maxAngle = rospy.get_param("~" + self.name + "/maxAngle")
        self.pGain = rospy.get_param("~" + self.name + "/gains/P")
        self.iGain = rospy.get_param("~" + self.name + "/gains/I")
        self.vGain = rospy.get_param("~" + self.name + "/gains/D")
        self.maxAbsForwardError = rospy.get_param("~" + self.name +
                                                  "/maxAbsForwardError")

        # Attribute stores resting pose angle of antagonist-pair motor joints
        # taken from joint yaml file in gummi_base and gummi_ee pkgs.
        self.restingPoseAngle = rospy.get_param("~" + self.name +
                                                "/restingPoseAngle")

        self.range = maxAngle - minAngle
        self.angle = JointAngle(self.nameEncoder, self.signEncoder, minAngle,
                                maxAngle, True)

        self.eqModel = EquilibriumModel(self.name)
        self.inverseModel = InverseModel(self.name)
        self.inverseModelCollision = InverseModel(self.name)
        self.forwardModel = ForwardModel(self.name)

        if self.calibrated is 1:
            self.inverseModel.loadCalibration()
            self.inverseModelCollision.loadCalibration()
            self.forwardModel.loadCalibration()

        self.cocontractionReflex = Reflex(2.0, 0.0045, 0.0)
        self.feedbackReflex = Reflex(1.0, 0.0075, 0.0)
        self.collisionReflex = Reflex(1.0, 0.0075, 0.0)

        self.initPublishers()
        self.initVariables()
        self.disableEncoderTorque()

        jointRange = self.angle.getMax() - self.angle.getMin()
        self.eqModel.calculateEqVelCalibration(jointRange)
Пример #2
0
    def __init__(self, name):
        self.name = name

        self.calibrated = rospy.get_param("~" + self.name + "/calibrated")
        self.signEncoder = rospy.get_param("~" + self.name + "/signEncoder")
        self.signJoint = rospy.get_param("~" + self.name + "/signJoint")
        self.name = rospy.get_param("~" + self.name + "/name")
        self.nameEncoder = rospy.get_param("~" + self.name + "/nameEncoder")
        minAngle = rospy.get_param("~" + self.name + "/minAngle")
        maxAngle = rospy.get_param("~" + self.name + "/maxAngle")
        self.pGain = rospy.get_param("~" + self.name + "/gains/P")
        self.iGain = rospy.get_param("~" + self.name + "/gains/I")
        self.vGain = rospy.get_param("~" + self.name + "/gains/D")
        self.maxAbsForwardError = rospy.get_param("~" + self.name +
                                                  "/maxAbsForwardError")

        self.range = maxAngle - minAngle
        self.angle = JointAngle(self.nameEncoder, self.signEncoder, minAngle,
                                maxAngle, True)

        self.eqModel = EquilibriumModel(self.name)
        self.inverseModel = InverseModel(self.name)
        self.inverseModelCollision = InverseModel(self.name)
        self.forwardModel = ForwardModel(self.name)

        if self.calibrated is 1:
            self.inverseModel.loadCalibration()
            self.inverseModelCollision.loadCalibration()
            self.forwardModel.loadCalibration()

        self.cocontractionReflex = Reflex(2.0, 0.0015, 0.0)
        self.feedbackReflex = Reflex(1.0, 0.0075, 0.0)
        self.collisionReflex = Reflex(1.0, 0.0075, 0.0)

        self.initPublishers()
        self.initVariables()
        self.disableEncoderTorque()

        jointRange = self.angle.getMax() - self.angle.getMin()
        self.eqModel.calculateEqVelCalibration(jointRange)
Пример #3
0
class Antagonist:
    def __init__(self, name):
        self.name = name

        self.calibrated = rospy.get_param("~" + self.name + "/calibrated")
        self.signEncoder = rospy.get_param("~" + self.name + "/signEncoder")
        self.signJoint = rospy.get_param("~" + self.name + "/signJoint")
        self.name = rospy.get_param("~" + self.name + "/name")
        self.nameEncoder = rospy.get_param("~" + self.name + "/nameEncoder")
        minAngle = rospy.get_param("~" + self.name + "/minAngle")
        maxAngle = rospy.get_param("~" + self.name + "/maxAngle")
        self.pGain = rospy.get_param("~" + self.name + "/gains/P")
        self.iGain = rospy.get_param("~" + self.name + "/gains/I")
        self.vGain = rospy.get_param("~" + self.name + "/gains/D")
        self.maxAbsForwardError = rospy.get_param("~" + self.name +
                                                  "/maxAbsForwardError")

        self.range = maxAngle - minAngle
        self.angle = JointAngle(self.nameEncoder, self.signEncoder, minAngle,
                                maxAngle, True)

        self.eqModel = EquilibriumModel(self.name)
        self.inverseModel = InverseModel(self.name)
        self.inverseModelCollision = InverseModel(self.name)
        self.forwardModel = ForwardModel(self.name)

        if self.calibrated is 1:
            self.inverseModel.loadCalibration()
            self.inverseModelCollision.loadCalibration()
            self.forwardModel.loadCalibration()

        self.cocontractionReflex = Reflex(2.0, 0.0015, 0.0)
        self.feedbackReflex = Reflex(1.0, 0.0075, 0.0)
        self.collisionReflex = Reflex(1.0, 0.0075, 0.0)

        self.initPublishers()
        self.initVariables()
        self.disableEncoderTorque()

        jointRange = self.angle.getMax() - self.angle.getMin()
        self.eqModel.calculateEqVelCalibration(jointRange)

    def initVariables(self):
        self.errors = deque()
        self.velocity = False
        self.closedLoop = False
        self.feedForward = False
        self.collisionResponse = False
        self.errorLast = 0.0
        self.ballistic = 0.0
        self.deltaAngleBallistic = 0.0
        self.deltaEqFeedback = 0.0
        self.lastForwardError = 0.0
        self.forwardError = 0.0

        self.ballisticRatio = 0.85
        self.feedbackRatio = 0.5

    def disableEncoderTorque(self):
        service_name = self.nameEncoder + "_controller/torque_enable"
        rospy.wait_for_service(service_name)
        try:
            te = rospy.ServiceProxy(service_name, TorqueEnable)
            te(torque_enable=False)
        except rospy.ServiceException, e:
            print "Service call failed: %s" % e
Пример #4
0
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

from push_env import PushingEnv

from forward_model import ForwardModel
from inverse_model import InverseModel

if __name__ == "__main__":
    # train inverse model
    inverse_model = InverseModel()
    num_epochs = 30
    train_losses, valid_losses = inverse_model.train(num_epochs=num_epochs)

    #train forward model
    forward_model = ForwardModel()
    num_epochs = 30
    train_losses, valid_losses = forward_model.train(num_epochs=num_epochs)

    env = PushingEnv(ifRender=False)
    num_trials = 10

    # two pushes, inverse model
    errors = np.zeros(num_trials)
    # save one push
    errors[0] = env.plan_inverse_model_extrapolate(
        inverse_model, img_save_name="inverse_twopush", seed=0)
    print("test loss:", errors[0])
    # try 10 random seeds