रुकावटों को देखना
सेंसर एक ग्रिड मैप को खाली, बंद और अनजान खानों से भरते हैं। फिर हम हर रुकावट को एक सुरक्षा मार्जिन जितना बढ़ा देते हैं, ताकि रोबोट का शरीर कभी उनसे न टकराए।
60 सेकंड में
रुकावटों को देखना
सेंसर एक ग्रिड मैप को खाली, बंद और अनजान खानों से भरते हैं। फिर हम हर रुकावट को एक सुरक्षा मार्जिन जितना बढ़ा देते हैं, ताकि रोबोट का शरीर कभी उनसे न टकराए।
एक occupancy grid बनाना
- एक लाइडार (lidar) या डेप्थ सेंसर एक किरण (beam) बाहर भेजता है। जहाँ यह किसी चीज़ से टकराती है, वह खाना शायद भरा हुआ (occupied) है।
- रास्ते में किरण जिन खानों से होकर गुज़री, वे शायद खाली (free) हैं।
- जिन खानों तक कोई किरण नहीं पहुँची, वे अनजान (unknown) हैं। एक सावधान रोबोट अनजान खानों को बंद मानकर चलता है, या अपनी गति धीमी कर लेता है।
- सिर्फ एक रीडिंग पर पूरा भरोसा नहीं किया जाता। हर नई रीडिंग किसी खाने की संभावना को थोड़ा ऊपर या नीचे खिसकाती है, ताकि एक शोर-भरी (noisy) रीडिंग अचानक कोई दीवार न बना दे या मिटा न दे।
import math
# Log-odds: a handy way to add up evidence. 0 means 50/50.
def to_prob(log_odds):
return 1 / (1 + math.exp(-log_odds))
HIT, MISS = 0.85, -0.4 # how much one "hit" or one "passed through" changes our belief
cell = 0.0 # start unknown: 50%
readings = ["hit", "hit", "miss", "hit", "hit", "miss", "hit"]
for i, r in enumerate(readings, 1):
cell += HIT if r == "hit" else MISS
print(f"reading {i} ({r:4}): chance occupied = {to_prob(cell):.2f}")चलती-फिरती रुकावटें
सुरक्षा मार्जिन: रुकावटों को फुलाना (inflate करना)
- रास्ता दीवारों और कोनों से बिल्कुल सटकर जाता है
- रोबोट का निचला/बगल का हिस्सा दीवार से रगड़ खाता है
- स्थिति में ज़रा सी चूक से टक्कर हो जाती है
- रास्ता हर रुकावट से एक सुरक्षित दूरी बनाए रखता है
- पूरा शरीर आराम से निकल जाता है
- सेंसर और स्थिति की चूक के लिए पर्याप्त जगह होती है
| मार्जिन को तब बढ़ाना चाहिए जब | क्योंकि |
|---|---|
| रोबोट ज़्यादा तेज़ चलता है | उसे रुकने के लिए ज़्यादा दूरी चाहिए |
| स्थिति को लेकर अनिश्चितता ज़्यादा हो | GPS या डेड रेकनिंग (dead reckoning) में ज़्यादा अंतर आ सकता है |
| तेज़ हवा चल रही हो (ड्रोन के लिए) | हवा ड्रोन को एक तरफ धकेल सकती है |
| लोग या जानवर पास हों | वे अनिश्चित ढंग से चलते हैं, और टक्कर से उन्हें चोट लग सकती है |
और देखें और पढ़ें
लैब
एक inflate() फ़ंक्शन जो मूल मैप को बदले बिना, ग्रिड पर रुकावटों को एक सुरक्षा मार्जिन जितना बढ़ा देता है।
समस्या
यह आपके ब्राउज़र में चलता है।
inflate(grid, radius)को पूरा करें। स्ट्रिंग्स की एक नई लिस्ट लौटाएँ। एक खाली सेल#बन जाता है यदि कोई भी रुकावट तिरछी दिशाओं (diagonals) सहित हर दिशा में उससेradiusसेल्स के अंदर हो (रो की दूरी और कॉलम की दूरी दोनों ज़्यादा से ज़्यादाradiusहों)। इनपुट ग्रिड में बदलाव न करें।- इसे radius 1 और 2 के साथ चलाएँ और प्रिंट हुए मैप को देखें। कौन-से फासले बंद हो जाते हैं?
- दो वाक्य लिखें: 30 सेमी चौड़े ड्रोन के लिए, जहाँ ग्रिड के खाने 10 सेमी के हों, आप क्या radius चुनेंगे, और क्यों?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आप radius 2 से फुलाते हैं और प्लानर को इकलौते दरवाज़े से कोई रास्ता नहीं मिलता। आपके पास ईमानदारी भरे क्या विकल्प हैं?दिखाएं
पहले संख्याओं की जाँच करें: हो सकता है कि मार्जिन ज़रूरत से ज़्यादा बड़ा हो, या ग्रिड के खाने बहुत मोटे हों, जिससे असली फासला ज़रूरत से ज़्यादा छोटा दिख रहा हो। एक महीन ग्रिड मदद कर सकता है। आप एक कड़े अंदरूनी मार्जिन के साथ एक नरम, ज़्यादा लागत वाले बाहरी हिस्से का भी इस्तेमाल कर सकते हैं, ताकि रोबोट दरवाज़े के ठीक बीच से धीरे-धीरे निकल सके। आपको जो नहीं करना चाहिए, वह यह है कि रोबोट के असली आकार और उसकी स्थिति की संभावित त्रुटि से कम मार्जिन चुपचाप घटा दें।
Q2चौकोर रूप में फुलाना (तिरछी दिशाओं को शामिल करते हुए) एक असली गोल रोबोट से थोड़ा अलग क्यों है, और क्या इससे फर्क पड़ता है?दिखाएं
एक चौकोर रूप रुकावटों को तिरछी रेखाओं पर वृत्त (circle) की तुलना में थोड़ा ज़्यादा बढ़ाता है, इसलिए यह कोनों में थोड़ा ज़्यादा सतर्क रहता है। ज़्यादातर छोटे रोबोटों के लिए यह अतिरिक्त सतर्कता ठीक है। जब जगह बहुत तंग हो, तो प्लानर रो और कॉलम गिनने के बजाय निकटतम रुकावट से वास्तविक दूरी की जाँच करके गोल आकार का इस्तेमाल कर सकते हैं।
अक्सर पूछे जाने वाले सवाल
सिर्फ संभावनाओं (probabilities) की जगह log-odds का इस्तेमाल क्यों करें?
log-odds के साथ, हर नई रीडिंग को बस जोड़ दिया जाता है। इससे बार-बार गुणा करने से बचा जा सकता है, और जब कोई खाना लगभग पूरी तरह खाली या बंद होता है, तो संख्याएँ स्थिर रहती हैं। जब भी आपको ज़रूरत हो, आप इसे वापस एक संभावना (probability) में बदल सकते हैं।
ग्रिड का एक खाना कितना बड़ा होना चाहिए?
छोटे खाने ज़्यादा बारीकी दिखाते हैं लेकिन ज़्यादा मेमोरी लेते हैं और प्लानिंग को धीमा कर देते हैं। एक आम तरीका यह है कि आप जिस सबसे छोटे फासले पर ध्यान देना चाहते हैं, खाने उससे थोड़े छोटे चुनें। खुले मैदानों में उड़ने वाले ड्रोन घर के अंदर चलने वाले रोबोटों की तुलना में बहुत बड़े खानों का इस्तेमाल कर सकते हैं।
क्या रुकावटों को फुलाना (inflate करना) कॉन्फ़िगरेशन स्पेस (configuration space) के जैसा ही है?
हाँ, एक गोल रोबोट के लिए ऐसा ही है। रुकावटों को रोबोट की त्रिज्या के बराबर बढ़ाने से "क्या शरीर इसमें समा पाएगा?" का सवाल बदलकर "क्या यह बिंदु खाली है?" बन जाता है। इस विचार को कॉन्फ़िगरेशन स्पेस में प्लानिंग करना कहते हैं। लंबे या अजीब आकार वाले रोबोटों के लिए, इस बात से भी फर्क पड़ता है कि रोबोट का मुँह किस दिशा में है, जिससे यह प्रक्रिया और जटिल हो जाती है।
जब रुकावट फुलाने के बाद कोई रास्ता बहुत संकरा हो जाए, तो रोबोट को क्या करना चाहिए?
कोई दूसरा रास्ता प्लान करे, धीमा होकर ज़्यादा ध्यान से देखे, या रुककर किसी इंसान से पूछे। उसे केवल आगे निकलने के लिए चुपचाप अपने सुरक्षा मार्जिन को छोटा नहीं कर लेना चाहिए।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।