Isi kandungan:

Rpibot - Mengenai Robotik Pembelajaran: 9 Langkah
Rpibot - Mengenai Robotik Pembelajaran: 9 Langkah

Video: Rpibot - Mengenai Robotik Pembelajaran: 9 Langkah

Video: Rpibot - Mengenai Robotik Pembelajaran: 9 Langkah
Video: Robotics 2.0: Combining Artificial Intelligence and RPA 2024, Julai
Anonim
Rpibot - Tentang Belajar Robotik
Rpibot - Tentang Belajar Robotik

Saya seorang jurutera perisian tertanam di sebuah syarikat automotif Jerman. Saya memulakan projek ini sebagai platform pembelajaran untuk sistem terbenam. Projek ini dibatalkan lebih awal tetapi saya sangat menikmatinya sehingga saya meneruskan masa lapang. Inilah hasilnya …

Saya mempunyai syarat berikut:

  • Perkakasan sederhana (fokus adalah perisian)
  • Perkakasan murah (kira-kira 100 €)
  • Boleh dikembangkan (beberapa pilihan sudah menjadi sebahagian daripada keterangan)
  • Voltan bekalan untuk semua komponen dari sumber 5V tunggal (powerbank)

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

Ini bukan tutorial pemula. Anda memerlukan beberapa pengetahuan asas mengenai:

  • Pengaturcaraan (Python)
  • Elektronik asas (untuk menyambungkan modul bersama-sama dengan voltan yang betul)
  • Teori kawalan asas (PID)

Akhirnya anda mungkin akan menghadapi masalah seperti saya. Dengan rasa ingin tahu dan daya tahan, anda akan melalui projek ini dan menyelesaikan cabarannya. Kod saya semudah mungkin dan garis kod kritikal dikomentari untuk memberi petunjuk.

Kod sumber dan fail lengkap boleh didapati di sini:

Bekalan:

Mekanik

  • Papan lapis 1x (saiz A4, tebal 4 mm)
  • 3x M4 x 80 Skru dan mur
  • 2x Motor gear dengan aci output sekunder untuk pengekod. Roda.
  • 1x roda percuma

Pemasangan kamera Pan dan kecondongan 1x (pilihan)

Elektronik

  • 1x Raspberry Pi Zero dengan header dan kamera
  • 1x kawalan servo PCA 9685
  • Roda dan litar pengekod optik 2x
  • 1x wayar pelompat wanita
  • Powerbank USB 1x
  • Pemacu motor dwi 1x DRV8833
  • 2x servo Mikro SG90 untuk panci dan kecondongan kamera (pilihan)
  • 1x MPU9250 IMU (pilihan)
  • Sensor jarak ultrasonik 1x HC-SR04 (pilihan)
  • 1x papan berlubang dan wayar pemateri, tajuk,…

Langkah 1: Bina Casis

Bina Casis
Bina Casis
Bina Casis
Bina Casis
Bina Casis
Bina Casis

Saya bukan pereka mekanik yang baik. Matlamat projek juga tidak menghabiskan terlalu banyak masa di casis. Bagaimanapun saya menentukan syarat berikut:

  • Bahan murah
  • Pemasangan dan pembongkaran yang pantas
  • Boleh dikembangkan (mis. Ruang untuk sensor tambahan)
  • Bahan ringan untuk menjimatkan tenaga untuk elektronik

Casis yang mudah dan murah boleh dibuat daripada papan lapis. Mudah untuk mesin dengan fretsaw dan gerudi tangan. Anda boleh merekatkan bahagian kayu kecil untuk membuat penahan untuk sensor dan motor.

Fikirkan penggantian komponen kecacatan atau penyahpepijatan elektrik. Bahagian-bahagian utama harus dipasang dengan skru agar dapat diganti. Pistol gam panas mungkin mudah, tetapi mungkin bukan kaedah terbaik untuk membina casis … Saya memerlukan banyak masa untuk memikirkan konsep mudah untuk membongkar bahagian dengan mudah. Percetakan 3D adalah alternatif yang baik, tetapi boleh menjadi agak mahal atau memakan masa.

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

Sifat roda (untuk pengiraan perisian)

Lingkaran: 21, 5 cm Nadi: 20 denyutan / rev. Penyelesaian: 1, 075 cm (akhirnya 1 denyut kira-kira 1 cm, yang mudah untuk pengiraan perisian)

Langkah 2: Elektronik dan Pendawaian

Elektronik dan Pendawaian
Elektronik dan Pendawaian
Elektronik dan Pendawaian
Elektronik dan Pendawaian
Elektronik dan Pendawaian
Elektronik dan Pendawaian

Projek ini menggunakan modul yang berbeza seperti yang ditunjukkan pada rajah.

Raspberry Pi Zero adalah pengawal utama. Ia membaca sensor dan mengawal motor dengan isyarat PWM. Ia disambungkan ke PC jauh melalui wifi.

DRV8833 adalah jambatan H bermotor dua. Ini memberikan arus yang cukup untuk motor (yang tidak dapat dilakukan oleh Raspberry Pi kerana output hanya dapat menghasilkan beberapa mA).

Pengekod optik memberikan isyarat berbentuk persegi setiap kali cahaya melalui roda pengekod. Kami akan menggunakan gangguan HW dari Raspberry Pi untuk mendapatkan maklumat setiap kali isyarat beralih.

Pca9695 adalah papan kawalan servo. Ia berkomunikasi dengan bas bersiri I2C. Papan ini memberikan isyarat PWM dan voltan bekalan yang mengawal servo untuk pan dan kecondongan cam.

MPU9265 adalah pecutan 3 paksi, kelajuan putaran sudut 3-paksi, dan sensor fluks magnet 3-paksi. Kami akan menggunakannya terutamanya untuk mendapatkan arah kompas.

Modul yang berbeza semuanya disatukan bersama dengan jumper wire. Papan roti berfungsi sebagai penghantar dan menyediakan voltan bekalan (5V dan 3.3V) dan tanah. Sambungan semuanya dijelaskan dalam jadual sambungan (lihat lampiran). Menyambungkan 5V ke input 3.3V mungkin akan merosakkan cip anda. Berhati-hati dan periksa semua pendawaian anda dua kali sebelum membekalkan (di sini khasnya pengekod harus dipertimbangkan). Anda harus mengukur voltan bekalan utama pada papan penghantaran dengan multimeter sebelum menyambungkan semua papan. Modul dipasang dengan skru nilon ke dalam casis. Di sini juga saya gembira dapat memperbaikinya tetapi juga boleh ditanggalkan sekiranya berlaku kerosakan.

Satu-satunya pematerian akhirnya adalah motor dan papan roti dan header. Sejujurnya, saya suka wayar pelompat tetapi ia boleh menyebabkan sambungan terputus. Dalam beberapa situasi, beberapa pemantauan perisian mungkin menyokong anda dalam menganalisis sambungan.

Langkah 3: Infrastruktur Perisian

Prasarana Perisian
Prasarana Perisian
Prasarana Perisian
Prasarana Perisian

Setelah mencapai mekanik, kami akan menyediakan beberapa infrastruktur perisian untuk mempunyai keadaan pembangunan yang selesa.

Git

Ini adalah sistem kawalan versi sumber terbuka dan bebas. Ini digunakan untuk menguruskan projek besar seperti Linux, tetapi juga dapat digunakan dengan mudah untuk projek kecil (lihat Github dan Bitbucket).

Perubahan projek dapat dilacak secara tempatan dan juga didorong ke pelayan jauh untuk berkongsi perisian dengan masyarakat.

Perintah utama yang digunakan adalah:

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

master asal git pull [dapatkan yang terbaru dari repositori jauh]

status git [dapatkan status repositori tempatan. Adakah terdapat fail yang berubah?] Git log [dapatkan senarai komit] git add. [tambahkan semua fail yang diubah ke tahap untuk dipertimbangkan untuk komit berikutnya] git komit -m "komen untuk komit" [lakukan perubahan ke repositori tempatan] git push origin master [tolak semua komit ke repositori jauh]

Pembalakan

Python menyediakan beberapa fungsi pembalakan terbina dalam. Struktur perisian harus menentukan sudah semua kerangka pembalakan sebelum memulakan pengembangan lebih lanjut.

Logger boleh dikonfigurasi untuk log dengan format yang ditentukan di terminal atau dalam fail log. Dalam contoh kami, logger dikonfigurasi oleh kelas pelayan web tetapi kami juga boleh melakukannya sendiri. Di sini kita hanya menetapkan tahap pembalakan ke DEBUG:

logger = logging.getLogger (_ nama_)

logger.setLevel (pembalakan. DEBUG)

Pengukuran dan plot

Untuk menganalisis isyarat dari masa ke masa, yang terbaik adalah memetakannya dalam carta. Oleh kerana Raspberry Pi hanya mempunyai terminal konsol, kami akan mengesan data dalam fail csv yang dipisahkan dengan titik koma dan memplotnya dari PC jarak jauh.

Fail jejak titik koma dipisahkan dihasilkan oleh kod python utama kami dan mesti mempunyai tajuk seperti ini:

cap waktu; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw; cycleT

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;

Lajur pertama mengandungi cap waktu. Lajur berikut adalah percuma. Skrip plot dipanggil dengan senarai lajur yang akan diplot:

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

Skrip plot boleh didapati di folder alat:

Plotter menggunakan mathplotlib di Python. Anda mesti menyalinnya ke dalam PC anda.

Untuk lebih selesa, skrip python dipanggil oleh skrip bash (plot.sh) yang digunakan untuk menyalin fail jejak Raspberry Pi ke PC jauh dan memanggil plotter dengan pemilihan isyarat. Skrip bash "plot.sh" bertanya sekiranya fail mesti disalin. Ini lebih senang bagi saya daripada menyalin secara manual setiap kali. "sshpass" digunakan untuk menyalin file dari Raspberry Pi ke PC jauh melalui scp. Ia dapat menyalin fail tanpa meminta kata laluan (diteruskan sebagai parameter).

Akhirnya tetingkap dibuka dengan plot seperti yang ditunjukkan dalam gambar.

Komunikasi jarak jauh

Antara muka pengembangan untuk Raspberry Pi adalah SSH. Fail boleh diedit secara langsung pada sasaran, atau disalin oleh scp.

Untuk mengawal robot, pelayan web sedang berjalan di Pi, memberikan kawalan melalui Websockets. Antara muka ini dijelaskan pada langkah seterusnya.

Sediakan Pi Raspberry

Terdapat fail yang menjelaskan penyediaan Raspberry Pi di folder "doc" dari kod sumber (setup_rpi.txt). Tidak banyak penjelasan tetapi banyak perintah dan pautan yang berguna.

Langkah 4: Antara Muka Pengguna

Antara Muka Pengguna
Antara Muka Pengguna

Kami menggunakan pelayan web Tornado ringan untuk menjadi tuan rumah antara muka pengguna. Ia adalah modul Python yang kami panggil semasa kami memulakan perisian kawalan robot.

Senibina perisian

Antara muka pengguna dibina dengan fail berikut: gui.html [Menjelaskan kawalan dan susun atur halaman web] gui.js [Mengandungi kod javascript untuk mengendalikan kawalan dan membuka sambungan soket web ke robot kami] gui.css [Mengandungi gaya kawalan html. Kedudukan kawalan ditentukan di sini]

Komunikasi soket web

Antara muka pengguna bukanlah yang paling keren, tetapi menjalankan tugas. Saya memberi tumpuan di sini pada teknologi yang baru bagi saya seperti Websockets.

Laman web berkomunikasi dengan pelayan web robot oleh Websockets. Ini adalah saluran komunikasi dua arah yang akan tetap terbuka ketika hubungan dimulakan. Kami menghantar arahan robot melalui Websocket ke Raspberry Pi dan mendapatkan kembali maklumat (kelajuan, kedudukan, aliran kamera) untuk dipamerkan.

Susun atur antara muka

Antara muka pengguna mempunyai input manual untuk perintah. Ini digunakan pada awal untuk mengirim perintah ke robot. Kotak centang menghidupkan dan mematikan aliran kamera. Kedua-dua slaid mengawal pan kamera dan kecondongan. Bahagian kanan atas antara muka pengguna mengawal pergerakan robot. Anda dapat mengawal kelajuan dan jarak sasaran. Maklumat asas telemetri ditunjukkan dalam lukisan robot.

Langkah 5: Memprogram Platform Robot

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

Bahagian ini adalah tujuan utama projek ini. Saya membuat banyak perisian semasa saya memperkenalkan casis baru dengan motor DC. Saya menggunakan Python sebagai bahasa pengaturcaraan untuk alasan yang berbeza:

  • Ia adalah bahasa utama Raspberry Pi
  • Ini adalah bahasa tahap tinggi dengan banyak ciri dan peluasan yang dibina
  • Ia berorientasikan objek tetapi juga dapat digunakan untuk pengaturcaraan berurutan
  • Tidak perlu penyusunan atau rantai alat. Edit kod dan jalankan.

Senibina perisian utama

Perisian ini berorientasikan objek, dibahagikan kepada beberapa objek. Idea saya adalah untuk membahagikan kod dalam 3 blok berfungsi:

Sense Think Aktifkan

Sense.py

Pemerolehan dan pemprosesan sensor utama. Data disimpan dalam kamus untuk digunakan pada tahap berikut.

Kawal.py

Subkelas pengaktifan mengawal motor dan servo setelah beberapa abstraksi. Objek kawalan utama mengendalikan arahan tahap tinggi dan juga algoritma kawalan (PID) untuk motor.

rpibot.py

Objek utama ini adalah mengurus pelayan web Tornado dan mewujudkan kelas akal dan kawalan dalam utas yang berasingan.

Setiap modul boleh dijalankan sendiri atau sebagai sebahagian daripada keseluruhan projek. Anda hanya dapat merasakan dan mencetak maklumat sensor untuk memeriksa bahawa sensor disambungkan dengan betul dan menyampaikan maklumat yang betul.

Kawalan PID

Tugas pertama adalah untuk mengetahui apa yang ingin kita kendalikan. Saya bermula dengan cuba mengawal kedudukan, yang sangat kompleks dan tidak banyak membantu.

Akhirnya, kami ingin mengawal setiap kelajuan roda dan juga arah robot. Untuk melakukan itu, kita harus merangkumi dua logik kawalan.

Untuk meningkatkan kerumitan langkah demi langkah, robot harus dikendalikan:

gelung terbuka (dengan daya tetap)

pwm = K

kemudian tambahkan algoritma gelung tutup

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

dan akhirnya menambahkan kawalan arah sebagai langkah terakhir.

Untuk kawalan kelajuan saya menggunakan kawalan "PI" dan "P" hanya untuk menguap. Saya menetapkan parameter secara manual dengan bereksperimen. Mungkin parameter yang lebih baik boleh digunakan di sini. Sasaran saya hanyalah garis lurus dan saya hampir berjaya. Saya membuat antara muka dalam perisian untuk menulis beberapa pemboleh ubah oleh antara muka pengguna. Menetapkan parameter Kp ke 1.0 perlu mengikuti perintah di antara muka pengguna:

SET; Kp; 1.0

Saya dapat menetapkan parameter P cukup rendah untuk mengelakkan overhot. Kesalahan yang tersisa diperbaiki oleh parameter I (ralat bersepadu)

Sukar bagi saya untuk mengetahui bagaimana merangkumi kedua-dua kawalan tersebut. Penyelesaiannya mudah, tetapi saya telah mencuba banyak cara lain sebelumnya … Jadi akhirnya, saya menukar sasaran kelajuan roda untuk berpusing ke arah satu atau yang lain. Mengubah output kawalan kelajuan secara langsung adalah kesalahan kerana kawalan kelajuan sedang berusaha untuk menghilangkan gangguan ini.

Gambar rajah kawalan terpakai dilampirkan. Ia hanya menunjukkan bahagian kiri kawalan robot.

Langkah 6: Penentukuran Sensor

Penentukuran Sensor
Penentukuran Sensor
Penentukuran Sensor
Penentukuran Sensor
Penentukuran Sensor
Penentukuran Sensor

Perkara pertama yang perlu dipertimbangkan adalah bahawa keseluruhan IMU harus berfungsi dengan baik. Saya memesan 3 bahagian dan menghantarnya kembali sehingga saya mempunyai sensor berfungsi sepenuhnya. Setiap sensor sebelumnya mempunyai beberapa bahagian sensor yang tidak berfungsi dengan betul atau tidak sama sekali. Saya menggunakan beberapa skrip contoh untuk menguji asasnya sebelum memasangnya di robot.

Isyarat sensor IMU perlu dikalibrasi sebelum menggunakannya. Beberapa isyarat sensor bergantung pada sudut dan kedudukan pemasangan.

Kalibrasi kelajuan dan pecutan

Penentukuran termudah adalah untuk pecutan membujur (A_x). Berhenti mesti ada sekitar 0 m / s². Sekiranya anda memutar sensor dengan betul, anda boleh mengukur graviti (sekitar 9, 8 m / s²). Untuk mengkalibrasi a_x, anda hanya perlu memasangnya dengan betul dan kemudian menentukan offset untuk mendapatkan 0 m / s² terhenti. Sekarang A_x dikalibrasi. Anda boleh mendapatkan offset untuk kelajuan putaran dengan cara yang sama berhenti.

Penentukuran magnetometer untuk kompas

Penentukuran yang lebih kompleks diperlukan untuk sensor medan magnet. Kami akan menggunakan m_x dan m_y untuk mendapatkan medan magnet pada tahap mendatar. Memiliki m_x dan m_y akan memberi kita peluang untuk mengira tajuk kompas.

Untuk tujuan sederhana kami hanya akan menentukur penyimpangan besi keras. Ini mesti dilakukan kerana sensor berada di kedudukan terakhir kerana bergantung pada gangguan medan magnet.

Kami merakam m_x dan m_y semasa kami memutar robot di sekitar paksi-z. Kami memplot m_x vs m_y dalam carta XY. Hasilnya terdapat elips seperti yang ditunjukkan dalam gambar. Elipsis harus berpusat pada asal. Di sini kita mempertimbangkan nilai maksimum dan minimum m_x dan m_y untuk mendapatkan ofset pada kedua arah. Akhirnya kami memeriksa penentukuran dan melihat bahawa elips kini berpusat.

Penentukuran besi lembut bermaksud bahawa kita mengubah gambar dari elipsis menjadi bulatan. Ini dapat dibuat dengan menambahkan faktor pada setiap nilai senor.

Rutin ujian kini boleh dikodkan untuk menentukur semula atau sekurang-kurangnya untuk memeriksa bahawa sensor masih dikalibrasi.

Tajuk kompas

Data magnetometer kini akan digunakan untuk mengira tajuk kompas. Untuk ini, kita harus menukar isyarat m_x dan m_y menjadi sudut. Python secara langsung menyediakan fungsi math.atan2 yang mempunyai tujuan ini. Pengiraan lengkap ditentukan dalam fail mpu9250_i2c.py ("calcHeading (mx, my, mz)").

Langkah 7: Reka Bentuk Alternatif

Reka Bentuk Altern-t.webp
Reka Bentuk Altern-t.webp
Reka Bentuk Altern-t.webp
Reka Bentuk Altern-t.webp
Reka Bentuk Altern-t.webp
Reka Bentuk Altern-t.webp

Projek ini memerlukan banyak masa kerana reka bentuknya terbuka sepenuhnya. Untuk setiap komponen saya membuat beberapa pelaksanaan prototaip dan mengalami had sistem.

Topik yang paling rumit adalah pengekod roda. Saya menguji 3 pilihan yang berbeza sebelum menemui pengekod optik yang sedang digunakan. Saya berpendapat bahawa penyelesaian yang digugurkan juga sangat menarik dalam projek seperti itu. Ia berkaitan dengan bahagian-bahagian yang paling saya pelajari.

Servo putaran berterusan disambungkan ke pca 9695

Untuk mengelakkan jambatan H tambahan untuk motor DC, saya mula-mula menggunakan servo putaran berterusan. Ini didorong oleh pemacu servo pca 9695 yang sudah ada. Semua mekanik penggerak dan elektronik koresponden jauh lebih mudah. Reka bentuk ini mempunyai dua kelemahan:

  • Julat kawalan servo yang lemah.
  • Lokasi penahan pengekod yang hilang

Servo mula bergerak dengan 50% pwm dan mempunyai kelajuan penuh sekitar 55%. Ini adalah julat kawalan yang sangat buruk.

Tanpa pegangan pengekod, sangat sukar untuk mencari pengekod yang siap digunakan. Saya menguji 3 pengekod pantulan berbeza yang dipasang di casis. Saya mengetuk roda pengekod buatan sendiri di bahagian luar roda dengan bahagian hitam dan putih. Saya menggunakan sensor QTR-1RC yang memerlukan banyak pemprosesan isyarat untuk mendapatkan isyarat yang betul. Raspberry Pi tidak dapat melakukan pemprosesan masa nyata seperti itu. Oleh itu, saya memutuskan untuk menambahkan NodeMCU D1 mini sebagai pengawal masa nyata pada robot. Ia dihubungkan ke raspberry Pi oleh UART bersiri untuk menyampaikan data sensor yang diproses. NodeMCU juga menguruskan sensor HC-SR04. Mekaniknya sukar dan tidak terlalu kuat, garis siri mendapat bunyi dari garisan I2C dan motor, jadi akhirnya saya membina casis versi kedua dengan motor DC gear sederhana yang dipacu oleh jambatan H. Motor ini mempunyai poros keluaran sekunder untuk meletakkan pengekod optik.

Langkah 8: Pemprosesan Imej

Pemprosesan imej
Pemprosesan imej
Pemprosesan imej
Pemprosesan imej
Pemprosesan imej
Pemprosesan imej
Pemprosesan imej
Pemprosesan imej

Untuk meningkatkan pemanduan autonomi, kita dapat membuat beberapa pemprosesan gambar.

Perpustakaan opencv adalah rujukan untuk itu. Ia dapat digunakan oleh Python untuk melaksanakan pengesanan halangan dengan cepat.

Kami menangkap gambar dan menerapkan beberapa tugas memproses gambar:

Ujian pertama dibuat dengan transformasi Canny dan Sobel. Canny boleh menjadi calon yang baik tetapi tidak cukup masuk akal. Sobel terlalu masuk akal (terlalu banyak objek dikesan).

Akhirnya saya membuat penapis saya sendiri untuk mencampurkan semua kecerunan mendatar dan menegak (mengesan perabot):

  • Ubah gambar warna menjadi gambar tahap kelabu
  • Kaburkan gambar untuk menghilangkan bunyi kecil
  • Ambang gambar ke gambar hitam putih
  • Sekarang kita mengesan kecerunan mendatar dan menegak untuk mengesan objek sebagai dinding dan perabot
  • Kami menapis hanya kontur yang besar (lihat kontur berwarna dalam gambar)

Sekarang kita dapat menggunakan maklumat baru ini untuk mengesan rintangan…

Langkah 9: Langkah seterusnya …

Langkah seterusnya…
Langkah seterusnya…
Langkah seterusnya…
Langkah seterusnya…

Kini, kami mempunyai platform robot sederhana dengan sensor, penggerak dan kamera. Tujuan saya adalah untuk bergerak secara autonomi dan kembali ke stesen tanpa menambah sensor lagi. Untuk ini, saya memerlukan langkah berikut:

  • Sensor pelekapan isyarat arah yaw dan magnet
  • Pemprosesan gambar kamera (hanya CPU rendah yang tersedia untuk itu)
  • Pengesanan perlanggaran (jarak ultrasonik dan kamera)
  • Bangunan peta atau orientasi

Sekarang pergi dan buat cabaran atau sasaran anda sendiri …

Disyorkan: