2012-04-21 6 views
5

का उपयोग कर ग्राउंड प्लेन के सापेक्ष डिवाइस प्लेन प्राप्त करें मान लें कि आईफोन एक फ्लैट टेबल पर रखा गया है। मैं टेबलटॉप विमान के कोण को निर्धारित करना चाहता हूं, जहां 0 का कोण यह होगा कि तालिका गुरुत्वाकर्षण वेक्टर के लिए बिल्कुल लंबवत है। मैं निम्न सूत्र का उपयोग कर रहा:एक्सेलेरोमीटर

radians = atanf (z/sqrt (x^2 + y^2) 

double  accelerationXAverage; 
double  accelerationYAverage; 
double  accelerationZAverage; 

double  accelerationXSum; 
double  accelerationYSum; 
double  accelerationZSum; 
int   readingsCount; 

में मीटर

#define kThresholdMovementHigh 0.05 

- (void)accelerometer:(UIAccelerometer *)accelerometer 
     didAccelerate:(UIAcceleration *)acceleration 
{ 
    // did device move a lot? if so, reset sums 
    if (fabsf(acceleration.x - accelerationXAverage) > kThresholdMovementHigh || 
     fabsf(acceleration.y - accelerationYAverage) > kThresholdMovementHigh || 
     fabsf(acceleration.z - accelerationZAverage) > kThresholdMovementHigh ) 
    { 
     NSLog(@"deviceDidMove a lot"); 
     accelerationXSum = acceleration.x; 
     accelerationYSum = acceleration.y; 
     accelerationZSum = acceleration.z; 
     readingsCount = 1; 
    } 

    else 
    { 
     // because the device is at rest, we can take an average of readings 
     accelerationXSum += acceleration.x; 
     accelerationYSum += acceleration.y; 
     accelerationZSum += acceleration.z; 
     readingsCount ++;   
    } 

    accelerationXAverage = accelerationXSum/readingsCount; 
    accelerationYAverage = accelerationYSum/readingsCount; 
    accelerationZAverage = accelerationZSum/readingsCount; 

    float angle = RadiansToDegrees(atanf(accelerationZAverage/sqrtf(pow(accelerationXAverage, 2) + pow(accelerationYAverage, 2)))) + 90; 

    labelAngle.text = [NSString stringWithFormat:@"%.2f°", angle]; 
} 

मैं accelerometer रीडिंग औसत से शोर को छान कर रहा हूँ में। एक्सीलरोमीटर अपडेट अंतराल 1/60 है, और अब प्रयोग करते समय, मैंने डिवाइस को 10 सेकंड तक बैठने दिया है (इसलिए यह 600 रीडिंग का औसत है)।

यह सूत्र काम पर प्रतीत होता है, यह मुझे उम्मीद करता है कि मुझे क्या उम्मीद है। हालांकि, मैं यह भी उम्मीद कर रहा हूं कि अगर मैं टेबलटॉप पर अभी भी फ्लैट के दौरान एक अलग स्थिर स्थिति में घुमाए गए डिवाइस के साथ कोशिश करता हूं, तो मुझे एक ही जवाब मिलना चाहिए (गुरुत्वाकर्षण वेक्टर के सापेक्ष कारण, कोण नहीं बदला है) । हालांकि, जब मैं इसे आज़माता हूं तो मुझे वह नहीं मिलता है। कोण कुछ डिग्री से भिन्न होते हैं।

मैं सही सूत्र का उपयोग कर रहा हूं? एक ही टेबलटॉप पर कोण अलग-अलग प्लेसमेंट के लिए क्यों भिन्न होगा? क्या यह सिर्फ त्रुटि का मार्जिन है?

मैंने यह सुनिश्चित करने के लिए एक छवि (http://gotoandplay.freeblog.hu/ से) जोड़ दी है कि मैं एक ही एक्स-वाई- और जेड-अक्ष के बारे में बात कर रहा हूं। enter image description here

+0

में kThresholdMovementHigh पर त्रुटि हो रही है। यह – srinadh

+0

kThresholdMovementHigh केवल एक स्थिर है। दहलीज के नीचे "शोर" है - यानी, वह आंदोलन जिसे आप अनदेखा करना चाहते हैं। दहलीज के ऊपर वह आंदोलन है जिसे आप उपयोगकर्ता द्वारा जानबूझकर आंदोलन के रूप में संसाधित करना चाहते हैं। मैंने अपना #define शामिल करने के लिए अपना प्रश्न अपडेट कर लिया है। आपको यह निर्धारित करना होगा कि आपके ऐप के लिए इष्टतम क्या है। –

उत्तर

3

आपका दृष्टिकोण और सूत्र सही है।

एक्स, वाई और जेड डिवाइस के सापेक्ष हैं। तालिका शीर्ष पर डिवाइस की कोणीय स्थिति के बावजूद सैद्धांतिक रूप से कोण समान होना चाहिए। हालांकि इस तरह के छोटे कोण पर आर्कटन गणना सहित शुद्धता में योगदान देने वाले कई कारक हैं। मैं सुझाव देता हूं कि आप टेबल झुकाव (जमीन पर क्षैतिज नहीं) के साथ इसे आज़माएं। अपनी मेज को जमीन से 30 डिग्री के कोण पर रखें और कोशिश करें। मुझे लगता है कि आपका एक्स, वाई, जेड सभी

+0

सुझाव के लिए धन्यवाद। मैंने इसे एक बड़े झुकाव पर कोशिश की। पूर्ण अंतर एक ही (~ 1 डिग्री) के बारे में है, हालांकि, प्रतिशत त्रुटि के रूप में, यह बड़ी झुकाव के साथ कम महत्वपूर्ण है। मैं एक्स, वाई, जेड फ्लोट के रूप में था; मैं डबल में बदल गया है। –

+0

कुछ और प्रयोग करने के बाद, मुझे लगता है कि यह सिर्फ त्रुटि का मार्जिन है। मैंने आईफोन के साथ एक ही स्थिति में कई परीक्षण किए, और कोण 0.5 डिग्री भिन्न था। (मुझे पहले स्थान पर परिशुद्धता की जांच करनी चाहिए थी!)। आप सही हैं, परिशुद्धता की कमी छोटे कोणों पर गणित के साथ अधिक ध्यान देने योग्य है। –