Daftar Isi:

Rpibot - Tentang Belajar Robotika: 9 Langkah
Rpibot - Tentang Belajar Robotika: 9 Langkah

Video: Rpibot - Tentang Belajar Robotika: 9 Langkah

Video: Rpibot - Tentang Belajar Robotika: 9 Langkah
Video: Robotics 2.0: Combining Artificial Intelligence and RPA 2024, Juli
Anonim
Rpibot - Tentang Belajar Robotika
Rpibot - Tentang Belajar Robotika

Saya seorang insinyur perangkat lunak tertanam di sebuah perusahaan otomotif Jerman. Saya memulai proyek ini sebagai platform pembelajaran untuk sistem tertanam. Proyek ini dibatalkan lebih awal tetapi saya sangat menikmatinya sehingga saya melanjutkan di waktu luang saya. Inilah hasilnya…

Saya memiliki persyaratan berikut:

  • Perangkat keras sederhana (fokus adalah perangkat lunak)
  • Perangkat keras murah (sekitar € 100)
  • Dapat diperluas (beberapa opsi sudah menjadi bagian dari deskripsi)
  • Tegangan suplai untuk semua komponen dari sumber 5V tunggal (powerbank)

Sebenarnya tidak ada tujuan selain belajar. Platform ini dapat digunakan untuk pembelajaran, pengawasan, kontes robot, …

Ini bukan tutorial pemula. Anda memerlukan beberapa pengetahuan dasar tentang:

  • Pemrograman (Python)
  • Elektronik dasar (untuk menghubungkan modul bersama-sama dengan tegangan yang tepat)
  • Teori kontrol dasar (PID)

Akhirnya Anda mungkin akan menghadapi masalah seperti yang saya alami. Dengan rasa ingin tahu dan daya tahan, Anda akan melalui proyek dan memecahkan tantangan. Kode saya sesederhana mungkin dan baris kode kritis dikomentari untuk memberikan petunjuk.

Kode sumber dan file lengkap tersedia di sini:

Perlengkapan:

Mekanika

  • 1x Papan kayu lapis (ukuran A4, tebal 4 mm)
  • 3x M4 x 80 Sekrup dan mur
  • 2x Gear motor dengan poros keluaran sekunder untuk encoder. Roda.
  • 1x roda Gratis

1x Pemasangan kamera pan dan tilt (opsional)

Elektronik

  • 1x Raspberry Pi Zero dengan header dan kamera
  • 1x kontrol servo PCA 9685
  • 2x Roda dan sirkuit encoder optik
  • 1x kabel jumper wanita
  • 1x USB powerbank
  • 1x DRV8833 driver motor ganda
  • 2x Micro servos SG90 untuk kamera pan dan tilt (opsional)
  • 1x MPU9250 IMU (opsional)
  • 1x HC-SR04 sensor jarak ultrasonik (opsional)
  • 1x papan berlubang dan kawat solder, header, …

Langkah 1: Bangun Sasis

Bangun Sasis
Bangun Sasis
Bangun Sasis
Bangun Sasis
Bangun Sasis
Bangun Sasis

Saya bukan perancang mekanik yang baik. Juga tujuan proyek tidak menghabiskan terlalu banyak waktu di sasis. Bagaimanapun saya mendefinisikan persyaratan berikut:

  • bahan murah
  • Perakitan dan pembongkaran cepat
  • Dapat diperluas (mis. ruang untuk sensor tambahan)
  • Bahan ringan untuk menghemat energi untuk elektronik

Sasis yang mudah dan murah dapat dibuat dari kayu lapis. Sangat mudah untuk mesin dengan fretsaw dan bor tangan. Anda dapat merekatkan bagian kayu kecil untuk membuat pegangan untuk sensor dan motor.

Pikirkan tentang penggantian komponen cacat atau debugging listrik. Bagian utama harus diperbaiki dengan sekrup agar dapat diganti. Pistol lem panas mungkin sederhana, tetapi mungkin bukan cara terbaik untuk membuat sasis… Saya membutuhkan banyak waktu untuk memikirkan konsep yang mudah untuk membongkar bagian-bagiannya dengan mudah. Pencetakan 3D adalah alternatif yang baik, tetapi bisa sangat mahal atau memakan waktu.

Roda bebas akhirnya sangat ringan dan mudah dipasang. Alternatifnya semuanya berat atau penuh gesekan (saya mencoba beberapa dari mereka sebelum menemukan yang terakhir). Saya hanya perlu memotong spacer kayu untuk meratakan roda bebas ekor setelah memasang roda utama.

Properti roda (untuk perhitungan perangkat lunak)

Lingkar: 21, 5 cm Pulsa: 20 pulsa/putaran Resolusi: 1,075 cm (akhirnya 1 pulsa sekitar 1 cm, yang mudah untuk perhitungan perangkat lunak)

Langkah 2: Elektronik dan Pengkabelan

Elektronik dan Pengkabelan
Elektronik dan Pengkabelan
Elektronik dan Pengkabelan
Elektronik dan Pengkabelan
Elektronik dan Pengkabelan
Elektronik dan Pengkabelan

Proyek ini menggunakan modul yang berbeda seperti yang ditunjukkan pada diagram.

Raspberry Pi Zero adalah pengontrol utama. Ini membaca sensor dan mengendalikan motor dengan sinyal PWM. Itu terhubung ke PC jarak jauh dengan wifi.

DRV8833 adalah jembatan H motor ganda. Ini memberikan arus yang cukup ke motor (yang tidak dapat dilakukan oleh Raspberry Pi karena output hanya dapat memberikan beberapa mA).

Encoder optik memberikan sinyal berbentuk persegi setiap kali cahaya melewati roda encoder. Kami akan menggunakan interupsi HW dari Raspberry Pi untuk mendapatkan informasi setiap kali sinyal beralih.

pca9695 adalah papan kontrol servo. Hal ini berkomunikasi dengan bus serial I2C. Papan ini menyediakan sinyal PWM dan tegangan suplai yang mengontrol servos untuk pan dan tilt cam.

MPU9265 adalah percepatan 3-sumbu, kecepatan rotasi sudut 3-sumbu, dan sensor fluks magnet 3-sumbu. Kami akan menggunakannya terutama untuk mendapatkan heading kompas.

Modul yang berbeda semuanya terhubung bersama oleh kabel jumper. Breadboard bertindak sebagai dispatcher dan menyediakan tegangan suplai (5V dan 3.3V) dan ground. Semua koneksi dijelaskan dalam tabel koneksi (lihat lampiran). Menghubungkan 5V ke input 3.3V mungkin akan merusak chip Anda. Berhati-hatilah dan periksa semua kabel Anda dua kali sebelum memasok (di sini khususnya encoder harus dipertimbangkan). Anda harus mengukur tegangan suplai utama pada papan pengiriman dengan multimeter sebelum menghubungkan semua papan. Modul dipasang dengan sekrup nilon ke dalam sasis. Juga di sini saya senang memperbaikinya tetapi juga dapat dilepas jika terjadi kerusakan.

Satu-satunya penyolderan akhirnya adalah motor dan papan tempat memotong roti dan header. Sejujurnya, saya suka kabel jumper tetapi dapat menyebabkan koneksi longgar. Dalam beberapa situasi, beberapa pemantauan perangkat lunak dapat mendukung Anda dalam menganalisis koneksi.

Langkah 3: Infrastruktur Perangkat Lunak

Infrastruktur Perangkat Lunak
Infrastruktur Perangkat Lunak
Infrastruktur Perangkat Lunak
Infrastruktur Perangkat Lunak

Setelah mencapai mekanik, kami akan menyiapkan beberapa infrastruktur perangkat lunak untuk memiliki kondisi pengembangan yang nyaman.

Git

Ini adalah sistem kontrol versi sumber terbuka dan gratis. Ini digunakan untuk mengelola proyek besar seperti Linux, tetapi juga dapat dengan mudah digunakan untuk proyek kecil (lihat Github dan Bitbucket).

Perubahan proyek dapat dilacak secara lokal dan juga didorong ke server jauh untuk berbagi perangkat lunak dengan komunitas.

Perintah utama yang digunakan adalah:

git clone https://github.com/makerobotics/RPIbot.git [Dapatkan kode sumber dan konfigurasi git]

git pull Origin master [dapatkan yang terbaru dari repositori jarak jauh]

git status [dapatkan status repositori lokal. Apakah ada file yang diubah?] git log [dapatkan daftar komit] git add. [tambahkan semua file yang diubah ke panggung untuk dipertimbangkan untuk komit berikutnya] git commit -m "comment for commit" [komit perubahan ke repositori lokal]git push Origin master [Dorong semua komit ke repositori jarak jauh]

Pencatatan

Python menyediakan beberapa fungsi logging bawaan. Struktur perangkat lunak harus sudah mendefinisikan semua kerangka kerja logging sebelum memulai pengembangan lebih lanjut.

Logger dapat dikonfigurasi untuk login dengan format yang ditentukan di terminal atau dalam file log. Dalam contoh kami, logger dikonfigurasi oleh kelas server web tetapi kami juga dapat melakukannya sendiri. Di sini kami hanya mengatur level logging ke DEBUG:

logger = logging.getLogger(_name_)

logger.setLevel(logging. DEBUG)

Pengukuran dan ploting

Untuk menganalisis sinyal dari waktu ke waktu, yang terbaik adalah memplotnya dalam grafik. Karena Raspberry Pi hanya memiliki terminal konsol, kami akan melacak data dalam file csv yang dipisahkan titik koma dan memplotnya dari PC jarak jauh.

File jejak yang dipisahkan titik koma dihasilkan oleh kode python utama kami dan harus memiliki header seperti ini:

timestamp;yawCorr;encoderR;I_L;odoDistance;ax;encoderL;I_R;yaw;eSpeedR;eSpeedL;pwmL;speedL;CycleTimeControl;wz;pwmR;speedR;Iaw;hdg;m_y;m_x;eYaw;cycleTimeSense;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

Kolom pertama berisi stempel waktu. Kolom berikut ini gratis. Skrip ploting dipanggil dengan daftar kolom yang akan diplot:

remote@pc:~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Skrip plot tersedia di folder alat:

Plotter menggunakan mathplotlib dengan Python. Anda harus menyalinnya ke PC Anda.

Untuk kenyamanan lebih, skrip python dipanggil oleh skrip bash (plot.sh) yang digunakan untuk menyalin file jejak Raspberry Pi ke PC jarak jauh dan memanggil plotter dengan pemilihan sinyal. Skrip bash "plot.sh" meminta jika file harus disalin. Ini lebih nyaman bagi saya daripada menyalin secara manual setiap kali. "sshpass" digunakan untuk menyalin file dari Raspberry Pi ke PC jarak jauh melalui scp. Itu dapat menyalin file tanpa meminta kata sandi (dilewati sebagai parameter).

Akhirnya sebuah jendela dibuka dengan plot seperti yang ditunjukkan pada gambar.

Komunikasi jarak jauh

Antarmuka pengembangan ke Raspberry Pi adalah SSH. File dapat diedit langsung pada target, atau disalin oleh scp.

Untuk mengontrol robot, server web berjalan di Pi, menyediakan kontrol melalui Websockets. Antarmuka ini dijelaskan pada langkah berikutnya.

Siapkan Raspberry Pi

Ada file yang menjelaskan pengaturan Raspberry Pi di folder "doc" dari kode sumber (setup_rpi.txt). Tidak banyak penjelasan tetapi banyak perintah dan tautan yang berguna.

Langkah 4: Antarmuka Pengguna

Antarmuka Pengguna
Antarmuka Pengguna

Kami menggunakan server web Tornado yang ringan untuk meng-host antarmuka pengguna. Ini adalah modul Python yang kami sebut saat kami memulai perangkat lunak kontrol robot.

Arsitektur perangkat lunak

Antarmuka pengguna dibuat dengan mengikuti file: gui.html [Menjelaskan kontrol dan tata letak halaman web] gui.js [Berisi kode javascript untuk menangani kontrol dan membuka koneksi soket web ke robot kami] gui.css [Berisi gaya kontrol html. Posisi kontrol ditentukan di sini]

Komunikasi websocket

Antarmuka pengguna bukan yang paling keren, tetapi melakukan pekerjaan. Saya fokus di sini pada teknologi yang baru bagi saya seperti Websockets.

Situs web berkomunikasi dengan server web robot oleh Websockets. Ini adalah saluran komunikasi dua arah yang akan tetap terbuka saat koneksi dimulai. Kami mengirim perintah robot melalui Websocket ke Raspberry Pi dan mendapatkan informasi (kecepatan, posisi, aliran kamera) kembali untuk ditampilkan.

Tata letak antarmuka

Antarmuka pengguna memiliki input manual untuk perintah. Ini digunakan di awal untuk mengirim perintah ke robot. Kotak centang menghidupkan dan mematikan aliran kamera. Kedua penggeser mengontrol pan dan tilt kamera. Bagian kanan atas antarmuka pengguna mengontrol gerakan robot. Anda dapat mengontrol kecepatan dan jarak target. Informasi telemetri dasar ditampilkan dalam gambar robot.

Langkah 5: Memprogram Platform Robot

Memprogram Platform Robot
Memprogram Platform Robot
Memprogram Platform Robot
Memprogram Platform Robot
Memprogram Platform Robot
Memprogram Platform Robot

Bagian ini adalah tujuan utama proyek. Saya memfaktorkan ulang banyak perangkat lunak saat saya memperkenalkan sasis baru dengan motor DC. Saya menggunakan Python sebagai bahasa pemrograman karena berbagai alasan:

  • Ini adalah bahasa utama Raspberry Pi
  • Ini adalah bahasa tingkat tinggi dengan banyak fitur dan ekstensi bawaan
  • Ini berorientasi objek tetapi juga dapat digunakan untuk pemrograman sekuensial
  • Tidak diperlukan kompilasi atau rantai alat. Edit kode dan jalankan.

Arsitektur perangkat lunak utama

Perangkat lunak ini berorientasi objek, dibagi dalam beberapa objek. Ide saya adalah membagi kode menjadi 3 blok fungsional:

Sense Think Actuate

Sense.py

Akuisisi dan pemrosesan sensor utama. Data disimpan dalam kamus untuk digunakan pada tahap berikutnya.

Kontrol.py

Subkelas aktuasi mengendalikan motor dan servo setelah beberapa abstraksi. Objek Kontrol utama menangani perintah tingkat tinggi dan juga algoritma kontrol (PID) untuk motor.

rpibot.py

Objek utama ini adalah mengelola server web Tornado dan membuat instance kelas sense dan control di utas terpisah.

Setiap modul dapat dijalankan sendiri atau sebagai bagian dari keseluruhan proyek. Anda hanya dapat merasakan dan mencetak informasi sensor untuk memeriksa apakah sensor terhubung dengan benar dan memberikan informasi yang benar.

Kontrol PID

Tugas pertama adalah mencari tahu apa yang ingin kita kendalikan. Saya mulai dengan mencoba mengontrol posisi, yang sangat rumit dan tidak banyak membantu.

Terakhir, kami ingin mengontrol setiap kecepatan roda dan juga arah robot. Untuk melakukan itu kita harus mengalirkan dua logika kontrol.

Untuk meningkatkan kompleksitas langkah demi langkah, robot harus dikendalikan:

loop terbuka (dengan daya konstan)

pwm = K

kemudian tambahkan algoritma loop tertutup

pwm = Kp.speedError+Ki. Integration(speedError)

dan terakhir tambahkan kontrol arah sebagai langkah terakhir.

Untuk kontrol kecepatan saya menggunakan kontrol "PI" dan "P" hanya untuk yaw. Saya mengatur parameter secara manual dengan bereksperimen. Mungkin parameter yang jauh lebih baik dapat digunakan di sini. Target saya hanya garis lurus dan saya hampir mendapatkannya. Saya membuat antarmuka dalam perangkat lunak untuk menulis beberapa variabel dengan antarmuka pengguna. Mengatur parameter Kp ke 1.0 membutuhkan perintah berikut di antarmuka pengguna:

SET;Kp;1.0

Saya dapat mengatur parameter P cukup rendah untuk menghindari overshot. Kesalahan yang tersisa dikoreksi oleh parameter I (kesalahan terintegrasi)

Sulit bagi saya untuk mengetahui cara mengalirkan kedua kontrol. Solusinya sederhana, tetapi saya mencoba banyak cara lain sebelumnya…Jadi akhirnya, saya mengubah target kecepatan roda untuk berbelok ke satu arah atau sebaliknya. Mengubah output kontrol kecepatan secara langsung merupakan kesalahan karena kontrol kecepatan mencoba menghilangkan gangguan ini.

Diagram kontrol yang digunakan terlampir. Ini hanya menunjukkan sisi kiri kontrol robot.

Langkah 6: Kalibrasi Sensor

Kalibrasi Sensor
Kalibrasi Sensor
Kalibrasi Sensor
Kalibrasi Sensor
Kalibrasi Sensor
Kalibrasi Sensor

Hal pertama yang harus dipertimbangkan adalah bahwa seluruh IMU harus bekerja dengan baik. Saya memesan 3 bagian dan mengirimnya kembali sampai saya memiliki sensor yang berfungsi penuh. Setiap sensor sebelumnya memiliki beberapa bagian sensor yang tidak berfungsi dengan baik atau tidak berfungsi sama sekali. Saya menggunakan beberapa contoh skrip untuk menguji dasar-dasarnya sebelum memasangnya di robot.

Sinyal sensor IMU perlu dikalibrasi sebelum digunakan. Beberapa sinyal sensor tergantung pada sudut dan posisi pemasangan.

Kalibrasi percepatan dan kecepatan rotasi

Kalibrasi termudah adalah untuk percepatan longitudinal (A_x). Saat diam harus ada sekitar 0 m/s². Jika Anda memutar sensor dengan benar, Anda dapat mengukur gravitasi (sekitar 9,8 m/s²). Untuk mengkalibrasi a_x, Anda hanya perlu memasangnya dengan benar dan kemudian menentukan offset untuk mendapatkan 0 m/s² saat diam. Sekarang A_x dikalibrasi. Anda bisa mendapatkan offset untuk kecepatan rotasi dengan cara yang sama saat berhenti.

Kalibrasi magnetometer untuk kompas

Kalibrasi yang lebih kompleks diperlukan untuk sensor medan magnet. Kami akan menggunakan m_x dan m_y untuk mendapatkan medan magnet di tingkat horizontal. Memiliki m_x dan m_y akan memberi kita kesempatan untuk menghitung arah kompas.

Untuk tujuan sederhana kami, kami hanya akan mengkalibrasi penyimpangan besi keras. Ini harus dilakukan karena sensor berada di posisi akhir karena tergantung pada gangguan medan magnet.

Kami merekam m_x dan m_y saat kami memutar robot di sekitar sumbu z. Kami memplot m_x vs m_y dalam grafik XY. Hasilnya berbentuk elipsis seperti terlihat pada gambar. Elipsis harus dipusatkan ke titik asal. Di sini kami mempertimbangkan nilai maksimum dan minimum m_x dan m_y untuk mendapatkan offset di kedua arah. Akhirnya kami memeriksa kalibrasi dan melihat bahwa elipsis sekarang berada di tengah.

Kalibrasi besi lunak berarti kita mengubah gambar dari elipsis menjadi lingkaran. Hal ini dapat dilakukan dengan menambahkan faktor pada setiap nilai senor.

Sebuah tes rutin sekarang dapat dikodekan untuk mengkalibrasi ulang atau setidaknya untuk memeriksa bahwa sensor masih dikalibrasi.

Arah kompas

Data magnetometer sekarang akan digunakan untuk menghitung arah kompas. Untuk ini, kita harus mengubah sinyal m_x dan m_y menjadi sudut. Python secara langsung menyediakan fungsi math.atan2 yang memiliki tujuan ini. Perhitungan lengkap didefinisikan dalam file mpu9250_i2c.py ("calcHeading(mx, my, mz)").

Langkah 7: Desain Alternatif

Desain Altern-t.webp
Desain Altern-t.webp
Desain Altern-t.webp
Desain Altern-t.webp
Desain Altern-t.webp
Desain Altern-t.webp

Proyek ini memakan banyak waktu karena desainnya benar-benar terbuka. Untuk setiap komponen saya membuat beberapa implementasi prototipe dan mengalami batasan sistem.

Topik yang paling kompleks adalah encoder roda. Saya menguji 3 opsi berbeda sebelum menemukan encoder optik yang saat ini digunakan. Saya pikir solusi yang dibatalkan juga sangat menarik dalam proyek semacam itu. Ini menyangkut bagian-bagian di mana saya paling banyak belajar.

Servo rotasi terus menerus terhubung ke pca 9695

Untuk menghindari jembatan-H tambahan untuk motor DC, pertama-tama saya mulai dengan servos rotasi kontinu. Ini didorong oleh driver servo pca 9695 yang sudah ada. Semua mekanik propulsi dan elektronik koresponden jauh lebih sederhana. Desain ini memiliki dua kelemahan:

  • Rentang kendali servo yang buruk.
  • Lokasi penyimpanan encoder yang hilang

Servo mulai bergerak dengan 50% pwm dan memiliki kecepatan penuh sekitar 55%. Ini adalah rentang kendali yang sangat buruk.

Tanpa memegang encoder, sangat sulit untuk menemukan encoder yang siap pakai. Saya menguji 3 encoder reflektansi berbeda yang dipasang pada sasis. Saya menempelkan roda encoder buatan sendiri di bagian luar roda dengan bagian hitam dan putih. Saya menggunakan sensor QTR-1RC yang membutuhkan banyak pemrosesan sinyal untuk mendapatkan sinyal yang tepat. Raspberry Pi tidak dapat melakukan pemrosesan waktu nyata semacam itu. Jadi saya memutuskan untuk menambahkan mini NodeMCU D1 sebagai pengontrol waktu nyata ke robot. Itu terhubung ke raspberry Pi oleh serial UART untuk mengirimkan data sensor yang diproses. NodeMCU juga mengelola sensor HC-SR04. Mekaniknya sulit dan tidak terlalu kuat, saluran serial mendapat noise dari saluran I2C dan motor, jadi akhirnya saya membangun sasis versi kedua dengan motor DC gigi sederhana yang digerakkan oleh jembatan-H. Motor ini memiliki poros keluaran sekunder untuk menempatkan encoder optik.

Langkah 8: Pemrosesan Gambar

Pengolahan citra
Pengolahan citra
Pengolahan citra
Pengolahan citra
Pengolahan citra
Pengolahan citra
Pengolahan citra
Pengolahan citra

Untuk meningkatkan mengemudi otonom, kami dapat membuat beberapa pemrosesan gambar.

Pustaka opencv adalah referensi untuk itu. Ini dapat digunakan oleh Python untuk mengimplementasikan deteksi rintangan dengan cepat.

Kami mengambil gambar dan menerapkan beberapa tugas pemrosesan gambar:

Tes pertama dilakukan dengan transformasi Canny dan Sobel. Canny bisa menjadi kandidat yang baik tetapi tidak cukup masuk akal. Sobel terlalu masuk akal (terlalu banyak objek yang terdeteksi).

Akhirnya saya membuat filter sendiri untuk mencampur semua gradien horizontal dan vertikal (mendeteksi furnitur):

  • Ubah gambar berwarna menjadi gambar tingkat abu-abu
  • Blur gambar untuk menghilangkan noise kecil
  • Ambang gambar ke gambar hitam putih
  • Sekarang kami mendeteksi gradien horizontal dan vertikal untuk mendeteksi objek sebagai dinding dan furnitur
  • Kami hanya menyaring kontur besar yang tersisa (lihat kontur berwarna pada gambar)

Sekarang kita dapat menggunakan informasi baru ini untuk mendeteksi rintangan…

Langkah 9: Langkah Selanjutnya…

Langkah selanjutnya…
Langkah selanjutnya…
Langkah selanjutnya…
Langkah selanjutnya…

Sekarang, kami memiliki platform robot sederhana dengan sensor, aktuator, dan kamera. Tujuan saya adalah untuk bergerak secara mandiri dan kembali ke stasiun tanpa menambahkan sensor lebih lanjut. Untuk ini saya perlu langkah-langkah berikut:

  • Fusi sensor sinyal yaw dan heading magnetik
  • Pemrosesan gambar kamera (hanya CPU rendah yang tersedia untuk itu)
  • Deteksi tabrakan (jarak ultrasonik dan kamera)
  • Bangunan atau orientasi peta

Sekarang pergi dan ciptakan tantangan atau target Anda sendiri…

Direkomendasikan: