Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Robot Pengikut Garis Berbasis Artificial Intelligence (AI)

Komponen dan persediaan

Arduino Nano
× 1
Seeed Wireless Bluetooth RF Transceiver Master Slave
× 1
Amazon Web Services Modul Sensor Inframerah IR Cahaya Fotolistrik Reflektif
× 1
Servo Rotasi Berkelanjutan Sony
× 1
Baterai Android 4.8 Volt
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Setelah mengembangkan Robot Pick &Place berbasis Arduino, idenya adalah untuk mengembangkan robot pengikut garis berbasis AI Cerdas. Mengembangkan robot garis sederhana berikut bagus untuk pemula hanya apa yang dibutuhkan untuk menambahkan semacam sensor inframerah daripada motor servo dalam proyek saya baru-baru ini. "Idenya adalah untuk menguji keterampilan saya di tingkat lanjutan".

Meskipun itu adalah tugas yang sulit, semacam penelitian online sangat membantu saya.

Mengapa ada kebutuhan robot mengikuti garis berbasis AI?

Ketika datang ke AI itu adalah teknologi terbaru yang memiliki potensi untuk mengubah lingkungan dunia sehingga kehidupan manusia efektif. Sebuah mimpi yang dapat menjadi kenyataan dengan menempatkan kecerdasan pada robot kami untuk memahami masalah kehidupan nyata dan menyelesaikannya sesuai dengan itu, mimpi itu hanya dapat menjadi kenyataan melalui Kecerdasan Buatan itu sebabnya semua orang membicarakannya.

  • Dapat digunakan di jalur perakitan/produksi.
  • Bus penjemputan penumpang.

Meskipun robot prototipe saya bisa sedikit cerdas, ini hanyalah permulaan bagi saya untuk memindahkan proyek saya ke AI. Maka disini saya akan mencoba menjelaskan langkah demi langkah perkembangan robot line following menggunakan Artificial Intelligence dengan bahasa yang cukup sederhana. Karena kurangnya sumber daya, saya tidak akan membuat robot tetapi saya dapat menjelaskan dengan baik bahwa bagaimana Anda dapat membangunnya dengan melakukan semacam penelitian. Saya akan mencoba memberikan kode akurat yang akan berfungsi pada Arduino IDE Anda, sehingga Anda dapat mengembangkan robot AI pertama Anda dengan cukup mudah.

Anda dapat mendukung saya di Patreon dari Sini :http://bit.ly/31NfQ6A

"Anda dapat menemukan perangkat tarif termurah di AS pada deskripsi video ini, cukup klik pada video ."

Sekarang mari kita masuk ke proyek "Robot Pengikut Garis Berbasis AI ! ".

PENGGUNAAN SENSOR INFRAMERAH

Kami proyek mencakup 7 sensor inframerah seperti yang ditunjukkan pada diagram.

  • 5 untuk Kontrol PID
  • 1 untuk deteksi kiri
  • satu lagi untuk deteksi sisi kanan.

5 Peran Sensor Kontrol PID :5 sensor ini akan digunakan untuk menghasilkan output digital masing-masing tinggi atau rendah (1, 0).

Sensor yang dipusatkan dalam kaitannya dengan garis hitam hanya sensor itu yang akan menghasilkan TINGGI (1). Hasil yang mungkin sama dari sensor itu adalah:-

  • 10000
  • 11000
  • 01000
  • 01100
  • 00100
  • 00110
  • 00010
  • 00011
  • 00001
  • 000000
  • 11111

Sekarang datang dua sensor lainnya untuk hasil kiri dan kanan yang mungkin

Sensor paling kiri:output analog tinggi atau rendah

Sensor paling kiri:output analog tinggi atau rendah

Untuk menyimpan nilai 5 sensor, mari buat variabel array.

di LFSensor[5]={1,1,1,1,1}; 

Untuk menyimpan nilai sensor kiri dan kanan kita akan menggunakan integer

int farleft_sensor=0; 

Seperti yang kita ketahui kita memiliki 5 sensor yang dapat digunakan untuk menyimpan jalur kiri dan kanan yang diambil oleh robot dalam sebuah array. Jadi

LFSensor[0] =digitalRead(lineFollowSensor0);
LFSensor[1] =digitalRead(lineFollowSensor1);
LFSensor[2] =digitalRead(lineFollowSensor2);
LFSensor[ 3] =digitalRead(lineFollowSensor3);
LFSensor[4] =digitalRead(lineFollowSensor4);
farRightSensor =analogRead(farRightSensorPin);
farLeftSensor =analogRead(farLeftSensorPin);

ATURAN KIRI MAZE :

tonton video ini untuk memahami aturan tangan kiri labirin

Singkatnya, Aturan Tangan Kiri dapat digambarkan sebagai:

  • Letakkan tangan kiri Anda di dinding.
  • Mulailah berjalan ke depan
  • Di setiap persimpangan, dan di sepanjang labirin, jaga agar tangan kiri Anda tetap menyentuh dinding di sebelah kiri Anda.
  • Akhirnya, Anda akan mencapai ujung labirin. Anda mungkin tidak akan menempuh jalan terpendek dan langsung, tetapi Anda akan sampai di sana.

Jadi, kuncinya di sini adalah mengidentifikasi persimpangan , menentukan kursus apa yang harus diambil berdasarkan aturan di atas. Khususnya, di Labirin 2D jenis kami, kami dapat menemukan 8 jenis persimpangan yang berbeda (lihat gambar pertama di atas):

Melihat gambar tersebut, kita dapat menyadari bahwa kemungkinan tindakan di persimpangan adalah:

Pada "Salib "

  • Ke Kiri, atau
  • Ke Kanan, atau
  • Langsung
  • Di sebuah "Salib "Ke Kiri, atau Ke Kanan, atau Lurus

Pada "T ":

  • Ke Kiri, atau
  • Ke Kanan
  • Pada "T ":Ke Kiri, atauKe Kanan

Di "Kanan Saja ":

  • Ke Kanan
  • Di "Kanan Saja ":Ke Kanan

Di "Kiri Saja ":

  • Ke Kiri
  • Pada "Kiri Saja ":Ke Kiri

Di "Lurus atau Kiri ":

  • Ke Kiri, atau
  • Langsung
  • Di "Lurus atau Kiri ":Ke Kiri, atau Lurus

Di "Lurus atau Kanan ":

  • Ke Kanan, atau
  • Langsung
  • Di "Lurus atau Kanan ":Ke Kanan, atauLurus

Pada "Buntut ":

  • Kembalilah ("Putar balik")
  • Di "Bunuh ":Kembalilah ("Putar balik")

Di "Akhir Labirin ":

  • Berhenti
  • Di "Akhir Labirin ":Berhenti

Namun, menerapkan "Aturan Tangan Kiri", tindakan akan dikurangi menjadi satu opsi masing-masing:

  • Pada "Salib":Ke Kiri
  • Pada "T":Ke Kiri
  • Di "Kanan Saja":Ke Kanan
  • Pada "Kiri Saja":Ke Kiri
  • Pada "Lurus atau Kiri":Ke Kiri
  • Di "Lurus atau Kanan":Lurus
  • Di "Jalan buntu":Kembali ("Putar balik")
  • Di "Akhir Labirin":Berhenti

Kami hampir sampai! "Tenang!"

Ketika robot mencapai "Akhir Mati" atau "Akhir Labirin", mudah untuk mengidentifikasi mereka, karena mereka tidak ada situasi yang ambigu (kami telah menerapkan tindakan tersebut pada Robot Pengikut Garis, ingat?). Masalahnya adalah ketika robot menemukan "GARIS" misalnya karena garis dapat berupa "Silang" (1) atau "T" (2). Juga ketika mencapai "BELI KANAN atau KIRI", itu bisa berupa belokan sederhana (opsi 3 atau 4) atau opsi untuk lurus (5 atau 6). Untuk mengetahui dengan tepat jenis persimpangan apa robot itu, langkah tambahan harus diambil:robot harus berlari "seinci ekstra" dan melihat apa yang berikutnya (lihat gambar kedua di atas, sebagai contoh).

Jadi, dalam hal aliran, tindakan yang mungkin sekarang dapat digambarkan sebagai:

Pada "AKHIR MATI":

  • Kembalilah ("Putar balik")
  • Pada "AKHIR MATI":Kembalilah ("Putar balik")

Di "LINE":

  • Lari satu inci ekstra
  • Jika ada garis:Ini adalah "Silang" ==> Ke KIRI
  • Jika tidak ada baris:itu adalah "T" ==> Pergi ke KIRI
  • Jika ada baris lain:itu adalah "Akhir Labirin" ==> STOP
  • Pada "LINE":Lari satu inci ekstra Jika ada garis:Ini adalah "Cross" ==> Ke KIRIJika tidak ada garis:itu adalah "T" ==> Ke KIRIJika ada baris lain:itu adalah "End of Maze" ==> BERHENTI

Pada "BELI KANAN":

  • Lari satu inci ekstra
  • jika ada garis:Lurus atau Kanan ==> Lurus
  • Jika tidak ada baris:itu adalah Kanan Saja ==> Pergi ke KANAN
  • Pada "BELI KANAN":Lari satu inci ekstra jika ada garis:Lurus atau Kanan ==> LurusJika tidak ada garis:Ini adalah Kanan Saja ==> Ke KANAN

Pada "BELI KIRI":

  • Lari satu inci ekstra
  • jika ada garis:Lurus atau KIRI ==> Ke KIRI
  • Jika tidak ada garis:hanya KIRI ==> Pergi ke KIRI
  • Pada "BELIKI KIRI":Lari satu inci ekstra jika ada garis:Lurus atau KIRI ==> Ke KIRIJika tidak ada garis:Ini adalah KIRI Saja ==> Ke KIRI

Perhatikan bahwa pada kenyataannya, Dalam kasus "BELIKI KIRI", Anda dapat melewati tes, karena Anda tetap akan mengambil KIRI. Saya meninggalkan penjelasan yang lebih umum hanya untuk kejelasan. Pada kode sebenarnya, saya akan melewatkan tes ini.

Berikut adalah beberapa masalah yang mungkin muncul saat membuat proyek ini.

Topik Terkait

menyelesaikan masalah DRIVER Arduino

tonton video ini untuk mengatasi masalah driver Arduino :


Kode

  • RoBot_Maze_Solve_2
  • Fungsi
  • Fungsi Umum.
  • Fungsi sensor
  • RobotDefines.h
  • Fungsi Motor
RoBot_Maze_Solve_2C/C++
/*-------------------------------------------------------- ---------------------7 sensor Robot Cerdas - Pemecah Labirin dan Pengikut Garis dengan pengontrol PID yang dapat diprogram melalui BT==> Gerakan dasar berdasarkan Robot Mouse Nano, yang dikembangkan oleh Michael Backus (http://www.akrobotnerd.com/ )==> Ikuti baris berdasarkan http://samvrit.tk/tutorials/pid-control-arduino-line-follower-robot/?ckattempt=1==> KREDIT ke Patrick McCabe untuk kode Pemecahan jalur, kunjungi patrickmccabemakes.com!!Marcelo Jose Rovai - 23 April 2016 - Kunjungi:http://mjrobot.org---------------- -------------------------------------------------- -*/#include #include "robotDefines.h"Perintah string;Perangkat string;// Modul BT#include SoftwareSerial BT1(10, 11); // El pin 10 es Rx y el pin 11 es Tx//----------------------------------- ----------pengaturan batal() { Serial.begin(9600); BT1.mulai (9600); pinMode(ledPin, OUTPUT); pinMode(tombolPin, INPUT_PULLUP); // sensor garis mengikuti pinMode(lineFollowSensor0, INPUT); pinMode(lineFollowSensor1, INPUT); pinMode(lineFollowSensor2, INPUT); pinMode(lineFollowSensor3, INPUT); pinMode(lineFollowSensor4, INPUT); // servos leftServo.attach(5); kananServo.attach(3); BT1.print("periksa konstanta PID yang akan dikirim ke Robot"); Serial.print("periksa konstanta PID yang akan dikirim ke Robot"); BT1.println('\n'); while (digitalRead(buttonPin) &&!mode) { checkBTcmd(); // verifikasi jika perintah diterima dari BT remote control manualCmd(); perintah =""; } periksanilaiPID(); modus =DIHENTIKAN; status =0; // pass pertama}void loop() { ledBlink(1); BT1.println("Mulai Pass Pertama"); Serial.println("Mulai Pass Pertama"); readLFSsensor(); memecahkan labirin(); // Lulus pertama untuk memecahkan labirin ledBlink(2); BT1.println("Akhiri Pass Pertama"); Serial.println("Akhiri Pass Pertama"); while (digitalRead(buttonPin) &&!mode) { checkBTcmd(); // verifikasi jika perintah diterima dari BT remote control manualCmd(); perintah =""; } BT1.println("Mulai Pass ke-2"); Serial.println("Memulai Pass ke-2"); indeks jalur =0; status =0; labirinOptimisasi(); //jalankan labirin secepat mungkin ledBlink(3); BT1.println("Akhiri Pass ke-2"); Serial.println("Akhiri Pass ke-2"); while (digitalRead(buttonPin) &&!mode) { checkBTcmd(); // verifikasi jika perintah diterima dari BT remote control manualCmd(); perintah =""; } modus =DIHENTIKAN; status =0; // indeks jalur lintasan pertama =0; pathLength =0;}
FungsiC/C++
void mazeSolve(void){ while (!status) { readLFSsensors(); sakelar (mode) { kasus NO_LINE:motorStop(); goAndTurn (KIRI, 180); recIntersection('B'); merusak; kasus CONT_LINE:runExtraInch(); readLFSsensor(); if (mode !=CONT_LINE) {goAndTurn (KIRI, 90); recIntersection('L');} // atau itu adalah "T" atau "Cross"). Dalam kedua kasus, pergi ke LEFT else mazeEnd(); merusak; kasus RIGHT_TURN:runExtraInch(); readLFSsensor(); if (mode ==NO_LINE) {goAndTurn (KANAN, 90); recIntersection('R');} else recIntersection('S'); merusak; kasus LEFT_TURN:goAndTurn (KIRI, 90); recIntersection('L'); merusak; kasus FOLLOWING_LINE:followingLine(); merusak; } }}//-------------------------------------------------------- void recIntersection(arah char){ path[pathLength] =arah; // Simpan persimpangan di variabel jalur. panjang jalur ++; menyederhanakanPath(); // Sederhanakan jalur yang dipelajari.}//---------------------------------------- ------void mazeEnd(void){ motorStop(); BT1.print("Akhir ==> Jalur:"); for(int i=0;i "); Serial.println(Panjang jalur); status =1; mode =DIHENTIKAN;}//------------------------------------------- ---void followingLine(void){ //readLFSsensors(); hitungPID(); motorPIDkontrol(); }//----------------------------------------------------------- -------------------------------------------// Penyederhanaan jalur. Strateginya adalah setiap kali kita menemukan a// urutan xBx, kita dapat menyederhanakannya dengan memotong jalan buntu. Untuk// contoh, LBL -> S, karena satu S melewati jalan buntu// diwakili oleh LBL.void simplePath(){ // hanya menyederhanakan jalan jika belokan kedua-ke-terakhir adalah 'B' if( pathLength <3 || path[pathLength-2] !='B') kembali; int totalSudut =0; di aku; for(i=1;i<=3;i++) { switch(path[pathLength-i]) { case 'R':totalAngle +=90; merusak; kasus 'L':totalAngle +=270; merusak; kasus 'B':totalAngle +=180; merusak; } } // Dapatkan sudut sebagai angka antara 0 dan 360 derajat. totalAngle =totalAngle % 360; // Ganti semua putaran itu dengan satu putaran. switch(totalAngle) { case 0:path[pathLength - 3] ='S'; merusak; kasus 90:path[pathLength - 3] ='R'; merusak; kasus 180:path[pathLength - 3] ='B'; merusak; kasus 270:path[pathLength - 3] ='L'; merusak; } // Jalur sekarang dua langkah lebih pendek. pathLength -=2; } //------------------------------------------------ -----------------------------------------------Void mazeOptimization ( void){ while (!status) { readLFSsensors(); switch (mode) { kasus FOLLOWING_LINE:followingLine(); merusak; case CONT_LINE:if (pathIndex>=pathLength) mazeEnd(); else {mazeTurn (path[pathIndex]); pathIndex++;} istirahat; case LEFT_TURN:if (pathIndex>=pathLength) mazeEnd(); else {mazeTurn (path[pathIndex]); pathIndex++;} istirahat; case RIGHT_TURN:if (pathIndex>=pathLength) mazeEnd(); else {mazeTurn (path[pathIndex]); pathIndex++;} istirahat; } } }//-------------------------------------------------------- --------void mazeTurn (char dir) { switch(dir) { case 'L':// Belok Kiri goAndTurn (KIRI, 90); merusak; case 'R':// Belok Kanan goAndTurn (KANAN, 90); merusak; case 'B':// Putar Kembali goAndTurn (KANAN, 800); merusak; case 'S':// Jalan Lurus runExtraInch(); merusak; }}
Fungsi Umum.C/C++
void ledBlink(int kali){ for (int i =0; i 0) { Serial.print("Perintah diterima dari BT ==> "); Serial.println(perangkat); perintah =perangkat; perangkat =""; //Reset variabel BT1.flush(); } }//------------------------------------------------------------ --------------------------void manualCmd(){ switch (command[0]) { case 'g':mode =FOLLOWING_LINE; merusak; case 's':motorStop(); //matikan kedua motor break; huruf 'f':motorForward(); merusak; case 'r':motorTurn(KANAN, 30); berhenti motor(); merusak; case 'l':motorTurn(KIRI, 30); berhenti motor(); merusak; kasus 'b':motorBackward(); merusak; kasus 'p':Kp =perintah [2]; merusak; kasus 'i':Ki =perintah [2]; merusak; kasus 'd':Kd =perintah [2]; merusak; }}//--------------------------------------------- --------------------------void sendBTdata (int data) // kirim data ke BT{ digitalWrite (ledPin, HIGH); BT1.print("Data dari Arduino"); BT1.cetak(data); BT1.print("xx"); BT1.println('\n'); digitalWrite (ledPin, LOW);}//--------------------------------------------------- ----------------void calPID(){ P =error; saya =saya + kesalahan; D =error-previousError; Nilai PID =(Kp*P) + (Ki*I) + (Kd*D); sebelumnyaError =kesalahan;}//------------------------------------------------------- -------------void checkPIDvalues(){ BT1.print("PID:"); BT1.cetak(Kp); BT1.print(" - "); BT1.cetak(Ki); BT1.print(" - "); BT1.println(Kd); Serial.print("PID:"); Serial.print(Kp); Serial.print(" - "); Serial.print(Ki); Serial.print(" - "); Serial.println(Kd); }//----------------------------------------------------------- void testLineFollowSensors(){ int LFS0 =digitalRead(lineFollowSensor0); int LFS1 =digitalRead(lineFollowSensor1); int LFS2 =digitalRead(lineFollowSensor2); int LFS3 =digitalRead(lineFollowSensor3); int LFS4 =digitalRead(lineFollowSensor4); Serial.print("LFS:L 0 1 2 3 4 R ==> "); Serial.print (LFS0); Serial.print(" "); Serial.print (LFS1); Serial.print(" "); Serial.print (LFS2); Serial.print(" "); Serial.print (LFS3); Serial.print(" "); Serial.print (LFS4); Serial.print("==>"); Serial.print("P:"); Serial.print (P); Serial.print("Saya:"); Serial.print (I); Serial.print("D:"); Serial.print (D); Serial.print("PID:"); Serial.println (nilai PID);}
sensorFuntionsC/C++
//--------------------------------------------- ------------------* membaca nilai sensor garis Nilai Kesalahan Array Sensor0 0 0 0 1 4 0 0 0 1 1 3 0 0 0 1 0 2 0 0 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 -1 0 1 0 0 0 -2 1 1 0 0 0 -3 1 0 0 0 0 -4 1 1 1 1 1 0 Robot menemukan garis kontinu - uji apakah persimpangan atau ujung dari maze0 0 0 0 0 0 Robot tidak menemukan garis:putar 180o*/void readLFSsensors(){ LFSensor[0] =digitalRead(lineFollowSensor0); LFSensor[1] =digitalRead(lineFollowSensor1); LFSensor[2] =digitalRead(lineFollowSensor2); LFSensor[3] =digitalRead(lineFollowSensor3); LFSensor[4] =digitalRead(lineFollowSensor4); farRightSensor =analogRead(farRightSensorPin); farLeftSensor =analogRead(farLeftSensorPin); if ((LFSensor[0]==1 )&&(LFSensor[1]==1 )&&(LFSensor[2]==1 )&&(LFSensor[3]==1 )&&(LFSensor[4]==1 )&&(LFSensor[3]==1 )&&(LFSensor[4]==1 )) {mode =CONT_LINE; error =0;} else if((LFSensor[0]==0 )&&(farRightSensor "); Serial.print (farRightSensor); Serial.print("modus:"); Serial.print (modus); Serial.print("kesalahan:"); Serial.println (kesalahan); }//----------------------------------------------------------- ------------void readLateralSensors(void){ }
RobotDefines.hC/C++
int mode =0;# tentukan STOPPED 0# tentukan FOLLOWING_LINE 1# tentukan NO_LINE 2# tentukan CONT_LINE 3# tentukan POS_LINE 4# tentukan RIGHT_TURN 5# tentukan LEFT_TURN 6const int power =250;const int iniMotorPower =250;const int adj =0;float adjTurn =8;int extraInch =200;int adjGoAndTurn =800;const int ledPin =13;const int buttonPin =9;// LFSensor lebih ke kiri adalah "0"const int lineFollowSensor0 =12; const int barisFollowSensor1 =18; const int barisFollowSensor2 =17; const int lineFollowSensor3 =16;const int lineFollowSensor4 =19;const int farRightSensorPin =0; //Pin Analog A0const int farLeftSensorPin =1; //Pin Analog A0const int THRESHOLD =150;int farRightSensor =0;int farLeftSensor =0;int LFSensor[5]={0, 0, 0, 0, 0};// PID controllerfloat Kp=50;float Ki=0;float Kd=0;float error=0, P=0, I=0, D=0, PIDvalue=0;float PreviousError=0, sebelumnyaI=0;#define RIGHT 1#define LEFT -1Servo leftServo;Servo rightServo; //------------------------------------------------ -//Maze Khusus Fase 2 (optimasi) definisi dan variabel unsigned char dir; // Variabel jalur akan menyimpan jalur yang telah diambil robot:// 'L' untuk kiri// 'R' untuk kanan// 'S' untuk lurus (lurus melalui persimpangan)// 'B' untuk belakang (putaran U) jalur karakter[100] =""; jalur karakter yang tidak ditandatanganiPanjang =0; // panjang pathIndex pathint =0;unsigned int status =0; // penyelesaian =0; mencapai akhir =1
MotorFuntionsC/C++
void motorStop(){ leftServo.writeMicroseconds(1500); rightServo.writeMicroseconds(1500); delay(200);}//------------------------------------------------------ --- void motorForward(){ leftServo.writeMicroseconds(1500 - (power+adj)); rightServo.writeMicroseconds(1500 + power);}//-------------------------------------- -------void motorBackward(){ leftServo.writeMicroseconds(1500 + power); rightServo.writeMicroseconds(1500 - power);}//-------------------------------------- -------void motorFwTime (waktu int tidak ditandatangani){ motorForward(); waktu penundaan); motorStop();}//------------------------------------------- --void motorBwTime (waktu int tidak ditandatangani){ motorBackward(); waktu penundaan); motorStop();}//------------------------------------------- -----void motorTurn(int arah, int derajat){ leftServo.writeMicroseconds(1500 - (iniMotorPower+adj)*arah); rightServo.writeMicroseconds(1500 - iniMotorPower*direction); delay (putaran(menyesuaikanTurn*derajat+20)); motorStop();}//------------------------------------------- --------void motorPIDcontrol(){ int leftMotorSpeed ​​=1500 - (iniMotorPower+adj) - nilai PID; int rightMotorSpeed ​​=1500 + iniMotorPower - nilai PID; // Kecepatan motor tidak boleh melebihi batasan nilai PWM maks(leftMotorSpeed, 1000, 2000); kendala (rightMotorSpeed, 1000, 2000); leftServo.writeMicroseconds(leftMotorSpeed); rightServo.writeMicroseconds(rightMotorSpeed); //Serial.print (nilai PID); //Serial.print(" ==> Kiri, Kanan:"); //Serial.print (kiriMotorSpeed); //Serial.print(" "); //Serial.println (rightMotorSpeed);}//-------------------------------------- -------------void runExtraInch(void){ motorPIDcontrol(); penundaan (ekstraInci); motorStop();}//------------------------------------------- --------void goAndTurn(int arah, int derajat){ motorPIDcontrol(); tunda(adjGoAndTurn); motorTurn(arah, derajat);}

Skema


Proses manufaktur

  1. Robot penghindar dinding berbasis Raspberry Pi – FabLab NerveCentre
  2. Robot Seluler dengan Penghindaran Rintangan Berbasis Penglihatan
  3. Robot ‘Artistik’ Di NPE
  4. Otomasi:Garis Robot Didesain Ulang
  5. Bosch Menambahkan Kecerdasan Buatan ke Industri 4.0
  6. SCARA Robot Line Diperluas
  7. Apakah kecerdasan buatan fiksi atau iseng?
  8. Kecerdasan Buatan Membantu Robot Mengenali Objek Dengan Sentuhan
  9. Robot Kecerdasan Buatan
  10. Keuntungan dan kerugian kecerdasan buatan