मैं पॉलीगोनल बाधाओं वाले विमान पर रोबोट के सबसे कम पथ की गणना कर रहा हूं। सबकुछ अच्छी तरह से और तेज़ काम करता है, वहां कोई समस्या नहीं है। लेकिन, पथ को चिकनाई कैसे करें ताकि यह कर्कश हो जाए? नीचे एक सीधी रेखा के साथ जोड़ने वाले पथों की एक तस्वीर है। पीएस रोबोट सिर्फ एक सर्कल है।रोबोट के स्मूथिंग पथ
उत्तर
This paper उपयोगी हो सकता है। ऐसा लगता है कि यह एक गैर-मामूली समस्या है। सार:
स्वचालित ग्राफ ड्रॉर्स को एक साधारण बहुभुज के क्रियाओं के बीच पथों की गणना करने की आवश्यकता होती है जो आंतरिक सौंदर्य में कुछ सौंदर्य गुणों को प्रदर्शित करने की आवश्यकता होती है। इनमें से कुछ को वास्तविकतम पथ से बहुत दूर होने के बिना बहुभुज आकार के बारे में कुछ जानकारी की अव्यवस्था की आवश्यकता होती है। हम एक स्थानीय रूप से उत्तल क्षेत्र की गणना करने के लिए एक एल्गोरिदम प्रस्तुत करते हैं जिसमें एक साधारण बहुभुज के दो शीर्षकों के बीच सबसे छोटा यूक्लिडियन पथ होता है। इस क्षेत्र में एक सीमा का आकार है जो सबसे छोटा पथ आकार "अनुसरण करता है"। क्षेत्र में एक घन बेजियर स्पलीन दो दिए गए शिखरों के बीच एक "छोटा और चिकनी" टकराव मुक्त वक्र प्रदान करता है। प्राप्त परिणाम सौंदर्यपूर्ण रूप से सुखद प्रतीत होते हैं और उपयोग की जाने वाली विधियां स्वतंत्र रुचि का हो सकती हैं। वे गहन और कार्यान्वित हैं। चित्रा 7 हमारे वर्तमान कार्यान्वयन द्वारा उत्पादित नमूना आउटपुट है।
Teragen में यथार्थवादी उड़ान अनुक्रमों को प्रस्तुत करने की कोशिश करते समय मैं पथ गणना तकनीकों के साथ बहुत कुछ खेलता था। मैंने शुरुआत में Bézier Curves का उपयोग करने की कोशिश की।
लेकिन पता चला कि (कम से कम उड़ान के लिए) वे कहते हैं कि उपयोगी नहीं हैं। कारण यह है कि वक्र के बीच वक्रता निरंतर है, और इसलिए फ्लाई-बाय के लिए निरंतर सही बैंकिंग कोण की गणना करने के लिए इसका उपयोग नहीं किया जा सकता है। साथ ही, यह सुनिश्चित करना मुश्किल है कि वक्र पहाड़ को अलग नहीं करता है।
मैं digress। जिस तरह से मैं अंततः बस गया था वह एक साधारण द्रव्यमान वसंत आधारित मार्ग था, और इसे जमा करने में आराम करता था।
बहुत से हिस्सों में पथ को उप-विभाजित करें, जितना अधिक मर्फी। प्रत्येक बिंदु के लिए, इसे एक दिशा में थोड़ा सा स्थानांतरित करें ताकि उसके और उसके पड़ोसियों के बीच कोण को कम किया जा सके, और बाधाओं से रास्ता कम किया जा सके। पथ सुलझने तक कई बार दोहराएं।
k = 0.01 // Adjust the values of k and j to your liking.
j = 0.01 // Small values take longer to settle. Larger values are unstable.
For each point P
normal_vector = vector_to_previous_point + vector_to_next_point
obstacle_vector = vector_to_nearest_obstacle
obstacle_distance = magnitude(obstacle_vector)
obstacle_vector *= obstacle_distance^2
P += (normal_vector * k) - (obstacle_vector * j)
परिमित तत्व विश्राम तकनीकों का इस तरह का लाभ यह है कि आप इस में इसे में बाधाओं के सभी प्रकार के कार्यक्रम कर सकते हैं और पथ उनके बीच कुछ समझौता पर निपटारा करेगा, वजन पर निर्भर करता है (जे और कश्मीर है मामला)।
आप रोबोटिक्स में कर रहे हैं, क्यों आते हैं और Robotics Proposal शामिल नहीं हो?
धन्यवाद, आपकी विधि पहली नजर में शानदार लगती है, हालांकि मुझे अभी भी इसे लागू करने और परीक्षण करने की आवश्यकता होगी। और, ओह हाँ, मैं प्रस्ताव का समर्थन करूंगा;) – nullpotent
क्या आप एल्गोरिदम के बाद पथ के वास्तविक निष्पादन में पथ कर्वी नहीं बना सकते हैं? यदि आप मार्ग को छोड़ते हैं (यानी सीधे सीधी रेखाएं), ~ 1 मीटर की आगे की दूरी को लागू करना (यह मान आपके रोबोट की गति और बाधाओं से बचने के लिए कॉन्फ़िगरेशन स्पेस को गद्दीदार राशि पर निर्भर करेगा) नियंत्रण एल्गोरिदम जो प्रत्येक पहिया की वेग की गणना करता है, प्रीप्रोकैसिंग के लिए बिना किसी आवश्यकता के पथ को स्वचालित रूप से चिकना कर देगा।
यहां मेरा मतलब है कि एक त्वरित छवियां हैं ...लाल बिंदीदार रेखा वह पथ है जिसे वास्तव में रोबोट द्वारा निष्पादित किया जाता है जब आप लुकहेड दूरी के आधार पर किसी बिंदु पर नियंत्रण करते हैं। एक लम्बाई दूरी बस कुछ मनमानी दूरी से पथ के नीचे एक बिंदु की गणना करता है।
फिर से, केवल एक चीज आप के बारे में चिंता कितना आप कर रहे हैं गद्दी बाधाओं सुनिश्चित करें कि आप उन्हें टकराने से बचने बनाना है। आम तौर पर मेरा मानना है कि बाधा के क्षेत्र में आधा रोबोट त्रिज्या है, लेकिन यदि आप एक लुकहेड दूरी पर नियंत्रण कर रहे हैं तो आपको इसे थोड़ा बड़ा बनाना पड़ सकता है।
अंत में मैंने आपके द्वारा प्रस्तुत किए गए एक ही समाधान का चयन किया। इसे थोड़ा tweaking की जरूरत है, लेकिन यह काम किया। फिर भी धन्यवाद;) – nullpotent
रोबोट के मामले में हम भविष्य को नहीं जान सकते हैं। हमें केवल रोबोट और बाधाओं के स्थान को जानने के लिए प्रत्येक बिंदु को आकर्षित करना होगा। न्यूनतम लंबाई के घुमावदार पथ बनाने के लिए सामान्य विधि रोबोट को एक सर्कल के साथ मॉडल करना और सर्कल को स्थानांतरित करना है ताकि यह बाधाओं के संपर्क में बना रहता है। बस एक त्रिज्या दूर रखें और मोड़ वक्र होंगे।
यदि आप वक्र चाहते हैं और न्यूनतम दूरी नहीं है तो आप पॉलीगॉन वर्टेक्स से दूरी की तुलना में उपरोक्त त्रिज्या को आनुपातिक बनाने का प्रयास करें।
बेजियर वक्र विचार केवल पीछे की ओर घुमावदार पथ बनाने के लिए काम करता है। यह बदलता है जहां रोबोट हा था। आम तौर पर अतीत को बदलने वाले रोबोटों को "धोखाधड़ी" कहा जाता है। जिस मार्ग को आप पहले से चला चुके हैं उसे बदलने से बचने का एक तरीका आगे देखना है। लेकिन क्या रोबोट कोनों के चारों ओर देख सकता है? आपको नियमों को बेहतर तरीके से निर्दिष्ट करना होगा।
पहला कदम: आपको अपने रोबोट के मोड़ वाले त्रिज्या को परिभाषित करने की आवश्यकता है। यदि यह कुशलता से एक डाइम चालू कर सकता है, तो आप एक कर्कश पथ क्यों लेना चाहते हैं? –
आप सही हैं। मुझे पता था कि कोई मुझसे पूछेगा। मेरे रोबोट में एक पूर्ण मोड़ वाला त्रिज्या होगा लेकिन मैं यह जानना चाहता था कि यह कैसे किया जाता है, यहां तक कि ऐसा भी। "वक्र के साथ बिंदुओं को कैसे कनेक्ट करें" वास्तविक सवाल होने के लिए था। मैं क्षमाप्रार्थी हूं। – nullpotent
मुझे लगता है कि यह प्रश्न हालांकि प्रश्न का उत्तर देने के लिए आंतरिक है। लेकिन हम कुछ चर का उपयोग कर सकते हैं, मान लीजिए कि मोड़ त्रिज्या का प्रतिनिधित्व करने के लिए 'टीआर' कहें। उस स्थिति में, आपने 'TR = 0' के विशेष मामले के लिए पहले से ही अपने प्रश्न का उत्तर दिया है। –