एक लक्ष्य की ओर एक Quadrotor गाइडिंग


9

मैं एक चतुर्भुज पर काम कर रहा हूं। मुझे इसकी स्थिति पता है - , जहां मैं जाना चाहता हूं - लक्ष्य स्थिति , और उससे मैं एक वेक्टर गणना करता हूं - एक इकाई वेक्टर जो मुझे अपने लक्ष्य पर ले जाएगा:abc

c = b - a
c = normalize(c)

चूँकि एक चतुर्भुज किसी भी दिशा में बिना घुमाव के घूम सकता है, मैंने जो करने की कोशिश की है

  1. रोबोट yaw कोण द्वारा को घुमाएंc
  2. इसे अपने घटकों में विभाजित करेंx,y
  3. उन्हें रोल और पिच कोण के रूप में रोबोट को पास करें।

समस्या यह है कि यदि यव 0 ° this 5 है, तो यह कार्य करता है, लेकिन यदि जम्हाई +90 या -90 के पास है तो यह विफल हो जाता है और गलत दिशाओं में आगे बढ़ता है। मेरा सवाल यह है कि क्या मुझे यहाँ कुछ स्पष्ट याद आ रहा है?


1
आप कैसे कोण की गणना कर रहे हैं? इसके अलावा, आप किस नियंत्रक का उपयोग कर रहे हैं और आप इसे डेटा कैसे भेजते हैं?
डेमनमेकर

दिलचस्प सवाल @ Hamza, रोबोटिक्स में आपका स्वागत है ।
मार्क बूथ

@ हमज़ा, आप किस भाषा और प्रणाली का उपयोग कर रहे हैं? Im भी Atmega328 और Ada प्रोग्रामिंग भाषा के साथ एक quadcopter पर काम कर रहा है। यदि आपके पास परियोजना के बारे में एक ब्लॉग है तो कृपया साझा करें।

आप @MarkBooth सही हैं, मेरे पास दो टैब खुले थे और दूसरी पोस्ट को डुप्लिकेट के रूप में चिह्नित करने का इरादा था। मैंने इसे गलती से चिह्नित किया और इसे पूर्ववत करने का कोई तरीका नहीं देखा। यह देखते हुए कि इसे बंद करने में एक से अधिक वोट लगते हैं मुझे लगा कि यह कोई समस्या नहीं होगी। हालांकि मुझे यह महसूस नहीं हुआ कि इसने मेरी ओर से कोई टिप्पणी पोस्ट की है।
डेमनमेकर

कोई बात नहीं @DaemonMaker ये बातें करते हैं। डुप्लिकेट वोट के रूप में बंद करें अब स्वचालित रूप से टिप्पणी पोस्ट करते हैं, जो मुझे लगता है कि एक उपयोगी विशेषता है क्योंकि यह लोगों को एक नजदीकी वोट डालने से पहले दूसरे प्रश्न की समीक्षा करने के लिए प्रेरित करता है।
मार्क बूथ

जवाबों:


6

आपके समाधान को फिर से लागू करना, मुझे यह मिल गया है:

कोणों के बीच का कोण

सबसे पहले, आप बिंदुओं के बीच का कोण चाहते हैं A तथा B - विशेष रूप से इकाई वेक्टर नहीं। 2 बिंदुओं के बीच का कोण

( एफएक्स प्रोग्रामिंग के माध्यम से ): θ=math.atan2(BxAx,ByAy)

वाहन याव कोण

अगला (मुझे संदेह है कि यह आपकी समस्या है), आपको वाहन के यॉंग कोण को घटाना होगाψ अपने हिसाब से θ

प्रमुख बनाम यो

यदि आप अपने वाहन के "yaw कोण" के लिए कम्पास का उपयोग कर रहे हैं, तो यह आपकी गलती भी हो सकती है; हेडिंग और यव समान नहीं हैं । कम्पास का शीर्षक धनात्मक के साथ शून्य होता हैyधुरी, जैसे-जैसे घड़ी की सूई बढ़ती है :

कम्पास गुलाब

Yaw सकारात्मक के साथ शून्य है xअक्ष, बढ़ते हुए जैसे यह वामावर्त मुड़ता है :

ध्रुवीय ग्राफ

इन मापों के बीच 90 डिग्री ओवरलैप, वांछित यॉ से वाहन याव को जोड़ने (घटाने के बजाय) के साथ संयुक्त हो सकता है, इसलिए हो सकता है कि जब आपके लक्ष्य and 5 ° के भीतर थे और ° 90 ° पर बुरी तरह से व्यवहार किया गया हो।

घटक X और Y में रूपांतरण

वहां से, आप कहते हैं कि आप इस परिणाम को परिवर्तित कर रहे हैं (θψ) इसके में x तथा yघटकों, उन्हें रोल और पिच कोण के रूप में रोबोट को पास करना। उपरोक्त सुधारों के साथ, आपको इस बिंदु पर वांछित परिणाम प्राप्त करना चाहिए। हालांकि, कोण को झुकाव के लिए इन घटकों को सीधे मैप करना समस्याग्रस्त हो सकता है क्योंकि आप केवल स्थिति में अंतर पर विचार कर रहे हैं, और वाहन के वेग (वास्तव में, गति) नहीं।

पीआईडी ​​नियंत्रण

वाहन के रोल और पिच के लिए PID नियंत्रण लूप का उपयोग करके आपको सबसे अच्छी सेवा दी जा सकती है। यही है, एक बार जब आप अपना कोड ठीक कर लेते हैं और अपने लक्ष्य को हासिल करने में सक्षम होते हैं, तो मेरा अनुमान है कि आप इसकी बजाय ओवरसूट करना शुरू कर देंगे - आगे और पीछे दोलन। एक सही ढंग से ट्यून की गई पीआईडी ​​आपको तब भी होने से रोकेगी, जब आप अभी भी जल्दी से लक्ष्य तक पहुंचने की अनुमति देंगे।

इसकी जगह अपना प्लग इन करें x तथा yरोल और पिच में, उन्हें त्रुटि मान मानते हैं कि रोल और पिच पीआईडी ​​इनपुट के रूप में स्वीकार करते हैं।


यह 90% से अधिक है और पूरी तरह से उत्तर (PID से ATAN2 तक) को बदल देता है। लेकिन आपके आकर्षक ग्राफिक फॉर्मूला कौशल जानवर हैं!
Spiked3

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

"कम्पास हेडिंग पॉजिटिव y अक्ष से शुरू होती है और क्लॉकवाइज़ को बढ़ाती है, जबकि पॉज़िटिव x एक्सिस से शुरू होता है और काउंटरक्लॉकवाइज़ बढ़ता है" संदर्भ? "(θ ting to) के x घटक को रोल करने के लिए और y घटक को पिच करने के लिए परिवर्तित करना" मुझे वह बिल्कुल नहीं मिला - कृपया अधिक स्पष्टीकरण दें (मुझे कुछ याद आ रहा है)।
Spiked3

मूल प्रश्न में "पासिंग [x and y कंपोनेंट्स] रोबोट के लिए रोल एंड पिच एंगल्स के रूप में" का उल्लेख किया गया है, जो मुझे इंगित करता है कि क्वाडकॉप्टर रोल एंगल को बदलकर साइड हो जाता है, और पिच एंगल को बदलकर आगे और पीछे होता है। मैं कुछ स्पष्टता जोड़ूंगा।
इयान

साफ। मैंने ऐसा कभी नहीं देखा है। मैंने देखा है, और खुद करते हैं, वही परिणाम प्राप्त करने के लिए बस cos / sin फ्लिप करते हैं। मुझे रोल / पिच पर कुछ और सोचना होगा। हां, यह गति का कारण होगा, लेकिन मुझे यकीन नहीं है कि कैसे कुछ भी करना है जहां आप हैं और जहां आपका जाना है, उस गति के अलावा जहां आप वहां पहुंचते हैं। धन्यवाद।
स्पाइकड 3

5

मुझे लगता है कि आप यहाँ एक 3 डी वेक्टर के बारे में बात कर रहे हैं। क्या आप इस normalize()तरह से सामान्यीकरण कर सकते हैं ? क्या यह आम है (मैंने इसे कभी नहीं देखा है अगर ऐसा है, तो मुझे खबर करें)। अन्यथा, एक्स और वाई घटकों में से प्रत्येक पर स्पष्ट कम्पास रैप मुद्दे लागू होते हैं। उन्हें रोल और / या पिच और / या जौ क्यों नहीं कहते? (3 डी और 2 डी नामकरण मिश्रण प्रश्न को भ्रमित करता है)।

मेरा 2D सामान्यीकृत कुछ इस तरह दिखता है;

int Pilot_QuickestTurnTo(int hdgNow, int hdgNew)
{
    hdgNow = Pilot_Hdg360(hdgNow);
    hdgNew = Pilot_Hdg360(hdgNew);
    if (hdgNow < hdgNew)
        hdgNow += 360;
    int left = hdgNow - hdgNew;
        return (left < 181 ? -left : 360 - left);
}

यदि यह वास्तव में एक क्वाड है, तो मुझे लगता है कि आपके X और Y घटक वास्तव में YAW, Altitude ((X, Y) & Z) हैं। आपको YAW(X, Y)2D में संभालने की आवश्यकता होगी , और बस Z के लिए ऊँचाई छोड़ना या प्राप्त करना होगा (और फिर इसीलिए मुझे संदेह है कि आपके पास जितना है, सामान्य से अधिक है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.