6 eksenli bir robotla, uç efektör pozisyonu ve yön aralığı verildiğinde, optimum eklem değerlerinin nasıl bulunacağı


10

Bir aleti uç efektöründe tutan altı eksenli mafsallı bir robot kolu göz önüne alındığında, istenen bir takım pozisyonuna ve takım oryantasyonuna sahipsem, robotun bu konuma ulaşması için ters kinematik denklemine tam olarak 1 çözüm olacaktır.
(veya eklem aralığına bağlı olarak 16'ya kadar farklı çözüm)

http://en.wikipedia.org/wiki/Robotic_arm

Ama eğer robot kalem gibi bir şey tutuyorsa ve robotun hedefteki bu kalemle belirli bir noktayı işaretlemesini istiyorum, o zaman kalemin işaretli yüzeye dik olduğu sürece nasıl yönlendirildiğini umursamıyorum.

Böylece ters kinematik denkleminin sonsuz sayıda çözümü olacaktır.

Bu çözümlerden mevcut yapılandırmaya en yakın ortak yapılandırmayı nasıl seçebilirim: ulaşmak için en az hareket gerektiren bir yapılandırma?
(veya tüm eklem açıları maksimum ve minimum değerlerinden en uzak olduğu gibi diğer benzer kriterlere göre en uygun eklem konfigürasyonu?)

Yanıtlar:


9

İlk olarak, optimal tanımlamamız gerekir . En uygun olduğunu düşündüğünüzü söylemediğiniz için, çoğu insan ikinci dereceden bir ifade seçer. Örneğin, mevcut eklem açılarınızın vektörü tarafından verildiğini varsayalım . Bir hata ile - Biz gerekli hareketi en aza indirerek düşünülebilir , bir maliyet fonksiyonu tanımlayabilir matrisi için . Normalde diyagonal bir matris kullanırız, ancak herhangi bir pozitif-kesin matris kullanır.αx=ααstartJ=xTQxQ

İki eklem açısına sahip basitleştirilmiş bir örnekte, eklem daha ucuz bir motora (belki de son efektöre daha yakın) sahipse , maliyet fonksiyonuna sahip olabiliriza

J=[xaxb][1002][xaxb] , yani. eklem hareketi eklem gibi maliyetli iki katı .ba

Şimdi, kinematik denklem bir matris formülüdür ve Denavit-Hartenberg gösteriminde şunlar olabilir:

Ti=[100x010y001z0001] ; burada sağ taraf konumu ve yönlendirmeyi temsil eder (şu anda sıfır dönüş olarak ayarlanmıştır), eklem açıları göz önüne alındığında.(x,y,z)

Yönelim ve yalnızca konum umurumda olmadığından, son dönüşüm matrisinin ilk 3 sütununu ve ilk dönüşüm matrisinin son satırını kesebiliriz. Bu formülü aynı şekilde şu şekilde ifade edebiliriz:

[100001000010]Ti[0001]=[xyz]

Sol tarafı çarparak üç denklem elde ederiz. Parametreler doğrusal olsaydı, çözmek basit olurdu. Bu, tüm aktüatörlerin doğrusal aktüatör olması durumunda geçerlidir. Bu durumda, sorun aslında ikinci dereceden bir programdır . Denklemi almak için sol tarafı yeniden düzenleyebiliriz:

Kx=[xyz]Bazı matrisi için .K

İkinci dereceden bir program, şu şekilde ifade edilebilen bir sorundur:

MinimizeJ=12xTQx+cTx

Tabi ,AxbEx=d

Bunu çözmek için, örneğin iç nokta, aktif küme, ... gibi kullanabileceğiniz birkaç algoritma vardır. Sadece uygun bir kütüphane bulun ve sizin için çözecektir.

Doğrusal olmayan bir denklem sisteminin çözülmesi daha zordur. Buna doğrusal olmayan programlama denir , ancak dönen eklemleriniz varsa sahip olduğunuz şeydir.

Temel olarak, matris denklemleri yerine, doğrusal olmayan fonksiyonlarınız vardır.

, tabi değerini en aza indirin kısıtlamaların RHS'sini sıfır yapmak için gerekirse yeniden düzenleyin)f(x)h(x)=0g(x)0

Bunu çözmek için kullanılan algoritmalar daha da karmaşıktır, ancak İç nokta, Sıralı karesel programlama (SQP), Aktif ayar, Güven bölgesi yansıtıcı algoritmaları içerir. Açıkçası, bu algoritmaların nasıl çalıştığının açıklaması çok uzundur ve bunu bu cevabın kapsamı dışında bırakacağım. Sadece kuadratik programlama için kullanılan algoritmalardaki içerik miktarı tek başına bir ders olabilir.

Sorunu çözmek için bir kütüphane bulmalısınız, verimli bir uygulamayı kodlamak uzun zaman alacaktır ve verimli uygulamalar bir seferde 100 (veya daha fazla) değişkeni işleyebilir. Örneğin, MATLAB kullanıyorsanız , Optimizasyon Araç Kutusu'ndan fmincon işlevinin nasıl kullanılacağı ile ilgili belgeler vardır .

Çevrimiçi olarak çözmek için C ++ veya başka bir yerel uygulama, örneğin NLopt isteyebilirsiniz. Bunun bir mikrodenetleyicinin hızlı bir şekilde çözebileceği bir şey olmayabileceğini ve birçok kütüphanenin bir mikrodenetleyici üzerinde kullanımı kolay olmayan başka bağımlılıkları olabileceğini unutmayın (bir bilgisayar için tasarlandıkları için).


Verimlilik konusunda endişelenmiyorsanız ve sadece kendiniz kodlayabileceğiniz bir şey istiyorsanız, ters kinematik problemini çözmek için çağırabileceğiniz bir fonksiyon olduğunu varsayarak , bir degrade iniş yöntemi yapabilirsiniz. Örneğin, rastgele bir rastgele başlangıç ​​yönü seçerek, ters sorunu çözün, ardından maliyet işlevini kontrol edin. Ardından, yönlendirmeyi nasıl değiştirmeniz gerektiğini kontrol etmek için pertürbasyon analizini kullanabilirsiniz. Örneğin, geçerli yönlendirmenizin etrafındaki benzer yönleri kontrol ederseniz (örn. Kübik bir ızgarada 8 nokta), maliyet işlevinin her yönde nasıl değiştiğine dair ikinci bir sipariş yaklaşımı alabilirsiniz.

İkinci derece yaklaşımı kullanarak (çok değişkenli olduğu için Hessian matrisi olarak bilinir - oryantasyon için 3 boyutlu), maliyet fonksiyonunun gradyanının sıfır geçişini (yani, tahmin edilen yerel minima) bulabilirsiniz.

Yeni öngörülen yönelim ile, ters çözücüyü tekrar yerleştirin ve doğruluk yeterli olana kadar tekrarlayın.

Bunun muhtemelen o kadar etkili olmayacağını unutmayın, çünkü ters kinematik problemin kendisi yinelemeli olarak çözülmelidir (böylece tekrar tekrar çözmek için biraz zaman alan bir işlev kullanıyorsunuz). Ayrıca, ilgili kod tam teşekküllü bir optimizasyon algoritmasından daha az olabilir, ancak yine de oldukça önemlidir ve önemsiz bir zaman yatırımı değildir.


Her iki yöntemden birini kullanarak (doğrusal olmayan bir program olarak resmi olarak çözme veya ters problemi çözmek için bir işlevi kullanarak yinelemeli olarak kullanma), birden fazla yerel minimum varsa çözüm en uygun olmayabilir. Bu durumda, çeşitli yaklaşımları kullanarak küresel minimi bulmaya çalışabilirsiniz. Doğrusal olmayan bir programlama çözücüsünde bile, başlangıç ​​değerleriyle (örneğin eklem açıları) tohumlamanız beklenir. Her iki yöntemi de çeşitli şekillerde üretilen tohumla tekrar tekrar çalıştırabilirsiniz:

  • rastgele yeniden başlatma (rastgele oluşturulur)
  • Izgara esaslı

veya diğer özel yöntemler.

Bununla birlikte, eğer çok sayıda minima varsa, küresel minimi bulacağınızı garanti etmenin iyi bir yolu olmadığını unutmayın. Sadece şansınızı artırabilirsiniz.


2

Soru endüstriyel bir robotla ilgili olduğundan, muhtemelen robotun dinamiklerinin bir modeline sahip değiliz, bu nedenle sadece kinematik bir kriteri optimize eden çözümler aradığımızı varsayıyorum.

Robotun ters kinematiği için kapalı formlu bir çözümü vardır, ancak sonuçta efektör ekstra dönme serbestliğine sahiptir, bu da robotun esasen 7 serbestlik derecesine sahip olduğu anlamına gelir. Ancak bu sadece bir dof daha olduğu için, birinin düşündüğü kadar sorun değil.

Böyle için yaygın hile neredeyse olmayan gereksiz robotlar serbestlik ekstra derecelerini kilitlemek ve analitik kalan ortak değerler için çözmektir. Diyelim ki ortalama olarak ms'de çözümler sunan 6 serbestlik dereceli robot için kapalı formlu bir IK çözücü yazıyoruz . Den yineleme ile ile bu nedenle kalem açısının bir ayrıklaştırma için optimal çözüm bulmak için yaklaşık olarak uygulama yeterli daha muhtemelen daha fazla verilen ms.0.051360118

Çoğu zaman kalem sadece biraz hareket ediyorsa (örneğin bir çizgi çizerken), aramayı hızlandırmak için başka bir hile, sayısal IK, örneğin psödoinverse yöntemi kullanmaktır:

Let , robotun mevcut yapılandırma olsun onun Jakobiyen'i olabilir ve izin mevcut son efektör dönüşüme hedef göreceli yer değiştirme olabilir. Çözün için ve yeni bir yapılandırma hesaplamak . Burada ayrıntıları atlama ediyorum, ama çözüm en aza indirmek gerekirdoğru seçilmiş bir metrik için.q1JΔxΔx=JΔqΔqq2=q1+ΔqΔqΔq

Bu, 7 serbestlik dereceli robot için yapılır ve yine yalnızca milisaniyenin kesirlerini almalıdır. Her ne kadar geçerli bir yapılandırma olmayabilir (ortak değerler sınırların dışında olabilir) ve doğru bir IK çözümü olmayabilir (yine de daha fazla ters adım atabilirsiniz), çoğu zaman bir kapalı form çözücüyü kullanarak arama yapın.q2


1

Bunun güzel bir kapalı formu var. Diyelim ki ne olduğunu (yani onu nasıl değiştirdiğimizi umursamıyoruz ).rz

J1X˙=Θ˙=[j1j2j3j4j5j6][x˙y˙z˙rx˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
Burada , nin sütunudur . Biz kadar zarar verebilir bağlıdır bölümüne ve yok kısmının. jiithJ1Θ˙rz˙
Θ˙=Θ˙x˙ry˙+Θ˙rz˙Θ˙rz˙=j6rz˙
Şimdi oyun haline geldi, ronalchn gibi bazı çapraz matris yukarıda. Ben kullanacağım ve daha kolay görüntüleme için .
(Θ˙x˙ry˙+Θ˙rz˙)TD(Θ˙x˙ry˙+Θ˙rz˙)
DA=Θ˙x˙ry˙B=Θ˙rz˙

Bunu

ATDA+2BTDA+BTDBorATDA+2rz˙j6TDA+rz˙2j6TDj6

Şimdi ayırt etmek için kolay bir denklemimiz var . göre türevi ve ayarladık . Bu, iki arasındaki bağlantı mesafesini "en aza indirir".rz˙rz˙0

2j6TDA+2rz˙j6TDj6=0rz˙=j6TDAj6TDj6
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.