Beispiel #1
0
    public void SetPos(float angle0, float angle1, float angle2)
    {
        if (config.Kinematic)
        {
            float deltaangle0 = kinematicanglerange0.GetTarget() - chassis.GetComponent <chassis>().GetKinematicRestDeltaAngle0();
            float deltaangle1 = kinematicanglerange1.GetTarget() - chassis.GetComponent <chassis>().GetKinematicRestDeltaAngle1();
            float deltaangle2 = kinematicanglerange2.GetTarget() - chassis.GetComponent <chassis>().GetKinematicRestDeltaAngle2();

            kinematicanglerange0.SetTarget(angle0);
            kinematicanglerange1.SetTarget(angle1);
            kinematicanglerange2.SetTarget(angle2);

            deltaangle0 = kinematicanglerange0.Delta(deltaangle0, kinematicanglerange0.GetTarget());
            deltaangle1 = kinematicanglerange0.Delta(deltaangle1, kinematicanglerange1.GetTarget());
            deltaangle2 = kinematicanglerange0.Delta(deltaangle2, kinematicanglerange2.GetTarget());

            chassis.GetComponent <chassis>().SetKinematicTargetDeltaAngles(deltaangle0, deltaangle1, deltaangle2);
        }
        else
        {
            chassis.GetComponent <chassis>().drive.AngleRange.SetTarget(angle0);
            holder.GetComponent <holder>().drive.AngleRange.SetTarget(angle1);
            lever.GetComponent <lever>().drive.AngleRange.SetTarget(angle2);
        }
    }
Beispiel #2
0
    public void SetPos(float angle0, float angle1, float angle2, float angle3, float angle4, float angle5, bool gripped)
    {
        if (config.Kinematic)
        {
            float deltaangle0 = kinematicanglerange0.GetTarget() - chassis.GetComponent <chassismanipulator2>().GetKinematicRestDeltaAngle0();
            float deltaangle1 = kinematicanglerange1.GetTarget() - chassis.GetComponent <chassismanipulator2>().GetKinematicRestDeltaAngle1();
            float deltaangle2 = kinematicanglerange2.GetTarget() - chassis.GetComponent <chassismanipulator2>().GetKinematicRestDeltaAngle2();

            kinematicanglerange0.SetTarget(angle0);
            kinematicanglerange1.SetTarget(angle1);
            kinematicanglerange2.SetTarget(-90 + angle2);

            deltaangle0 = kinematicanglerange0.Delta(deltaangle0, kinematicanglerange0.GetTarget());
            deltaangle1 = kinematicanglerange0.Delta(deltaangle1, kinematicanglerange1.GetTarget());
            deltaangle2 = kinematicanglerange0.Delta(deltaangle2, kinematicanglerange2.GetTarget());

            chassis.GetComponent <chassismanipulator2>().SetKinematicTargetDeltaAngles(deltaangle0, deltaangle1, deltaangle2);
        }
        else
        {
            DriveJoint drive0 = chassis.GetComponent <chassismanipulator2>().drive;
            DriveJoint drive1 = lever.GetComponent <levermanipulator2>().drive;
            DriveJoint drive2 = holder1.GetComponent <holder1manipulator2>().drive;
            DriveJoint drive3 = holder2.GetComponent <holder2manipulator2>().drive;

            drive0.AngleRange.SetTarget(angle0);
            drive3.AngleRange.SetTarget(angle1);
            drive2.AngleRange.SetTarget(drive3.AngleRange.GetTarget() + drive1.AngleRange.GetTarget());
            drive1.AngleRange.SetTarget(-90 + angle2);
            drive2.AngleRange.SetTarget(drive3.AngleRange.GetTarget() + drive1.AngleRange.GetTarget());
        }

        if (config.FingerDown)
        {
            capture.SetPos(0, GetPos1() + GetPos2() - 180, angle5);
        }
        else
        {
            capture.SetPos(angle3, angle4, angle5);
        }

        SetGripper(gripped);
    }
Beispiel #3
0
    public void Update()
    {
        float angle = GetAngle();

        float deltaAngle = AngleRange.Delta(angle, AngleRange.GetTarget());

        if (gameObject.GetComponent <Rigidbody>().isKinematic)
        {
            float step = Time.deltaTime * KinematicAngularVelocity * Mathf.Sign(deltaAngle);
            angle = Mathf.Abs(deltaAngle) < Mathf.Abs(step) ? AngleRange.GetTarget() : angle + step;
            commonJoint.KinematicRotate(Quaternion.AngleAxis(angle, Vector3.up));
            return;
        }

        HingeJoint hingeJoint = pivotObject.GetComponent <HingeJoint>();

        if (Mathf.Sign(deltaAngle) > 0)
        {
            deltaSAngle += deltaAngle;
        }
        else
        {
            deltaSAngle -= deltaAngle;
        }

        float deltaVelocity = -hingeJoint.velocity;

        if (Mathf.Sign(deltaVelocity) == Mathf.Sign(deltaAngle))
        {
            deltaVelocity = -Mathf.Abs(deltaVelocity);
        }
        else
        {
            deltaVelocity = Mathf.Abs(deltaVelocity);
        }

        float kP = Proportional;
        float kI = Integral;
        float kD = Differential;

        JointMotor motor = hingeJoint.motor;

        motor.targetVelocity = -Mathf.Sign(deltaAngle) * 1000000000;
        motor.force          = kP * Mathf.Abs(deltaAngle) + kI * deltaSAngle + kD * deltaVelocity;
        motor.freeSpin       = true;
        hingeJoint.motor     = motor;
        hingeJoint.useMotor  = true;
    }