ชมรมโดรน

3. แกนและทิศทาง Roll Pitch Yaw

ภาษากลางที่ใช้บอกว่าโดรนเอียงหรือหมุนไปทางไหน และทิศในโค้ดของชมรม

เวลาพูดถึงโดรน คนมักปะปนระหว่าง "ไปทางซ้าย" กับ "เอียงซ้าย" หน้านี้ตกลงภาษากลางให้ตรงกัน เพราะคำสั่งในโค้ดและกติกาจะใช้ทั้งสองแบบ

สามแกนของโดรน

แกนหมุนของโดรน roll pitch yawpitch ก้มเงยรอบแกนซ้ายขวา roll เอียงข้างรอบแกนหน้าหลัง yaw หมุนรอบแกนตั้งYaw หันหัวมองจากด้านบน (หัวอยู่บน)Pitch ก้ม–เงยมองจากด้านข้าง (หัวอยู่ขวา)Roll เอียงข้างมองจากด้านหน้า
สามการหมุนของโดรน Yaw หมุนหัว Pitch ก้ม–เงย Roll เอียงข้าง
ชื่อหมุนรอบแกนหน้าตาผลที่ตามมา
Yawแกนตั้งหมุนหัวซ้าย–ขวา เหมือนส่ายหน้าทิศที่หันหัวเปลี่ยน ไม่เคลื่อนที่
Pitchแกนซ้าย–ขวาก้มหัวหรือเงยหัว เหมือนพยักหน้าเคลื่อนไปหน้า/หลัง
Rollแกนหน้า–หลังเอียงข้าง เหมือนเอียงคอเคลื่อนไปซ้าย/ขวา

จำง่ายๆ: Pitch และ Roll เปลี่ยนการเอียง ทำให้โดรนเคลื่อนที่ ส่วน Yaw เปลี่ยนแค่ทิศหัว ไม่ได้ทำให้ตำแหน่งเปลี่ยน

เคลื่อนที่ vs เอียง

ต้องการโดรนทำในโค้ดชมรม
ไปข้างหน้าก้มหัว (Pitch ลง)fw(cm)
ถอยหลังเงยหัว (Pitch ขึ้น)bw(cm)
ไปทางซ้ายเอียงซ้าย (Roll ซ้าย)ml(cm)
ไปทางขวาเอียงขวา (Roll ขวา)mr(cm)
ขึ้น/ลงเพิ่ม/ลดรอบทั้ง 4sh(z)
หันหัวYawset_yaw(...)

ที่สำคัญ: ทิศ "หน้า ซ้าย ขวา" ของโค้ดคิดจากหัวโดรนหันไปทางไหนตอนนั้น ไม่ได้คิดจากสนาม ถ้าหมุนหัวโดรน 180° แล้วสั่ง fw(100) มันจะบินไปทางตรงข้ามกับก่อนหมุน เรื่องนี้สำคัญมากเวลาวางเส้นทาง (ดู วางแผนภารกิจ)

ระบบพิกัดที่เว็บนี้ใช้

เมื่อวาดสนามและตัวจำลอง เว็บใช้ระบบเดียวกับแผนที่ทั่วไป

  • ตัวจำลองและแผนผังสนาม: x ไปทางขวา y ไปทางหน้า (เหนือ) หน่วยเป็นเซนติเมตร จุด (0, 0) คือแท่น Takeoff กลางสนาม
  • ความสูง z วัดที่ ตัวโดรน จากพื้น

ในคำสั่ง set_pos(x, y) ของ pArduino ค่า x, y เป็นจำนวนเต็ม 16 บิต (ดู API) แต่ชมรมแทบไม่ใช้ เพราะไม่มีเซ็นเซอร์วัดตำแหน่งสัมบูรณ์ ใช้แบบ "เคลื่อนที่ไปตามเวลา" แทน

ทิศการหมุนที่ใช้ในโค้ด

คำสั่ง set_direction(dir, speed) ใช้เลขแทนทิศ (ละเอียดที่ pArduino API)

dirความหมาย
1ไปข้างหน้า
2ถอยหลัง
3ไปทางซ้าย
4ไปทางขวา
5ขึ้น
6ลง
7ล็อกตำแหน่ง (poshold)

ที่มา: move_forward_cm ใช้ set_direction(1, …) move_backward_cm ใช้ 2 move_left_cm ใช้ 3 move_right_cm ใช้ 4 up() ใช้ 5 down() ใช้ 6 และ poshold() ใช้ 7 ในไฟล์ protocol.cpp

ลองทำ

  1. วางกล่องบนโต๊ะแทนโดรน ทำท่า yaw 90° ตามเข็ม แล้วบอกว่า "ไปข้างหน้า" ตอนนี้ชี้ไปทางไหนของห้อง
  2. โดรนหันหัวไปทางประตู สั่ง ml(100) แล้ว fw(100) ตำแหน่งสุดท้ายเทียบกับจุดเริ่มคืออะไร (ซ้ายของโดรน 100 ซม. แล้วไปหน้าอีก 100 ซม. ตามทิศที่โดรนหันอยู่)
  3. หมุนหัว 180° แล้วสั่งชุดเดิม ตำแหน่งสุดท้ายเปลี่ยนยังไง

On this page