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

ICP निकटतम पड़ोसी पत्राचार और कठोर रूपांतरण अनुमान का उपयोग करता है। कम अवशिष्ट यह सिद्ध नहीं करता कि पुनर्प्राप्त स्थिति सही है। सरल 2D आकृतियाँ हमें सेंसर शोर के बिना आरंभीकरण, आउटलायर्स और समरूपता को अलग करने की अनुमति देती हैं।

उद्देश्य

यह कार्यान्वयन वर्ग बिंदु-से-बिंदु दूरियों को न्यूनतम करता है। प्रत्येक पुनरावृति रूपांतरित स्रोत बिंदुओं के लिए लक्ष्य पड़ोसियों को ढूंढती है, मिलानों को दूरी सीमा के भीतर रखती है और SVD द्वारा घूर्णन/स्थानांतरण का अनुमान लगाती है। एक निर्धारक सुधार परावर्तन को रोकता है। यह अधिकतम 100 पुनरावृति के बाद रुक जाता है। Open3D ICP ट्यूटोरियल बिंदु-से-बिंदु और बिंदु-से-समतल उद्देश्यों में अंतर करता है; यहाँ केवल पहले वाले को ही कार्यान्वित किया गया है।

इनपुट और निष्पादन

स्क्रिप्ट डाउनलोड करें और python3 engineering_labs.py चलाएँ। इसे Python 3.12.3, NumPy 1.26.4 और Matplotlib 3.6.3 के साथ जांचा गया। Open3D की आवश्यकता नहीं है, और यह इसके कार्यान्वयन के साथ गति की तुलना नहीं है।

लक्ष्य 3 मीटर और 2 मीटर खंडों से बना एक L है, जिसमें कुल 102 बिंदु हैं और एक कोना दोहराया गया है। स्रोत बिंदु वास्तविक 20° घूर्णन और (0.4, -0.3) मीटर अनुवाद के व्युत्क्रम द्वारा उत्पन्न होते हैं। कोई सेंसर शोर नहीं जोड़ा गया है। अच्छा आरंभीकरण 18° और (0.35, -0.25) मीटर है; खराब आरंभीकरण 110° और (1.5, 1) मीटर है।

तीन प्रकार के साक्ष्य पढ़ें

अवशेष का अर्थ है स्वीकृत निकटतम-पड़ोसी दूरियों पर RMSE। कवरेज थ्रेशोल्ड के भीतर सभी स्रोत बिंदुओं का अंश है। सिंथेटिक ग्राउंड ट्रुथ घूर्णन और अनुवाद त्रुटियों की भी अनुमति देता है।

स्थिति थ्रेशोल्ड [मीटर] अवशिष्ट [मी] कवरेज घूर्णन त्रुटि [°] अनुवाद त्रुटि [मी]
अच्छा आरंभीकरण 0.5 0.023 1.000 1.258 0.055
खराब आरंभीकरण 0.5 0.151 0.539 171.699 2.519

30 आउटलायर्स, विस्तृत थ्रेशोल्ड | 10 | 1.117 | 1.000 | 71.412 | 2.657 |

30 आउटलायर्स, संकीर्ण थ्रेशोल्ड | 0.5 | 0.023 | 0.773 | 1.258 | 0.055 |

सममित वृत्त, 90° प्रारंभिक घूर्णन | 0.5 | लगभग 0 | 1.000 | 90.000 | लगभग 0 |

Diagram 1 · Use the button to switch views
सिंथेटिक ICP परिणाम: नीला लक्ष्य, नारंगी संरेखित स्रोत, अक्ष मीटर में।

अच्छी आरंभिकरण के बावजूद भी एक त्रुटि रह जाती है: नियमित रूप से नमूना लिए गए खंडों पर पड़ोसी बिंदु एक स्थानांतरित स्थानीय समाधान की अनुमति देते हैं। केवल 1.000 का कवरेज इसे अनदेखा कर देगा। आउटलायर्स स्रोत x=4–7 मीटर, y=3 मीटर पर स्थित हैं। लक्ष्य, आउटलायर इनपुट/आउटपुट और सारांश डाउनलोड करें।

वृत्तों और दीवारों में अदृश्य दिशाएँ

वृत्त की त्रिज्या 1 मीटर है और इसमें 120 बिंदु हैं, जिसमें पहचान को वास्तविक रूपांतरण के रूप में परिभाषित किया गया है। 90° घूर्णन के बाद भी इसका बिंदु समूह मेल खाता है, इसलिए अनिवार्य रूप से शून्य अवशिष्ट 90° पोज़ त्रुटि के साथ सह-अस्तित्व में है। अधिक पुनरावृति से अनुपलब्ध जानकारी प्राप्त नहीं हो सकती।

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

एक छोटा थ्रेशोल्ड सर्वव्यापी समाधान नहीं है

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

व्यावहारिक विकल्पों में ओडोमेट्री आरंभीकरण, मोटे से बारीक संरेखण, आउटलायर फ़िल्टरिंग और विभिन्न अभिविन्यासों वाली सतहों का अवलोकन शामिल हैं। समान अंतराल और संदर्भ स्थितियों पर उनके प्रभावों को मापें।

SLAM मूल्यांकन जारी रखें

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

स्थानीय रूप से वही गणना चलाएँ

संपूर्ण चलाने योग्य स्रोत ज़िप फ़ाइल निकालें, या प्रयोग प्रवेश बिंदु, जनित कर्नेल, और मूल PID स्रोत को एक फ़ोल्डर में सहेजें। PID पायथन मानक लाइब्रेरी का उपयोग करता है; कल्मन और ICP के लिए NumPy की आवश्यकता होती है। मूल आकृति-निर्माण कमांड उपलब्ध रहते हैं।

python3 -m pip install numpy==1.26.4
python3 experiment.py icp --parameters '{"case":"good_init","threshold":0.5}' > result.json

bad_init, outliers और symmetric_ring को आज़माएँ। आउटलायर्स के लिए थ्रेशोल्ड 10 और 0.5 की तुलना करें। सत्यापित करें कि रिंग लगभग शून्य अवशिष्ट के साथ भी 90-डिग्री रोटेशन त्रुटि को बनाए रख सकती है।

Code, data and reproduction

The ZIP contains the same computation code as the browser, synthetic data and comparison cases. These are not physical measurements.

Download reproduction package · Instructions (EN/JA) · Files and experiment conditions (JSON)

Extract the ZIP into a new directory, then run:

python3 reproduce.py --experiment icp

This Lab compares 5 cases. PID uses Python’s standard library; Kalman/ICP require NumPy. See the instructions for dependencies and tested versions.

Related reading

Separate point-cloud residuals from trajectory correctness.SLAM का मूल्यांकन कैसे करें — ATE, RPE, रनटाइम और विफलताएँExplore another aspect of this fieldROS 2 में मैपिंग से लेकर नेविगेशन तक — जैज़ी और Nav2 की एक संक्षिप्त प्रक्रियाExplore another aspect of this fieldrosbag2 का उपयोग करके रोबोट की विफलताओं को पुन: उत्पन्न करें: इनपुट, TF और समय