क्या मैं एक हेलीकॉप्टर को नियंत्रित करने के लिए quaternions का उपयोग कर सकता हूं?


9

मैं 3 डी में एक सरलीकृत हेलीकाप्टर बनाने की कोशिश कर रहा हूं (फिलहाल, यह एक घन है) सिमुलेशन और मुझे रोटेशन के साथ कुछ समस्याएं आ रही हैं। एक हेलिकॉप्टर तीन अक्षों के साथ घूम सकता है:

  • रियर प्रोपेलर का उपयोग करके स्वयं को घुमाएं: y अक्ष रोटेशन
  • झुकाव बाएँ और दाएँ जाने के लिए बाएँ या दाएँ: z अक्ष रोटेशन
  • पीछे या आगे जाने के लिए ऊपर और नीचे झुकाव: एक्स अक्ष रोटेशन

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

मुझे लगता है कि मुझे quaternions का उपयोग करने की आवश्यकता है, लेकिन मुझे नहीं पता कि प्रत्येक व्यक्तिगत अक्ष को कैसे नियंत्रित किया जाए, क्योंकि quaternions एक दिशा और कोण का उपयोग करता है। क्या मुझे तीन क्वाटर्न्स बनाने चाहिए और उन्हें एक साथ गुणा करना चाहिए? मैं एक ही समस्याओं के साथ खत्म नहीं होगा?

अजीब बात है, अगर मैं अपने हेलिकॉप्टर के तीन अक्षों (अंगूठे को = y, सूचकांक = z, मध्य = x) का प्रतिनिधित्व करने के लिए अपनी उंगली का उपयोग करता हूं, तो मैं उन समस्याओं में भाग नहीं लगता। क्यों?


यदि आपके पास एक दृश्य-ग्राफ तक पहुंच है, तो एक व्यावहारिक विकल्प प्रत्येक अक्ष के लिए नेस्टेड कंटेनर होगा जो तब आप व्यक्तिगत रूप से घुमाते हैं।
बंमज़ैक

@bummzack, हां, मैंने इस बारे में सोचा है। हालाँकि, क्या यह एक विशेष क्रम में रोटेशन के तीन मेट्रिसेन्स को समान करने के समान नहीं है?
सबब

आप सही हैं @ सब्ब, प्रत्येक अक्ष के लिए घुमावों को अलग से संग्रहीत न करने का प्रयास करें, इसमें यूलर एंगल्स के समान समस्याएं होंगी, चाहे आप इसके लिए क्या उपयोग करें, यह भी मैट्रिसेस और क्वाटरनियां गिम्बल लॉक से पीड़ित होंगे।
माईक सेमर

@ माईक सेमर, फिर मैं अपने हेलीकॉप्टर की पिच / यव / रोल पर नियंत्रण कैसे प्रदान कर सकता हूं?
सबब

@Subb @ Flip's और मेरे जवाब ने मूल रूप से आपको बताया कि यह कैसे करना है।
माईक सेमर

जवाबों:


4

आपको अपने हेलीकॉप्टर के वर्तमान अभिविन्यास को संचित करने के लिए किसी मैट्रिक्स या चतुष्कोण का उपयोग करने में सक्षम होना चाहिए। आपके द्वारा चलाए जा रहे समस्या यह है कि आप हेलीकॉप्टर में पिच / यव / रोल में परिवर्तन कैसे लागू करते हैं।

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

हेलीकॉप्टर के अभिविन्यास को एक चतुर्धातुक के रूप में प्रतिनिधित्व करने से यह फायदा होता है कि मैट्रिंस के बीच के प्रक्षेप की तुलना में चतुर्धातुक के बीच प्रक्षेप करना बहुत आसान है। इसलिए यदि भविष्य में आपके पास एक वर्तमान अभिविन्यास है और आप प्रति-फ्रेम रोटेशन का पता लगाना चाहते हैं जो आपको एक वांछित समय पर एक नए अभिविन्यास में लाएगा, तो चतुर्धातुक प्रतिनिधित्व आपके लिए अधिक अनुकूल हो सकता है।


मैंने इसे कैसे किया है, स्थानीय -> विश्व परिवर्तन का प्रतिनिधित्व करने वाले मैट्रिक्स पर वृद्धिशील अपडेट लागू करें। मैट्रिक्स को सामान्य करने के लिए याद रखें, कुछ सौ फ्रेम के बाद यदि आप नहीं करते हैं तो यह गोल कलाकृतियों को दिखाएगा।
पैट्रिक ह्यूजेस

इसके अलावा, अंतिम प्रश्न का उत्तर देने के लिए कि जिम्बल लॉक समस्या को अपने हाथ का उपयोग x / y / z अक्षों का प्रतिनिधित्व करने के लिए क्यों नहीं देखा जाता है, यह इसलिए है क्योंकि आप संभवतः पिच, yaw और रोल मानों को हाथ के स्थानीय फ्रेम पर लागू कर रहे हैं। संदर्भ। यूलर एंगल्स के साथ एक रोटेशन मैट्रिक्स का निर्माण दुनिया के एक्स के चारों ओर घूमने से शुरू होता है, फिर परिणामी y द्वारा, और फिर परिणामी z (x / y / z का वास्तविक क्रम क्रम में भिन्न हो सकता है) द्वारा। इस तरह से चक्कर लगाने की कोशिश करें और आप यह देखना शुरू कर सकते हैं कि जिम्बल लॉक कैसे दिखता है।
फ्लिप करें

3

मूल रूप से आप रोटेशन के हर दूसरे प्रतिनिधित्व का उपयोग कर सकते हैं, लेकिन यूलर एंगल्स। मेट्रिसेस, क्वाटर्न्स यहां तक ​​कि एक्सिस एंगल्स भी वही करेंगे जो आप चाहते हैं।

Should I create three quaternions and multiply them together? Wouldn't I end up with the same problems?

आप सही हैं, आप उन्हीं समस्याओं को समाप्त करेंगे। कुंजी अपनी वस्तु के वर्तमान अभिविन्यास (मैट्रिक्स, चतुर्धातुक) को संग्रहीत करना है और अभिविन्यास बदलते समय केवल एक डेल्टा लागू करना है ।

जब आप y के चारों ओर 10 डिग्री मोड़ना चाहते हैं, तो बस उसके लिए एक डेल्टा मैट्रिक्स / quaternion बनाएं और इसे अपने वर्तमान अभिविन्यास के साथ गुणा करें (यदि आप मैट्रिस के लिए पोस्ट गुणा का उपयोग करते हैं)। यदि आप इसे चारों ओर से दूसरे तरीके से गुणा करते हैं, तो यह ऑब्जेक्ट के y- अक्ष के बजाय दुनिया के y- अक्ष के चारों ओर सिस्टम को घुमाएगा।

मुझे यह संसाधन बहुत उपयोगी लगते हैं, यह स्रोत कोड के साथ भी आता है और सिद्धांत को बहुत अच्छी तरह से समझाता है।


-1

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

आपके पास एक चौथाई स्वतंत्रता है जिसे आपने याद किया है: ब्लेड की गति से हवा की मात्रा को धक्का दिया जाता है, जो हेलीकॉप्टर के उठने की मात्रा को भी नियंत्रित करता है।

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

आपको ऐसा करने के लिए quaternions का उपयोग करने में सक्षम होना चाहिए, लेकिन अपने quaternion मूल्यों को हेलीकॉप्टर के झुकाव पर आधार न करें - इसके बजाय हेलीकाप्टर उत्पन्न करने वाली गति की शक्तियों का उपयोग करने का प्रयास करें।


हालांकि वास्तव में इस सवाल का जवाब नहीं है। सिर्फ विचार के लिए अधिक भोजन जोड़ना।
बंमज़ैक

वर्तमान में, मैं लिफ्ट बल वेक्टर को बदलने के लिए हेलीकॉप्टर के रोटेशन का उपयोग कर रहा हूं, जो हेलीकॉप्टर अंतरिक्ष में ऊपर की ओर इंगित किया गया है। क्या आपका मतलब यह है कि मुझे रिवर्स करना चाहिए, अर्थात वेक्टर को सीधे संशोधित करें और फिर परिणाम में हेलीकॉप्टर को घुमाएं?
सबब

मुझे लगता है कि आप दोनों को क्या करना चाहिए, अब आपका क्या कर रहा है, फिर ब्लेड के सामान्य के आधार पर हेलीकॉप्टर के रोटेशन में कोई भी परिणाम परिवर्तन करें। यानी आपके पास 2 घुमाव हैं; एक ब्लेड पर लागू होता है और दूसरा हेलीकॉप्टर के वास्तविक रोटेशन का प्रतिनिधित्व करता है। जाहिर है कि सभी Quaternions में संग्रहीत हैं।
डेक्लेरेटेडकविअर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.