private void listen()
 {
     while (connected)
     {
         try
         {
             if (oscDataType == OscDataType.OscMessage)
             {
                 OscMessage packet = receiver.Receive();
                 if (packet != null)
                 {
                     lock (processQueue)
                     {
                         //Debug.Log( "adding  packets " + processQueue.Count );
                         processQueue.Add((OscElement)packet);
                     }
                 }
                 else
                 {
                     Console.WriteLine("null packet");
                 }
             }
             else
             {
                 OscBundle packet = receiver.ReceiveBundle();
                 if (packet != null)
                 {
                     lock (processQueue)
                     {
                         foreach (OscElement element in packet.Elements)
                         {
                             //Debug.Log( "adding  packets " + processQueue.Count );
                             processQueue.Add(element);
                         }
                     }
                 }
                 else
                 {
                     Console.WriteLine("null packet");
                 }
             }
         }
         catch (Exception e)
         {
             Debug.Log(e.Message);
             Console.WriteLine(e.Message);
         }
     }
     if (receiver != null)
     {
         receiver.Dispose();
         receiver = null;
     }
 }
Пример #2
0
 static void Main(string[] args)
 {
     // 1. Instantiate BT connection to NXT
        //    You can peek in the class file for more documentation
        NXTBluetooth bt = new NXTBluetooth(@"Tox NXT");
        // 2. Instantiate the OSC receiver
        NetReader stream = new UdpReader(8000);
        // this is the main handler when an OSC message is recieved, per 100ms to not clog the BT
        Timer events = new Timer(new TimerCallback(
             delegate(object state) {
                  object o;
                  o = stream.Receive(); // 3. receive the info
                  if (o != null) {
                       // 4. convert the information
                       OscElement element = (OscElement)o;
                       //Console.WriteLine(string.Format("Message Received [{0}]: {1}",
                       //     element.Address,
                       //     element.Args[0]));
                       object arg;
                       // get the value passed
                       if (element.Args != null &&
                            element.Args.Length > 0 &&
                            (arg = element.Args[0]) != null) {
                            // 5. check on which value it is then send the message to BT
                            int value = 0;
                            switch (element.Address) {
                                 case "/1/leftTrack":
                                      value = 10000 + (int)((float)element.Args[0] * 100);
                                      bt.SendString(value.ToString());
                                      break;
                                 case "/1/rightTrack":
                                      value = 20000 + (int)((float)element.Args[0] * 100);
                                      bt.SendString(value.ToString());
                                      break;
                                 case "/1/turret":
                                      value = 30000 + (int)((float)element.Args[0] * 100);
                                      bt.SendString(value.ToString());
                                      break;
                                 case "/1/stop":
                                      value = 40000;
                                      bt.SendString(value.ToString());
                                      break;
                                 default:
                                      // ignore
                                      break;
                            }
                            Console.WriteLine(value.ToString());
                       }
                  }
             }), null, 0, 1);
        // timer starts immediately, ticks every 1ms
        Console.ReadKey(); // press any key to quit
 }
Пример #3
0
        static void Main(string[] args)
        {
            // 1. Instantiate BT connection to NXT
            //    You can peek in the class file for more documentation
            NXTBluetooth bt = new NXTBluetooth(@"Tox NXT");
            // 2. Instantiate the OSC receiver
            NetReader stream = new UdpReader(8000);
            // this is the main handler when an OSC message is recieved, per 100ms to not clog the BT
            Timer events = new Timer(new TimerCallback(
                                         delegate(object state) {
                object o;
                o = stream.Receive();          // 3. receive the info
                if (o != null)
                {
                    // 4. convert the information
                    OscElement element = (OscElement)o;
                    //Console.WriteLine(string.Format("Message Received [{0}]: {1}",
                    //     element.Address,
                    //     element.Args[0]));
                    object arg;
                    // get the value passed
                    if (element.Args != null &&
                        element.Args.Length > 0 &&
                        (arg = element.Args[0]) != null)
                    {
                        // 5. check on which value it is then send the message to BT
                        int value = 0;
                        switch (element.Address)
                        {
                        case "/1/leftTrack":
                            value = 10000 + (int)((float)element.Args[0] * 100);
                            bt.SendString(value.ToString());
                            break;

                        case "/1/rightTrack":
                            value = 20000 + (int)((float)element.Args[0] * 100);
                            bt.SendString(value.ToString());
                            break;

                        case "/1/turret":
                            value = 30000 + (int)((float)element.Args[0] * 100);
                            bt.SendString(value.ToString());
                            break;

                        case "/1/stop":
                            value = 40000;
                            bt.SendString(value.ToString());
                            break;

                        default:
                            // ignore
                            break;
                        }
                        Console.WriteLine(value.ToString());
                    }
                }
            }), null, 0, 1);

            // timer starts immediately, ticks every 1ms
            Console.ReadKey();    // press any key to quit
        }
    // Update is called once per frame
    void Update()
    {
        /*	BoneInfos
         * Index	Bone Name		Position in Hierarchy
         * 0		Upper Chest     Root
         * 1		Mid Torso		Child of Upper Chest
         * 2		Lower Torso		Child of Mid Torso
         * 3		Left Upper Leg	Child of Lower Torso
         * 4		Left Lower Leg	Child of Left Upper Leg
         * 5		Left Foot		Child of Left Lower Leg
         * 6		Right Upper Leg	Child of Lower Torso
         * 7		Right Lower Leg	Child of Right Upper Leg
         * 8		Right Foot      Child of Right Lower Leg
         * 9		Neck			Child of Upper Chest
         * 10		Head            Child of Neck
         * 11		Right Clavicle	Child of Upper Chest
         * 12		Right Shoulder	Child of Clavicle
         * 13		Right Upper Arm	Child of Shoulder
         * 14		Right Lower Arm	Child of Upper Arm
         * 15		Right Hand		Child of Lower Arm
         * 16		Left Clavicle	Child of Upper Chest
         * 17		Left Shoulder	Child of Left Clavicle
         * 18		Left Upper Arm	Child of Left Shoulder
         * 19		Left Lower Arm	Child of Left Upper Arm
         * 20		Left Hand		Child of Left Lower Arm
         */

        #region MoCap Ansteuerung
        if (reader != null)
        {
            bundle = (OscBundle)reader.Receive(); //Aktuelle MoCap Position empfangen
        }
        bundle = null;                            //for testing not connected environment

        if (bundle != null)
        {
            int i = 0;
            foreach (OscElement m in bundle.Elements)
            {
                skeleton[i] = (float)m.Args[0];
                i++;
            }
            //print("Recieved Bundle");

            //Save for once on pressed button
            if (Input.GetKeyDown(KeyCode.F1))
            {
                print("Saving F1");
                saveSkeleton("pose1");
            }

            #region Saving Multiple Positions

            if (Input.GetKeyDown(KeyCode.F2))
            {
                saveSkeleton("pose2");
            }
            if (Input.GetKeyDown(KeyCode.F3))
            {
                saveSkeleton("pose3");
            }
            if (Input.GetKeyDown(KeyCode.F4))
            {
                saveSkeleton("pose4");
            }
            if (Input.GetKeyDown(KeyCode.F5))
            {
                saveSkeleton("pose5");
            }
            if (Input.GetKeyDown(KeyCode.F6))
            {
                saveSkeleton("pose6");
            }
            if (Input.GetKeyDown(KeyCode.F7))
            {
                saveSkeleton("pose7");
            }
            if (Input.GetKeyDown(KeyCode.F8))
            {
                saveSkeleton("pose8");
            }
            if (Input.GetKeyDown(KeyCode.F9))
            {
                saveSkeleton("pose9");
            }
            if (Input.GetKeyDown(KeyCode.F10))
            {
                saveSkeleton("pose10");
            }

            #endregion

            mocap            = true;
            mocapcontrolling = false;
        }
        else
        {
            //Load for once if no bundle found
            //if successfull, set mocap true, else quit

            if (posenumber == 0)            //no pose has been set yet
            {
                mocap      = loadSkeleton(skeleton, "pose6");
                posenumber = 6;
            }

            #region LoadPoses

            if (Input.GetKeyDown(KeyCode.Alpha1) && posenumber != 1)
            {
                mocap      = loadSkeleton(skeleton, "pose1");
                posenumber = 1;
            }
            if (Input.GetKeyDown(KeyCode.Alpha2) && posenumber != 2)
            {
                mocap      = loadSkeleton(skeleton, "pose2");
                posenumber = 2;
            }
            if (Input.GetKeyDown(KeyCode.Alpha3) && posenumber != 3)
            {
                mocap      = loadSkeleton(skeleton, "pose3");
                posenumber = 3;
            }
            if (Input.GetKeyDown(KeyCode.Alpha4) && posenumber != 4)
            {
                mocap      = loadSkeleton(skeleton, "pose4");
                posenumber = 4;
            }
            if (Input.GetKeyDown(KeyCode.Alpha5) && posenumber != 5)
            {
                mocap      = loadSkeleton(skeleton, "pose5");
                posenumber = 5;
            }
            if (Input.GetKeyDown(KeyCode.Alpha6) && posenumber != 6)
            {
                mocap      = loadSkeleton(skeleton, "pose6");
                posenumber = 6;
            }
            if (Input.GetKeyDown(KeyCode.Alpha7) && posenumber != 7)
            {
                mocap      = loadSkeleton(skeleton, "pose7");
                posenumber = 7;
            }
            if (Input.GetKeyDown(KeyCode.Alpha8) && posenumber != 8)
            {
                mocap      = loadSkeleton(skeleton, "pose8");
                posenumber = 8;
            }
            if (Input.GetKeyDown(KeyCode.Alpha9) && posenumber != 9)
            {
                mocap      = loadSkeleton(skeleton, "pose9");
                posenumber = 9;
            }
            if (Input.GetKeyDown(KeyCode.Alpha0) && posenumber != 10)
            {
                mocap      = loadSkeleton(skeleton, "pose10");
                posenumber = 10;
            }
            #endregion

            mocapcontrolling = true;

            if (Input.GetKeyDown(KeyCode.C))
            {
                if (posenumber != 7)
                {
                    previouspose = posenumber;
                    loadSkeleton(skeleton, "pose7");
                    posenumber = 7;
                }
            }
            if (Input.GetKeyUp(KeyCode.C))
            {
                mocap      = loadSkeleton(skeleton, "pose" + previouspose);
                posenumber = previouspose;
            }
        }


        if (mocap)
        {
            //Speichern in Matrizen zur Weiterverarbeitung
            int x = 0;
            for (int anz = 0; anz < 21; anz++)
            {
                matrix [anz].m00 = skeleton [x++];
                matrix [anz].m01 = skeleton [x++];
                matrix [anz].m02 = skeleton [x++];
                matrix [anz].m03 = skeleton [x++];
                matrix [anz].m10 = skeleton [x++];
                matrix [anz].m11 = skeleton [x++];
                matrix [anz].m12 = skeleton [x++];
                matrix [anz].m13 = skeleton [x++];
                matrix [anz].m20 = skeleton [x++];
                matrix [anz].m21 = skeleton [x++];
                matrix [anz].m22 = skeleton [x++];
                matrix [anz].m23 = skeleton [x++];
                matrix [anz].m30 = skeleton [x++];
                matrix [anz].m31 = skeleton [x++];
                matrix [anz].m32 = skeleton [x++];
                matrix [anz].m33 = skeleton [x++];
            }



            for (int anz = 0; anz < 21; anz++)
            {
                //Rotation nicht für den Kopf
                if (anz != 10)
                {
                    bones [anz].transform.localRotation = MoCapUtils.GetRotation(matrix [anz]);
                }
                sphere[anz].transform.localPosition = MoCapUtils.GetPosition(matrix [anz]);
            }



            //Manual Controlling
            if (mocapcontrolling)
            {
                if (Input.GetKey(KeyCode.C))
                {
                    AvatarRoot.transform.Translate(new Vector3(Input.GetAxis("Vertical") * -0.03f, 0, Input.GetAxis("Horizontal") * 0.03f));
                }
                else
                {
                    AvatarRoot.transform.Translate(new Vector3(Input.GetAxis("Vertical") * -0.06f, 0, Input.GetAxis("Horizontal") * 0.06f));
                }

                if (Input.GetKey(KeyCode.Q))
                {
                    AvatarRoot.Rotate(new Vector3(0, 1, 0), -5f);
                }
                if (Input.GetKey(KeyCode.E))
                {
                    AvatarRoot.Rotate(new Vector3(0, 1, 0), 5f);
                }

                #region LimittoPlayarea
                float avatarx, avatarz;
                if (AvatarRoot.position.z > 1.7f)
                {
                    avatarz = 1.7f;
                }
                else
                {
                    if (AvatarRoot.position.z < -1.5f)
                    {
                        avatarz = -1.5f;
                    }
                    else
                    {
                        avatarz = AvatarRoot.position.z;
                    }
                }
                if (AvatarRoot.position.x > 1.3f)
                {
                    avatarx = 1.3f;
                }
                else
                {
                    if (AvatarRoot.position.x < -1.3f)
                    {
                        avatarx = -1.3f;
                    }
                    else
                    {
                        avatarx = AvatarRoot.position.x;
                    }
                }

                AvatarRoot.transform.position = new Vector3(avatarx, 0, avatarz);
                #endregion
            }
            else             //controlling via MoCap, locking manual controlling
            {
                AvatarRoot.transform.position = new Vector3(0, 0, 0);


                if (initPosition == Vector3.zero)
                {
                    initPosition = sphere[1].transform.localPosition;
                }
                //Rotation im Stillstand
                if (sphere[1].transform.localPosition.x > initPosition.x - 0.01f && sphere[1].transform.localPosition.x <initPosition.x + 0.01f &&
                                                                                                                         sphere[1].transform.localPosition.y> initPosition.y - 0.01f && sphere[1].transform.localPosition.y <initPosition.y + 0.01f &&
                                                                                                                                                                                                                             sphere[1].transform.localPosition.z> initPosition.z - 0.01f && sphere[1].transform.localPosition.z < initPosition.z + 0.01f)
                {
                    //AvatarRoot.rotation = Quaternion.Euler(0f,90f,0f);
                    //Debug.Log("Still");
                }
                else
                {
                    AvatarRoot.rotation = Quaternion.Euler(0f, 0f, 0f);
                    //Debug.Log ("Bewegt");
                }
            }

            /*
             * //Head and Neck
             * bones [9].Rotate (180, 180, 0);
             * //bones[10].Rotate(180,180,0);
             * //left Arm
             * for (int i=16; i<=20; i++)
             *      bones [i].Rotate (0, 90, 90);
             * //right Arm
             * for (int i=11; i<=15; i++)
             *      bones [i].Rotate (0, -90, -90);
             * //Foots
             * bones [5].Rotate (90, 0, 0);
             * bones [8].Rotate (90, 0, 0);
             *
             *
             *
             *
             *
             * //Fernglastest
             * //9= Nacken 10 = Kopf 15=Handrechts 20=Handlinks
             * if (Math.Abs ((MoCapUtils.GetPosition (matrix [10]) - MoCapUtils.GetPosition (matrix [15])).magnitude) < maxFernglas &&
             *      Math.Abs ((MoCapUtils.GetPosition (matrix [10]) - MoCapUtils.GetPosition (matrix [20])).magnitude) < maxFernglas &&
             *      Math.Abs ((MoCapUtils.GetPosition (matrix [15]) - MoCapUtils.GetPosition (matrix [20])).magnitude) < maxFernglas) {
             *      glas = true; //Fernglas Aktiv
             *      for (int i = 0; i < hands.Length; i++)
             *              hands [i].enabled = false;
             * } else {
             *      glas = false; //Fernglas nicht aktiv
             *      for (int i = 0; i < hands.Length; i++)
             *              hands [i].enabled = true;
             *
             * }
             */
        }
        #endregion
    }