Exemplo n.º 1
0
        /// <summary>
        /// 現在のAnimatorについているサーボの値を参照しながら全て送る
        /// </summary>
        void ApplyMecanimPoseAll()
        {
            var servos = _controller.Servos;

            List <PreMaidServo> orders = new List <PreMaidServo>();

            foreach (var VARIABLE in _joints)
            {
                var mecanimServoValue = VARIABLE.CurrentServoValue();

                var servo = servos.Find(x => x.ServoPositionEnum == VARIABLE.TargetServo);

                int premaidServoValue = servo.GetServoValue();


                servo.SetServoValueSafeClamp((int)mecanimServoValue);
                PreMaidServo tmp = new PreMaidServo(VARIABLE.TargetServo);
                tmp.SetServoValueSafeClamp((int)mecanimServoValue);
                orders.Add(tmp);
            }

            //ここでordersに差分だけ送れます
            coolTime = 0.09f; //25個あると0.08くらい、1個だと0.01くらいのクールタイムが良い

            keyFrameTimer = 1f;
            //Debug.Log("全フレーム転送 :" + orders.Count+" FPS:"+currentFPS);
            _controller.ApplyPoseFromServos(orders, 40);

            currentFPS = 0;

            if (_initialized == false)
            {
                _initialized = true;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 現在のAnimatorについているサーボの値を参照しながら差分だけ送る
        /// </summary>
        void ApplyMecanimPoseWithDiff()
        {
            var servos = _controller.Servos;

            List <PreMaidServo> orders = new List <PreMaidServo>();

            foreach (var VARIABLE in _joints)
            {
                var           mecanimServoValue = VARIABLE.currentServoValue;
                ServoPosition targetServoID     = (ServoPosition)VARIABLE.servoNo;

                var servo = servos.Find(x => x.ServoPositionEnum == targetServoID);

                int premaidServoValue = servo.GetServoValue();

                // mecanimServoValueがゼロなのは異常
                if (mecanimServoValue <= 0)
                {
                    Debug.Log(string.Format("Servo:{0} Val:{1}", servo.GetServoName(), mecanimServoValue - premaidServoValue));
                    continue;
                }

                //閾値よりサーボの値が変わってたら命令とする
                //50とかでもいいかも
                if (Mathf.Abs(mecanimServoValue - premaidServoValue) > 10)
                {
                    servo.SetServoValueSafeClamp((int)mecanimServoValue);
                    PreMaidServo tmp = new PreMaidServo(targetServoID);
                    tmp.SetServoValueSafeClamp((int)mecanimServoValue);
                    orders.Add(tmp);
                }
            }

            //ここでordersに差分だけ送れます
            coolTime = orders.Count * 0.005f; //25個あると0.08くらい、1個だと0.01くらいのクールタイムが良い

            if (orders.Count > 0)
            {
                currentFPS++;
                //Debug.Log("Servo Num:" + orders.Count);
                _controller.ApplyPoseFromServos(orders, Mathf.Clamp(orders.Count * 2, 10, 40));
            }

            if (_initialized == false)
            {
                _initialized = true;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 現在のAnimatorについているサーボの値を参照しながら全て送る
        /// </summary>
        void ApplyMecanimPoseAll()
        {
            var servos = _controller.Servos;

            List <PreMaidServo> orders = new List <PreMaidServo>();

            foreach (var VARIABLE in _joints)
            {
                var           mecanimServoValue = VARIABLE.currentServoValue;
                ServoPosition targetServoID     = (ServoPosition)VARIABLE.servoNo;

                var servo = servos.Find(x => x.ServoPositionEnum == targetServoID);

                int premaidServoValue = servo.GetServoValue();

                // mecanimServoValueがゼロなのは異常
                if (mecanimServoValue <= 0)
                {
                    Debug.Log(string.Format("Servo:{0} Val:{1}", servo.GetServoName(), mecanimServoValue - premaidServoValue));
                    continue;
                }

                servo.SetServoValueSafeClamp((int)mecanimServoValue);
                PreMaidServo tmp = new PreMaidServo(targetServoID);
                tmp.SetServoValueSafeClamp((int)mecanimServoValue);
                orders.Add(tmp);
            }

            //ここでordersに差分だけ送れます。speed=40でcooltime=0.05fでいけた!?!?
            //つまり20FPSだとたまに送信失敗するけど意外と通る。
            //BT環境が悪かったらもっと速度を落とすとか?
            //cooltime=0.08f  だと12FPS送信になって結構失敗しないです
            coolTime = 0.05f;

            keyFrameTimer = 1f;
            //Debug.Log("全フレーム転送 :" + orders.Count+" FPS:"+currentFPS);
            _controller.ApplyPoseFromServos(orders, 40);

            currentFPS = 0;

            if (_initialized == false)
            {
                _initialized = true;
            }
        }