- ESP32 RC Cars एक ESP32-CAM आधारित रिमोट-कंट्रोल कैमरा सिस्टम है, जो WebSocket के ज़रिए रियल-टाइम वीडियो स्ट्रीमिंग और मोटर/सर्वो कंट्रोल को साथ में लागू करता है
- Python सर्वर एप्लिकेशन WebSocket कम्युनिकेशन मैनेज करता है और एक वेब इंटरफ़ेस देता है, जहाँ ब्राउज़र से ESP32 डिवाइस का वीडियो देखा और उसे कंट्रोल किया जा सकता है
- मुख्य फीचर हैं ESP32-CAM से लाइव वीडियो स्ट्रीमिंग, WebSocket कमांड आधारित मोटर/सर्वो कंट्रोल, कंट्रोल कमांड न मिलने पर डिफ़ॉल्ट स्थिति में लौटाने वाला ऑटो टाइमआउट, और मल्टी-क्लाइंट वीडियो कैनवस
- हार्डवेयर के लिए AI Thinker या compatible ESP32-CAM, GPIO से जुड़े मोटर/सर्वो, स्थिर 5V पावर, Wi-Fi नेटवर्क चाहिए; SD कार्ड वैकल्पिक है
- कंट्रोल कमांड
MOTOR:<speed>, SERVO:<angle>, CONTROL:<speed>:<angle> फ़ॉर्मेट में हैं, और सर्वर कई ESP32 क्लाइंट्स के वीडियो फ्रेम को ग्रिड में रखकर वेब इंटरफ़ेस पर स्ट्रीम करता है
प्रोजेक्ट ओवरव्यू
- ESP32 RC Cars ESP32 आधारित रिमोट-कंट्रोल कैमरा सिस्टम का उदाहरण है
- ESP32-CAM रियल-टाइम वीडियो WebSocket से भेजता है, और मोटर व सर्वो WebSocket कमांड से कंट्रोल होते हैं
- Python सर्वर एप्लिकेशन WebSocket कम्युनिकेशन मैनेज करता है और वेब इंटरफ़ेस से ESP32 डिवाइस को देखने व कंट्रोल करने देता है
- डेमो वीडियो: https://youtu.be/OubYFXmvA1E
मुख्य फीचर
- ESP32-CAM से वेब सर्वर पर लाइव वीडियो स्ट्रीमिंग भेजता है
- WebSocket कमांड से मोटर और सर्वो को रिमोट से कंट्रोल करता है
- कुछ समय तक कोई कंट्रोल कमांड न मिलने पर मोटर और सर्वो अपने-आप डिफ़ॉल्ट स्थिति में लौट आते हैं
- सर्वर कई क्लाइंट्स की वीडियो फीड को डायनेमिक रूप से कैनवस पर व्यवस्थित करता है
हार्डवेयर और सामग्री
- आवश्यक हार्डवेयर
- ESP32-CAM, AI Thinker मॉड्यूल या compatible बोर्ड
- उचित GPIO पिनों से जुड़े मोटर और सर्वो
- ESP32-CAM के लिए स्थिर 5V पावर
- कम्युनिकेशन के लिए Wi-Fi नेटवर्क
- अन्य फीचर के लिए ज़रूरत होने पर वैकल्पिक SD कार्ड
- इस्तेमाल की गई सामग्री AliExpress से खरीदे गए किट के कॉम्पोनेंट हैं
- कार बॉडी चेसिस
- इलेक्ट्रॉनिक स्पीड कंट्रोलर
- 30A वर्शन इस्तेमाल किया गया; BEC आउटपुट 5V 3A है, जो ESC और सर्वो चलाने के लिए पर्याप्त करंट जैसा लगा
- बैटरी होल्डर
- दो 18650 3.6V सेल या 7.4V बैटरी पैक
- दोनों इस्तेमाल किए गए; सेल दूसरे प्रोजेक्ट्स में ज़्यादा लचीले ढंग से उपयोग किए जा सकते हैं
- ESP32-CAM
- बाहरी एंटीना वाला मॉडल बहुत महत्वपूर्ण है, और 170-डिग्री fisheye कैमरा इस्तेमाल किया गया
- Bluetooth Gamepad
- PS4 कंट्रोलर इस्तेमाल किया गया
वायरिंग तरीका
- कार बॉडी चेसिस में शामिल सर्वो के 3-पिन JST adapter को हटाकर, ESP32 से जोड़ने के लिए 4-पिन JST plug में बदला गया
- सर्वो के positive और negative leads को जोड़कर, crimping tool से 3-पिन female JST plug जोड़ा गया
- ESC की सफ़ेद कंट्रोल वायर को 4-पिन JST plug और 3-पिन female plug से जोड़ा गया
सॉफ़्टवेयर कॉन्फ़िगरेशन
- ESP32 कोड में इस्तेमाल होने वाली libraries
WiFi.h: Wi-Fi कनेक्शन
ArduinoWebsockets.h: WebSocket कम्युनिकेशन
esp_camera.h: ESP32-CAM कैमरा कंट्रोल
ServoControl.h, Esc.h: सर्वो और मोटर कंट्रोल
Arduino.h: स्टैंडर्ड Arduino functions
- Python सर्वर dependencies नीचे दिए कमांड से इंस्टॉल करें
sudo apt install python3-aiohttp python3-opencv python3-numpy
सेटअप और रन करना
- ESP32 firmware सेटअप
secrets.h में Wi-Fi credentials और WebSocket server URL सेट करें
#define WIFI_SSID "YourWiFiSSID"
#define WIFI_PASSWORD "YourWiFiPassword"
#define WS_SERVER_URL "ws://YourServerIP:Port"
- कैमरा GPIO पिन AI Thinker ESP32-CAM बोर्ड के लिए पहले से सेट हैं
- ज़रूरत हो तो मोटर और सर्वो पिन को हार्डवेयर कॉन्फ़िगरेशन के अनुसार बदलें
- Python सर्वर सेटअप
- सर्वर script को वेब इंटरफ़ेस के
index.html फ़ाइल वाली same directory में रखें
- सर्वर को नीचे दिए कमांड से चलाएँ
python3 app.py
उपयोग और WebSocket कमांड
- ESP32 उपयोग की प्रक्रिया
- Arduino IDE या compatible platform से दिए गए sketch को ESP32-CAM पर upload करें
- serial output देखकर पुष्टि करें कि Wi-Fi और WebSocket server connection सफल है
- सर्वर उपयोग की प्रक्रिया
- Python सर्वर script चलाएँ
- ब्राउज़र में वेब इंटरफ़ेस खोलकर लाइव वीडियो स्ट्रीम देखें
- WebSocket कनेक्शन के ज़रिए कंट्रोल कमांड भेजें
- supported commands
MOTOR:<speed>: मोटर speed सेट करता है, range -255 से 255
SERVO:<angle>: सर्वो angle सेट करता है, range 0 से 180
CONTROL:<speed>:<angle>: मोटर speed और सर्वो angle को साथ में कंट्रोल करता है
ऑपरेशन डिटेल्स और troubleshooting
- ESP32 initialization steps
- तय किए गए Wi-Fi नेटवर्क से कनेक्ट करता है
- वीडियो स्ट्रीमिंग के लिए ESP32-CAM को सेट करता है
- सर्वर के साथ WebSocket connection स्थापित करता है
- टाइमआउट हैंडलिंग कुछ समय तक कोई कंट्रोल कमांड न मिलने पर मोटर speed को
0 और सर्वो angle को 90 पर वापस कर देती है
- Python सर्वर कई ESP32 क्लाइंट्स से WebSocket के ज़रिए कम्युनिकेशन करता है
- सर्वर आने वाले वीडियो frames को प्रोसेस करता है, उन्हें ग्रिड रूप में डायनेमिक रूप से व्यवस्थित करता है और वेब इंटरफ़ेस पर स्ट्रीम करता है
- कनेक्शन समस्या हो तो
secrets.h में Wi-Fi credentials जाँचें, और सुनिश्चित करें कि WebSocket server चल रहा है और accessible है
- वीडियो stream की समस्या हो तो ESP32-CAM की power सही है या नहीं और camera initialization settings जाँचें
- प्रोजेक्ट MIT License के तहत रिलीज़ किया गया है
1 टिप्पणियां
Hacker News की राय
पुराने HTC Magic फोन को कैमरा+वाई-फाई ट्रांसमीटर की तरह इस्तेमाल किया, और सीरियल पोर्ट व level shifter से Arduino से जोड़कर servo और RGB LED कंट्रोल किए
कनेक्शन बहुत स्थिर नहीं था, लेकिन काफी मज़ेदार था, और शायद अब अगली पीढ़ी के microcontroller के साथ इस project को फिर से जीवित करने का समय आ गया है
अगर project पसंद आया हो, तो किसी ऐसे व्यक्ति से मेरा परिचय करा देना जो remote developer ढूंढ रहा हो—यह सबसे बड़ी मदद होगी
मेरा मुख्य काम Ruby on Rails developer का है, लेकिन robotics work पर भी विचार कर सकता हूं
यह post पढ़ने लायक है: https://www.reddit.com/r/esp32/comments/r7kqtt/esp32cam_supe...
कुछ सलाह लागू करने से पहले frame rate काफी खराब था
0Ω resistor को फिर से solder करना लगभग एक adventure जैसा था, लेकिन किसी तरह सही pin से जोड़ दिया, और result ऐसा दिखता है: https://imgur.com/a/LJflZ80
मैंने इस्तेमाल किए गए antenna का link README में जोड़ दिया है
basic software Bluetooth controller library इस्तेमाल करके C code की करीब 20 lines में आसानी से शुरू किया जा सकता है
बाद में controls को आसान बनाने के लिए features जोड़े, लेकिन 2 tracks को 2 sticks से control करने का तरीका कम speed पर ठीक है; चूंकि 2 drone motors इस्तेमाल करके यह लगभग 20km/h तक चला जाता था, इसलिए अलग control scheme की जरूरत पड़ी
आखिर में DualShock controller के triggers से RPM limit के साथ direct track control किया, और high-speed driving में left stick up/down को acceleration और right stick left/right को steering बनाकर इसे आम RC car की तरह drive करने लायक बनाया
यह उसी 3D-printed model का video है जिसे base के तौर पर इस्तेमाल किया, और 00:50 से speed अच्छी तरह दिखती है: https://www.youtube.com/watch?v=3Mv_tDY89Zw
RC बनाना मुझे ज्यादा नहीं आता; आम तौर पर इसे कैसे control करते हैं? क्या PS4 controller को सीधे ESP से connect करते हैं?
इस project की latency कितनी है, यह जानने की उत्सुकता है
वहीं FPV quadcopter का video अलग-अलग तरह से होता है। कुछ लोग analog इस्तेमाल करते हैं क्योंकि signal टूटने पर यह पूरी तरह कटकर reconnect होने के बजाय धीरे-धीरे खराब होता है, और कुछ लोग 802.11-based communication इस्तेमाल करते हैं, जो असल में काफी competitive है
उदाहरण के लिए Walksnail Goggles video link के लिए 802.11 इस्तेमाल करता है, और भले ही यह बहुत open या well-documented नहीं है, Chris Rosser के काम जैसे लोग इसके अंदर तक झांक रहे हैं
ऐसे setup की latency तेज competitive quadcopter racing के लिए भी पर्याप्त लगती है
[0] https://www.expresslrs.org
और: https://github.com/gyrex/CrystalVideo
frame rate ज्यादातर इस बात से limited लगता है कि ESP32 image कितनी तेजी से capture कर सकता है
Python script में FPS measure करने पर ESP32s से करीब 50fps मिला, और हाल ही में घर के बाहर test करने के लिए मैंने travel router खरीदा है
video feed देखते हुए remote control करना possible है? मेरी सबसे बड़ी चिंता यह है कि ज्यादातर speeds पर obstacle avoidance के लिए यह बहुत slow होगा
समय मिला तो दोनों को combine करके car control करूंगा और display पर camera feed भी देखूंगा
जिन्हें prescription glasses की जरूरत नहीं है या जो contact lenses पहनते हैं, उनके लिए DJI O4 ‘lite’ और N3 goggles का combo कहीं बेहतर option है
यह कुछ साल पुराना article है, इसलिए आज शायद similar results आसान या बेहतर तरीके से मिल सकते हैं: https://hackaday.com/2021/10/25/fast-indoor-robot-watches-ce...
यह फिल्मों वाले Boston Dynamics robot dog और Terminator के mix जैसा बिल्कुल नहीं है, लेकिन landmine बिछाने, mines detonate करने, और frontline पर कहीं छिपे सैनिक तक थोड़ी supplies पहुंचाने जैसे कम दिखाई देने वाले “boring” कामों में बहुत useful है