Self driving rc car

Self driving rc car

 कार्रवाई

सेल्फ ड्राइविंग आरसी कार satyatechnicalgyan
Add caption

यह परियोजना रास्पबेरी पाया, अरुडिनो और ओपन सोर्स सॉफ़्टवेयर का उपयोग करके एक स्व-ड्राइविंग आरसी कार बनाती है। रास्पबेरी ने एक कैमरा मॉड्यूल और एक माइक्रोस्कोप सेंसर से इनपुट एकत्र किया है, और एक कंप्यूटर को प्रेषित करने के तरीके डेटा डेटा है। कंप्यूटर क्रमशः इनपुट छवि और सेंसर डेटा को ऑब्जेक्ट डिटेक्शन (स्टॉप साइन और ट्रैफिक लाइट) और टकराव से बचने के प्रति पूर्ण करता है। एक तंत्रिका नेटवर्क मॉडल कंप्यूटर पर चलता है और इनपुट छवियों के आधार पर स्टीयरिंग के लिए पूर्वानुमान बनाता है। आरसी कार नियंत्रण के लिए भविष्यवाणियों को अरुडिनो पर भेजा जाता है।

एनासेडा के साथ पर्यावरण की स्थापना

  1. miniconda(Python3)अपने कंप्यूटर पर  स्थापित करें

  2. auto-rccarपरियोजना के लिए आवश्यक सभी इस पुस्तकालयों के साथ वातावरण  बनाएं
    conda env create -f environment.yml

  3. auto-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:


const int y = 10; //connect yellow led at pin 10 const int g = 11;
const int sec = 1000; //seconds defined
void setup() { pinMode(r,OUTPUT); pinMode(y,OUTPUT); pinMode(g,OUTPUT); delay(sec);
} void loop() { digitalWrite(r,HIGH) ; delay(sec*5); digitalWrite(r,LOW) ; digitalWrite(y,HIGH) ; delay(sec*5); digitalWrite(y,LOW) ; digitalWrite(g,HIGH) ; delay(sec*5); digitalWrite(g,LOW) ; }

कैसे गाड़ी चलायें

  1. परीक्षण:rc_keyboard_control.ino Arduino के लिए फ्लैश और rc_control_test.pyकीबोर्ड के साथ आरसी कार चलाने के लिए। stream_server_test.pyकंप्यूटर पर चलाएं और फिर stream_client.pyवीडियो स्ट्रीमिंग का परीक्षण करने के लिए रास्पबेरी पाई पर चलाएं । इसी तरह, ultrasonic_server_test.pyऔर ultrasonic_client.pyसेंसर डेटा स्ट्रीमिंग परीक्षण के लिए इस्तेमाल किया जा सकता है।

  2. पाई कैमरा कैलिब्रेशन (वैकल्पिक): विभिन्न कोणों पर पाई कैमरा मॉड्यूल का उपयोग करते हुए कई शतरंज बोर्ड चित्र लें और उन्हें chess_boardफ़ोल्डर में डालें picam_calibration.pyकैमरा मैट्रिक्स से रन और लौटे मापदंडों का उपयोग किया जाएगा rc_driver.py

  3. प्रशिक्षण / सत्यापन डेटा एकत्र करें: पहले दौड़ें collect_training_data.pyऔर फिर stream_client.pyरास्पबेरी पाई पर दौड़ें । आरसी कार ड्राइव करने के लिए प्रेस तीर कुंजी, qबाहर निकलने के लिए दबाएं । फ़्रेम केवल तभी सहेजे जाते हैं जब कोई कुंजी प्रेस क्रिया हो। एक बार बाहर निकलने के बाद, डेटा को नए बनाए गए training_dataफ़ोल्डर में सहेजा जाएगा 

  4. तंत्रिका नेटवर्क प्रशिक्षण:model_training.py एक तंत्रिका नेटवर्क मॉडल को प्रशिक्षित करने के लिए चलाएँ । कृपया बेहतर परिणाम प्राप्त करने के लिए मॉडल वास्तुकला / मापदंडों को ट्यून करने के लिए स्वतंत्र महसूस करें। प्रशिक्षण के बाद, मॉडल को नए बनाए गए saved_modelफ़ोल्डर में सहेजा जाएगा 

  5. कैस्केड क्लासीफायर प्रशिक्षण (वैकल्पिक): प्रशिक्षित स्टॉप साइन और ट्रैफिक लाइट क्लासिफायर को cascade_xmlफ़ोल्डर में शामिल किया जाता है , यदि आप अपने स्वयं के क्लासिफायरशिप प्रशिक्षण में रुचि रखते हैं, तो कृपया ओपनसीवी डॉक्टर और इस महान ट्यूटोरियल को देखें ।

  6. एक्शन में सेल्फ ड्राइविंग : पहले rc_driver.pyकंप्यूटर पर सर्वर को शुरू करने के लिए चलाएं (सरलीकृत नो ऑब्जेक्ट डिटेक्शन वर्जन के लिए, rc_driver_nn_only.pyइसके बजाय रन करें ), और फिर रन stream_client.pyऔर ultrasonic_client.pyरास्पबेरी पाई पर।



साइन और ट्रैफिक लाइट को रोकने के लिए दूरी को एकल पाई कैमरा का उपयोग करके मापा जाता है, कैमरा अंशांकन की आवश्यकता होती है।


कैमरा अंशांकन में अधिक विस्तार के लिए, कृपया OpenCv-Python ट्यूटोरियल देखें

मोनोक्युलर दृष्टि का उपयोग करके दूरी की गणना करने के बारे में अधिक जानकारी के लिए, वाहन वाहन दूरी माप को मोनोक्युलर विजन - जू गुओयन, मत्स्य चुआंसग, गाओ फॉक्स, और पेंट जूलफेंग (सितंबर, 2009) के आधार पर देखें।

सभी फ़ाइलें कंप्यूटर पर चलती हैं। वीडियो स्ट्रीमिंग / डिजिटल सेंसर परीक्षण के लिए, पहले सर्वर प्रोग्राम शुरू करें और फिर "रास्पबेरीपी" तह में संबंधित क्लाइंट प्रोग्राम शुरू करें।

किन और ट्रैफिक लाइट को रोकने के लिए दूरी को एकल पाया कैमरा का उपयोग करके कैमरा जाता है, कैमरा अंशांकन की आवृत्ति
शायरी होती है।
मोनोक्युलर दृष्टि का उपयोग करके दूरी की गणना करने के बारे में अधिक जानकारी के लिए, वाहन वाहन दूरी माप को मोनोक्युलर विजन - जू गुओयन, मत्स्य चुआंसग, गाओ फॉक्स, और पेंट जूलफेंग (सितंबर, 2009) के आधार पर देखें।






Post a Comment

Previous Post Next Post

asdss

b