कार्रवाई
![]() |
| Add caption |
यह परियोजना रास्पबेरी पाया, अरुडिनो और ओपन सोर्स सॉफ़्टवेयर का उपयोग करके एक स्व-ड्राइविंग आरसी कार बनाती है। रास्पबेरी ने एक कैमरा मॉड्यूल और एक माइक्रोस्कोप सेंसर से इनपुट एकत्र किया है, और एक कंप्यूटर को प्रेषित करने के तरीके डेटा डेटा है। कंप्यूटर क्रमशः इनपुट छवि और सेंसर डेटा को ऑब्जेक्ट डिटेक्शन (स्टॉप साइन और ट्रैफिक लाइट) और टकराव से बचने के प्रति पूर्ण करता है। एक तंत्रिका नेटवर्क मॉडल कंप्यूटर पर चलता है और इनपुट छवियों के आधार पर स्टीयरिंग के लिए पूर्वानुमान बनाता है। आरसी कार नियंत्रण के लिए भविष्यवाणियों को अरुडिनो पर भेजा जाता है।
एनासेडा के साथ पर्यावरण की स्थापना
miniconda(Python3)अपने कंप्यूटर पर स्थापित करेंauto-rccarपरियोजना के लिए आवश्यक सभी इस पुस्तकालयों के साथ वातावरण बनाएंconda env create -f environment.ymlauto-rccarपर्यावरण को सक्रिय करेंsource activate auto-rccar
बाहर निकलने के लिए, बस टर्मिनल विंडो बंद करें। एनासेडा पर्यावरण के प्रबंधन के बारे में अधिक जानकारी, यहाँ देखें ।
फ़ाइल के बारे में
परीक्षण /
rc_control_test.py : कीबोर्ड के साथ आरसी कार नियंत्रण
stream_server_test.py: पाई से कंप्यूटर तक वीडियो स्ट्रीमिंग
ultrasonic_server_test.py: सेंसर से पाई का डेटा स्ट्रीमिंग कंप्यूटर से
मॉडल model_train_test /
data_test.npz : नमूना डेटा
train_predict_test.ipynb: एक jupyter नोटबुक जो OpenCV3 में तंत्रिका नेटवर्क मॉडल के माध्यम से जाता है
raspberryPi /
stream_client.py : स्ट्रीम वीडियो फ्रेम jpeg प्रारूप में होस्ट कंप्यूटर के लिए
ultrasonic_client.py: मेजबान कंप्यूटर के लिए सेंसर द्वारा मापा दूरी डेटा भेजें
arduino /
rc_keyboard_control.ino : नियंत्रण RC कार नियंत्रक
ARDUINO CODE:
| // assign pin num | |
| int right_pin = 6; | |
| int left_pin = 7; | |
| int forward_pin = 10; | |
| int reverse_pin = 9; | |
| // duration for output | |
| int time = 50; | |
| // initial command | |
| int command = 0; | |
| void setup() { | |
| pinMode(right_pin, OUTPUT); | |
| pinMode(left_pin, OUTPUT); | |
| pinMode(forward_pin, OUTPUT); | |
| pinMode(reverse_pin, OUTPUT); | |
| Serial.begin(115200); | |
| } | |
| void loop() { | |
| //receive command | |
| if (Serial.available() > 0){ | |
| command = Serial.read(); | |
| } | |
| else{ | |
| reset(); | |
| } | |
| send_command(command,time); | |
| } | |
| void right(int time){ | |
| digitalWrite(right_pin, LOW); | |
| delay(time); | |
| } | |
| void left(int time){ | |
| digitalWrite(left_pin, LOW); | |
| delay(time); | |
| } | |
| void forward(int time){ | |
| digitalWrite(forward_pin, LOW); | |
| delay(time); | |
| } | |
| void reverse(int time){ | |
| digitalWrite(reverse_pin, LOW); | |
| delay(time); | |
| } | |
| void forward_right(int time){ | |
| digitalWrite(forward_pin, LOW); | |
| digitalWrite(right_pin, LOW); | |
| delay(time); | |
| } | |
| void reverse_right(int time){ | |
| digitalWrite(reverse_pin, LOW); | |
| digitalWrite(right_pin, LOW); | |
| delay(time); | |
| } | |
| void forward_left(int time){ | |
| digitalWrite(forward_pin, LOW); | |
| digitalWrite(left_pin, LOW); | |
| delay(time); | |
| } | |
| void reverse_left(int time){ | |
| digitalWrite(reverse_pin, LOW); | |
| digitalWrite(left_pin, LOW); | |
| delay(time); | |
| } | |
| void reset(){ | |
| digitalWrite(right_pin, HIGH); | |
| digitalWrite(left_pin, HIGH); | |
| digitalWrite(forward_pin, HIGH); | |
| digitalWrite(reverse_pin, HIGH); | |
| } | |
| void send_command(int command, int time){ | |
| switch (command){ | |
| //reset command | |
| case 0: reset(); break; | |
| // single command | |
| case 1: forward(time); break; | |
| case 2: reverse(time); break; | |
| case 3: right(time); break; | |
| case 4: left(time); break; | |
| //combination command | |
| case 6: forward_right(time); break; | |
| case 7: forward_left(time); break; | |
| case 8: reverse_right(time); break; | |
| case 9: reverse_left(time); break; | |
| default: Serial.print("Inalid Command\n"); | |
| } | |
| } |
इस स्केच को किसी अन्य Arduino या Atmega 328 / NOT IN HOST COMPUTER के ARDUINO में अपलोड किया जाना चाहिए।
कंप्यूटर /
कैस्केड_xml /
प्रशिक्षित कैस्केड क्लासिफायर
शतरंज_बोर्ड /
अंशांकन के लिए चित्र, pi कैमरा द्वारा कैप्चर किया गया
picam_calibration.py: पीआई कैमरा अंशांकन
collect_training_data.py: ग्रेस्केल में चित्र एकत्र करें, डेटा को इस रूप में सहेजा गया *.npz
model.py: तंत्रिका नेटवर्क मॉडल
model_training.py: मॉडल प्रशिक्षण और सत्यापन
rc_driver_helper.py: सहायक वर्ग / कार्य rc_driver.py
rc_driver.py: रास्पबेरी पाई से डेटा प्राप्त करते हैं और मॉडल भविष्यवाणी के आधार पर आरसी कार चलाते हैं, जो वस्तु का पता
rc_driver_nn_only.pyलगाए rc_driver.pyबिना सरल किया गया है।
ट्रैफ़िक_सिग्नल ट्रैफ़िक
Traffic signal code:
| ||||||||||
कैसे गाड़ी चलायें
परीक्षण:
rc_keyboard_control.inoArduino के लिए फ्लैश औरrc_control_test.pyकीबोर्ड के साथ आरसी कार चलाने के लिए।stream_server_test.pyकंप्यूटर पर चलाएं और फिरstream_client.pyवीडियो स्ट्रीमिंग का परीक्षण करने के लिए रास्पबेरी पाई पर चलाएं । इसी तरह,ultrasonic_server_test.pyऔरultrasonic_client.pyसेंसर डेटा स्ट्रीमिंग परीक्षण के लिए इस्तेमाल किया जा सकता है।पाई कैमरा कैलिब्रेशन (वैकल्पिक): विभिन्न कोणों पर पाई कैमरा मॉड्यूल का उपयोग करते हुए कई शतरंज बोर्ड चित्र लें और उन्हें
chess_boardफ़ोल्डर में डालें ,picam_calibration.pyकैमरा मैट्रिक्स से रन और लौटे मापदंडों का उपयोग किया जाएगाrc_driver.py।प्रशिक्षण / सत्यापन डेटा एकत्र करें: पहले दौड़ें
collect_training_data.pyऔर फिरstream_client.pyरास्पबेरी पाई पर दौड़ें । आरसी कार ड्राइव करने के लिए प्रेस तीर कुंजी,qबाहर निकलने के लिए दबाएं । फ़्रेम केवल तभी सहेजे जाते हैं जब कोई कुंजी प्रेस क्रिया हो। एक बार बाहर निकलने के बाद, डेटा को नए बनाए गएtraining_dataफ़ोल्डर में सहेजा जाएगा ।तंत्रिका नेटवर्क प्रशिक्षण:
model_training.pyएक तंत्रिका नेटवर्क मॉडल को प्रशिक्षित करने के लिए चलाएँ । कृपया बेहतर परिणाम प्राप्त करने के लिए मॉडल वास्तुकला / मापदंडों को ट्यून करने के लिए स्वतंत्र महसूस करें। प्रशिक्षण के बाद, मॉडल को नए बनाए गएsaved_modelफ़ोल्डर में सहेजा जाएगा ।कैस्केड क्लासीफायर प्रशिक्षण (वैकल्पिक): प्रशिक्षित स्टॉप साइन और ट्रैफिक लाइट क्लासिफायर को
cascade_xmlफ़ोल्डर में शामिल किया जाता है , यदि आप अपने स्वयं के क्लासिफायरशिप प्रशिक्षण में रुचि रखते हैं, तो कृपया ओपनसीवी डॉक्टर और इस महान ट्यूटोरियल को देखें ।एक्शन में सेल्फ ड्राइविंग : पहले
rc_driver.pyकंप्यूटर पर सर्वर को शुरू करने के लिए चलाएं (सरलीकृत नो ऑब्जेक्ट डिटेक्शन वर्जन के लिए,rc_driver_nn_only.pyइसके बजाय रन करें ), और फिर रनstream_client.pyऔरultrasonic_client.pyरास्पबेरी पाई पर।

