अपने वर्चुअल रोबोट से मिलें
हर रोबोट एक ही लूप पर काम करता है: महसूस करना, फ़ैसला लेना, काम करना। अपने ब्राउज़र में रहने वाले दो पहियों के एक छोटे रोबोट से मिलें, और उसे लक्ष्य तक चलाएं।
60 सेकंड में
अपने वर्चुअल रोबोट से मिलें
हर रोबोट एक ही लूप पर काम करता है: महसूस करना, फ़ैसला लेना, काम करना। अपने ब्राउज़र में रहने वाले दो पहियों के एक छोटे रोबोट से मिलें, और उसे लक्ष्य तक चलाएं।
- 1
महसूस करना
सेंसर पढ़ें: क्या मेरे नीचे कोई लाइन है? दीवार कितनी दूर है? - 2
फ़ैसला लेना
आपका कोड इन रीडिंग को एक फ़ैसले में बदलता है: सीधे जाओ, मुड़ो, रुको। - 3
काम करना
मोटरें आपके चुने हुए स्पीड पर पहियों को घुमाती हैं। - 4
दोहराना
इसे दोबारा करें, हर सेकंड कई बार। कभी-कभार किए जाने वाले बड़े सुधारों की तुलना में बार-बार किए जाने वाले छोटे सुधार बेहतर होते हैं।
वर्चुअल रोबोट से शुरुआत क्यों करें?
आपका रोबोट
- यह 200 सेमी गुणा 200 सेमी के एक चौकोर कमरे में रहता है, जिसे ऊपर से देखा जा रहा है।
xदाईं ओर जाता है,yऊपर जाता है। - इसके दो पहिए हैं, जो 10 सेमी की दूरी पर हैं, और यह गोल है, जिसकी रेडियस 5 सेमी है। एक तीसरा फ्री-रोलिंग पहिया (कास्टर) इसका संतुलन बनाए रखता है।
headingवह दिशा है जिस तरफ़ इसका मुँह है, रेडियन में: 0 का मतलब है दाईं ओर मुँह होना, और जैसे-जैसे रोबोट बाएँ (एंटी-क्लॉकवाइज़) मुड़ता है, यह बढ़ता जाता है। एक पूरा चक्कर लगभग 6.28 रेडियन होता है; एक समकोण (राइट एंगल) लगभग 1.57 होता है।- हर स्टेप सेकंड का दसवां हिस्सा होता है। पूरी स्पीड पर एक पहिया 20 सेमी प्रति सेकंड चलता है।
दो पहियों से मोड़ना (स्टीयरिंग)
| बायाँ पहिया | दायाँ पहिया | रोबोट क्या करता है |
|---|---|---|
| आगे, एक जैसी स्पीड | आगे, एक जैसी स्पीड | सीधे चलता है |
| धीमा | तेज़ | बाईं ओर मुड़ता है |
| तेज़ | धीमा | दाईं ओर मुड़ता है |
| पीछे | आगे | एक ही जगह पर बाईं ओर घूमता है |
| रुका हुआ | रुका हुआ | शांत खड़ा रहता है |
# Wheel speeds go from -1 (full backward) to 1 (full forward).
VMAX, BASE, DT = 20.0, 10.0, 0.1 # top speed cm/s, wheel gap cm, seconds per step
for left, right in [(1, 1), (0.3, 0.8), (0.8, 0.3), (-0.5, 0.5), (0, 0)]:
forward = (left + right) / 2 * VMAX # cm per second, straight ahead
turn = (right - left) * VMAX / BASE # radians per second, + means left
print(f"left={left:5} right={right:5} -> forward {forward:5.1f} cm/s,"
f" turn {turn:5.1f} rad/s ({turn * DT:.2f} rad per step)")आप क्या लिखते हैं: decide फ़ंक्शन
decide(s)। सिमुलेटर इसे हर स्टेप में एक बार कॉल करता है। s सेंसर रीडिंग की एक डिक्शनरी है। आपका फ़ंक्शन दो नंबर लौटाता है: बाएँ और दाएँ पहिए की स्पीड। सिमुलेटर रोबोट को चलाता है और आपको बताता है कि क्या वह टकरा गया।def decide(s):
# s["x"], s["y"], s["heading"]: where the robot is (only the simulator knows this exactly)
# s["left"], s["right"]: 1 if that line sensor sees black tape, else 0
# s["offset"]: how far the tape is to the left (+) or right (-), in cm
# s["distance"]: cm to the nearest thing straight ahead (max 100)
# s["step"]: which step this is: 0, 1, 2 ...
return 0.5, 0.5 # (left wheel, right wheel), each from -1 to 1
print(decide({"step": 0}))x, y, heading) पता होती है। असली छोटे रोबोट्स को आम तौर पर यह पता नहीं होती: पहिए फिसलते हैं और छोटी-छोटी गलतियाँ जुड़कर बड़ी हो जाती हैं। इसीलिए अगले पाठों में ऐसे सेंसर का इस्तेमाल किया गया है जो इसके बजाय बाहर की दुनिया को देखते हैं।और देखें और पढ़ें
लैब
एक decide फ़ंक्शन जो आपके वर्चुअल रोबोट को लक्ष्य की ओर मोड़ता है, वहाँ तक चलाता है और रोकता है।
समस्या
यह आपके ब्राउज़र में चलता है। रोबोट (30, 30) पर दाईं ओर मुँह करके शुरू होता है। लक्ष्य (160, 160) पर है।
- स्टार्टर को चलाएँ। रोबोट सीधे दीवार से टकरा जाता है। तस्वीर को देखें।
decideको इस तरह बदलें कि रोबोट लक्ष्य की ओर मुड़े, वहाँ तक जाए और दीवार को छुए बिना उसके 10 सेमी के दायरे में रुक जाए।- इसे करने के दो तरीके हैं: (a)
s["step"]का इस्तेमाल करें:(-0.2, 0.2)के साथ कुछ स्टेप्स के लिए घूमें (हर स्टेप फिर 0.08 रेडियन घूमता है), फिर आगे बढ़ें, फिर(0, 0)रिटर्न करें; या (b) हर स्टेप में,np.arctan2से लक्ष्य का कोण निकालें और उसकी ओर मुड़ें। - एक वाक्य लिखें: तरीका (a) किसी असली रोबोट पर करना ज़्यादा मुश्किल क्यों होगा?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपका स्टेप-काउंटिंग समाधान सिमुलेटर में काम करता है। असली रोबोट लक्ष्य से काफ़ी दूर क्यों रह सकता है?दिखाएं
स्टेप्स गिनने में यह मान लिया जाता है कि हर स्टेप रोबोट को बिल्कुल बराबर दूरी तक चलाता और मोड़ता है। असली पहिए फिसलते हैं, मोटरें बिल्कुल एक जैसी नहीं होतीं, बैटरियाँ कमज़ोर हो जाती हैं और फ़र्श ऊबड़-खाबड़ होता है। रोबोट के आगे बढ़ने पर पहले मोड़ की छोटी-छोटी गलतियाँ और बड़ी हो जाती हैं। असली रोबोट दुनिया को देखने वाले सेंसर — जैसे लाइन, दीवार या कैमरा — की मदद से खुद को सही करते हैं।
Q2जब आप लक्ष्य के कोण के हिसाब से स्टीयर करते हैं, तो आपको कोण के अंतर को -π से π की रेंज में "wrap" क्यों करना पड़ता है?दिखाएं
हर पूरे चक्कर के बाद कोण दोहराए जाते हैं। अगर लक्ष्य +3.1 रेडियन पर है और रोबोट का मुँह -3.1 पर है, तो सीधा अंतर 6.2 का होगा, जिससे यह बाएँ लगभग एक पूरा चक्कर घूम जाएगा, जबकि लक्ष्य वास्तव में दाईं ओर सिर्फ़ 0.08 रेडियन की दूरी पर है। रैपिंग, उदाहरण के लिए (err + np.pi) % (2 * np.pi) - np.pi, छोटा रास्ता देती है।
अक्सर पूछे जाने वाले सवाल
क्या मुझे पहले से Python आनी चाहिए?
थोड़ी जानकारी हो तो मदद मिलती है: variables, if और फ़ंक्शन। लैब छोटी हैं और आपको सिर्फ़ एक छोटा फ़ंक्शन ही बदलना होता है। अगर आप नए हैं, तो भी लैब आज़माकर देखें और एरर मैसेज को ध्यान से पढ़ें; वे आमतौर पर बताते हैं कि कौन सी लाइन में गड़बड़ी है।
रेडियन क्यों, डिग्री क्यों नहीं?
Python के गणित फ़ंक्शन जैसे np.cos और np.arctan2 रेडियन का इस्तेमाल करते हैं। एक पूरा चक्कर 2π रेडियन होता है, यानी लगभग 6.28। बदलने के लिए, डिग्री को π/180 से गुणा करें, या np.radians(90) का इस्तेमाल करें।
क्या असली रोबोट का सॉफ़्टवेयर भी ऐसे ही काम करता है?
लूप वही रहता है। असली सॉफ़्टवेयर में कई चीज़ें जुड़ जाती हैं: अलग-अलग स्पीड पर सेंसर पढ़ना, सुरक्षा जाँच, लॉगिंग और गड़बड़ियों को संभालना। लेकिन "सेंसर पढ़ें, फ़ैसला लें, मोटर सेट करें, दोहराएँ" ही ज़्यादातर छोटे रोबोट्स का मुख्य आधार होता है।
क्या सिमुलेटर गलत हो सकता है?
हाँ। यह एक सरल मॉडल है: पहिए नहीं फिसलते, कोई झटके नहीं होते, और मोटरें बिल्कुल सही काम करती हैं। यहाँ काम करने वाला कोड एक अच्छी शुरुआत है, कोई गारंटी नहीं। Simulation and sim-to-real वाला पाठ इस फ़र्क को और गहराई से समझाता है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।