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; } }
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 }
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 }