Memandu Quadrotor Menuju Target


9

Saya sedang mengerjakan quadrotor. Saya tahu posisinya - , ke mana saya ingin pergi - posisi target , dan dari sana saya menghitung vektor - vektor satuan yang akan membawa saya ke target saya:b cabc

c = b - a
c = normalize(c)

Karena quadrotor dapat bergerak ke segala arah tanpa rotasi, apa yang saya coba lakukan adalah

  1. putar oleh sudut robot yawc
  2. membagi menjadi yang komponenx,y
  3. meneruskannya ke robot sebagai sudut roll and pitch.

Masalahnya adalah bahwa jika menguap adalah 0 ° ± 5 maka ini bekerja, tetapi jika menguap dekat +90 atau -90 gagal dan mengarahkan ke arah yang salah. Pertanyaan saya, apakah saya kehilangan sesuatu yang jelas di sini?


1
Bagaimana Anda menghitung sudut yaw? Juga, pengontrol apa yang Anda gunakan dan bagaimana Anda mengirimkan data?
DaemonMaker

Pertanyaan menarik @ Hamza, selamat datang di Robotika .
Mark Booth

@ Hamza, Bahasa dan sistem apa yang Anda gunakan? Saya juga bekerja pada quadcopter dengan bahasa pemrograman Atmega328 dan Ada. Jika Anda memiliki blog tentang proyek ini, silakan bagikan.

Anda benar @MarkBooth, saya membuka dua tab dan bermaksud menandai pos lainnya sebagai duplikat. Saya menandai yang ini secara tidak sengaja dan tidak menemukan cara untuk membatalkannya. Mengingat bahwa dibutuhkan lebih dari satu suara untuk menutupnya, saya pikir ini tidak akan menjadi masalah. Namun saya tidak menyadari bahwa itu memposting komentar atas nama saya.
DaemonMaker

Tidak masalah @DemonemonMaker hal-hal ini terjadi. Tutup sebagai suara rangkap sekarang secara otomatis memposting komentar, yang menurut saya adalah fitur yang berguna karena mendorong orang untuk meninjau pertanyaan lain sebelum memberikan suara dekat sendiri.
Mark Booth

Jawaban:


6

Menerapkan kembali solusi Anda, saya mengerti:

Sudut Antara Vektor

Pertama, Anda ingin sudut antara titik dan - tidak secara khusus vektor satuan. ABSudut antara 2 titik

( via Pemrograman Fx ): θ=math.atan2(BxAx,ByAy)

Sudut Yaw Kendaraan

Selanjutnya (dan saya menduga ini adalah masalah Anda), Anda perlu mengurangi sudut yaw kendaraan dari dihitung . ψθ

Tajuk vs Yaw

Jika Anda menggunakan kompas untuk "yaw angle" kendaraan Anda, ini juga bisa menjadi kesalahan Anda; heading dan yaw tidak sama . Judul kompas adalah nol di sepanjang sumbu positif , meningkat saat berputar searah jarum jam :y

Kompas naik

Yaw adalah nol di sepanjang sumbu positif , meningkat saat berputar berlawanan arah jarum jam :x

Grafik kutub

90 derajat tumpang tindih antara pengukuran ini, dikombinasikan dengan menambahkan (bukannya mengurangi) menguap kendaraan dari menguap yang diinginkan, mungkin mengapa hal-hal bekerja ketika target Anda berada di dalam ± 5 ° dan berperilaku buruk di ± 90 °.

Konversi ke Komponen X dan Y

Dari sana, Anda mengatakan bahwa Anda mengubah hasil ini menjadi komponen dan , meneruskannya ke robot sebagai sudut roll dan pitch. Dengan koreksi di atas, Anda harus mendapatkan hasil yang diinginkan pada saat ini. Namun, memetakan komponen-komponen ini secara langsung ke sudut kemiringan mungkin menjadi masalah karena Anda hanya mempertimbangkan perbedaan posisi, dan bukan kecepatan (sebenarnya, momentum) kendaraan.(θψ)xy

Kontrol PID

Anda mungkin paling baik dilayani dengan menggunakan loop kontrol PID untuk roll dan pitch kendaraan. Yaitu, setelah Anda memperbaiki kode Anda dan dapat mencapai target Anda, tebakan saya adalah Anda akan mulai melakukan overshooting - berosilasi bolak-balik. PID yang disetel dengan benar akan mencegah hal itu terjadi sementara masih memungkinkan Anda untuk mendekati target dengan cepat.

Alih-alih memasukkan dan ke roll and pitch, anggap itu sebagai nilai kesalahan yang diterima roll dan pitch PID sebagai input.xy


Itu beberapa edit di sana, lebih dari 90% dan benar-benar mengubah jawaban (dari PID ke ATAN2). Tapi keterampilan rumus grafis mencolok Anda adalah binatang!
Spiked3

Saya masih merekomendasikan PID (ada di bagian bawah), saya hanya mengerjakan bagian awal dari pertanyaan untuk memastikan bahwa asumsi saya benar. Rumus grafis adalah bagian dari pemformatan Lateks, yang perlu diperiksa.
Ian

"heading kompas dimulai dari sumbu y positif dan meningkat searah jarum jam, sementara yaw dimulai dari sumbu x positif dan meningkat berlawanan arah jarum jam" referensi? "Mengonversi komponen x (θ − ψ) ke roll dan komponen y ke pitch" Saya tidak mengerti sama sekali - tolong penjelasan lebih lanjut (saya kehilangan sesuatu).
Spiked3

Pertanyaan awal menyebutkan "meneruskan [komponen x dan y] ke robot sebagai sudut roll dan pitch", yang bagi saya menunjukkan bahwa quadcopter bergerak dari sisi ke sisi dengan mengubah sudut roll, dan maju dan mundur dengan mengubah sudut pitch. Saya akan menambahkan beberapa kejelasan.
Ian

rapi. Aku belum pernah melihatnya seperti itu. Saya telah melihat, dan melakukan sendiri, hanya membalik cos / sin untuk mendapatkan hasil yang sama. Saya harus berpikir pada roll / pitch lagi. Ya, itu akan menyebabkan gerakan, tapi saya tidak yakin bagaimana itu ada hubungannya dengan di mana Anda berada dan ke mana Anda pergi, selain kecepatan di mana Anda sampai di sana. Terima kasih.
Spiked3

5

Saya akan menganggap Anda sedang berbicara tentang vektor 3D di sini. Bisakah Anda menyamaratakan normalize()seperti itu? Apakah itu biasa (saya belum pernah melihatnya jadi jika itu, maka berita kepada saya). Kalau tidak, masalah bungkus kompas jelas berlaku untuk masing-masing komponen X dan Y. Mengapa tidak menyebutnya roll dan / atau pitch dan / atau yaw? (Mencampur nomenklatur 3D dan 2D membingungkan pertanyaan).

Normalisasi 2D saya terlihat seperti ini;

int Pilot_QuickestTurnTo(int hdgNow, int hdgNew)
{
    hdgNow = Pilot_Hdg360(hdgNow);
    hdgNew = Pilot_Hdg360(hdgNew);
    if (hdgNow < hdgNew)
        hdgNow += 360;
    int left = hdgNow - hdgNew;
        return (left < 181 ? -left : 360 - left);
}

Jika memang quad, saya menganggap komponen X dan Y Anda benar-benar YAW, Altitude ((X, Y) & Z). Anda harus menangani YAW(X, Y)dalam 2D, dan cukup menjatuhkan atau mendapatkan ketinggian untuk Z (dan sekali lagi itu sebabnya saya curiga menormalkan lebih dari yang Anda miliki sebagai).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.