Daftar Isi:

Kendaraan Otonom: 7 Langkah (dengan Gambar)
Kendaraan Otonom: 7 Langkah (dengan Gambar)

Video: Kendaraan Otonom: 7 Langkah (dengan Gambar)

Video: Kendaraan Otonom: 7 Langkah (dengan Gambar)
Video: Apa itu Teknologi Autonomous Car? Inilah Inovasi Mobil Masa Dengan Fitur dan Kecanggihannya 2024, November
Anonim
Kendaraan Otonom
Kendaraan Otonom
Kendaraan Otonom
Kendaraan Otonom

Proyek ini adalah robot navigasi otonom yang mencoba mencapai posisi tujuannya sambil menghindari rintangan di jalan. Robot akan dilengkapi dengan sensor LiDAR yang akan digunakan untuk mendeteksi objek di sekitarnya. Saat objek terdeteksi dan robot bergerak, peta waktu nyata akan diperbarui. Peta tersebut akan digunakan untuk menyimpan lokasi-lokasi hambatan yang telah diidentifikasi. Dengan cara ini, robot tidak akan mencoba kembali jalur yang gagal ke posisi tujuan. Ini malah akan mencoba jalur yang tidak memiliki hambatan atau jalur yang belum diperiksa untuk hambatan.

Robot akan bergerak dengan dua roda penggerak motor DC dan dua roda kastor. Motor akan dilampirkan ke bagian bawah platform melingkar. Motor akan dikendalikan oleh dua pengemudi motor. Driver motor akan menerima perintah PWM dari Prosesor Zynq. Encoder pada setiap motor semuanya digunakan untuk melacak posisi dan orientasi kendaraan. Seluruh sistem akan didukung baterai LiPo.

Langkah 1: Merakit Kendaraan

Merakit Kendaraan
Merakit Kendaraan
Merakit Kendaraan
Merakit Kendaraan
Merakit Kendaraan
Merakit Kendaraan
Merakit Kendaraan
Merakit Kendaraan

Robot ini ditenagai oleh dua motor yang terpasang pada roda samping dan kemudian ditopang oleh dua roda kastor, satu di depan dan satu di belakang. Platform dan dudukan motor terbuat dari lembaran logam Aluminium. Hub motor dibeli untuk memasang roda ke motor. Namun, coupler perantara khusus perlu dibuat karena pola lubang hub berbeda dari pola lubang roda.

Motor yang dipilih adalah motor Port Escap 12V DC dengan encoder bawaan. Motor ini dapat dibeli di ebay dengan harga yang sangat wajar (lihat Bill of Materials). Cari kata kunci “12V Escap 16 Motor DC Coreless Geared dengan Encoder” di ebay untuk menemukan motornya. Biasanya ada cukup banyak penjual untuk dipilih. Spesifikasi dan pinout motor ditunjukkan pada diagram di bawah ini.

Perakitan robot dimulai dengan desain model CAD dari sasis. Model di bawah ini menunjukkan tampilan atas profil bentuk 2D yang dirancang untuk sasis.

Disarankan agar sasis dirancang sebagai profil 2D sehingga dapat dengan mudah diproduksi. Kami memotong lembaran Aluminium 12”X12” menjadi bentuk sasis dengan menggunakan pemotong water-jet. Platform sasis juga dapat dipotong dengan gergaji pita.

Langkah 2: Memasang Motor

Pemasangan Motor
Pemasangan Motor
Pemasangan Motor
Pemasangan Motor

Langkah selanjutnya adalah membuat tunggangan motor. Disarankan agar dudukan motor terbuat dari Aluminium Lembaran Logam 90 derajat. Dengan menggunakan bagian ini, motor dapat dipasang kantilever pada satu permukaan lembaran logam menggunakan keduanya

M2 lubang motor dan wajah lainnya dapat dibaut ke platform. Lubang harus dibor ke dudukan motor sehingga sekrup dapat digunakan untuk mengencangkan motor ke dudukan motor dan dudukan motor ke platform. Dudukan motor dapat dilihat pada gambar di atas.

Selanjutnya Pololu Motor Hub (lihat Bill of Materials) ditempatkan pada poros motor dan dikencangkan dengan sekrup set yang disediakan dan kunci pas Allen. Pola lubang hub motor Pololu tidak cocok dengan pola lubang roda VEX sehingga coupler perantara khusus harus dibuat. Disarankan agar aluminium lembaran logam bekas yang digunakan untuk membuat platform sasis digunakan untuk membuat coupler. Pola lubang dan dimensi pasangan ini ditunjukkan pada gambar di bawah ini. Diameter dan bentuk luar (tidak perlu lingkaran) dari coupler aluminium khusus tidak masalah selama semua lubang pas pada bagian tersebut.

Langkah 3: Membuat Desain Blok Vivado

Membuat Desain Blok Vivado
Membuat Desain Blok Vivado
Membuat Desain Blok Vivado
Membuat Desain Blok Vivado

- Mulailah dengan membuat proyek Vivado baru dan pilih Zybo Zynq 7000 Z010 sebagai perangkat target.

- Selanjutnya klik buat desain blok baru, dan tambahkan IP Zynq. Klik dua kali pada IP Zynq dan impor pengaturan XPS yang disediakan untuk Zynq. Kemudian aktifkan UART0 dengan MIO 10..11 di bawah tab konfigurasi MIO, dan pastikan juga bahwa Timer 0 dan Timer Watchdog diaktifkan.

- Tambahkan dua AXI GPIOS ke desain blok. Untuk GPIO 0 aktifkan saluran ganda dan atur keduanya ke semua output. Atur lebar GPIO untuk saluran 1 hingga 4 bit dan untuk saluran 2 hingga 12 bit, saluran ini akan digunakan untuk mengatur arah motor dan mengirimkan jumlah tick yang diukur oleh encoder ke prosesor. Untuk GPIO 1 atur hanya satu saluran ke semua input dengan lebar saluran 4 bit. Ini akan digunakan untuk menerima data dari encoder. Jadikan semua port GPIO menjadi eksternal.

- Selanjutnya Tambahkan dua Timer AXI. Jadikan port pwm0 pada kedua timer eksternal. Ini akan menjadi pwms yang mengontrol kecepatan putaran motor.

- Terakhir Jalankan otomatisasi blok dan otomatisasi koneksi. Verifikasi bahwa desain blok yang Anda miliki cocok dengan yang disediakan.

Langkah 4: Berkomunikasi dengan LiDAR

LiDAR ini menggunakan protokol SCIP 2.0 untuk berkomunikasi melalui UART, file terlampir menjelaskan keseluruhan protokol.

Untuk berkomunikasi dengan LiDAR kita akan menggunakan UART0. LiDAR mengembalikan 682 titik data yang masing-masing mewakili jarak ke objek pada sudut tersebut. LiDAR memindai berlawanan arah jarum jam dari -30 derajat hingga 210 derajat dengan langkah 0,351 derajat.

- Semua komunikasi ke LiDAR dilakukan dengan karakter ASCI, mengacu pada protokol SCIP untuk format yang digunakan. Kita mulai dengan mengirimkan perintah QT untuk menyalakan LiDAR. Kami kemudian mengirim perintah GS beberapa kali meminta 18 titik data sekaligus ke ft di UARTS 64 byte FIFO. Data yang dikembalikan dari LiDAR kemudian diurai dan disimpan ke dalam array global SCANdata.

- Setiap titik data yang disimpan adalah 2 byte data yang dikodekan. Melewati data ini ke dalam dekoder akan mengembalikan jarak dalam milimeter.

Dalam file main_av.c Anda akan menemukan fungsi-fungsi berikut untuk berkomunikasi dengan LiDAR

kirimLIDARcmd(perintah)

- Ini akan mengirim string input ke LiDAR melalui UART0

recvLIDARdata()

- Ini akan menerima data setelah perintah dikirim ke LiDAR dan menyimpan data di RECBbuffer

requestDataJarak()

- Fungsi ini akan mengirimkan serangkaian perintah untuk mengambil semua 682 titik data. Setelah setiap set 18 titik data diterima parseLIDARinput() dipanggil untuk mengurai data dan secara bertahap menyimpan titik data di SCANdata.

Langkah 5: Mengisi Grid Dengan Hambatan

Mengisi Grid Dengan Hambatan
Mengisi Grid Dengan Hambatan
Mengisi Grid Dengan Hambatan
Mengisi Grid Dengan Hambatan

GRID yang disimpan adalah array 2D dengan masing-masing nilai indeks mewakili lokasi. Data yang disimpan dalam setiap indeks adalah 0 atau 1, Tidak ada halangan dan halangan masing-masing. Jarak kuadrat dalam milimeter yang diwakili oleh setiap indeks dapat diubah dengan definisi GRID_SCALE dalam file vehicle.h. Ukuran larik 2D juga dapat divariasikan untuk memungkinkan kendaraan memindai area yang lebih luas dengan memodifikasi definisi GRID_SIZE.

Setelah satu set data jarak baru dipindai dari LiDAR, updateGrid() dipanggil. Ini akan mengulangi setiap titik data yang disimpan dalam array SCANdata untuk menentukan indeks mana dalam grid yang memiliki hambatan. Dengan menggunakan orientasi kendaraan saat ini, kita dapat menentukan sudut yang sesuai dengan setiap titik data. Untuk menentukan di mana hambatan berada, Anda cukup mengalikan jarak yang sesuai dengan cos/sin sudut. Menambahkan dua nilai ini ke posisi x dan y kendaraan saat ini akan mengembalikan indeks di kisi rintangan. Membagi jarak yang dikembalikan oleh operasi ini dengan GRID_SCALE akan memungkinkan kita untuk memvariasikan seberapa besar jarak kuadrat dari setiap indeks.

Gambar di atas menunjukkan lingkungan kendaraan saat ini dan Grid yang dihasilkan.

Langkah 6: Berkomunikasi Dengan Motor

Untuk berkomunikasi dengan motor kita mulai dengan menginisialisasi GPIO untuk mengontrol arah putaran motor. Kemudian menulis langsung ke alamat dasar PWM di Timer AXI memungkinkan kita untuk mengatur hal-hal seperti periode dan siklus Tugas yang secara langsung mengontrol kecepatan motor berputar pada.

Langkah 7: Perencanaan Jalur

Untuk diimplementasikan dalam waktu dekat.

Menggunakan fungsi grid dan motor yang dijelaskan sebelumnya, sangat mudah untuk mengimplementasikan algoritma seperti A*. Saat kendaraan bergerak, kendaraan akan terus memindai area sekitarnya dan menentukan apakah jalur yang dilaluinya masih valid

Direkomendasikan: