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

AI Pengemudi Otomatis untuk Pengumpul Sampah Mobil Keledai

Gunakan SSD TensorFlow MobileNetV2 DNN pada Raspberry Pi plus Pi Camera untuk membuat mobil otonom yang mampu mendeteksi objek.

Cerita

Proyek ini akan menunjukkan cara mengubah mobil RC bertenaga (Raspberry Pi + Pi Camera ) menjadi mobil yang mampu mendeteksi objek dan mengemudi secara otonom. Untuk melakukan ini, kami akan menggunakan dua jaringan saraf dalam. Satu untuk deteksi objek dan yang lainnya untuk mengemudi otonom menggunakan inferensi untuk kemudi dan throttle. Sebuah RPi 3 berfungsi sebagai komputer kendaraan. Karena sumber daya yang terbatas pada RPi, hanya satu jaringan yang dapat berjalan pada satu waktu.

Idenya adalah melatih jaringan saraf untuk mengidentifikasi tempat sampah sehingga mobil dapat mengambilnya secara mandiri.


mengidentifikasi mobil dan laptop

Proyek ini terdiri dari dua bagian. Pada bagian pertama rencananya adalah menggunakan jaringan konvolusi ukuran sedang untuk mengenali objek dalam umpan video input dari Pi Camera. TensorFlow akan digunakan untuk men-deploy model CNN dan OpenCV akan digunakan untuk mengelola feed video dari Pi Camera.

Di bagian kedua kita akan menggunakan kloning perilaku untuk membuat mobil bernavigasi secara mandiri. Mobil yang dimodifikasi juga akan ditambah dengan sensor tambahan seperti sensor jarak ultrasonik, GPS dan 6-DOF IMU serta mengimplementasikan fitur telemetri tambahan.

Pendahuluan

Kembali pada tahun 2017 (setahun yang lalu), Google merilis MobileNet, dan awal tahun ini MobileNetV2. Jaringan ini dioptimalkan khusus untuk bekerja pada perangkat yang disematkan seperti ponsel cerdas. Kebetulan MPU yang digunakan pada RPi 3 termasuk dalam kategori ini karena dapat menjalankan Linux atau Android.

Masalah pertama yang dihadapi adalah terbatasnya RAM dan kapasitas komputasi Raspberry Pi 3. Meskipun ini adalah MPU quad core, itu masih belum cukup untuk menangani file berbobot besar yang dibutuhkan oleh YOLO (You Only Lihat Sekali) ketik jaringan.

Solusi pertama yang terlintas dalam pikiran adalah mengirim gambar yang diperoleh melalui Kamera Pi melalui WIFI ke PC eksternal dan melakukan tahap inferensi objek di sana dan kemudian mengirim perintah ke Mobil Keledai. Intinya kita harus menghubungi induk kapal di setiap langkah. Ini tidak efisien dan juga tidak praktis dalam skenario ketika komunikasi dengan laptop eksternal tidak memungkinkan.

Saya awalnya menguji jaringan VGG16 yang relatif akurat saat mendeteksi tempat sampah. Namun itu tidak dapat berjalan pada RPi karena bobotnya saja sekitar 350MB! Untuk menguji jaringan VGG, lihat kode terlampir di bagian akhir dengan gambar yang sama sebagai input.

Masalah:

python KerasVGG_test.py

Jadi untuk memecahkan masalah ukuran bobot yang besar, kita akan menjalankan semua model pada RPi menggunakan jaringan yang lebih ramping. Secara khusus kita akan menggunakan MobileNetV2 Single Shot Detector berbasis CNN. Ini adalah DNN yang telah dioptimalkan untuk memiliki bobot yang sangat kecil (relatif).

Teknik ini disebut pembelajaran transfer karena kami menggunakan bobot jaringan yang telah dilatih sebelumnya.

Sebelum mempelajari perangkat lunak, kami harus membuat beberapa modifikasi perangkat keras.

Perangkat Keras

Mobil Magnet digunakan untuk proyek Mobil Keledai. Magnet adalah mobil RC (remote control) yang beroperasi menggunakan radio multi-channel 2.4GHz. Untuk mengubah Magnet menjadi mobil Keledai ada beberapa langkah yang harus dilakukan.

1. Membongkar

Lepaskan penutup atas terlebih dahulu dengan melepas klip dan dua sekrup di bagian belakang. Anda akan menemukan kandang dengan dua driver. Lepaskan ini juga dan kemudian lepaskan sangkar atas luar. Sekarang Anda memiliki akses ke sirkuit di mobil. Dari atas sekali dapat melihat receiver, ESC (Electronic Speed ​​Controller) dan servo.

DonkeyCar

Receiver adalah receiver 4 saluran dengan sirkuit B/C (penghapusan baterai). Setiap saluran menggunakan konektor 3 kabel. Saluran CH3 dan CH4 tidak digunakan. ESC mengambil baterai sebagai input, saklar daya dan input dari saluran penerima 1. Servo terhubung ke saluran 0 penerima. Servo digunakan untuk kemudi. Sudut kemudi dapat dipangkas secara manual jika mengemudi melalui joystick atau harus dikalibrasi.

2. Pasang adaptor

Dua adaptor plastik cetak 3D digunakan, setelah melepas dua sekrup dan bagian atas bodi. Anda harus memasang kedua adaptor di tempat klip yang ada dengan menggunakan sekrup yang sama. Setelah mengganti dua klip dengan dua adaptor cetak 3D, sekarang kita dapat memasang pelat mobil Donkey kayu bagian atas.

Adaptor yang menggantikan klip panjang

Selanjutnya, kencangkan pegangan kamera pada pelat papan dasar. Kemudian letakkan bagian berulir plastik di setiap lubang. Ini digunakan untuk mengamankan Raspberry Pi dan pengontrol servo di tempatnya.

3. Pengontrol servo dan RPi

Pasang RPi dan pengontrol servo pada pelat kayu. Saya akhirnya menggunakan ikatan ritsleting untuk mengamankan RPi karena saya tidak ingin memasang sekrup logam di dekat antena. Setelah memasang pengontrol servo, sambungkan pin bus I2C dari RPi ke pengontrol servo. Selanjutnya, ambil pisau kecil dan potong pengikat yang menyatukan kabel ESC dan servo 3 pin.

Saat menghubungkan ke pengontrol servo eksternal, kedua koneksi ke penerima harus diputuskan dan dihubungkan ke saluran 0 dan 1 dari pengontrol servo yang nantinya akan kita pasang di atas DonkeyCar- piring.

4. Piring kayu

Pasang pelat kayu pada adaptor. Sekarang gunakan klip untuk memasang pelat DonkeyCar ke adaptor Sasis Magnet.

Pasang pelat mobil Donkey di atas dan gunakan kabel USB pendek untuk menghubungkan baterai USB ke RPi. Kabel throttle dan kemudi akan menonjol dari lubang di pelat dan terhubung ke saluran 0 dan 1 dari pengontrol servo yang dipasang di pelat mobil Donkey.

5. Sensor tambahan

Masalah utama dengan konfigurasi standar adalah tidak ada sensor yang digunakan untuk mengukur kecepatan atau jarak ke rintangan. Saya menambahkan 6DOF MPU6050 IMU yang memungkinkan RPi untuk mengukur akselerasi dan belokan 3D, Selanjutnya saya menambahkan GPS ke port serial dan juga sensor HCSR04 untuk pengukuran jarak. Namun HCSR04 bekerja melalui 5V dan membutuhkan pengatur level.

Ini menyelesaikan tahap perangkat keras unit. Mobil Keledai telah diubah sepenuhnya menjadi kendaraan roda 4 yang dilengkapi dengan :

a) Kamera sudut lebar bermata

b) Pengontrol servo.

c) Sensor IMU 6-DOF

d) GPS

e) Sensor jarak

Semua sensor tambahan akan diberi stempel waktu setelah akuisisi dan digunakan untuk menambah vektor pelatihan untuk jaringan saraf dalam.

Untuk mendukung sensor tambahan, seseorang harus memodifikasi skrip manage.py untuk menambahkan fungsi ini.

Untuk menggunakan IMU, saya awalnya mencoba Pustaka Python untuk FXOS8700 di Debian Stretch. Ini tidak berhasil karena bug awal yang berulang dari RPi, jadi saya akhirnya menggunakan MPU6050 yang juga dilengkapi dengan giroskop.

Untuk menguji kode IMU gunakan cuplikan berikut di bawah ini:

dari IMU import MPU6050
mu =MPU6050()
a =imu.run()
a #print answer

Perangkat lunak berikut harus dari dalam virtualenv untuk MPU6050:

sudo apt install python3-smbus
pip install mpu6050-raspberrypi

File meta.json di bawah folder bak harus ditambah untuk mendukung pencatatan data IMU.

{“input”:[“cam/image_array”, “user/angle”, “user/throttle”, “user/mode”, “imu/acl_x”, “imu/acl_y”, “imu/acl_z”, “imu /gyr_x”, “imu/gyr_y”, “imu/gyr_z”], “types”:[“image_array”, “float”, “float”, “str”, “float”, “float”, “float”, “mengambang”, “mengambang”, “mengambang”]}

File manage.py juga harus diubah seperti di bawah ini:

imu =Mpu6050()
V.add(imu, outputs=['imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/gyr_x', 'imu/gyr_y', 'imu /gyr_z'], threaded=True)
# tambahkan bak untuk menyimpan data
inputs =['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'imu/acl_x', 'imu/acl_y', 'imu/acl_z','imu/gyr_x', 'imu/gyr_y', 'imu/gyr_z']
types =['image_array', 'float' , 'float', 'str', 'float', 'float', 'float', 'float', 'float', 'float']

Akhirnya saya juga menambahkan modul GPS ke unit. Meskipun ini tidak dapat digunakan di dalam ruangan, hal ini berguna untuk menambahkan pengujian di luar ruangan di area di mana Anda dapat terhubung ke jaringan WIFI.

Jika seseorang perlu masuk ke data GPS, modifikasi yang sama dengan IMU harus diterapkan.

Untuk menggunakan sensor jarak HSCR04 sekali, Anda harus menginstal library RPI.GPIO dari lingkungan python.

pip install RPi.GPIO


Ini meringkas semua modifikasi perangkat keras. Pada akhirnya Anda akan mendapatkan DonkeyCar yang terlihat seperti ini:


Perangkat Lunak

Idenya di sini adalah untuk mengimplementasikan saluran AI untuk deteksi objek yang berjalan di RPi. Langkah pertama adalah menyebarkan DNN deteksi objek yang akan bekerja pada RPi 3 tanpa ketergantungan pada perangkat eksternal. Mari kita mulai dengan menginstal perangkat lunak yang dibutuhkan.

1. Instal lib DNN

Proyek ini menggunakan TensorFlow dan OpenCV. Secara sederhana untuk melakukan inferensi pada Raspberry Pi kami menggunakan jaringan yang sudah terlatih. Setelah bobot dimuat, deteksi objek dan inferensi dilakukan untuk setiap bingkai kamera.

pip install tensorflow[pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
Sudo apt-get install libxvidcore-dev libx264-devsudo apt-get install qt4-dev-tools
pip3 install opencv-python

Satu hal yang perlu diperhatikan adalah bahwa TensorFlow menggunakan format file yang berbeda tidak seperti Keras yang memiliki alur kerja yang relatif sederhana untuk memuat bobot sebagai file h5.

sudo pip3 install keras –upgrade

Klon repositori model TensorFlow resmi.

git clone –recurse-submodules https://github.com/tensorflow/models.git

dan ekspor jalurnya:

ekspor PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

Akhirnya ketika semuanya diinstal dan sebelum Anda memulai ulang masalah

nonaktifkan #untuk keluar dari ruang kerja virtual env jika Anda menggunakannya
sudo shutdown -h now

Langkah selanjutnya adalah menginstal compiler Protobuffer untuk bobot MobileNetV2 SSD.

2. Instal kompiler ProtoBuffer

Keras menggunakan format file yang berbeda dari TensorFlow. Jadi kita harus berurusan dengan Protobuffers yang merupakan format asli untuk TensorFlow.

Saya menginstal versi 3.5.1

sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all–3.5.1.tar.gz
tar -zxvf protobuf-all–3.5.1.tar.gzcd protobuf-3.5.1
./configure

Mengkompilasi ini akan memakan waktu cukup lama (~1,5 jam) pada RPi. Solusi lainnya adalah mengkompilasi silang tetapi kita harus membuatnya tetap sederhana untuk saat ini. Masalah:

buat

Kemudian terbitkan:

buat centang
sudo make install
cd pythonexport
LD_LIBRARY_PATH=../src/.libs

Akhirnya instal kompiler:

python3 setup.py build –cpp_implementation python3 setup.py test –cpp_implementationsudo python3 setup.py install –cpp_implementation

Sekarang ekspor jalurnya :

ekspor PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
ekspor PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3
sudo ldconfig

Akhirnya untuk menguji compiler cukup ketik:

protokol

Sekarang kita siap untuk bergemuruh. Ini akan memungkinkan kami mengonversi bobot menjadi format yang dipahami TensorFlow.

Baca Selengkapnya Detail:AI Mengemudi Otomatis untuk Pengumpul Sampah Mobil Keledai


Proses manufaktur

  1. Real-time Perencanaan Gerak Untuk Mobil Otonom dalam Berbagai Situasi, Di Bawah Simulasi Lingkungan Perkotaan
  2. Pelajaran mengemudi untuk pengoperasian dan pemeliharaan
  3. Mempersiapkan masa depan yang mandiri
  4. Apa yang dapat diberikan 5G untuk mobil yang terhubung?
  5. Keselamatan:Prioritas utama untuk mobil masa depan
  6. 7 Tips Penting untuk Pengoperasian Pengumpul Debu yang Aman
  7. Sistem Pelacakan Gerak 3D untuk Teknologi Otonom
  8. Port Pengisian Daya untuk Kawanan Drone Otonom
  9. Daimler dan BMW akan bekerja sama dalam mengemudi secara otonom
  10. Solusi Perintis Kontinental untuk Mengemudi Otonom