Menambahkan Actuator atau Force ke Model Tubuh Kaku Artikulasi (Featherstone)

9

Saya sedang mengerjakan sebuah proyek di mana saya perlu memodelkan sistem yang pada dasarnya terdiri dari serangkaian sambungan ball-and-socket yang terpasang pada sebuah pangkalan, yang kemudian dipasang pada sambungan prismatik (rail).

Saya telah membaca buku Algoritma Rigid Body Dynamics Roy Featherstone secara langsung , dan saya juga membaca bagian Dynamics dari Springer Handbook of Robotics (juga ditulis oleh Featherstone).

Butuh waktu lama bagi saya untuk terbiasa menggunakan notasi "vektor spasial" dan "matriks spasial" -nya, tetapi setelah menciptakan kembali semua notasinya dengan tangan sebagai latihan, ternyata hanya cara yang bagus untuk menggabungkan 3x3 dan Matriks dan vektor 3x1 menjadi matriks dan vektor 6x6 dan 6x1. Matematika yang ia buat untuk melakukan operasi bisa agak membosankan untuk dibaca ketika ia membajak beberapa notasi standar, tetapi secara keseluruhan semuanya sangat kompak, sangat mudah diimplementasikan dalam MATLAB.

Masalah saya adalah ini: Bagaimana cara menambahkan aktuator ke model? Dia berjalan melalui secara eksplisit mengkonfigurasi definisi bersama, definisi tautan, dll., Tetapi ketika datang ke aktuator atau kekuatan yang diterapkan dia mengatakan sesuatu seperti, "Tambahkan saja sini dan Bob pamanmu Bob!" - tidak dibahas sama sekali. Dalam Buku Pegangan Robotika ia menyarankan untuk memperkenalkan akselerasi palsu ke pangkalan tetap untuk menambahkan istilah gaya gravitasi, tetapi tidak menunjukkan cara menambahkannya dalam koordinat lokal atau ia tidak menyebutkan cara menambahkan input aktuator.τSebuah

Bantuan apa pun akan sangat dihargai. Saya telah mempertimbangkan untuk memulai dari awal dengan buku yang berbeda, tetapi itu akan menjadi pengeluaran besar waktu saya untuk menyesuaikan diri dengan serangkaian notasi yang berbeda. Saya ingin bergerak maju dengan ini, tetapi saya merasa seperti saya hanya beberapa inci dari garis finish.

Chuck
sumber

Jawaban:

3

Pasukan Aktuator

Apakah saya mendapatkan ini dengan benar: Anda memiliki model teoritis sistem multibody yang kaku dan ingin melakukan perhitungan dinamika tubuh yang kaku. Anda telah mengimplementasikan model dan sekarang ingin menghitung bagaimana model berperilaku ketika didorong oleh aktuator.

Namun apa aktuator untuk Anda? Apakah itu hanya kekuatan yang bekerja pada sambungan itu? Apakah ini model motor DC? Apakah ini pengontrol PID?

qq˙q¨τqsayaτsayaqjτj

ττ

τSebuahτSebuah

Percepatan Gravitasi:

Featherstone menerapkan percepatan gravitasi di pangkalan dan membiarkannya merambat oleh algoritma melalui pohon. Ini dilakukan di RNEA, Tabel 5.1 di baris

Sebuah0=-Sebuahg

Alih-alih melakukan itu, Anda juga dapat memodifikasi baris

fsayaB=sayasayaSebuahsaya+vsaya×sayasayavsaya

untuk

fsayaB=sayasaya(Sebuahsaya-sayaX0Sebuahg)+vsaya×sayasayavsaya

untuk menerapkan efek gravitasi secara individual pada setiap tubuh. Ini memperkenalkan perhitungan tambahan dan saya tidak melihat manfaatnya.

Aljabar Spasial vs. Penggabungan 3-D Vektor

Aljabar Spasial bukan hanya gabungan dari vektor 3-D. Yang pertama mengekspresikan gerakan tubuh yang kaku pada kerangka koordinat tetap, sedangkan yang terakhir diekspresikan pada titik-titik yang bergerak dengan tubuh. Akibatnya percepatan spasial adalah turunan waktu dari kecepatan spasial. Dalam notasi klasik menggunakan dua persamaan 3-D ini tidak terjadi (Bagian 2.11 dari buku Featherstone):

ω

Kecepatan spasial menggambarkan kecepatan linier dan sudut dari titik tubuh yang saat ini bertepatan dengan asal dari kerangka referensi (tetap). Jika kerangka itu diekspresikan pada pusat massa dan diorientasikan dengan kerangka acuan global maka ia nampak sebagai gabungan sederhana kecepatan 3-D linier dan sudut, namun ini hanya kasus untuk pilihan kerangka acuan khusus ini. Disajikan pada bingkai yang berbeda Anda mendapatkan nilai yang berbeda tetapi masih mewakili kecepatan spasial yang sama.

Akselerasi spasial menggambarkan aliran kecepatan linier dan sudut dari titik yang bertepatan dengan asal. "Aliran" di sini berarti bagaimana jumlah vektor (kecepatan linier dan sudut) berubah seiring waktu.

Martin Felis
sumber
Saya telah bekerja keras untuk mengimplementasikan algoritme ini, tetapi saya telah mencoba menjadi metodis yang saya bisa sepanjang jalan, memastikan bahkan aspek paling dasar bekerja persis seperti yang diharapkan setiap waktu. Untuk itu, saya telah menyiapkan sejumlah percobaan di mana saya dapat menghitung solusi yang tepat sehingga saya dapat membandingkan solusi yang disimulasikan.
Chuck
Aspek terakhir yang saya kerjakan adalah sambungan bola - mendapatkan representasi dan percepatan angka empat. Untuk percobaan ini saya mencoba mensimulasikan pendulum Foucault dengan memodelkan bumi dan meletakkan pendulum dengan sambungan bola di permukaan. Dengan melakukan itu, basis tetap saya adalah pusat bumi, yang dengannya Bumi berputar. Kemudian, dari pusat rotasi Bumi, saya dapat memutar ke atas / ke bawah ke garis lintang mana pun, menerjemahkannya ke permukaan, tempat saya menempatkan pendulum sendi bulat saya.
Chuck
Saya perlu cara untuk menambah gravitasi karena saya tidak bisa begitu saja meletakkannya di sumbu z di pangkalan tetap saya; ini akan membuat gravitasi bekerja dengan benar hanya di Kutub Utara. Pada dasarnya, saya tidak peduli tentang kekuatan di bawah permukaan bumi, saya hanya peduli tentang presesi pendulum.
Chuck
Saya telah mengajukan pertanyaan terkait tentang bagaimana saya harus menangani sambungan tetap.
Chuck
2

Jika Anda belum menemukan Perpustakaan Rigid Body Dynamics (RBDL) Anda mungkin ingin melihat bagaimana mereka mengimplementasikannya, dan / atau hubungi penulis Martin Felis.

Barrett Ames
sumber
Barrett, saya menemukan RBDL beberapa minggu yang lalu dan sementara saya bolak-balik mencoba mengumpulkan informasi, itu ditulis dalam C ++ dengan metode yang membuatnya sulit untuk mengikuti kode. Misalnya, ada baris dalam kode kinematika yang berbunyi G.block(0,q_index,6,1) = base_to_body.apply(model.X_base[j].inverse().apply(model.S[j]));. Jadi, apa fungsinya apply? Yah, saya harus pergi ke file header untuk kelas apa pun base_to_body, tetapi apakah itu gabungan atau badan? Juga, hal-hal seperti model.base[j].inverse().apply(model.S[j])juga tidak terlalu jelas.
Chuck
Itu tidak berarti bahwa itu kadang-kadang tidak berguna, tetapi bagi saya untuk mendapatkan pemahaman dari RBDL membutuhkan banyak upaya.
Chuck
Selamat datang di robotika Barrett Ames, terima kasih atas jawaban Anda, tetapi kami lebih memilih jawaban yang lengkap jika memungkinkan. Tautan cenderung membusuk sehingga jawaban yang mengandalkan tautan dapat dianggap tidak berguna jika tautan ke konten membusuk. Jika Anda menambahkan lebih banyak konteks dari tautan, kemungkinan besar orang akan menganggap jawaban Anda bermanfaat.
Mark Booth