Beispiel #1
0
    public IEnumerator SetRootJoint(BodyData.Joints rootJoint)
    {
        Debug.Log("SetRootJoint: " + rootJoint);
        string jointName = rootJoint.ToString() + "Joint";

        if (!joints.ContainsKey(jointName))
        {
            Debug.LogError("SetRootJoint got illegal joint name: " + jointName);
            yield return(null);
        }
        JointController jointC     = joints [jointName];
        Transform       joint      = jointC.transform;
        Transform       parent     = joint.parent;
        Transform       prevParent = joint;

        while (parent != transform && parent != null)
        {
            Transform nextParent = parent.parent;
            joint.SetParent(nextParent);
            parent.SetParent(prevParent);
            foreach (Transform child in parent)
            {
                if ((child.gameObject.tag == "BodyPart") && (child.GetComponent <BodyPartController>() != null))
                {
                    child.GetComponent <BodyPartController>().TrySetParent(prevParent);
                }
            }
            prevParent = parent;
            parent     = nextParent;
        }
    }
Beispiel #2
0
    void AssignTaskToJoints()
    {
        for (int i = 0; i < timeSortedJoints.Count; i++)
        {
            Joint JD = timeSortedJoints[i];
            for (int j = 0; j < timeSortedJoints[i].bodyName.Length; j++)
            {
                JointController JC = AllJoints[(HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), JD.bodyName[j], true)];
                JC.Task(JD.start, JD.end, JD.rotateCap, JD.hold);
            }
        }

        for (int i = 0; i < timeSortedHipPos.Count; i++)
        {
            HipJoint        HJ = timeSortedHipPos[i];
            JointController JC = AllJoints[(HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), HJ.bodyName, true)];
            JC.Task2(HJ.start, HJ.end, HJ.addPos);
        }

        for (int i = 0; i < timeSortedSupportJoint.Count; i++)
        {
            Support         SP = timeSortedSupportJoint[i];
            JointController JC = AllJoints[(HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), SP.bodyName, true)];
            JC.Task3(SP.start, SP.end, SP.rotateTo, SP.hold);
        }

        for (int i = 0; i < timeSortedGesture.Count; i++)
        {
            gestureJoint    GJ = timeSortedGesture[i];
            JointController JC = AllJoints[(HumanBodyBones)Enum.Parse(typeof(HumanBodyBones), GJ.fingerName, true)];
            JC.Task4(GJ.start, GJ.end, GJ.position, GJ.hold);
        }
    }
Beispiel #3
0
 void ProcessAndCreateJoints()
 {
     for (int i = 0; i < 55; i++)
     {
         string    check;
         Transform BoneTrans = Anim.GetBoneTransform((HumanBodyBones)i);
         if (BoneTrans != null)
         {
             //GameObject controller = Instantiate(JointControllerPrefab);              //Create Controller Prefab
             //Vector3 ConPos = BoneTrans.position;                                    //Get position of Specific HumanBody Bones
             //ConPos.z += 1;                                                             //1 Vector.z unit away from model
             //controller.transform.position = ConPos;                                  // Set Controller Prefab position 1 Vector.z unit away from specific HumanBody Bones
             //controller.transform.rotation = BoneTrans.rotation;
             //BoneTrans.transform.SetParent(controller.transform);
             BoneTrans.name = ((HumanBodyBones)i).ToString() + " JC";
             if (((HumanBodyBones)i).ToString() == "Hips")
             {
                 hipXValue = BoneTrans.transform.position.x;
             }
             JointController JC = BoneTrans.gameObject.AddComponent <JointController>();
             //JC.JointToControllTrans = BoneTrans;                                      //JC.JointToControllTrans = Anim.GetBoneTransform((HumanBodyBones)i)
             AllJoints.Add((HumanBodyBones)i, JC);
             check = ((HumanBodyBones)i).ToString();
             //if(check[0] == 'L')
             if (((HumanBodyBones)i).ToString().StartsWith("Left"))
             {
                 BoneTrans.gameObject.tag = "Left";
             }
         }
     }
 }
Beispiel #4
0
        public KinectTester()
        {
            InitializeComponent();

            sensor       = new SmartKinectSensor();
            renderCanvas = new RenderCanvas(TimeSpan.FromSeconds(10));
            sensor.EnableSkeletonRenderingSensor();

            renderCanvas.ImageRendered += DisplayRenderedImage;

            capturedLabel.Visible = false;

            jointController   = new JointController();
            gestureController = new GestureController();
            skeletonRender    = new SkeletonRenderer(sensor.Sensor);

            sensor.SkeletonController.AddFunction(jointController);
            sensor.SkeletonController.AddFunction(gestureController);
            sensor.SkeletonController.AddFunction(skeletonRender);

            skeletonRender.SkeletonRendered       += renderCanvas.SkeletonFrameCaptured;
            gestureController.GestureCaptured     += GestureCaptured;
            jointController.JointTrackingCaptured += JointTrackingCaptured;

            ArduinoSerialPort serialPort = new ArduinoSerialPort("COM5", 115200);

            serialPort.Open();
            bodyTracker = new KinectBodyTracker(sensor, serialPort);

            GestureBuilderForm test = new GestureBuilderForm(sensor);

            test.Show();

            // InitializeArduino();
        }
Beispiel #5
0
        public KinectTester()
        {
            InitializeComponent();

            sensor = new SmartKinectSensor();
            renderCanvas = new RenderCanvas(TimeSpan.FromSeconds(10));
            sensor.EnableSkeletonRenderingSensor();

            renderCanvas.ImageRendered += DisplayRenderedImage;

            capturedLabel.Visible = false;

            jointController = new JointController();
            gestureController = new GestureController();
            skeletonRender = new SkeletonRenderer(sensor.Sensor);

            sensor.SkeletonController.AddFunction(jointController);
            sensor.SkeletonController.AddFunction(gestureController);
            sensor.SkeletonController.AddFunction(skeletonRender);

            skeletonRender.SkeletonRendered += renderCanvas.SkeletonFrameCaptured;
            gestureController.GestureCaptured += GestureCaptured;
            jointController.JointTrackingCaptured += JointTrackingCaptured;

            ArduinoSerialPort serialPort = new ArduinoSerialPort("COM5", 115200);
            serialPort.Open();
            bodyTracker = new KinectBodyTracker(sensor, serialPort);

            GestureBuilderForm test = new GestureBuilderForm(sensor);
            test.Show();

            // InitializeArduino();
        }
Beispiel #6
0
        private void ConnectSkeletonController()
        {
            JointController jointController = new JointController();

            skeletonController.AddFunction(jointController);
            jointController.JointTrackingCaptured += jointController_JointTrackingCaptured;
        }
Beispiel #7
0
 public void ReleaseGrapple()
 {
     if (activeJoint != null)
     {
         JointController jointController = activeJoint.GetComponent <JointController>();
         jointController.ReleaseLastJointAnchor();
     }
 }
Beispiel #8
0
    public void FireGrapple()
    {
        ReleaseGrapple();
        activeJoint = Instantiate(HingePoint, gameObject.transform.position, Quaternion.identity) as GameObject;
        JointController jointController = activeJoint.GetComponent <JointController>();

        jointController.SetLastJointAnchor(rb);
        jointController.LaunchFirstJoint(grappleThrowForce, gameObject.transform.right, grappleLockTime);
    }
Beispiel #9
0
        void Update()
        {
            for (int i = 0; i < motors.Length; i++)
            {
                Motor m = motors[i];

                JointController joint = m.gameObject.GetComponent <JointController>();
                joint.RotateTo(m.targetPosition);

                m.presentPosition = joint.GetPresentPosition();
            }
        }
    public void FireGrapple()
    {
        //Vector3 mousePosition = Input.mousePosition;

        //mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
        //mousePosition.z = 0;
        //if (Vector2.Distance(gameObject.transform.position, mousePosition) > maxGrappleDistance)
        //  return;
        ReleaseGrapple();
        activeJoint = Instantiate(HingePoint, gameObject.transform.position, Quaternion.identity) as GameObject;
        JointController jointController = activeJoint.GetComponent <JointController>();

        jointController.SetLastJointAnchor(rb);
        jointController.LaunchFirstJoint(grappleThrowForce, gameObject.transform.right, grappleLockTime);
    }
    // Start is called before the first frame update
    void Start()
    {
        Academy.Instance.OnEnvironmentReset += () =>
        {
            Reset();
        };

        // Initialize joint controllers
        leftShoulder    = new JointController("Left shoulder", leftShoulderJoint, new Vector3(-999, -999, -50), new Vector3(999, 999, 50));
        leftUpperArm    = new JointController("Left upper arm", leftUpperArmJoint, new Vector3(-999, -999, -999), new Vector3(999, 999, 999));
        leftElbow       = new JointController("Left elbow", leftElbowJoint, new Vector3(-50, -999, -999), new Vector3(50, 999, 999));
        parameterScript = parameterObject.GetComponent <Parameters>();

        // Configure joint angles based on condition
        setArmCondition();
    }
    /// <summary>
    /// Initial setup, called at startup.
    /// </summary>
    /// <remarks>
    /// In future versions of ML-agents (> 0.14), InitializeAgent should be replaced by Initialize.
    /// </remarks>
    public override void InitializeAgent()
    {
        base.InitializeAgent();

        // Initialize joint controllers
        leftShoulder = new JointController("Left shoulder", leftShoulderJoint, new Vector3(-999, -999, -999), new Vector3(999, 999, 999)); //new Vector3(-999, -999, -25), new Vector3(999, 999, 25));
        leftUpperArm = new JointController("Left upper arm", leftUpperArmJoint, new Vector3(-999, -999, -999), new Vector3(999, 999, 999));
        leftElbow    = new JointController("Left elbow", leftElbowJoint, new Vector3(-999, -999, -999), new Vector3(999, 999, 999));       //new Vector3(-25, -999, -999), new Vector3(25, 999, 999));
        head         = new JointController("Head", headJoint, new Vector3(-999, -999, -999), new Vector3(999, 999, 999));

        // Retrieve the rubberArm and visuo-tactile stimulation objects from the environment
        rubberArmController = rubberArm.GetComponent <RubberArmController>();
        ballScript          = ballHandler.GetComponent <BallHandler>();
        vibScript           = vibHandler.GetComponent <VibHandler>();

        // Set the head rotation (and subsequently the camera perspective)
        head.SetRelativeJointAngles(new Vector3(15f, -20f));
    }
Beispiel #13
0
 void CreateJoints()
 {
     JointControllers = new List <JointController>();
     HumanBodyBonesTrackData[] BonesToTrack = BodyManager.instance.BonesToTrack;
     for (int i = 0; i < BonesToTrack.Length; i++)
     {
         if (animatorComponent.GetBoneTransform(BonesToTrack[i].Joint) != null)
         {
             GameObject      JointObject = Instantiate(JointControllerPrefab, Vector3.zero, Quaternion.identity);
             JointController JC          = JointObject.GetComponent <JointController>();
             JC.SetTrackingData(animatorComponent, BonesToTrack[i], AnimatorToCompareTracker, this);
             JointControllers.Add(JC);
         }
         else
         {
             Debug.Log(gameObject.name + " doesn't have " + BonesToTrack[i].ToString() + " Bone", gameObject);
         }
     }
 }
Beispiel #14
0
    private KineticHierarchyController BuildJoint(KineticHierarchyController parent, string part_name, int id,
                                                  XmlNode joint_xml, XmlUtils.Defaults defaults)
    {
        string joint_name = XmlUtils.GetString(joint_xml, "name", string.Format("{0}_joint_{1}", part_name, id));

        XmlUtils.Defaults joint_defaults = defaults.GetSubclass("joint");

        JointController joint = SceneUtils.InstantiateWithController <JointController>(joint_name);

        joint.Initialize(parent, joint_name,
                         XmlUtils.GetVector3WithDefaults(joint_xml, joint_defaults, "pos", Vector3.zero),
                         XmlUtils.GetRotationWithDefaults(joint_xml, joint_defaults, Quaternion.identity),
                         XmlUtils.GetVector3WithDefaults(joint_xml, joint_defaults, "axis", Vector3.up),
                         XmlUtils.GetVector2WithDefaults(joint_xml, joint_defaults, "range",
                                                         new Vector2(float.MinValue, float.MaxValue)),
                         XmlUtils.GetStringWithDefaults(joint_xml, joint_defaults, "type", null));

        return(joint);
    }
Beispiel #15
0
    // Use this for initialization
    void Start()
    {
        JointController jc = GameController.FindObjectOfType <JointController>();
        CharacterJoint  cj = GetComponent <CharacterJoint>();

        float rotation    = jc.maxRotation; //+ (jc.maxRotation * Random.Range(-50, 50)/100.0f * jc.randomness);
        float mass        = jc.mass;        // +(jc.mass * Random.Range(-50, 50) / 100.0f * jc.randomness);
        float drag        = jc.drag;        // +(jc.drag * Random.Range(-50, 50) / 100.0f * jc.randomness);
        float angularDrag = jc.angularDrag; // +(jc.angularDrag * Random.Range(-50, 50) / 100.0f * jc.randomness);
        float massModif   = Mathf.Sqrt(massModifier);

        SoftJointLimit limit = cj.highTwistLimit;

        limit.limit       = rotation;
        limit.spring      = jc.spring;
        limit.damper      = jc.damping;
        cj.highTwistLimit = limit;

        limit            = cj.lowTwistLimit;
        limit.limit      = -rotation;
        limit.spring     = jc.spring;
        limit.damper     = jc.damping;
        cj.lowTwistLimit = limit;

        limit          = cj.swing1Limit;
        limit.limit    = rotation;
        limit.spring   = jc.spring;
        limit.damper   = jc.damping;
        cj.swing1Limit = limit;

        limit          = cj.swing2Limit;
        limit.limit    = rotation;
        limit.spring   = jc.spring;
        limit.damper   = jc.damping;
        cj.swing2Limit = limit;

        Rigidbody rigid = GetComponent <Rigidbody>();

        rigid.mass        = mass * massModif;
        rigid.drag        = drag;
        rigid.angularDrag = angularDrag;
    }
Beispiel #16
0
 private void Remove()
 {
     if (_type == Type.Rectangle)
     {
         var listLines = GetComponent <RectangleInfo>().listLines;
         while (listLines.Count > 0)
         {
             _destroyingLine = listLines[0];
             LineDestroy(_destroyingLine.startRectangleInfo.listLines, _destroyingLine);
             LineDestroy(_destroyingLine.finishRectangleInfo.listLines, _destroyingLine);
         }
         Destroy(gameObject);
     }
     else
     {
         _destroyingLine = GetComponent <JointController>();
         LineDestroy(_destroyingLine.startRectangleInfo.listLines, _destroyingLine);
         LineDestroy(_destroyingLine.finishRectangleInfo.listLines, _destroyingLine);
         Destroy(gameObject);
     }
 }
Beispiel #17
0
    //Subida de la cadena
    public void collectChain()
    {
        if (i != 23)
        {
            //Por cada eslabon se habilita el movimiento poniendolos kinematic
            chainRb = chain[i].GetComponent <Rigidbody>();
            jc      = chain[i].GetComponent <JointController>();

            chainRb.useGravity  = false;
            chainRb.isKinematic = true;

            //Se mueven hasta el punto de ascenso
            chain[i].transform.position = Vector3.MoveTowards(chain[i].transform.position, pointAscend.position, step);

            //Cuando llega al punto de ascenso se desactiva y se asignan los valores correspondientes al siguiente eslabon
            if (chain[i].transform.position == pointAscend.position)
            {
                chain[i].SetActive(false);
                jc.assignNext();
            }
        }
    }
Beispiel #18
0
    // Update all joints from a list of qposes.
    public bool UpdateState(IList <float> state)
    {
        for (int i = 0; i < Mathf.Min(state.Count, mapping_.Length); ++i)
        {
            JointController joint = mapping_[i];
            if (joint != null)
            {
                switch (joint.joint_type_)
                {
                case JointController.JointType.Hinge:
                case JointController.JointType.Slide:
                    joint.UpdateJoint(state[i]);
                    break;

                case JointController.JointType.Ball:
                    joint.UpdateJoint(GetQuaternion(state, i));
                    break;
                }
            }
        }
        return(true);
    }
Beispiel #19
0
    //If was left click on the Rectangle and then was right click on another Rectangle, then between these Rectangles makes the Line
    public void OnPointerClick(PointerEventData eventData)
    {
        if (eventData.button == PointerEventData.InputButton.Left)
        {
            startRectangle = this;
        }
        else if (eventData.button == PointerEventData.InputButton.Right &&
                 startRectangle != null &&
                 startRectangle != gameObject &&
                 !_joinedLineExist)
        {
            GameObject      newLine            = Instantiate(linePrefab, new Vector3().normalized, Quaternion.identity, canvasTransform);
            JointController newJointController = newLine.GetComponent <JointController>();
            newJointController.startRectangle      = startRectangle.transform;
            newJointController.finishRectangle     = transform;
            newJointController.startRectangleInfo  = startRectangle;
            newJointController.finishRectangleInfo = this;


            startRectangle.listLines.Add(newJointController);
            listLines.Add(newJointController);
        }
    }
Beispiel #20
0
    //Bajada de la cadena
    public void releaseChain()
    {
        //Por cada eslabon se habilita su gravedad, activandola
        chainRb = chain[i].GetComponent <Rigidbody>();
        jc      = chain[i].GetComponent <JointController>();

        chainRb.useGravity  = true;
        chainRb.isKinematic = false;

        if (i > 0)
        {
            //Se mueve el objeto auxiliar hasta el punto de descenso
            auxObject.transform.position = Vector3.MoveTowards(auxObject.transform.position, pointDescend.position, step);

            //Durante el movimiento
            if (auxObject.transform.position.y <= pointDescend.position.y)
            {
                //Activamos el eslabon previo y se asignan los valores correspondientes
                auxObject.transform.position = startPosition;
                chain[i - 1].SetActive(true);
                jc.assignPrevious();
            }
        }
    }
Beispiel #21
0
 private void LineDestroy(List <JointController> currentListLines, JointController destroyingLine)
 {
     currentListLines.Remove(destroyingLine);
     Destroy(destroyingLine.gameObject);
 }
Beispiel #22
0
 public void AttachJointController(float kp, float tolerance)
 {
     JointController = new JointController(kp, tolerance, Links.Count, Links.Select(x => x.Type).ToArray());
 }
Beispiel #23
0
 private void ConnectSkeletonController()
 {
     JointController jointController = new JointController();
     skeletonController.AddFunction(jointController);
     jointController.JointTrackingCaptured += jointController_JointTrackingCaptured;
 }