जहाज को घुमाने के लिए किस थ्रस्टर्स को चालू करना है?


47

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

http://i.stack.imgur.com/GSBSH.png

मैंने अब तक फायरिंग वेक्टर और दिशा वेक्टर को जहाज के द्रव्यमान के केंद्र की कल्पना करने की कोशिश की है:

http://i.stack.imgur.com/ZzNzi.png

दुर्भाग्य से, मैं उस के साथ बहुत दूर नहीं मिला।


7
आप बल वैक्टर के साथ सही दिशा में जा रहे हैं। ANGULAR वेग के लिए सूत्र देखने की कोशिश करें क्योंकि आप बड़े पैमाने पर केंद्र के चारों ओर जहाज को घुमाने की कोशिश कर रहे हैं।
Amplify91

मैं वास्तव में यह कैसे करने के लिए भूल जाते हैं, लेकिन मूल रूप से प्रत्येक बिंदु पर अपनी बस बलों en.wikipedia.org/wiki/Center_of_mass और विशेष रूप से en.wikipedia.org/wiki/Parallel_axis_theorem
CobaltHex

1
मेरा भी यही विचार था! एक टिप जो आपके लिए आसान बना सकती है वह यह है कि आपको केवल प्रत्येक थ्रस्टर के लिए कोणीय और रैखिक त्वरण की गणना करने की आवश्यकता है, इसलिए गणना जितनी चाहें उतनी जटिल हो सकती है।
मार्कस वॉन ब्रॉडी

@ Amplify91, आपकी टिप्पणी ने मुझे यह पता लगाने में मदद की, धन्यवाद!
मिगिमुंज

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

जवाबों:


22

सफलता! यहाँ यह है, और इसे घुमा देना चाहिए: यहाँ छवि विवरण दर्ज करें

मैंने जो किया है वह निम्नलिखित है: प्रत्येक थ्रस्टर के लिए, मैं द्रव्यमान के केंद्र के संबंध में, टोक़ के परिमाण की गणना करता हूं।

private function thrustTorque():Float
{
    // distToCom is the distance vector between the thruster and center of mass
    // fire angle is a unit vector representing the direction of the thruster
    var distAngle = Math.atan2(distToCOM.y, distToCOM.x);
    var fireAngle = Math.atan2(dir.y, dir.x);
    var theta = fireAngle - distAngle;
    var torque = distToCOM.length * Math.sin(theta);
    return torque;
}

विकिपीडिया के अनुसार, टोक़ की विशालता के लिए समीकरण है T = rF sin(theta), जहाँ:

  • r थ्रस्टर और COM के बीच की दूरी है
  • एफ लागू बल का परिमाण है (मैं इसे छोड़ देता हूं, यह दिखावा करता हूं कि यह सिर्फ एक है, क्योंकि मुझे केवल संकेत की परवाह है)।
  • थीटा दो वैक्टर के बीच का कोण है

जब खिलाड़ी बाईं ओर दबाता है, तो मैं उस थ्रस्टर के लिए टोक़ के संकेत की जांच करता हूं - यदि यह शून्य से कम है, तो मैं थ्रस्टर को आग लगा देता हूं। यह दक्षिणावर्त मोड़ के लिए ठीक विपरीत है।

शायद वैक्टर के बीच के कोण के कोसाइन की गणना करने के लिए डॉट उत्पाद का उपयोग करके इसे बेहतर बनाया जा सकता है, लेकिन कल तक इंतजार करना होगा।

अंत में, यहाँ एक लाइव डेमो है


करीब से मुझे लगता है। ऐसा लगता है कि यह वास्तव में द्रव्यमान के केंद्र में नहीं है। केवल बाएँ / दाएँ तीर का उपयोग करके जहाज आसानी से स्क्रीन से दूर जा सकता है। हालांकि बहुत करीब है। शायद जिस बिंदु से आप माप रहे हैं वह थोड़ा दूर है। या यह एक समय मुद्दा हो सकता है क्योंकि यह एक अच्छा स्पिन में थोड़ी देर के बाद स्थिर करने के लिए लगता है। हालांकि अच्छा काम है।
माइकलहाउस

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

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

3
यदि आप कोण गणना से बचने के लिए क्या करना चाहते हैं तो लंबवत डॉट उत्पाद का उपयोग करना है ( यदि आप z = 0 के साथ 3 डी वैक्टर का उपयोग करते हैं तो टोक़ टी = आर क्रॉस एफ की क्रॉस उत्पाद परिभाषा से प्राप्त होता है )। आप वेक्टर (-आर, आरएक्स) लेते हैं, जो उसी परिमाण के साथ आर के लंबवत है, और आप एफ के साथ उस वेक्टर के डॉट उत्पाद की गणना करते हैं। परिणाम टी = आरएक्स * एफवाई - रे * एफएक्स है। फिर एब्स (T) टॉर्क का परिमाण है, और इसका संकेत दिशा दर्शाता है: T> 0 वामावर्त है, T <0 क्लॉक वाइज है।
जोरेन

1
कारण यह है कि यह सहज ज्ञान युक्त देखने के लिए आसान है: r dot F = r F cos is। यदि आप r वामावर्त को 90 डिग्री तक घुमाते हैं और डॉट उत्पाद लेते हैं, तो आपको r F sin c मिलता है क्योंकि cos (˚ - 90 () = sin (θ)।
जोरेन

14

टोक़ के लिए सामान्य 3 डी अभिव्यक्ति विस्थापन और बल के पार उत्पाद है: टी = आरएफ । दो आयामों में, टोक़ के लिए एक स्केलर मान पर्याप्त होगा, और थ्रस्टर्स के लिए केवल चार ऑर्थोगोनल झुकाव दिए गए हैं, हम टुकड़े के रूप में लिख सकते हैं:

  • दिशा में बल + x: T = F * (-ry)
  • दिशा में बल -x: T = F * (ry)
  • दिशा में बल + y: T = F * (rx)
  • दिशा में बल -y: T = F * (-rx)

यहाँ, F थ्रस्टर्स द्वारा उत्पन्न बल का परिमाण है, rx और ry x- और वेक्टर के घटक हैं जो पिवट पॉइंट से थ्रस्टर तक हैं। पॉजिटिव टोरेस जहाज को दक्षिणावर्त घुमाते हैं। उपरोक्त चार सूत्रों का उपयोग करते हुए, प्रत्येक थ्रस्टर का उत्पादन करने वाले टोक़ के संकेत को कम करना तुच्छ है।

भौतिकी के एक सटीक सटीक प्रतिनिधित्व के लिए, आपको न केवल जोर के संकेत को जानने की जरूरत है, बल्कि इसकी कुल परिमाण और घूर्णी जड़ता भी है। इसके अलावा, आप बस रोटेशन करने के लिए सभी ठीक से संरेखित थ्रस्टर्स को सक्रिय नहीं करना चाहते हैं।

अंतरिक्ष जहाज

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

यदि आप जो करने की कोशिश कर रहे हैं, उसके दायरे से परे नहीं है, तो आपको गति के समीकरणों के लिए किसी प्रकार का सॉल्वर लिखना होगा, स्पष्ट रूप से एक सरल कार्य नहीं।


7

कुछ अलग चीजें। सबसे पहले, हमें यह पहचानने की जरूरत है कि यह एक कम दबाव वाली समस्या है। यही है, थ्रस्टर्स के कई अलग-अलग संयोजन हैं जो एक ही दिशा में रोटेशन के परिणामस्वरूप आग लगा सकते हैं। मैं मान रहा हूं कि आपकी स्थिति में थ्रस्टर्स के लिए केवल दो राज्य हैं, "ऑन", और "ऑफ", और सभी थ्रस्टर्स आउटपुट फोर्स।

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

तीसरा, यदि आप गणना करना चाहते हैं कि एक निश्चित थ्रस्टर रोटेशन को कैसे प्रभावित करेगा, तो आपके पास यह सही है, हालांकि आप एक अक्षम सूत्र का उपयोग कर रहे हैं। टोक़ की गणना की जा सकती है r x F, जिसमें परिमाण है r*F*sin(theta)। हालांकि, इस मामले में कोणों की गणना करना एक अक्षम तरीका है। इसके बजाय, आपको सीधे टॉर्क के क्रॉस-प्रोडक्ट की परिभाषा का उपयोग करना चाहिए, क्योंकि आपके पास मौजूद अभ्यावेदन का उपयोग करके यह बहुत सरल होगा। क्योंकि आपके सभी वैक्टर में कोई z घटक नहीं है, इसलिए क्रॉस उत्पाद का सूत्र बहुत सरल है।

अपनी गणना के परिणामों को बिल्कुल भी बदले बिना, हम सिर्फ आपके कोड को अपडेट कर सकते हैं

private function thrustTorque():Float
{
    var torque = distToCOM.x*dir.y-distToCOM.y*dir.x;
    return torque;
}

यह बहुत अच्छा है (और तेज)।

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

आप जहाज पर शुद्ध बल का कोई विचार नहीं करते हैं। यदि आपके पास थ्रस्टर राशि मनमानी थी, तो यह एक बहुत जटिल समस्या में बदल सकती है। हालांकि, चूंकि हमारे थ्रस्टर्स में केवल दो राज्य हैं, इसलिए विश्लेषण करना बहुत सरल है। मुझे यकीन नहीं है कि हमारा लक्ष्य यहां क्या है, इसलिए मैं दो अलग-अलग कल्पना कर सकता हूं: पहला, हम कुल बल को कम से कम करना चाहते हैं, जबकि अभी भी उस दिशा में टोक़ रखना चाहते हैं जो हम चाहते हैं। दूसरा, हम टॉर्क के अनुपात को अधिकतम बल तक बढ़ाना चाहते हैं।

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

इसलिए, हम पिछले पैराग्राफ के तर्कों के आधार पर दूसरे समाधान के साथ जाने वाले हैं। अब, कुल बल का विश्लेषण करते समय, हम केवल यह ध्यान दे सकते हैं कि इंजन केवल चार दिशाएँ हैं। इस प्रकार एक्स दिशा में कुल बल सिर्फ थ्रस्ट की संख्या है जो बाईं ओर शून्य से दाएं ओर इशारा करता है, और इसी तरह से y दिशा के लिए।

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


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

1
आप एक मनमाना बिंदु से टोक़ की गणना कर सकते हैं। परिणामी संख्या बदल जाएगी, लेकिन जब तक आप इस बिंदु के चारों ओर जहाज को घुमाते हैं, जिसे द्रव्यमान का केंद्र नहीं होना चाहिए, भौतिक व्यवहार नहीं होगा। वास्तव में, बड़े पैमाने पर वितरण के बारे में जानकारी के बिना, द्रव्यमान का केंद्र स्वयं मनमाना है और इसकी गणना नहीं की जा सकती है।
थॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.