ड्रोन और सेल्फ़-ड्राइविंग की बुनियादी बातेंमध्यमपाठ 2856 मिनट का पाठ

रुकावटों को देखना

सेंसर एक ग्रिड मैप को खाली, बंद और अनजान खानों से भरते हैं। फिर हम हर रुकावट को एक सुरक्षा मार्जिन जितना बढ़ा देते हैं, ताकि रोबोट का शरीर कभी उनसे न टकराए।

पाठ वीडियो में

60 सेकंड में

रुकावटों को देखना

सेंसर एक ग्रिड मैप को खाली, बंद और अनजान खानों से भरते हैं। फिर हम हर रुकावट को एक सुरक्षा मार्जिन जितना बढ़ा देते हैं, ताकि रोबोट का शरीर कभी उनसे न टकराए।

1/4
आसान शब्दों में
जब आप किसी भरे हुए कमरे में एक बड़ा डिब्बा लेकर चलते हैं, तो आप कुर्सियों के बिल्कुल सटकर नहीं चलते। आप कुछ दूरी बनाए रखते हैं, क्योंकि डिब्बा आपसे ज़्यादा चौड़ा होता है। रोबोट भी ऐसा ही करते हैं। वे अपने मैप पर हर रुकावट के चारों ओर एक मोटी लकीर खींच लेते हैं—उतनी चौड़ी जितना उनका शरीर और थोड़ा सा अतिरिक्त स्थान—और फिर उस लकीर को कभी पार नहीं करते।
पाथ प्लानर को एक ऐसे मैप की ज़रूरत होती है जो बताए कि कौन-सी जगहें खाली हैं। एक रोबोट अपने सेंसरों से यह मैप बनाता है, आमतौर पर एक occupancy grid के रूप में: हर खाना यह जानकारी रखता है कि उसके भरे होने की संभावना कितनी है।

एक occupancy grid बनाना

  • एक लाइडार (lidar) या डेप्थ सेंसर एक किरण (beam) बाहर भेजता है। जहाँ यह किसी चीज़ से टकराती है, वह खाना शायद भरा हुआ (occupied) है।
  • रास्ते में किरण जिन खानों से होकर गुज़री, वे शायद खाली (free) हैं।
  • जिन खानों तक कोई किरण नहीं पहुँची, वे अनजान (unknown) हैं। एक सावधान रोबोट अनजान खानों को बंद मानकर चलता है, या अपनी गति धीमी कर लेता है।
  • सिर्फ एक रीडिंग पर पूरा भरोसा नहीं किया जाता। हर नई रीडिंग किसी खाने की संभावना को थोड़ा ऊपर या नीचे खिसकाती है, ताकि एक शोर-भरी (noisy) रीडिंग अचानक कोई दीवार न बना दे या मिटा न दे।
Python: updating one square from several readingspython
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 करना)

एक प्लानर रोबोट को एक अकेले बिंदु (point) की तरह मानता है जो एक खाने से दूसरे खाने में जाता है। लेकिन एक असली रोबोट का एक शरीर होता है। अगर वह बिंदु किसी दीवार से एक खाना दूर होकर भी गुज़रे, तो उसका शरीर दीवार से टकरा सकता है। इसका उपाय आसान है: हर रुकावट को रोबोट की त्रिज्या (radius) और एक सुरक्षा मार्जिन जोड़कर फुला दें (inflate कर दें)। अब वह बिंदु-प्लानर जो भी रास्ता ढूँढेगा, वह पूरे शरीर के लिए सुरक्षित होगा।
बिना फुलाए
  • रास्ता दीवारों और कोनों से बिल्कुल सटकर जाता है
  • रोबोट का निचला/बगल का हिस्सा दीवार से रगड़ खाता है
  • स्थिति में ज़रा सी चूक से टक्कर हो जाती है
फुलाने के साथ
  • रास्ता हर रुकावट से एक सुरक्षित दूरी बनाए रखता है
  • पूरा शरीर आराम से निकल जाता है
  • सेंसर और स्थिति की चूक के लिए पर्याप्त जगह होती है
मार्जिन एक समझौता (trade-off) है। अगर यह बहुत छोटा हो, तो स्थिति की गलतियाँ या हवा का एक झोंका टक्कर करा सकता है। बहुत बड़ा हो, तो मैप से सकरे दरवाज़े और खाली जगहें गायब हो जाती हैं, जिससे रोबोट को कोई रास्ता ही नहीं मिलता। कई सिस्टम एक कड़े अंदरूनी मार्जिन का इस्तेमाल करते हैं जिसे कभी पार नहीं किया जाना चाहिए, और एक नरम बाहरी हिस्सा रखते हैं जहाँ रास्तों की अनुमति तो होती है लेकिन उनकी लागत (cost) ज़्यादा होती है।
मार्जिन को तब बढ़ाना चाहिए जबक्योंकि
रोबोट ज़्यादा तेज़ चलता हैउसे रुकने के लिए ज़्यादा दूरी चाहिए
स्थिति को लेकर अनिश्चितता ज़्यादा होGPS या डेड रेकनिंग (dead reckoning) में ज़्यादा अंतर आ सकता है
तेज़ हवा चल रही हो (ड्रोन के लिए)हवा ड्रोन को एक तरफ धकेल सकती है
लोग या जानवर पास होंवे अनिश्चित ढंग से चलते हैं, और टक्कर से उन्हें चोट लग सकती है
असली उदाहरण
बेंगलुरु की एक कॉलेज टीम अपनी लैब में एक छोटे इनडोर ड्रोन का परीक्षण करती है। उनके पहले ग्रिड में कोई मार्जिन नहीं था, और प्लानर खुशी-खुशी ड्रोन को दो अलमारियों के बीच के 40 सेमी के फासले से भेज देता है। ड्रोन 35 सेमी चौड़ा है, और वह अलमारी से टकरा जाता है। फिर वे रुकावटों को ड्रोन की आधी चौड़ाई और कुछ मार्जिन जोड़कर फुला देते हैं। अब प्लानर घूमकर जाता है, जो थोड़ा धीमा है पर सुरक्षित है।
सावधान रहें
रुकावटों की पहचान कभी-कभी फेल हो सकती है: पतले तार, शीशा, धुआँ, कैमरे पर सीधी तेज़ धूप, या सेंसर की नज़र से नीचे रखी चीज़ें। एक सुरक्षित डिज़ाइन सुरक्षा के लिए कभी भी सिर्फ एक सेंसर पर निर्भर नहीं रहता, और जब भी उसे संदेह होता है, वह धीमा हो जाता है या रुक जाता है।
इसे आज़माएँ। log-odds वाले कोड में, आखिर में तीन और "miss" रीडिंग जोड़ें। 50% से नीचे आने में कितनी miss रीडिंग लगती हैं?

और देखें और पढ़ें

लैब

एक inflate() फ़ंक्शन जो मूल मैप को बदले बिना, ग्रिड पर रुकावटों को एक सुरक्षा मार्जिन जितना बढ़ा देता है।

~25 min

समस्या

यह आपके ब्राउज़र में चलता है।

  1. inflate(grid, radius) को पूरा करें। स्ट्रिंग्स की एक नई लिस्ट लौटाएँ। एक खाली सेल # बन जाता है यदि कोई भी रुकावट तिरछी दिशाओं (diagonals) सहित हर दिशा में उससे radius सेल्स के अंदर हो (रो की दूरी और कॉलम की दूरी दोनों ज़्यादा से ज़्यादा radius हों)। इनपुट ग्रिड में बदलाव न करें।
  2. इसे radius 1 और 2 के साथ चलाएँ और प्रिंट हुए मैप को देखें। कौन-से फासले बंद हो जाते हैं?
  3. दो वाक्य लिखें: 30 सेमी चौड़े ड्रोन के लिए, जहाँ ग्रिड के खाने 10 सेमी के हों, आप क्या radius चुनेंगे, और क्यों?

प्रैक्टिस लैब

कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।

आउटपुट

कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1आप radius 2 से फुलाते हैं और प्लानर को इकलौते दरवाज़े से कोई रास्ता नहीं मिलता। आपके पास ईमानदारी भरे क्या विकल्प हैं?दिखाएं

पहले संख्याओं की जाँच करें: हो सकता है कि मार्जिन ज़रूरत से ज़्यादा बड़ा हो, या ग्रिड के खाने बहुत मोटे हों, जिससे असली फासला ज़रूरत से ज़्यादा छोटा दिख रहा हो। एक महीन ग्रिड मदद कर सकता है। आप एक कड़े अंदरूनी मार्जिन के साथ एक नरम, ज़्यादा लागत वाले बाहरी हिस्से का भी इस्तेमाल कर सकते हैं, ताकि रोबोट दरवाज़े के ठीक बीच से धीरे-धीरे निकल सके। आपको जो नहीं करना चाहिए, वह यह है कि रोबोट के असली आकार और उसकी स्थिति की संभावित त्रुटि से कम मार्जिन चुपचाप घटा दें।

Q2चौकोर रूप में फुलाना (तिरछी दिशाओं को शामिल करते हुए) एक असली गोल रोबोट से थोड़ा अलग क्यों है, और क्या इससे फर्क पड़ता है?दिखाएं

एक चौकोर रूप रुकावटों को तिरछी रेखाओं पर वृत्त (circle) की तुलना में थोड़ा ज़्यादा बढ़ाता है, इसलिए यह कोनों में थोड़ा ज़्यादा सतर्क रहता है। ज़्यादातर छोटे रोबोटों के लिए यह अतिरिक्त सतर्कता ठीक है। जब जगह बहुत तंग हो, तो प्लानर रो और कॉलम गिनने के बजाय निकटतम रुकावट से वास्तविक दूरी की जाँच करके गोल आकार का इस्तेमाल कर सकते हैं।

जारी रखने के लिए कृपया साइन इन करें।

अक्सर पूछे जाने वाले सवाल

सिर्फ संभावनाओं (probabilities) की जगह log-odds का इस्तेमाल क्यों करें?

log-odds के साथ, हर नई रीडिंग को बस जोड़ दिया जाता है। इससे बार-बार गुणा करने से बचा जा सकता है, और जब कोई खाना लगभग पूरी तरह खाली या बंद होता है, तो संख्याएँ स्थिर रहती हैं। जब भी आपको ज़रूरत हो, आप इसे वापस एक संभावना (probability) में बदल सकते हैं।

ग्रिड का एक खाना कितना बड़ा होना चाहिए?

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

क्या रुकावटों को फुलाना (inflate करना) कॉन्फ़िगरेशन स्पेस (configuration space) के जैसा ही है?

हाँ, एक गोल रोबोट के लिए ऐसा ही है। रुकावटों को रोबोट की त्रिज्या के बराबर बढ़ाने से "क्या शरीर इसमें समा पाएगा?" का सवाल बदलकर "क्या यह बिंदु खाली है?" बन जाता है। इस विचार को कॉन्फ़िगरेशन स्पेस में प्लानिंग करना कहते हैं। लंबे या अजीब आकार वाले रोबोटों के लिए, इस बात से भी फर्क पड़ता है कि रोबोट का मुँह किस दिशा में है, जिससे यह प्रक्रिया और जटिल हो जाती है।

जब रुकावट फुलाने के बाद कोई रास्ता बहुत संकरा हो जाए, तो रोबोट को क्या करना चाहिए?

कोई दूसरा रास्ता प्लान करे, धीमा होकर ज़्यादा ध्यान से देखे, या रुककर किसी इंसान से पूछे। उसे केवल आगे निकलने के लिए चुपचाप अपने सुरक्षा मार्जिन को छोटा नहीं कर लेना चाहिए।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें