İçindekiler:

Otonom Araç: 7 Adım (Resimlerle)
Otonom Araç: 7 Adım (Resimlerle)

Video: Otonom Araç: 7 Adım (Resimlerle)

Video: Otonom Araç: 7 Adım (Resimlerle)
Video: Sürücüsüz Araçlara Ne Zaman Bineceğiz? Otonom Sürüş Nedir? 2024, Kasım
Anonim
Otonom Araç
Otonom Araç
Otonom Araç
Otonom Araç

Bu proje, yolundaki engellerden kaçınırken hedef konumuna ulaşmaya çalışan, otonom olarak seyreden bir robottur. Robot, çevresindeki nesneleri algılamak için kullanılacak bir LiDAR sensörü ile donatılacak. Nesneler algılandıkça ve robot hareket ettikçe, gerçek zamanlı bir harita güncellenecektir. Harita, belirlenen engellerin yerlerini kaydetmek için kullanılacaktır. Bu şekilde robot, hedef pozisyonuna giden başarısız bir yolu tekrar denemeyecektir. Bunun yerine, hiçbir engeli olmayan ya da henüz engel açısından kontrol edilmemiş yolları deneyecektir.

Robot, iki adet DC motor tahrikli tekerlek ve iki adet tekerlek tekerleği ile hareket edecektir. Motorlar dairesel bir platformun altına eklenecektir. Motorlar iki motor sürücüsü tarafından kontrol edilecektir. Motor sürücüleri, Zynq İşlemciden PWM komutları alacaktır. Her motordaki kodlayıcıların tümü, araçların konumunu ve yönünü takip etmek için kullanılır. Tüm sistem bir LiPo pil ile çalıştırılacaktır.

Adım 1: Aracın Montajı

Aracın Montajı
Aracın Montajı
Aracın Montajı
Aracın Montajı
Aracın Montajı
Aracın Montajı
Aracın Montajı
Aracın Montajı

Robot, yan tekerleklere bağlı iki motor tarafından çalıştırılır ve daha sonra ek olarak biri önde diğeri arkada olmak üzere iki tekerlek tarafından desteklenir. Platform ve motor bağlantıları alüminyum sacdan yapılmıştır. Tekerlekleri motora bağlamak için bir motor göbeği satın alındı. Ancak, göbeğin delik düzeni, tekerleğin delik düzeninden farklı olduğu için özel bir ara kuplör yapılması gerekiyordu.

Seçilen motor, yerleşik kodlayıcılara sahip bir Port Escap 12V DC motordu. Bu motor ebay'den çok makul bir fiyata satın alınabilir (bkz. Malzeme Listesi). Motoru bulmak için ebay'de "Enkoderli 12V Escap 16 Çekirdeksiz Dişli DC Motor" anahtar kelimelerini arayın. Genellikle aralarından seçim yapabileceğiniz çok sayıda satıcı vardır. Motorların özellikleri ve pin çıkışları aşağıdaki şemalarda gösterilmiştir.

Robotun montajı, şasinin CAD modeli tasarımıyla başladı. Aşağıdaki model, kasa için tasarlanmış 2D şekil profilinin üstten görünüşünü göstermektedir.

Kolay üretilebilmesi için şasenin 2D profil olarak tasarlanması önerilir. Su jeti kesici kullanarak 12”X12” Alüminyum levhayı kasa şeklinde kestik. Şasi platformu şerit testere ile de kesilebilir.

Adım 2: Motorların Montajı

Montaj Motorları
Montaj Motorları
Montaj Motorları
Montaj Motorları

Bir sonraki adım, motor bağlantılarını yapmaktır. Motor takozlarının 90 derecelik Sac Alüminyumdan yapılması önerilir. Bu parçayı kullanarak motor, iki uç kullanılarak sacın bir yüzüne konsol takılabilir.

Motorun M2 delikleri ve diğer yüzü platforma cıvatalanabilir. Motoru motor montajına ve motor montajını platforma sabitlemek için vidaların kullanılabilmesi için motor montajına delikler açılmalıdır. Motor montajı yukarıdaki şekilde görülebilir.

Daha sonra Pololu Motor Göbeği (bkz. Malzeme Listesi) motor miline yerleştirilir ve verilen ayar vidası ve Alyen anahtarı ile sıkılır. Pololu motor göbeğinin delik düzeni, VEX tekerleğinin delik düzeniyle eşleşmiyor, bu nedenle özel bir ara kuplör yapılmalıdır. Şasi platformunu yapmak için kullanılan alüminyum hurda sacın kuplörü yapmak için kullanılması önerilir. Bu çiftin delik düzeni ve boyutları aşağıdaki şekilde gösterilmiştir. Özel alüminyum kuplörün dış çapı ve şekli (daire olması gerekmez), tüm delikler parçaya oturduğu sürece önemli değildir.

Adım 3: Vivado Blok Tasarımı Oluşturma

Vivado Blok Tasarımı Oluşturma
Vivado Blok Tasarımı Oluşturma
Vivado Blok Tasarımı Oluşturma
Vivado Blok Tasarımı Oluşturma

- Yeni bir Vivado projesi oluşturarak başlayın ve hedef cihaz olarak Zybo Zynq 7000 Z010'u seçin.

- Ardından yeni blok tasarımı oluştur'a tıklayın ve Zynq IP'yi ekleyin. Zynq IP'ye çift tıklayın ve Zynq için sağlanan XPS ayarlarını içe aktarın. Ardından, MIO yapılandırmaları sekmesi altında MIO 10..11 ile UART0'ı etkinleştirin ve ayrıca Zamanlayıcı 0 ve Bekçi zamanlayıcısının etkinleştirildiğinden emin olun.

- Blok tasarımına iki AXI GPIOS ekleyin. GPIO 0 için çift kanalı etkinleştirin ve her ikisini de tüm çıkışlara ayarlayın. GPIO genişliğini kanal 1 ila 4 bit ve kanal 2 ila 12 bit için ayarlayın, bu kanallar motor yönünü ayarlamak ve kodlayıcının ölçtüğü işaretlerin miktarını işlemciye göndermek için kullanılacaktır. GPIO 1 için, kanal genişliği 4 bit olan tüm girişlere yalnızca bir kanal ayarlayın. Bu, kodlayıcılardan veri almak için kullanılacaktır. Tüm GPIO bağlantı noktalarını harici yapın.

- Sonraki İki AXI Zamanlayıcı ekleyin. Her iki zamanlayıcıdaki pwm0 bağlantı noktalarını harici yapın. Bunlar, motorların dönme hızını kontrol eden pwm'ler olacaktır.

- Son olarak blok otomasyonunu ve bağlantı otomasyonunu çalıştırın. Sahip olduğunuz blok tasarımının sağlananla eşleştiğini doğrulayın.

Adım 4: LiDAR ile İletişim Kurmak

Bu LiDAR, UART aracılığıyla iletişim kurmak için bir SCIP 2.0 protokolü kullanır, ekli dosya tüm protokolü açıklar.

LiDAR ile iletişim kurmak için UART0 kullanacağız. LiDAR, her biri o açıdaki bir nesneye olan mesafeyi temsil eden 682 veri noktası döndürür. LiDAR, 0,351 derecelik bir adımla -30 dereceden 210 dereceye kadar saat yönünün tersine tarama yapar.

- LiDAR ile tüm iletişim ASCI karakterleriyle yapılır, kullanılan format için SCIP protokolüne bakın. LiDAR'ı açmak için QT komutunu göndererek başlıyoruz. Daha sonra, UARTS 64 bayt FIFO'da ft'ye bir seferde 18 veri noktası talep ederek GS komutunu birkaç kez göndeririz. LiDAR'dan döndürülen veriler daha sonra ayrıştırılır ve SCANdata global dizisine depolanır.

- Depolanan her veri noktası 2 bayt kodlanmış veridir. Bu verileri kod çözücüye iletmek milimetre cinsinden bir mesafe döndürür.

main_av.c dosyasında, LiDAR ile iletişim kurmak için aşağıdaki işlevleri bulacaksınız.

sendLIDARcmd(komut)

- Bu, giriş dizesini UART0 aracılığıyla LiDAR'a gönderir

recvLIDARveri()

- Bu, LiDAR'a bir komut gönderildikten sonra verileri alacak ve verileri RECBuffer'da depolayacaktır.

requestDistanceData()

- Bu işlev, 682 veri noktasının tümünü almak için bir dizi komut gönderir. Her 18 veri noktası kümesi alındıktan sonra, verileri ayrıştırmak ve veri noktalarını aşamalı olarak SCANdata'da depolamak için parseLIDARinput() çağrılır.

Adım 5: Izgarayı Engellerle Doldurmak

Izgarayı Engellerle Doldurma
Izgarayı Engellerle Doldurma
Izgarayı Engellerle Doldurma
Izgarayı Engellerle Doldurma

Depolanan GRID, her bir dizin değeri bir konumu temsil eden 2B bir dizidir. Her dizinde depolanan veriler sırasıyla 0 veya 1, Engel yok ve engeldir. Her indeksin temsil ettiği milimetre cinsinden uzaklık karesi, araç.h dosyasındaki GRID_SCALE tanımı ile değiştirilebilir. 2D dizinin boyutu, GRID_SIZE tanımını değiştirerek aracın daha geniş bir alanı taramasını sağlamak için de değiştirilebilir.

Yeni bir mesafe verisi seti tarandıktan sonra LiDAR updateGrid() çağrılır. Bu, ızgaradaki hangi dizinlerin engelleri olduğunu belirlemek için SCANdata dizisinde depolanan her veri noktasında yinelenir. Aracın mevcut yönünü kullanarak her bir veri noktasına karşılık gelen açıyı belirleyebiliriz. Bir engelin nerede olduğunu belirlemek için, karşılık gelen mesafeyi açının cos/sin ile çarpmanız yeterlidir. Bu iki değeri araçların mevcut x ve y konumuna eklemek, engelin ızgarasındaki indeksi döndürür. Bu işlem tarafından döndürülen mesafeyi GRID_SCALE ile bölmek, her indeksin kare mesafesinin ne kadar büyük olduğunu değiştirmemize izin verecektir.

Yukarıdaki resimler, araçların mevcut ortamını ve ortaya çıkan Izgarayı göstermektedir.

Adım 6: Motorlarla İletişim Kurmak

Motorlarla iletişim kurmak için, GPIO'ları kontrol etmek için motorun döndüğü yön olduğunu başlatarak başlıyoruz. Ardından, doğrudan AXI Zamanlayıcısındaki PWM'lerin temel adresine yazmak, doğrudan kontrol eden periyot ve Görev döngüsü gibi şeyleri ayarlamamızı sağlar. motorun döndüğü hız.

Adım 7: Yol Planlama

Yakın gelecekte hayata geçirilecek.

Daha önce açıklanan ızgara ve motor işlevselliğini kullanarak, A* gibi algoritmaları uygulamak çok kolaydır. Araç hareket ettikçe çevreyi taramaya devam edecek ve üzerinde bulunduğu yolun hala geçerli olup olmadığını belirleyecektir.

Önerilen: