Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

प्रक्षेपित पथ को देखते हुए रन चलाएँ

"Straight · 1 m offset" चलाएँ और उसे प्लेबैक करें। प्रत्येक क्षण पर हरे डैश उस समय हल किया गया प्रक्षेपित पथ हैं। MPC क्षितिज भर में पूरे वक्रता अनुक्रम को तय करता है, लेकिन वाहन पर केवल पहला मान लागू करता है और अगले चक्र (0.05 से बाद) में सब कुछ पुनः हल करता है। प्रक्षेपित और वास्तविक पथ दोनों इसलिए भिन्न होते हैं क्योंकि प्रेडिक्शन मॉडल एक सन्निकटन है और क्योंकि बाद के चक्र योजना को अद्यतन करते हैं।

परिणाम को A के रूप में सहेजें, फिर "Short horizon (3 steps)" या "Long horizon (30 × 0.2 s)" चलाएँ। समान भार के साथ, नियंत्रक कितनी दूर आगे तक देखता है यह इस बात को बदलता है कि स्टीयरिंग कैसे बढ़ता है। सेकंड में क्षितिज की लंबाई चरणों की संख्या N गुणा चरण Δt है।

प्रेडिक्शन मॉडल और ऑप्टिमाइज़ेशन समस्या

स्टेट पथ के सापेक्ष पार्श्व त्रुटि e_y (बायाँ धनात्मक) और हेडिंग त्रुटि e_ψ हैं। प्रेडिक्शन MPC के लिए सरलीकृत एक रैखिक मॉडल का उपयोग करता है।

e_{y,k+1} = e_{y,k} + v_k\,\Delta t\,e_{\psi,k},\qquad e_{\psi,k+1} = e_{\psi,k} + v_k\,\Delta t\,(u_k - \kappa_k)

u_k कमांडेड पथ वक्रता [1/मी] है, κ_k प्रक्षेपित स्थिति पर पथ वक्रता है, और v_k वाहन जैसे ही गति सर्वो से प्रेडिक्ट की गई गति है। स्टीयरिंग δ=atan(L u) है, इसलिए स्टीयरिंग सीमा |δ|≤δ_max ठीक वक्रता सीमा |u|≤tan(δ_max)/L है। लागत

J = \sum_{k} q_y e_{y,k}^2 + q_\psi e_{\psi,k}^2 + r\,(u_k-\kappa_k)^2 + r_\Delta\,(u_k-u_{k-1})^2

केवल वक्रता सीमाओं वाला एक द्विघात प्रोग्राम (QP) देती है। u_{-1} पिछले चक्र में वास्तव में लागू की गई वक्रता है। r पथ वक्रता से विचलन को भार देता है और r_Δ तेज़ वक्रता परिवर्तनों को भार देता है। प्रेडिक्शन एक लघु-कोण रैखिक मॉडल है, जबकि वाहन साझा नॉनलाइनियर बाइसाइकिल मॉडल है। यह अंतर उस चीज़ का हिस्सा है जो यह प्रयोग दिखाता है।

सॉल्वर, और यह अभिसरित न होने पर क्या होता है

द्विघात प्रोग्राम को एक प्रोजेक्टेड न्यूटन विधि (Bertsekas 1982) से हल किया जाता है। किसी सीमा पर स्थिर रखे गए वेरिएबल्स को फ़िक्स किया जाता है, शेष के लिए एक न्यूटन दिशा की गणना की जाती है, और सीमाओं पर प्रोजेक्शन के बाद एक लाइन सर्च होती है। हल तब अभिसरित माना जाता है जब प्रोजेक्टेड-ग्रेडिएंट अवशेष अधिकतम 1e-6 [1/मी] हो। पिछले चक्र का हल प्रारंभिक बिंदु होता है, इसलिए यह सामान्यतः कुछ ही पुनरावृत्तियों में अभिसरित हो जाता है।

यदि अभिसरण के बिना पुनरावृत्ति सीमा पहुँच जाती है, तो आप तीन व्यवहारों में से एक चुन सकते हैं। "Use feasible iterate" उस इटरेट को लागू करता है, जो सीमाओं का पालन करता है, और चक्र को अनकनवर्ज्ड के रूप में दर्ज करता है। "Hold previous command" पिछली स्टीयरिंग को बनाए रखता है और चक्र को होल्ड के रूप में दर्ज करता है। "Stop" रन को एक विफलता (controller_failed) के रूप में समाप्त करता है और कारण दिखाता है। एक-पुनरावृत्ति सीमा का उपयोग करने वाले तीन प्रीसेट के साथ इनकी तुलना करें। केवल सीमाओं को ही बाधा मानते हुए यह समस्या कभी भी अव्यवहार्य नहीं होती (एक हल हमेशा मौजूद रहता है)। कठोर स्टेट बाधाओं से उत्पन्न अव्यवहार्यता इस Lab के दायरे से बाहर है।

बाधाएँ, भार और गति

"8 m/s · default weights" पूरा होता है, लेकिन "8 m/s · small rate weight (diverges)" पथ छोड़ देता है। वाहन स्टीयरिंग दर को 0.8 रेड/से तक सीमित करता है, लेकिन यह ऑप्टिमाइज़ेशन समस्या उस सीमा को बाधा के रूप में शामिल नहीं करती। एक छोटे रेट भार r_Δ के साथ योजना तेज़ स्टीयरिंग परिवर्तनों को मान लेती है जिन्हें वाहन पालन नहीं कर सकता, और दोलन बढ़ता जाता है। यह इस बात का एक उदाहरण है कि मॉडल से गायब एक बाधा किस तरह क्लोज़्ड लूप को तोड़ देती है। "High lateral weight" भी स्टीयरिंग-दर सीमा से टकराने वाले अचानक सुधार दिखाता है।

"Tight curve (cannot follow)" एक 5 मी त्रिज्या का पथ है जिसे वाहन पूरा नहीं कर सकता। समान परिस्थितियों में Stanley Lab भी पथ छोड़ देता है। नियंत्रण नियम बदलने से वाहन और उसकी बाधाओं द्वारा निर्धारित सीमाओं को पार नहीं किया जा सकता।

साझा वाहन और तुलना मीट्रिक

वाहन वही रियर-एक्सल, आगे-केवल काइनेमैटिक बाइसाइकिल मॉडल है जो PP, APP, RPP और Stanley के साथ साझा है: अधिकतम 30 से तक 0.05 से चरण, 8 मी/से गति सीमा, ±2 मी/से² त्वरण, 0.8 रेड/से स्टीयरिंग दर। गति को MPC द्वारा ऑप्टिमाइज़ नहीं किया जाता; यह अन्य Labs की तरह उसी गति सर्वो a=2(लक्ष्य गति−वास्तविक गति) से आती है। इस Lab का MPC केवल स्टीयरिंग संभालता है।

पार्श्व त्रुटि, हेडिंग त्रुटि, RMS और अंतबिंदु परीक्षण रियर एक्सल पर अन्य Labs के साथ साझा परिभाषाओं का उपयोग करते हैं। अंतबिंदु पार करने का मतलब रुकना या पार्किंग नहीं है। भिन्न व्यतीत समय या पूर्णता स्थितियों वाले रन को केवल RMS के आधार पर रैंक न करें।

गणना समय के बारे में

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

सुझाया गया क्रम

  1. नॉमिनल रन को प्लेबैक करें और प्रक्षेपित पथ की तुलना वास्तविक पथ से करें।
  2. क्षितिज चरणों की संख्या और चरण आकार बदलें, और स्टीयरिंग बिल्ड-अप व पार्श्व त्रुटि की तुलना करें।
  3. यह देखने के लिए कि रेट भार स्टीयरिंग-दर सीमा से कैसे संबंधित है, दोनों 8 मी/से प्रीसेट का उपयोग करें।
  4. अनकनवर्ज्ड चक्रों को कैसे संभाला जाता है यह तुलना करने के लिए तीनों एक-पुनरावृत्ति प्रीसेट का उपयोग करें।

सब कुछ आपके ब्राउज़र में चलता है, जिसमें प्लेबैक, फ़्रेम स्टेपिंग, A/B तुलना, रीसेट, शेयरिंग और JSON डाउनलोड शामिल हैं।

संदर्भ और संबंधित लैब

Related reading

Explore another aspect of this fieldPure Pursuit Lab — स्थिर-लुकअहेड पथ ट्रैकिंग की तुलना करें