Dengan robot 6-sumbu, diberikan posisi efektor akhir dan rentang orientasi, cara menemukan nilai-nilai sambungan yang optimal

10

Dengan lengan robot enam sumbu yang diartikulasikan memegang alat di ujung-efektornya, jika saya memiliki posisi alat yang diinginkan dan orientasi alat, akan ada tepat 1 solusi untuk persamaan kinematika terbalik untuk robot untuk mencapai posisi itu.
(atau lebih tepatnya hingga 16 solusi yang berbeda, tergantung pada jangkauan sendi)

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

Tetapi jika robot memegang sesuatu seperti pena, dan saya ingin robot menandai titik tertentu dengan pena pada target, maka saya tidak peduli bagaimana pena berorientasi, asalkan itu tegak lurus terhadap permukaan yang ditandai.

Jadi persamaan invers-kinematika akan memiliki banyak solusi yang tak terhingga.

Bagaimana saya bisa memilih di antara solusi-solusi ini konfigurasi gabungan yang paling dekat dengan konfigurasi saat ini: solusi yang akan membutuhkan jumlah gerakan paling sedikit untuk mencapai?
(atau konfigurasi sambungan yang optimal menurut beberapa kriteria serupa lainnya, seperti bahwa semua sudut sambungan terjauh dari maksimum dan minimumnya?)

HugoRune
sumber

Jawaban:

9

Pertama, kita perlu mendefinisikan optimal . Karena Anda tidak mengatakan apa yang Anda anggap optimal, kebanyakan orang memilih ekspresi kuadratik. Sebagai contoh, anggaplah sudut sendi Anda saat ini diberikan oleh vektor . Kami dapat mempertimbangkan meminimalkan pergerakan yang diperlukan - dengan kesalahan , Anda dapat menentukan fungsi biaya untuk beberapa matriks . Kami biasanya menggunakan matriks diagonal, tetapi matriks positif-pasti akan melakukan.αJ=x TQx Qx=ααstartJ=xTQxQ

Dalam contoh yang disederhanakan dengan dua sudut sambungan, jika sambungan memiliki motor yang lebih murah (mungkin lebih dekat ke end-effector), kita mungkin memiliki fungsi biayaa

b aJ=[xaxb][1002][xaxb] , yaitu. pergerakan sendi dua kali lebih mahal dari sambungan .ba

Sekarang, persamaan kinematik adalah rumus matriks, dan dalam notasi Denavit-Hartenberg mungkin:

( x , y , z )Tsaya=[100x010y001z0001] , di mana sisi kanan mewakili posisi dan orientasi (saat ini ditetapkan sebagai rotasi nol), mengingat sudut sambungan.(x,y,z)

Karena kita tidak peduli dengan orientasi, dan hanya posisi, kita dapat memotong 3 kolom pertama dari matriks transformasi terakhir, dan baris terakhir dari matriks transformasi pertama. Kami dapat mengekspresikan rumus ini secara setara sebagai:

[100001000010]Tsaya[0001]=[xyz]

Mengalikan sisi kiri, kita mendapatkan tiga persamaan. Jika parameternya linier, itu akan mudah dipecahkan. Ini adalah kasus jika semua aktuator adalah aktuator linier. Dalam hal ini, masalahnya sebenarnya adalah program kuadratik . Kita dapat mengatur ulang sisi kiri untuk mendapatkan persamaan:

KKx=[xyz] , untuk beberapa matriks .K

Program kuadratik adalah masalah yang dapat diekspresikan dalam bentuk:

Minimalkan J=12xTQx+cTx

Tunduk pada , E x = dSEBUAHxbEx=d

Untuk mengatasi ini, ada sejumlah algoritma yang dapat Anda gunakan, misalnya, titik interior, set aktif, .... Temukan saja perpustakaan yang cocok, dan itu akan menyelesaikannya untuk Anda.

Sistem persamaan non-linear lebih sulit dipecahkan. Ini disebut pemrograman non-linear , tetapi ini adalah apa yang Anda miliki jika Anda memiliki sambungan berputar.

Pada dasarnya, di tempat persamaan matriks, Anda memiliki fungsi nonlinier.

Minimalkan dengan , (atur ulang jika perlu untuk membuat RHS dari batasan nol)h ( x ) = 0 g ( x ) 0f(x)h(x)=0g(x)0

Algoritma yang digunakan untuk menyelesaikan ini bahkan lebih kompleks, tetapi mencakup Interior-point, Sequential quadratic programming (SQP), Active-set, algoritma reflektif wilayah kepercayaan. Jelas, penjelasan tentang bagaimana algoritma ini bekerja sangat panjang, dan saya akan meninggalkannya di luar cakupan jawaban ini. Cukuplah untuk mengatakan, jumlah konten pada algoritma yang digunakan hanya untuk pemrograman kuadrat bisa menjadi keseluruhan saja dengan sendirinya.

Anda hanya perlu mencari pustaka untuk memecahkan masalah, akan butuh waktu lama untuk membuat kode implementasi yang efisien, dan implementasi yang efisien dapat menangani 100 (atau lebih) variabel pada satu waktu. Misalnya, jika Anda menggunakan MATLAB, maka ada dokumentasi tentang cara menggunakan fungsi fmincon dari Kotak Alat Pengoptimalan.

Untuk menyelesaikannya secara online, Anda mungkin ingin C ++ atau implementasi asli lainnya, misalnya, NLopt. Perhatikan bahwa ini mungkin bukan sesuatu yang dapat diselesaikan dengan cepat oleh mikrokontroler, dan banyak perpustakaan mungkin memiliki dependensi lain yang tidak mudah digunakan pada mikrokontroler (karena ditujukan untuk komputer).


Jika Anda tidak khawatir tentang efisiensi, dan hanya menginginkan sesuatu yang dapat Anda kode sendiri, maka dengan asumsi ada fungsi yang dapat Anda panggil untuk memecahkan masalah kinematik terbalik , Anda cukup melakukan metode gradient descent. Misalnya, secara sewenang-wenang memilih orientasi awal yang acak, menyelesaikan masalah terbalik, lalu memeriksa fungsi biaya. Kemudian Anda dapat menggunakan analisis gangguan untuk memeriksa bagaimana Anda harus memvariasikan orientasinya. Misalnya, jika Anda memeriksa orientasi serupa di sekitar orientasi Anda saat ini (mis. 8 poin dalam kotak kubik), Anda bisa mendapatkan perkiraan urutan kedua tentang bagaimana fungsi biaya bervariasi di setiap arah.

Dengan menggunakan perkiraan urutan kedua (dikenal sebagai matriks Hessian karena multivariat - 3-dimensi untuk orientasi), Anda dapat menemukan zero-crossing dari gradien fungsi biaya (mis. Minima lokal yang diprediksi).

Dengan orientasi yang diprediksi baru, cukup masukkan kembali solver solver, dan ulangi sampai keakuratannya memadai.

Perhatikan bahwa ini mungkin tidak akan seefisien, karena masalah kinematik terbalik itu sendiri harus diselesaikan secara berulang (jadi Anda berulang kali menggunakan fungsi yang membutuhkan waktu untuk diselesaikan). Juga, kode yang terlibat mungkin kurang dari algoritma optimisasi lengkap, tetapi masih cukup besar, dan bukan investasi waktu yang tidak signifikan.


Menggunakan salah satu metode (penyelesaian secara formal sebagai program nonlinear atau menggunakan iteratif menggunakan fungsi untuk memecahkan masalah terbalik), solusi mungkin tidak optimal jika ada beberapa minimum lokal. Dalam hal ini, Anda dapat mencoba menemukan minimum global dengan menggunakan berbagai pendekatan. Bahkan dengan pemecah pemrograman non-linear, Anda akan diharapkan untuk menaburnya dengan nilai awal (mis., Sudut sendi). Anda dapat berulang kali menjalankan metode mana pun dengan seed yang dihasilkan dengan berbagai cara:

  • restart acak (dihasilkan secara acak)
  • berbasis grid

atau metode khusus lainnya.

Namun perlu dicatat bahwa jika ada banyak minimum, tidak ada cara yang baik untuk menjamin bahwa Anda akan menemukan minimum global. Anda hanya dapat meningkatkan peluang Anda.

ronalchn
sumber
2

Karena pertanyaannya adalah tentang robot industri, kita mungkin tidak memiliki model dinamika robot, jadi saya berasumsi kita sedang mencari solusi yang mengoptimalkan kriteria kinematik saja.

Robot memiliki solusi bentuk tertutup untuk kinematika kebalikannya, tetapi sayangnya efektor memiliki tingkat rotasi tambahan kebebasan, yang berarti robot pada dasarnya memiliki 7 derajat kebebasan. Tapi karena ini hanya satu lagi dof , tidak seperti banyak masalah sebagai salah satu mungkin berpikir.

0,051360118

Jika sebagian besar waktu pena hanya bergerak sedikit (misalnya ketika menggambar garis), trik lain untuk mempercepat pencarian adalah dengan menggunakan IK numerik, misalnya metode pseudoinverse:

q1JΔxΔx=JΔqΔqq2=q1+ΔqΔqΔq

Ini dilakukan untuk robot 7 dof dan sekali lagi hanya mengambil sepersekian milidetik. Meskipun mungkin bukan konfigurasi yang valid (nilai gabungannya bisa di luar batas) dan mungkin bukan solusi IK yang akurat (Anda dapat mengambil lebih banyak langkah pseudoinverse, meskipun), sebagian besar waktu itu akan menjadi titik awal yang baik untuk suatu cari menggunakan pemecah bentuk tertutup.q2

antonakos
sumber
1

Ada formulir tertutup yang bagus untuk ini. Katakanlah kita tidak peduli apa itu (yaitu kita tidak peduli bagaimana kita mengubahnya ).rz

J-1X˙=Θ˙=[j1j2j3j4j5j6][x˙y˙z˙rx˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
Di mana adalah kolom dari . Kita dapat memecah menjadi bagian yang bergantung pada dan bagian yang tidak. jsayasayathJ-1Θ˙rz˙
Θ˙=Θ˙x˙...ry˙+Θ˙rz˙Θ˙rz˙=j6rz˙
Jadi sekarang game telah menjadi, mari kita perkecil untuk beberapa matriks diagonal seperti kata ronalchn atas. Saya akan menggunakan dan agar lebih mudah dilihat.
(Θ˙x˙...ry˙+Θ˙rz˙)TD(Θ˙x˙...ry˙+Θ˙rz˙)
DSEBUAH=Θ˙x˙...ry˙B=Θ˙rz˙

Kita dapat memperluas ini ke

SEBUAHTDSEBUAH+2BTDSEBUAH+BTDBatauSEBUAHTDSEBUAH+2rz˙j6TDSEBUAH+rz˙2j6TDj6

Sekarang kita memiliki persamaan yang mudah dibedakan pada . Kami menemukan turunannya sehubungan dengan dan menetapkannya ke . Ini meminimalkan sudut "jarak" antara dua pose Anda.rz˙rz˙0

2j6TDSEBUAH+2rz˙j6TDj6=0rz˙=-j6TDSEBUAHj6TDj6
joshkarges
sumber