นำทาง Quadrotor สู่เป้าหมาย


9

ฉันกำลังทำงานกับควอดโรเตอร์ ฉันรู้ตำแหน่งของมัน -ที่ซึ่งฉันต้องการไป - ตำแหน่งเป้าหมายและจากนั้นฉันคำนวณเวกเตอร์ - เวกเตอร์หน่วยที่จะพาฉันไปยังเป้าหมายของฉัน:abc

c = b - a
c = normalize(c)

เนื่องจาก quadrotor สามารถเคลื่อนที่ในทิศทางใดก็ได้โดยไม่มีการหมุนสิ่งที่ฉันพยายามทำคือ

  1. หมุนโดยมุมเอียงของหุ่นยนต์c
  2. แยกออกเป็นองค์ประกอบx,y
  3. ส่งพวกเขาไปยังหุ่นยนต์เป็นมุมม้วนและระดับเสียง

ปัญหาคือว่าถ้าหันเหเป็น 0 °± 5 แล้วก็ใช้งานได้ แต่ถ้าหันไปใกล้ +90 หรือ -90 มันจะล้มเหลวและหันไปทิศทางที่ผิด คำถามของฉันคือฉันขาดอะไรบางอย่างชัดเจนที่นี่?


1
คุณคำนวณมุมหันเหอย่างไร นอกจากนี้คุณใช้คอนโทรลเลอร์รุ่นใดและส่งข้อมูลอย่างไร?
DaemonMaker

คำถามที่น่าสนใจ @Hamza ยินดีหุ่นยนต์
มาร์กบูธ

@Hamza คุณใช้ภาษาและระบบใดอยู่ ฉันยังทำงานกับ quadcopter ด้วยภาษาโปรแกรม Atmega328 และ Ada หากคุณมีบล็อกเกี่ยวกับโครงการกรุณาแบ่งปัน

คุณถูกต้อง @MarkBooth ฉันเปิดแท็บสองแท็บแล้วและตั้งใจจะทำเครื่องหมายโพสต์อื่นว่าซ้ำกัน ฉันทำเครื่องหมายสิ่งนี้ผิดพลาดและไม่เห็นวิธีการยกเลิก เนื่องจากใช้เวลามากกว่าหนึ่งคะแนนเพื่อปิดฉันคิดว่านี่จะไม่เป็นปัญหา ฉันไม่ทราบว่ามันโพสต์ความคิดเห็นในนามของฉัน
DaemonMaker

ไม่มีปัญหา @Demonemon สิ่งเหล่านี้เกิดขึ้น ปิดเหมือนการโหวตซ้ำกันตอนนี้โพสต์ความคิดเห็นโดยอัตโนมัติซึ่งฉันคิดว่าเป็นคุณสมบัติที่มีประโยชน์เพราะจะแจ้งให้ผู้ใช้ตรวจสอบคำถามอื่นก่อนที่จะทำการโหวตอย่างใกล้ชิด
Mark Booth

คำตอบ:


6

ฉันได้รับสิ่งนี้:

มุมระหว่างเวกเตอร์

ก่อนอื่นคุณต้องการมุมระหว่างจุดและไม่ใช่เฉพาะเวกเตอร์หน่วย ABมุมระหว่าง 2 คะแนน

( ผ่านการเขียนโปรแกรม Fx ): θ=math.atan2(BxAx,ByAy)

มุมรถยอ

ถัดไป (และฉันสงสัยว่านี่เป็นปัญหาของคุณ) คุณต้องลบมุมหันเหของยานพาหนะออกจากการคำนวณคุณ ψθ

หัวเรื่อง vs Yaw

หากคุณกำลังใช้เข็มทิศสำหรับ "มุมหันเห" ของยานพาหนะของคุณนี่อาจเป็นความผิดพลาดของคุณได้เช่นกัน มุ่งหน้าไปและหันเหจะไม่เหมือนกัน ส่วนหัวของเข็มทิศเป็นศูนย์ตามแนวแกนบวกเพิ่มขึ้นเมื่อหมุนตามเข็มนาฬิกา :y

เข็มทิศดอกกุหลาบ

หันเหเป็นศูนย์ตามแนวแกนบวกเพิ่มขึ้นเมื่อหมุนทวนเข็มนาฬิกา :x

กราฟขั้วโลก

90 องศาทับซ้อนกันระหว่างการวัดเหล่านี้รวมกับการเพิ่ม (แทนที่จะลบ) ยานหันเหจากการหันเหที่ต้องการอาจเป็นสาเหตุที่สิ่งต่าง ๆ ทำงานเมื่อเป้าหมายของคุณอยู่ภายใน± 5 °และประพฤติไม่ดีที่± 90 °

การแปลงเป็นคอมโพเนนต์ X และ Y

จากตรงนั้นคุณบอกว่าคุณกำลังแปลงผลลัพธ์นี้เป็นส่วนประกอบและของมันส่งพวกมันไปยังหุ่นยนต์เป็นมุมม้วนและพิช ด้วยการแก้ไขข้างต้นคุณควรได้ผลลัพธ์ที่ต้องการ ณ จุดนี้ อย่างไรก็ตามการทำแผนที่องค์ประกอบเหล่านี้โดยตรงเพื่อเอียงมุมอาจเป็นปัญหาเนื่องจากคุณกำลังพิจารณาถึงความแตกต่างในตำแหน่งเท่านั้นไม่ใช่ความเร็ว (จริงๆแล้วโมเมนตัม) ของยานพาหนะ(θψ)xy

การควบคุมแบบ PID

คุณอาจได้รับการบริการที่ดีที่สุดโดยใช้ลูปควบคุม PID สำหรับม้วนและระดับเสียงของรถยนต์ นั่นคือเมื่อคุณแก้ไขรหัสของคุณและสามารถเข้าถึงเป้าหมายของคุณได้ฉันเดาว่าคุณจะเริ่มแก้ไขปัญหาแทน - แกว่งไปมา PID ที่ปรับแต่งอย่างถูกต้องจะป้องกันไม่ให้เกิดขึ้นในขณะที่ยังช่วยให้คุณสามารถเข้าถึงเป้าหมายได้อย่างรวดเร็ว

แทนที่จะเสียบและเข้ากับ roll and pitch ให้พิจารณาว่าเป็นค่าความผิดพลาดที่ pid และ pitch ที่ยอมรับเป็นอินพุตxy


มีการแก้ไขมากกว่า 90% และเปลี่ยนคำตอบทั้งหมด (จาก PID เป็น ATAN2) แต่ทักษะสูตรกราฟิกของคุณเป็นสัตว์ร้าย!
Spiked3

ฉันยังคงแนะนำ PID (อยู่ที่ด้านล่าง) ฉันเพิ่งผ่านส่วนเริ่มต้นของคำถามเพื่อให้แน่ใจว่าสมมติฐานของฉันถูกต้อง สูตรกราฟิกเป็นส่วนหนึ่งของการจัดรูปแบบลาเท็กซ์ซึ่งควรค่าแก่การตรวจสอบ
เอียน

"ส่วนหัวเข็มทิศเริ่มต้นจากแกน y บวกและเพิ่มตามเข็มนาฬิกาในขณะที่หันเหเริ่มจากแกน x บวกและเพิ่มการอ้างอิงทวนเข็มนาฬิกา" "การแปลงองค์ประกอบ x ของ (θ − ψ) เป็นม้วนและองค์ประกอบ y เป็น pitch" ฉันไม่เข้าใจเลย - อธิบายเพิ่มเติมได้โปรด (ฉันพลาดอะไรไป)
Spiked3

คำถามเดิมกล่าวถึง "การส่ง [องค์ประกอบ x และ y] ไปยังหุ่นยนต์เป็นมุมม้วนและระดับพิตช์" ซึ่งสำหรับฉันแล้วบ่งบอกว่า quadcopter เคลื่อนที่ไปทางด้านข้างโดยการเปลี่ยนมุมม้วนและไปข้างหน้าและข้างหลังโดยการเปลี่ยนมุมเอียง ฉันจะเพิ่มความชัดเจน
เอียน

เรียบร้อย ฉันไม่เคยเห็นมันทำแบบนั้น ฉันได้เห็นและทำเองแค่พลิก cos / sin เพื่อให้ได้ผลลัพธ์เดียวกัน ฉันจะต้องคิดเพิ่มอีกสักนิด ใช่นั่นจะทำให้เกิดการเคลื่อนไหว แต่ฉันไม่แน่ใจว่าสิ่งนั้นเกี่ยวข้องกับตำแหน่งของคุณและที่ที่คุณไปอย่างไรนอกเหนือจากความเร็วที่คุณไปถึง ขอบคุณ
Spiked3

5

ฉันจะสมมติว่าคุณกำลังพูดถึงเวกเตอร์ 3 มิติที่นี่ คุณสามารถพูดคุยnormalize()แบบนั้นได้หรือไม่ มันเป็นเรื่องธรรมดาหรือเปล่า (ฉันไม่เคยเห็นมันดังนั้นถ้าเป็นเช่นนั้นก็ให้ข่าวกับฉัน) มิฉะนั้นปัญหาการตัดเข็มทิศที่ชัดเจนจะมีผลกับคอมโพเนนต์ X และ Y แต่ละตัว ทำไมไม่เรียกพวกเขาว่ากลิ้งและ / หรือพิชและ / หรือหันเห? (การผสมระบบการตั้งชื่อ 3 มิติและ 2 มิติทำให้เกิดคำถามสับสน)

การทำ 2D ปกติของฉันจะเป็นแบบนี้

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);
}

ถ้ามันเป็นรูปสี่เหลี่ยมจริง ๆ , ฉันถือว่าส่วนประกอบ X และ Y ของคุณเป็น YAW, ระดับความสูง ((X, Y) & Z) คุณจะต้องจัดการYAW(X, Y)ในแบบ 2D และเพียงแค่ลดหรือเพิ่มระดับความสูงของ Z (และอีกครั้งนั่นคือสาเหตุที่ฉันสงสัยว่าการทำให้ปกติเป็นมากกว่าที่คุณมีตามปกติ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.