Robotta hızlı trigonometri için mikrodenetleyici / cpu?


15

Bu, çok ağır olan donanımlarla ilgilidir, çünkü (şişman kedi büyüklüğünde, 3 DOF ile 6 bacak) yürüyen bir robot onu taşımalıdır. Bu yürüyüş nedeniyle bir çok trigonometri (matris matematik kullanarak ya da henüz emin değilim) yapmak gerekir ve bu sorunun nereden geliyor.

PIC, Arduino veya ucuz AVR, her şeyi 100 / saniye hesaplamak ve atalet ve engellerden kaçınmak gibi şeyleri, hatta bruteforce yolları / yürüyüşleri tutmak için yeterince hızlı değildir.

  • Plan A beyni robot üzerinde taşımaktır. Mikroişlemci, mikro ITX, nettop veya diğerleri; trigonometri / matris matematik hızlı yapmak için verimli donanım nedir?

    Çevrimiçi arama yaptım ve bu konuda uzmanlaşmış AVR, x86 veya ARM mikrodenetleyicileri bulmayı bekledim, ancak orada şans yok.

  • Plan B, ağır kaldırmayı yapmak için WiFi üzerinden bağlı bir x86 makinesine sahip olmaktır. Prototipleme için de harika, ancak donanım minyatürleştiğinde sonunda A planına göç etmek istiyorum. Ama o zaman bile, hangi masaüstü CPU en hızlı trigonometri yapabilir?

  • Plan C, yükü dağıtmak ve her bacak için bir güç verimli mikro denetleyici / çekirdeğe sahip olmakla birlikte, bu, uzatma kabiliyetini sevdiğim birçok nedenden dolayı en iyi çözüm değildir.

Henüz kullanılan dil ve / veya kütüphaneye karar vermedim, ancak Pascal ve C ++ tercih ediyorum.

(daha uygun etiketler için öneriler hoş geldiniz, burada yeniyim)


11
kayan nokta matematik bir zorunluluk değildir. Her zaman sinüs (veya başka bir işlev) tabloları oluşturabilir, bunları bir AVR'nin flaşına koyabilir ve sabit nokta hesaplamalarıyla değerler arasında enterpolasyon yapabilirsiniz. Bu ihtiyaçlarınız için yeterince hızlı olabilir.
Christoph

3
Gerçek zamanlı olarak ağır matematik kayıp yapmak yerine, ortak bir çözüm değer tablolarını önceden hesaplamak ve sonra cevabı aramaktır. İşi birden fazla CPU arasında dağıtma fikri de iyidir, örneğin bir güçlü ana CPU ve daha sonra bacak başına bir işlemci.
John U

2
Robotics Stackexchange sitesinde bu tür bir soru sormayı da düşünebilirsiniz .
Rocketmagnet

1
Plan B hesaplamayı oldukça hızlı yapacaktır, ancak WiFi üzerinden iletişim büyük olasılıkla performans kazancını öldürecektir. USB üzerinden bağlı bir Android telefon kullanmayı düşündünüz mü? Wifi gecikmesiz çok daha fazla bilgi işlem gücü
Stefan

1
Kayan Nokta Üniteli bir STM32F4 kartı uygulamanız için yeterli görünüyor. 64k CCM ile 128k SRAM vardır. 168MHz'de çalışabilir. 32-bit kayan nokta çarpımı sadece 1 CPU çevrimi gerektirir ..
richieqianle

Yanıtlar:


16

Uygulamanız gerçekten yoğun bilgi işlem gibi görünmüyor. Örneğin, bir dsPIC, yinelemelerinizin her biri için 400 k komut yürütebilir. Bu çok fazla. Bununla birlikte, iyi bir düşük seviye I / O kapasitesine, PWM jeneratörlerine, zamanlayıcılara ve benzerlerine sahip olmak faydalı olacaktır.

Sinüs ve kosinüs dsPIC gibi bir tamsayı makinesinde yapmak o kadar da zor değildir. Birkaç kez kendim yaptım. İşin püf noktası, açılar için doğru temsili seçmektir. Radyanlar teorik açıdan iyi olabilir, ancak hesaplama açısından elverişsizdir. Degress yapay ve sadece aptalca. Bir tam dönüşü temsil etmek için makine boyutundaki tamsayılarınızın tamamını kullanın. Örneğin, bir 16 bit işlemci olan bir dsPIC'de, bir tam dönüş 65536 sayımdır, bu da bir robotu kontrol etmek için ihtiyacınız olandan veya yine de ölçebileceğinizden daha fazla doğruluk ve çözünürlüktür.

Bu gösterimin bir avantajı, tüm kaydırmanın, yalnızca imzasız tamsayıların toplama ve çıkarma işlemlerinin nasıl çalıştığı nedeniyle otomatik olarak gerçekleşmesidir. Bir diğer önemli avantaj, bu temsilin, sinüs ve kosinüs için arama tablolarını kullanmaya özellikle iyi katkıda bulunmasıdır. Sadece 1/4 döngüyü saklamanız gerekir. Açının üstteki iki biti, hangi kadranda olduğunuzu söyler, bu da tabloya ileri veya geri indekslenip endekslenmeyeceğinizi ve sonucun reddedilip edilmeyeceğini söyler. Sonraki N alt biti, tablonun indekslenmesi için kullanılır ve tablonun 2 N segmenti vardır (2 N +1 noktası). Tabloya geriye doğru endekslemenin sadece tablo indeksi bitlerini tamamladığını unutmayın.

En yakın cevabı seçmek yeterince iyi olacak şekilde tabloya yeterli puan verebilirsiniz. Örneğin, tablonun 1024 kesimi varsa, sinüs ve kosinüs bir dairenin en yakın 1/4096'sına kadar hesaplanır. Bir robotu kontrol etmek için bolca olacak. Daha fazla doğruluk istiyorsanız, tabloyu büyütebilir veya bitişik tablo girişleri arasında doğrusal olarak enterpolasyon yapmak için açının kalan alt bitlerini kullanabilirsiniz.

Her neyse, bu işlemci için gereksinimlerinizin belirtilen problemle uyuşmadığı anlaşılıyor. Muhtemelen bir dsPIC33F kullanırdım. Kesinlikle küçük, hafif ve tek kartlı bir bilgisayarda x86 gibi tam gelişmiş bir genel amaçlı bilgi işlem sürecinden çok daha güç tasarrufludur.


Her zaman bir PIC'nin sadece ters kinematik için bile yavaşlayacağı izlenimindeydim, ama tekrar düşünmem gerekebilir. En az 100 / saniye hızında 6 bacak 3DOF için ters kinematik yapmak mümkün müdür? Bu 6x3x100 ters kinematik sadece canlı bacak hareketlerini elde etmek için. Her neyse, algoritma çalışır aynı platformda gerçekleşmesi için ters kinematik gerekir, böylece bu parçaları iki kez yeniden uygulamak zorunda kalmazsınız. Algoritma daha zorlayıcı olurdu ve kesinlikle bir PIC veya Arduino-isch tahtasında çalışamaz.
Barry Staes

9

Çok sayıda giriş sinyali ile uğraşacaksınız. Yüksek iş hacmine sahip bir CPU'ya ihtiyacınız yoktur; paralel olarak birçok sinyal işlenebilir. Bu tipik DSP bölgesidir. Tabii ki, genel CPU işlevselliği de istiyorsunuz. Bu hiç sorun değil. Entegre DSP'lere sahip çok sayıda CPU var.

Bu tür uygulamalar için tipik bir çip tasarımı bir Cortex-M4'tür. Bu, entegre bir DSP ile birlikte gelir ve -M4F sürümlerinde de bir FPU bulunur. Bu gerekli olmayabilir, trigonometri sabit noktalı matematikte kolayca yapılabilir.


Matris matematiğinin Cortex-M4F'de bir kenarı olur mu? (ben orada girişim, prototipleme durumunda)
Barry Staes

3
Sadece biraz bilgiç olmak - Cortex-M4 işlemci çekirdeği entegre bir DSP'ye sahip değil, ana işlemci çekirdeğine dahil edilmiş bir dereceye kadar DSP özelliğine sahip. DSP uzantıları, filtreleme ve dönüşümler gibi tipik DSP işlevlerini kolaylaştıran çarpma / toplama komutlarının eklenmesidir.
u

6

Birkaç açıklama:

  1. Trigonometri işlemlerini, engelden kaçınmayı yürüten aynı CPU üzerinde işlemenize gerek yoktur. Görevleri iki mikrodenetleyici arasında bölebilir ve konuşmaları için bir iletişim protokolü kullanabilirsiniz.

  2. Bir deney için bir ARM Cortex M0 mikrodenetleyicide Kalman filtreli bir AHRS algoritması uyguladım (bir STM32 idi, gerisini tam olarak hatırlamıyorum ama 32 MHz olduğunu düşünüyorum) ve sabit nokta matematik kullanarak çalıştırabilirim saniyede yaklaşık 40 örnekte. Daha hızlı bir denetleyici ile kolayca taşıyabilmelisiniz ve elbette FPGA veya DSP yolunu deneyebilirsiniz.

  3. Bacakların kontrolünün CPU yoğun olmadığını ve trigonometri ve engellerden kaçınma işlemlerinden ayrı olarak tüm bacakları birlikte kontrol edebileceğinizi söyleyebilirim (bkz. 1)


Servolar kontrolör veya dinamiksel veri yolu ile seri olarak kontrol edilir, bu yüzden zaten zaten yüklüdür. Sorun, yazılımın sadece canlı poz / yürüyüş için gerekenden daha fazla ters kinematik hesaplaması yapması gerekiyor.
Barry Staes

5

Trigonometri zor, ancak kısayollar var. İşlem gücüne açıksanız, CORDIC algoritmasını göz önünde bulundurun.

Temelde [örneğin] sinüs için bir değerler tablosu. Açılar derece, radyan, istediğiniz gibi olabilir. Mesele şu ki, bu değerlerin SINE'i robotunuzun kullanabileceği bir dereceye kadar 1/2 (0.5), 1/4 (0.25), 1/8, 1/16 ..... 'dır.

Açınızı girin, ilk tablo değerini çıkarın, sonucunuzu ilk sonuca ayarlayın (0.5). Çıkarma ile açınız negatif olursa, bir sonraki değeri EKLEYİN (ve 0,25'i çıkarın). Aksi takdirde, açıları çıkarmaya ve sonuç eklemeye devam edin.

Tablonun sonuna geldiğinizde, yaptığınız tek şey toplama ve çıkarma işlemidir ancak yine de çok yakınsınızdır. Çarpılacak son bir “keman faktörü” var.

Sonucun doğruluğu [ve hızı], arama tablosunun boyutuna ve çözünürlüğüne bağlıdır.


CORDIC güzel görünüyor ama sadece robotu daha hızlı yaparsa kullanacağım (bu bir gereklilik).
Barry Staes

3

Genel amaçlı bir GNU / Linux sistemi çalıştıran bir Raspberry Pi kartı kullanmayı düşünebilirsiniz. Raspberry Pi, robot servolarını veya uzatma kartlarını bağlamak için kullanılabilecek birkaç GPIO pimine sahiptir.

http://www.youtube.com/watch?v=RuYLTudcOaM

Model A Raspberry Pi, 2.5W güç bütçesinin altında kalırken GPU'sunu OpenGL ES 2 kullanarak 24 GFLOP'a kadar genel amaçlı kayan nokta hesaplaması yapabilir.

http://elinux.org/RPi_Hardware

Örnek: Raspberry Pi kullanılarak uygulanan pille çalışan bir robot kurulumu.

http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm

Örnek 2: Ahududu pi ile kontrol edilen 6 ayaklı bir robot:

http://www.youtube.com/watch?v=Yhv43H5Omfc

Örnek 3: Ahududu pi ile kontrol edilen kendi kendini dengeleyen 2 tekerlekli ters sarkaç robotu:

http://www.youtube.com/watch?v=n-noFwc23y0


2

Bacaklı robot için bazı önceden tanımlanmış bacak hareket eden diziler oluşturabilir ve bunları oynatabilirsiniz. Gerçek zamanlı engellerden kaçınma, fuzzy logicher şeyin tekrar tablo formatında olduğu hafif uygulama ile yapılabilir ve yapmanız gereken tek şey, ondan doğru değeri seçmek vedefuzzyfication işlem .

Her şey C gibi bir şekilde daha hızlı bir işlemci üzerinde yapılabilir ARM7. Her AVRşeyi dönüştürmek için çok zaman geçirdikten sonra denedim ve başarısız oldum fixed point arithmetics.


Yürüme animasyonları oynamak tam olarak istemediğim şey. Uygulamak istediğim algoritma, bacaklarıyla kendi başına ne yapılacağını anlıyor ve bu algoritma hızlı trigonometriye ihtiyacım var. Ancak sorumu açıklığa kavuşturamadım. Ve bunu bu kadar çok zil sesiyle görmek, soruyu düzenlemek için bir atık olurum. Zamanında soracağım ve daha spesifik olacağım.
Barry Staes

Bu durumda servo bacak sistemine giderdim. Her bacağın kendi denetleyicisi vardır. Temsilci tabanlı yaklaşım.
Mart'ta Gossamer

1

Texas Instruments Stellaris platformunda varsayılan olarak bir kayan nokta ünitesi bulunur. 80MHz saatli ARM denetleyicisinin uygulamanız için yeterince hızlı olduğundan emin değilsiniz, ancak bir LaunchPad geliştirme kartı oldukça ucuz: http://www.ti.com/ww/en/launchpad/stellaris_head.html

USB üzerinden programlanabilir, en az Windows ve Linux için ücretsiz takım zincirleri mevcuttur, yaklaşık 4 × 6 cm ölçülerinde ve 30+ GPIO pini vardır (doğru sayılırsam).


0

Sen edebilirsiniz Robot uygulamaya x86 güç pc işlemci kartını gömmek bir arabirim kartı olarak robotun kontrol etme AVR yardımıyla. En hızlı ve en ucuz çözüm sorunun. Ancak evet, x86 mimarisine birçok kodlamayı karıştırmanız gerekiyor, ancak neyse ki çok sayıda kodlamayı açık kaynaklı işletim sistemi kodlarından kavrayabilirsiniz. (Mekanik yapınız bu ağırlığı taşıyabiliyorsa)


4
"x86" ve "power pc" birbirinden tamamen farklı iki (ve tarihin en azından bazı noktalarında) rakip mimarilerdir.
Chris Stratton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.