> For the complete documentation index, see [llms.txt](https://taiphoon-com.gitbook.io/taiphoon.com-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://taiphoon-com.gitbook.io/taiphoon.com-docs/th/firmware/ardupilot/tuning.md).

# คำอธิบายแนวคิดการจูน

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/izYaI6EmjdGlWgaLIoD9/image.png" alt=""><figcaption></figcaption></figure>

#### 1. ความเป็นมาและองค์ประกอบของตัวควบคุม PID

ArduPilot ใช้**ตัวควบคุม PID-FF-DFF** เพื่อรับประกันสมรรถนะการบินของโดรน ตัวควบคุมที่สมบูรณ์ประกอบด้วยส่วนหลัก 5 ส่วน ได้แก่

* **P (Proportional) เทอมสัดส่วน**: ตอบสนองต่อค่าความคลาดเคลื่อนในปัจจุบัน
* **I (Integral) เทอมปริพันธ์**: ชดเชยความคลาดเคลื่อนระยะยาวที่เกิดจากแรงภายนอก (เช่น ลม) เพื่อรักษาความเร็วและท่าทางการบิน
* **D (Derivative) เทอมอนุพันธ์**: ยับยั้งการพุ่งเกิน (Overshoot) ของความเร่ง ทำหน้าที่เป็นตัวหน่วง (Damping)
* **FF (Feed Forward) เทอมป้อนไปข้างหน้า**: คาดการณ์เอาต์พุตโดยตรงจากคำสั่ง
* **DFF (Derivative Feed Forward) เทอมป้อนไปข้างหน้าเชิงอนุพันธ์**

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/T1BE0FdfuvR3Y4Ytdgsh/image.png" alt=""><figcaption></figcaption></figure>

**ลำดับการปรับที่แนะนำคือ: D -> P -> I -> DFF -> FF**

**ข้อควรระวัง: ควรปรับแยกทีละแกน เช่น เมื่อปรับแกน Roll ให้เปลี่ยนเฉพาะพารามิเตอร์ของแกน Roll เท่านั้น**

***

#### 2. การเตรียมการก่อนการปรับ

โดยทั่วไปแนะนำให้ใช้เครื่องมือคำนวณด่วนที่ Mission Planner มีให้โดยตรง เพียงป้อนการกำหนดค่าของอากาศยานที่ท่านใช้ ก็จะสามารถประมาณค่า PID เริ่มต้นได้คร่าว ๆ

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/cK1cpGHiwJgG9ISfgQl2/image.png" alt=""><figcaption></figcaption></figure>

1. **การตั้งค่าพารามิเตอร์เริ่มต้น (Initial Tune Parameter)**: ตั้งค่าขนาดใบพัด จำนวนเซลล์แบตเตอรี่ และแรงดันไฟฟ้าใน "การกำหนดค่าเริ่มต้น" Mission Planner จะคำนวณพารามิเตอร์ที่เหมาะสมให้ จากนั้นเขียนค่าลงไปได้ทันที
2. **การตั้งค่าการบันทึกล็อก**: ล็อกที่ถูกต้องมีความสำคัญอย่างยิ่งต่อการจูน แนะนำให้ตั้งค่า `INS_LOG_BAT_OPT = 5` และตั้งจำนวนตัวอย่าง (Sample Count) เป็น 1024 หรือ 2048
3. **โหมดการบิน**: ควรทำการปรับในโหมด **Stabilize (ทรงตัวอัตโนมัติ)** หรือ **AltHold (รักษาระดับความสูง)** **ห้ามทำการจูนเบื้องต้นในโหมด Loiter โดยเด็ดขาด**

***

#### 3. การปรับ PID วงใน - อัตรา (Rate Controller)

นี่คือแกนหลักของการควบคุมระดับล่าง ประกอบด้วยตัวควบคุม 3 ตัว ได้แก่ การหมุนรอบแกนตามยาว (Roll) การก้มเงย (Pitch) และการหันเห (Yaw)

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/GQZlFVe3cb8FUBwDUUuC/image.png" alt=""><figcaption></figcaption></figure>

**1. การปรับสมดุล P:D**

เป้าหมายคือทำให้เส้นกราฟความเร็วเชิงมุมจริงซ้อนทับกับเส้นกราฟเป้าหมายได้อย่างสมบูรณ์

* **การปรับเทอม D**: เพิ่มค่า D ครั้งละ 30% จนกระทั่งสังเกตเห็นการสั่นแกว่งสั้น ๆ จากนั้นลดลงครั้งละ 10% จนการสั่นแกว่งหายไป และสุดท้ายลดลงอีก 25%
* **การปรับเทอม P**: เพิ่มค่า P ครั้งละ 30% จนกระทั่งเกิดการสั่นที่รวดเร็วและมีขนาดเล็ก จากนั้นลดลงครั้งละ 10% จนการสั่นหายไป และสุดท้ายลดลงอีก 25%
* **การประเมินผล**:
  * **P สูงเกินไป**: เกิดการสั่นแกว่งความถี่สูง; **P ต่ำเกินไป**: ตอบสนองช้า และโยกเยกได้ง่ายเมื่อถูกลมรบกวน
  * **D สูงเกินไป**: จะขยายสัญญาณรบกวน (Noise) ทำให้มอเตอร์สั่น เกิดเสียงหวีดแหลมแบบโลหะ หรือร้อนจัด; **D ต่ำเกินไป**: จะเกิดการพุ่งเกินอย่างชัดเจนหลังอินพุตแบบขั้นบันได (Step Input)

**2. อัตราขยายสัมบูรณ์และสมดุล P:I**

* **อัตราขยายโดยรวม**: หลังจากได้สมดุล P:D แล้ว สามารถเพิ่ม P, I, D ด้วยตัวคูณเดียวกัน จนกระทั่งเกิดการสั่นแกว่ง แล้วลดกลับลง 10-20%
* **การปรับเทอม I**: หากอัตราขยาย I สูงเกินไป จะเห็นการสั่นแกว่งที่ช้า; หากต่ำเกินไป จะทำให้ท่าทางการบินกลับสู่ตำแหน่งกลางล่าช้ามากขึ้นหลังโยกคันบังคับ
* **ค่าจากประสบการณ์ทั่วไป**: สำหรับ Pitch และ Roll ค่า P และ I มักจะเท่ากัน และ D ประมาณ 1/10 ของ P; สำหรับ Yaw โดยทั่วไปไม่จำเป็นต้องใช้เทอม D (D=0) และ I ประมาณ 1/10 ของ P

***

#### 4. การจูนการควบคุมท่าทาง (การทรงตัว) วงนอก (Attitude Controller)

หลังจากปรับ PID อัตราได้ดีแล้ว จึงทำการปรับการควบคุมท่าทาง ซึ่งเป็นตัวควบคุมแบบสัดส่วน (P) ที่ควบคุมการแปลงระหว่างมุมเป้าหมายกับมุมจริง

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/0KiU2Ote2WSwH5hj8ef1/image.png" alt=""><figcaption></figcaption></figure>

* **วิธีการปรับ**: เพิ่ม**เทอม P ของท่าทาง**ใน "การปรับขยาย" จนกระทั่งเริ่มเกิดการสั่นแกว่ง จากนั้นลดกลับลงประมาณ 20%
* **มุมเอียงสูงสุด**: โดยทั่วไปแนะนำให้ตั้งค่า `ANGLE_MAX = 30` (30 องศา) เพื่อให้มั่นใจว่ายังมีแรงขับเพียงพอในการรักษาระดับความสูงเมื่อเอียงสูงสุด

***

#### 5. การปรับ PID คันเร่งและความสูง (Throttle PID)

ตัวควบคุมคันเร่งควบคุมความเร่งในแนวดิ่งและความสูง

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/XOrYpgaCJUhRufBuUa1y/image.png" alt=""><figcaption></figcaption></figure>

1. **การเรียนรู้คันเร่งขณะลอยตัว**: ลอยตัวอย่างมั่นคงในโหมด AltHold เป็นเวลา 30 วินาที เพื่อให้ระบบเรียนรู้ค่า `MOT_THST_HOVER` หากค่านี้น้อยกว่า 0.3 แนะนำให้ตั้งค่า `ATC_THR_MIX_MAX` เป็น 0.9
2. **การชดเชยความเร่ง**:
   * ตั้งค่า `PSC_ACCZ_I` เป็น 3 เท่าของคันเร่งขณะลอยตัว
   * ตั้งค่า `PSC_ACCZ_P` เป็น 1.5 เท่าของคันเร่งขณะลอยตัว
3. **การควบคุมตำแหน่งแนวดิ่ง**: ปรับ `PSC_POSZ_P` เพื่อให้ติดตามความสูงได้อย่างกระตือรือร้นมากขึ้น แต่หากสูงเกินไปจะทำให้เกิดการพุ่งเกินหรือการสั่นแกว่ง

***

#### 6. การปรับการรักษาตำแหน่ง (Loiter/Position Control)

<figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/Mkmwy1gOK06ZsAwcI5WP/image.png" alt=""><figcaption></figcaption></figure>

1. **การควบคุมตำแหน่งแนวราบ**: `PSC_POSXY_P` แปลงความคลาดเคลื่อนของตำแหน่งเป็นความเร็วเป้าหมาย
2. **การควบคุมความเร็วแนวราบ**: `PSC_VELXY_P、I、D` แปลงความเร็วเป้าหมายเป็นความเร่ง
3. **การปรับพารามิเตอร์การเคลื่อนที่**:
   * **LOIT\_SPEED**: ตั้งค่าความเร็วสูงสุดในโหมด Loiter
   * **PSC\_JERK\_XY**: การเพิ่มค่านี้จะทำให้การควบคุมแนวราบตอบสนองได้เร็วขึ้น แต่หากสูงเกินไปจะทำให้การบินดูก้าวร้าวเกินไป

***

#### 7. วิธีการปรับเชิงตัวเลขที่ใช้กันทั่วไป

* เปิด Mission Planner แล้วเลือก**การปรับเซอร์โว**ที่ด้านล่างสุด
*

```
<figure><img src="/files/5blPEDTVjzri2bgY02ms" alt=""><figcaption></figcaption></figure>
```

* ดับเบิลคลิกบนกราฟ แล้วเลือกแกนที่ต้องการดูตามแกนที่ต้องการปรับ ในที่นี้ใช้ Pitch เป็นตัวอย่าง

  <figure><img src="https://content.gitbook.com/content/MaE0BhiwIATT2xWZzZn1/blobs/INa26LhJCL28FJszoPmB/image.png" alt=""><figcaption></figcaption></figure>
* ขณะบินจริง ให้สังเกตว่าเส้นทั้งสองแนบสนิทกันหรือไม่ หากแนบสนิทกันมากแสดงว่าสถานะ PID ดีมาก หากช่วงของ pitch.target กว้างกว่า pitch จริง อาจแสดงว่า Rate P ไม่เพียงพอ ในกรณีนี้ควรเพิ่ม Rate P และ Rate I แล้วปรับและทดสอบหลายครั้งจนกระทั่งเส้นทั้งสองแนบสนิทกัน จึงถือว่าแกน PID นั้นปรับเสร็จสมบูรณ์แล้ว
