ส่งปริมาณที่มีความหมายเข้าสู่การจำลอง
จบบทนี้ผู้เรียนจะเตรียมสัญญาข้อมูลแรงและเขียนแผนตรวจส่วนเชื่อมต่อได้ Simulator การเคลื่อนที่ต้องการแรงและโมเมนต์ในกรอบพิกัดที่แน่นอน ส่วน CFD หรือข้อมูลทดลองอาจให้ค่าสัมประสิทธิ์ในคนละนิยาม การแปลงผิดหน่วยหรือกลับเครื่องหมายทำให้ลำเร่งผิดทิศได้ แม้ข้อมูลต้นทางคำนวณถูก
บทนี้มี ส่วนเชื่อมตารางแรงต้านที่ติดตั้งและทดสอบใน DroneSim แล้ว พร้อมตัวอย่างสังเคราะห์เพื่อพิสูจน์เส้นทางข้อมูล ส่วนสูตรใบพัดและแบบบันทึกยังใช้เป็นพื้นฐานแยกจาก adapter นี้ ไม่มีชุดแรงที่ผ่าน validation ให้ใช้งานบิน และไม่ได้ใช้ผลจานกำหนดแรงจากบท CFD เป็นแรงต้านลำ
แผนภาพนี้เป็นกระบวนการทั่วไปสำหรับข้อมูลอากาศพลศาสตร์ในอนาคต รวมถึงข้อมูลใบพัดที่อาจต้องใช้ RPM ส่วน adapter ที่ทำงานจริงในบทนี้รับเฉพาะ airframe drag แบบ fixed-direction และ fixed-density โดยไม่ใช้ RPM
นิยามที่ต้องตรงกันก่อนสร้างตาราง
ให้ n เป็นรอบต่อวินาที (ไม่ใช่ rpm), D เป็นเส้นผ่านศูนย์กลาง m, V เป็นความเร็วตามแกนอ้างอิง m/s, T เป็นแรงขับ N และ P เป็นกำลัง W ใช้นิยามมาตรฐาน J = V/(nD), CT = T/(ρn²D⁴), CP = P/(ρn³D⁵) ดังนั้น T = CTρn²D⁴ และ P = CPρn³D⁵
เมื่อ n > 0 โมเมนต์บิดเพลา Q = P/(2πn) หน่วย N·m สัญลักษณ์ Q ตรงนี้คือ torque ต่างจากอัตราไหล Q ในบทช่องไหล ต้องระบุชื่อคอลัมน์ให้ชัด สูตรที่หารด้วย n ไม่ใช้ตรง ๆ ที่รอบศูนย์
UIUC Propeller Database เป็นแหล่งข้อมูลอุโมงค์ลมของใบพัดขนาดเล็ก โดยนิยาม Reynolds ในกราฟ static ใช้คอร์ดและความเร็วหมุนที่สถานี 75% ของรัศมี จึงไม่ควรนำไปเทียบ Re ที่ใช้เส้นผ่านศูนย์กลางโดยไม่มีการแปลง บทนี้เชื่อมไปยังข้อมูลเจ้าของโดยตรง ไม่คัดลอกฐานข้อมูลหรืออ้างสิทธิ์เผยแพร่ต่อโดยอัตโนมัติ
ตัวอย่างแปลงหน่วยที่ติดป้ายว่าสมมติ
กำหนด n = 100 รอบ/s = 6,000 rpm, D = 0.2 m, ρ = 1.225 kg/m³, CT = 0.10 และ CP = 0.05 จะได้ T = 1.96 N, P = 19.6 W และ Q ≈ 0.03119 N·m ค่าเหล่านี้ตั้งขึ้นเพื่อฝึกสูตร ไม่ใช่ข้อมูลใบพัดรุ่นใดหรือผลจาก UIUC
หาก V = 5 m/s จะได้ J = 0.25 แต่ไม่ควรใช้ CT เดิมโดยอัตโนมัติ เพราะสัมประสิทธิ์อาจเปลี่ยนตาม J และ Reynolds กำลัง P ในสูตรเป็นกำลังเพลา ไม่ใช่กำลังไฟจากแบตเตอรี่ ต้องมีโมเดลมอเตอร์/ESC และประสิทธิภาพเพิ่มเติมจึงเชื่อมกับการใช้พลังงานได้
สัญญาข้อมูลที่ต้องตกลงกับปลายทาง
| รายการ | สิ่งที่ต้องกำหนด |
|---|---|
| อินพุต | รอบหมุน rpm หรือ rad/s อย่างใดอย่างหนึ่งพร้อมตัวแปลง, ความเร็วอากาศสัมพัทธ์, ρ และตัวแปรที่ข้อมูลครอบคลุม |
| เอาต์พุต | แรง N และโมเมนต์ N·m พร้อมแกน กรอบพิกัด และเครื่องหมาย |
| กรอบพิกัด | นิยามแกน rotor/body/world และเมทริกซ์หมุนที่ใช้จริง |
| จุดกระทำแรง | ตำแหน่งเทียบศูนย์มวล เพื่อคำนวณโมเมนต์ r × F |
| ที่มา | แหล่งทดลองหรือ solver รุ่น case ID, geometry ID, วันที่ และ uncertainty |
| ช่วงใช้ได้ | ช่วงรอบ ความเร็ว ความหนาแน่น และเงื่อนไขที่ผ่านการตรวจ |
| ค่านอกช่วง | ปฏิเสธหรือเตือนตามนโยบายที่ตกลง ไม่ extrapolate อย่างเงียบ ๆ |
| เวลา | ค่าเฉลี่ยหรือค่าทันที ช่วงเฉลี่ย ความหน่วงและอัตราอัปเดต |
ตารางใน สมุดงานช่องไหล ยังเป็นแบบบันทึกสำหรับวางแผน ส่วน adapter ที่นำไปใช้จริงด้านล่างกำหนดสัญญาเฉพาะของแรงต้านลำ พร้อมแยก provenance เป็น synthetic, simulation หรือ experiment; ป้ายที่มาเหล่านี้ไม่ใช่ใบรับรองความแม่นยำ
ส่วนเชื่อมที่ทำงานจริงและขอบเขตข้อมูล
บน baseline DroneSim commit ต่อไปนี้:
b1e26271a08090c278e6c6a45ed64e9f7f7a0cec
เพิ่ม AirframeForceProvider เป็น อาร์กิวเมนต์ลำดับที่หกแบบ optional ของ stepDynamics ผู้เรียกเดิมยังใช้ drag model เดิม เมื่อส่ง provider เข้ามา จะใช้แรงและโมเมนต์จากตารางแทน params.dragCoef เฉพาะ airframe drag เท่านั้น แรงขับ rotor, reaction torque, แรงโน้มถ่วง และระบบมอเตอร์ยังอยู่ในโมเดลเดิม ไม่มี UI toggle หรือการโหลดตารางอัตโนมัติ
สร้าง provider ด้วยคำสั่ง:
createAerodynamicProvider(data, { densityKgM3, windWorldMps })
ฟังก์ชันตรวจ schema, หน่วย SI, ที่มา และ force_scope ที่เป็น airframe_drag_only ก่อนสร้าง provider ตารางใช้กรอบ FRD: x ไปหน้า, y ไปขวา, z ลง ส่วน body frame ของ DroneSim เป็น FLU: x ไปหน้า, y ไปซ้าย, z ขึ้น จึงหมุนแรงและโมเมนต์ด้วย (x, −y, −z) ก่อนแปลงแรงไป world frame
reference_from_cg_m เป็นเวกเตอร์จาก CG ไปยังจุดอ้างอิงโมเมนต์ของตาราง adapter คำนวณ MCG = Mreference + r × F หลังแปลงเข้ากรอบ FLU ต้องตรวจจุดอ้างอิงกับต้นทางจริงเพื่อไม่ให้เกิดโมเมนต์ซ้ำ
ตารางรุ่นนี้รองรับความเร็วหนึ่งมิติใน ทิศการเคลื่อนที่ผ่านอากาศคงที่ใน body frame, ความหนาแน่นคงที่ และ body angular rates เป็นศูนย์ โดยหัก wind world ออกจากความเร็วลำก่อนแปลงแกน ทิศนี้ตรงข้ามกับทิศลมที่พุ่งเข้าหาลำ ใช้ linear interpolation ภายในช่วงความเร็วเท่านั้น ไม่ extrapolate และไม่ปรับ density หรือมุมให้อัตโนมัติ อินพุตนอกช่วง/ผิดเงื่อนไขจะ throw แทน silent fallback
สาธิตหนึ่งก้าวเวลาและดาวน์โหลดโค้ด
ดาวน์โหลด สมุดงาน DroneSim adapter พร้อมโค้ด test, patch และผล JSON ภายในมีสำเนาไฟล์ original adapter ห้าไฟล์, patch เฉพาะ dynamics.ts, baseline และ SHA256 manifest ไม่รวมทั้ง simulator หรือการแก้ไขอื่นในโครงการ อ่าน README.md เพื่อ apply กับ checkout ใหม่ที่ baseline ตรงกัน แล้วจาก app รัน:
pnpm exec vitest run --maxWorkers=2
pnpm typecheck
pnpm build
New-Item -ItemType Directory -Force output
pnpm exec tsx scripts/aerodynamic-demo.ts output/aerodynamic-demo-reproduced.json
ตั้งชื่อผลลัพธ์ใหม่ทุกครั้ง เพราะ demo ไม่เขียนทับไฟล์เดิม ผลที่บันทึกใช้ตาราง synthetic ที่ 0, 5 และ 10 m/s ให้ Fx = 0, −0.3 และ −1.2 N ตามลำดับ แต่ละการเปรียบเทียบเริ่มใหม่ที่ความสูง 10 m ไม่ได้ต่อกันเป็น trajectory:
กำหนด vx เริ่มต้น 5 m/s และ Δt = 0.001 s เท่ากันทั้งสองกรณี:
| โมเดลแรงต้าน | vx หลังก้าว (m/s) |
|---|---|
| Drag เดิม | 4.999702558001189 |
| Synthetic override | 4.99940511600238 |
การรัน integration ผ่าน 650 tests ด้วย --maxWorkers=2, typecheck, build และ lint เฉพาะ TypeScript ที่แก้ ผลเหล่านี้ตรวจ software behavior รวมถึงแกน โมเมนต์ interpolation และการปฏิเสธข้อมูลผิดเงื่อนไข ไม่ใช่การ validate การบิน แรงโน้มถ่วงทำให้ทิศความเร็วเปลี่ยนได้ทันที จึงไม่ควรใช้ตาราง fixed-direction นี้กับ trajectory ทั่วไป
CFD กับ adapter เป็นสองการทดลองแยกกัน: source 0.08 N ของบทก่อนเป็นแรง rotor-like ที่กำหนดให้ของไหล ไม่ใช่แรงต้าน airframe ที่ solver ทำนาย การส่งเข้า adapter จะทำให้ ownership ของแรงผิด ก่อนเชื่อมข้อมูลจริงต้องมีแรงต้านลำที่ geometry, density, ทิศ, จุดอ้างอิง และช่วงเงื่อนไขตรงกันโดยไม่มี rotor หรือ gravity รวมอยู่
แผนตรวจการเชื่อมต่อก่อนเชื่อผล
เริ่มทดสอบการแปลง rpm เป็น rad/s และ n แล้วป้อนแรงสังเคราะห์ที่ทราบทิศเพื่อเช็กแกน ทดสอบแรงที่เยื้องศูนย์มวลเพื่อเช็ก r × F และแยกโมเมนต์ปฏิกิริยาจาก torque เพลา ถัดมาทดสอบ interpolation ภายในช่วง และตรวจว่าอินพุตนอกช่วงถูกจัดการตามสัญญา รวมถึงกรณีรอบศูนย์
เมื่อมีข้อมูลจริงจึงเปรียบเทียบแรงกับการทดลองที่เงื่อนไขตรงกัน ประเมินความไวต่อความหนาแน่น รอบและวิธีเฉลี่ย แล้วค่อยทดสอบการเคลื่อนที่รวม การที่ FLOWUnsteady รองรับงานอากาศพลศาสตร์ตามเวลาไม่ได้หมายความว่าผลใด ๆ ใช้กับ DroneSim ได้ทันที หรือว่าได้จำลอง rotor–rotor interaction ครบในตารางใบพัดเดี่ยว
กรณีศึกษาอุปกรณ์จริง: APC Thin Electric 10×5E
เลือกใบพัดรุ่นนี้เป็นจุดเริ่มต้นเพราะมีชุดวัดอุโมงค์ลมของ UIUC และเอกสารผู้ผลิตให้ตรวจข้ามแหล่ง ขนาดระบุ 10 นิ้ว × pitch 5 นิ้ว; เส้นผ่านศูนย์กลางที่ใช้แปลงหน่วยคือ D = 0.254 m การเลือกรุ่นนี้เป็นกรณีศึกษาไม่ได้หมายความว่าเหมาะกับมอเตอร์หรือโดรนทุกลำ
| แหล่ง | ใช้ทำอะไร |
|---|---|
| UIUC static: RPM, CT, CP | ข้อมูลจากการทดลองสำหรับกรณีไม่มีความเร็วเดินหน้า |
| UIUC dynamic: ชุดใกล้ 6,000 rpm | ศึกษาการเปลี่ยน CT/CP ตาม advance ratio; ใช้รอบจริงในข้อมูลประกอบ |
| APC performance data | ผลจากซอฟต์แวร์วิเคราะห์ของผู้ผลิต ไม่ใช่ข้อมูลวัดอิสระ |
ตัวอย่างแปลงสัมประสิทธิ์: แถว UIUC ที่ 5,869 rpm ให้ CT = 0.0977 และ CP = 0.0373 เมื่อสมมติความหนาแน่นสำหรับการคำนวณ ρ = 1.225 kg/m³ และ n = 5,869/60 รอบ/s สูตรด้านบนให้ T ≈ 4.7664 N, P ≈ 45.2118 W, Q ≈ 0.073563 N·m นี่คือค่าที่คำนวณกลับภายใต้ ρ ที่กำหนด ไม่ใช่การอ้างว่าความหนาแน่นระหว่างทดลองเท่ากัน หรือเป็นกำลังไฟแบตเตอรี่
ลำดับงานตรวจเทียบคือเลือก static หรือ dynamic ให้ตรงโจทย์ → บันทึกไฟล์ รุ่น และเงื่อนไข → คำนวณ CT/CP จากแบบจำลองด้วยนิยามเดียวกัน → เปรียบเทียบที่รอบและ J ตรงกัน → วิเคราะห์ความต่างและความไม่แน่นอน การประมาณระหว่างจุดสำหรับการเรียนรู้ต้องอยู่ในช่วงข้อมูล และไม่แทนการตรวจเทียบกับข้อมูลอิสระ
ชุดจานแรง 0.08 N เดิมยังไม่ใช่แบบจำลองของใบพัดรุ่นนี้ ต้องสร้าง geometry/โมเดลใบพัดและเงื่อนไขที่ตรงก่อนใช้ผล UIUC ตรวจเทียบ ส่วน adapter ที่แทนแรงต้านลำตัวก็ไม่ใช่ทางนำเข้าตารางแรงขับใบพัด
ไฟล์ข้อมูลและภาพเชื่อมจากเจ้าของโดยตรง ไม่รวมสำเนาฐานข้อมูลใน ZIP อ่านวิธีอ้างอิงที่ UIUC Propeller Database และตรวจสิทธิ์เพิ่มเติมก่อนเผยแพร่ข้อมูลหรือ geometry ต่อ
ตรวจรูปทรงก่อนสร้าง CFD ของใบพัดรุ่นนี้
เราเปิด geometry archive ของ APC เดือนกุมภาพันธ์ 2026 และตรวจไฟล์ 10x5E-PERF.PE0 แล้ว พบหัวไฟล์ v2025-1001 วันที่ 24 กุมภาพันธ์ 2026 ให้ station/chord เป็นนิ้วและ twist เป็นองศา รวมถึงความหนา sweep และ rake ไฟล์ระบุ E63 และ APC12 พร้อมจุดเริ่ม/สิ้นสุด transition; APC อธิบายว่า APC12 เทียบเท่า NACA 4412 แต่ข้อความนี้เพียงอย่างเดียวยังไม่ระบุวิธี blend และผิวสามมิติทุกจุด
เทียบกับ ตาราง geometry UIUC ซึ่งให้ r/R, c/R และ β โดยข้อมูลสองชุดไม่ได้ยืนยันว่าเป็น specimen หรือ revision เดียวกัน และ APC แยกมุมตาม datum ของ leading/trailing edge ออกจาก pitch ที่วัดด้วยเครื่องมือ จึงไม่ควรเรียกส่วนต่าง β กับ twist ว่า error การวัดทันที
ตัวอย่างตรวจหน่วย: ใช้รัศมี nominal R = 0.127 m ที่ r/R = 0.75 จะได้ r = 0.09525 m; แถว UIUC ให้ c/R = 0.128 จึงได้ chord c = 0.016256 m หรือ 16.256 mm และ β = 13.39° นี่เป็นการแปลงข้อมูล ไม่ใช่การสร้าง airfoil จากความกว้างใบเพียงค่าเดียว
ดาวน์โหลด ชุดตรวจและเปรียบเทียบ geometry ด้วย Python แล้วดาวน์โหลดตาราง UIUC และ archive APC จากเจ้าของแยกต่างหากตาม README เครื่องมือจับคู่สถานีรัศมีสามจุดด้วย linear interpolation บันทึก hash และแสดงส่วนต่างแบบอธิบายข้อมูล ไม่ทำนายแรงขับและไม่ขยายข้อมูลนอกช่วง
ผลจากไฟล์ที่ตรวจจริง: ที่ r/R = 0.75 ตาราง APC หลัง interpolation ให้ chord ≈ 17.137 mm และ twist ≈ 11.983° ส่วน UIUC ให้ chord 16.256 mm และ β 13.39° ความกว้างต่างกันประมาณ 0.881 mm แต่ยังสรุปไม่ได้ว่าชุดใดผิด เพราะยังไม่ยืนยัน revision ของใบพัดและ datum ของมุมว่าตรงกัน เก็บผลนี้เป็นหลักฐานตรวจข้อมูลก่อนเลือกแบบจำลอง
ก่อนรันใบพัดจริงต้องตรวจเพิ่ม: พิกัดหน้าตัดและวิธี transition, นิยามแกน/ทิศหมุน, hub/root/tip, revision ที่ตรงกับใบพัดทดลอง และผิวปิดที่ mesh ได้ จากนั้นจึงเลือกรอบกับ J ให้ตรงข้อมูล UIUC และศึกษากริด/ขอบเขต ส่วนไฟล์ที่มีอยู่เพียงพอสำหรับฝึกตรวจข้อมูลรูปทรงแล้ว แต่ยังไม่ยืนยัน CAD ที่ตรง specimen เดิม
ชุดข้อมูลพร้อมศึกษาต่อ: MS1101 จาก ENOLA

ภาพสร้างจากข้อมูลรูปทรงของ UPV / ENOLA และเผยแพร่ภาพดัดแปลงภายใต้ CC BY-SA 4.0 เป็นภาพอ้างอิง geometry ไม่ใช่ภาพ CFD หรือภาพสินค้า เปิดภาพขนาดเต็ม
เพื่อให้เดินหน้าต่อได้โดยไม่ต้องเดาหน้าตัด APC เราเลือก T-Motor MS1101 ในชุด ENOLA เป็นกรณีศึกษาข้อมูลจริงเพิ่มเติม ดาวน์โหลดและเปิดตรวจ archive แล้ว พบทั้ง OBJ, ตารางใบพัด, ผลวัดแรงขับและแรงบิด และผล OpenFOAM ของผู้วิจัย ข้อมูลเหล่านี้เพียงพอสำหรับเริ่มตรวจ geometry และจัดกรณีเปรียบเทียบ แต่ยังไม่ใช่ผล CFD ที่เว็บนี้รันเองหรือผลยืนยันความแม่นยำของแบบจำลอง ข้อมูลต้นทางและดาวน์โหลด
เริ่มจากไฟล์ใด
ดาวน์โหลด Propeller_Database.zip จากเจ้าของ แล้วเปิดโฟลเดอร์ BBDD/T-Motor/MS1101/ บน Windows หรือ Linux:
| ต้องการทำอะไร | ไฟล์ที่ใช้ |
|---|---|
| อ่านวิธีทดลองและนิยามมุม | README.txt — มุม 0° คือกระแสตามแกนหมุน |
| ดูรูปทรง 3D | geometry/MS1101.obj — เปิดด้วยโปรแกรมที่รองรับ OBJ |
| ตรวจ chord และ twist | geometry/MS110_blade_definition.csv — chord ใช้ mm |
| ศึกษาผลวัดแรง | results/MS1101_exp_0deg.csv — มี RPM, V, thrust และ torque พร้อมหน่วย |
| เปรียบเทียบวิธีคำนวณ | results/MS1101_OF_mrf.csv และ MS1101_OF_urans.csv — เป็นผลของผู้วิจัยต้นทาง |
ดาวน์โหลดคู่มือของเรา: บันทึกตรวจข้อมูลและ case sheet มีรายการไฟล์, hash, ตัวอย่างคำนวณ และขั้นตอนเตรียมกรณีศึกษา โดยไม่รวมฐานข้อมูลต้นทาง ผู้จัดทำอนุญาตข้อมูลภายใต้ CC BY-SA 4.0 และกำหนดการใช้เพื่อศึกษา/วิจัย ไม่ใช้ตัดสินใจการบินหรือภารกิจที่ความปลอดภัยขึ้นกับผลนี้
ตัวอย่างคำนวณจากผลวัดจริง
เลือกแถว 5088 RPM, V = 0 m/s ซึ่งบันทึกแรงขับ 4.6688 N และแรงบิด 0.05954 N·m:
n = 5088 ÷ 60 = 84.8 รอบ/s
P = 2πnQ = 2π × 84.8 × 0.05954 ≈ 31.724 W
นี่คือ กำลังกลที่เพลา ไม่ใช่กำลังไฟจากแบตเตอรี่ การหากำลังไฟต้องรู้ความสูญเสียของมอเตอร์และ ESC เพิ่มเติม ขณะ hover สูตร TV/P ให้ศูนย์ จึงไม่ควรนำไปสรุปว่าใบพัดไม่มีประสิทธิภาพ ใช้ตัวชี้วัด hover ที่เหมาะสมแยกต่างหาก
สิ่งที่ตรวจแล้ว และจุดที่ต้องรักษาไว้ในแบบจำลอง
- OBJ มี 335,812 vertices และ 671,620 สามเหลี่ยม ตรวจ indexed edges แล้วแต่ละเส้นติดกับสองหน้า จึงไม่พบขอบเปิดด้วยวิธีนี้ แต่ยังไม่รับรองว่าไม่มี self-intersection หรือสร้าง volume mesh ได้ดี
- Excel ระบุ D nominal = 0.2794 m ขณะที่ระยะ X ใน OBJ เท่ากับ 0.280288 ตรวจเพิ่มกับ ผู้ผลิต MS1101 ซึ่งระบุขนาดวัดจริง 280.3 mm จึงมีหลักฐานรองรับหน่วยเมตรของ OBJ โดยต่างเพียง 0.012 mm เก็บผิวเดิมและแยกขนาด nominal สำหรับ normalization ไม่ย่อผิวเพื่อให้ตรงตัวเลข 11 นิ้ว
- ตาราง twist ที่ r/R = 0.9 ให้ 8.75° แต่ช่อง radians ให้ 0.16 ซึ่งไม่ตรงกัน จึงใช้ OBJ เป็นรูปทรงหลัก ไม่สร้างผิวใหม่จากตารางโดยแก้ข้อมูลเงียบ ๆ
- CQ ที่เป็น NaN หมายถึงไม่มีข้อมูล ไม่ใช่ศูนย์ ส่วนสภาพอากาศและความไม่แน่นอนต้องตรวจตามกรณีทดลองก่อนกล่าวว่า validation ผ่าน
ลำดับทดลองที่ทำซ้ำได้
- เก็บไฟล์ต้นฉบับและตรวจ hash จากชุดคู่มือ ดู geometry เพื่อกำหนดแกนหมุนและเครื่องหมายแรงบิด
- เริ่ม hover ที่ 5088 RPM ตรงกับแถวทดลอง ใช้ Ω ≈ 532.814 rad/s บันทึกความหนาแน่นและความหนืดที่เลือก หากยังไม่ตรงการทดลองให้ระบุว่าเป็น preliminary comparison
- เริ่ม MRF แล้วศึกษาขนาดโดเมนและกริดอย่างน้อยสามระดับ ตรวจแรงขับ แรงบิด y+ และ residual ร่วมกัน ก่อนขยายไป URANS
- เปรียบเทียบ T และ Q แยกกัน ไม่ตั้งเกณฑ์ผ่านเป็นเปอร์เซ็นต์เองโดยไม่มีข้อมูลความไม่แน่นอน หากใช้ผล 3000/6000 RPM จากไฟล์ OpenFOAM ต้องระบุการ interpolation ของแถวทดลองด้วย
- เมื่อมีผลที่ตรวจแล้วจึงออกแบบส่วนเชื่อมแรงใบพัดใน DroneSim แยกจาก airframe-drag adapter ที่มีอยู่
งาน Aular et al. (2026) สนับสนุนการตรวจข้อจำกัด MRF เมื่อการไหลเอียง แต่ใช้ใบพัดอ้างอิงคนละรูปทรง จึงนำค่าความคลาดเคลื่อนของงานนั้นมาเป็นเกณฑ์ผ่านของ MS1101 โดยตรงไม่ได้
เปรียบเทียบผลต้นทางก่อนใช้เป็นเกณฑ์

กราฟดัดแปลงจาก UPV / ENOLA v1 ภายใต้ CC BY-SA 4.0 เป็นผลของผู้วิจัยต้นทาง ไม่ใช่ผล CFD ที่เรารันเอง ไม่มี error bar เพราะยังไม่มีข้อมูลความไม่แน่นอนของชุดทดลองนี้ เปิดกราฟขนาดเต็ม
ที่ 6000 RPM ใช้ผลวัด 5815 และ 6068 RPM ทำ linear interpolation ได้ T ≈ 6.46244 N, Q ≈ 0.0814705 N·m ส่วนผล MRF ต้นทางให้ 5.5896 N และ 0.1134 N·m จึงต่างประมาณ −13.51% และ +39.19% ตามลำดับ ตัวเลขนี้เป็นส่วนต่างเชิงพรรณนา ไม่ใช่คะแนนผ่าน/ไม่ผ่าน และจุดที่ประมาณขึ้นมาไม่ใช่การวัดใหม่
สูตรตรวจซ้ำ: ส่วนต่าง (%) = 100 × (ค่าจำลอง − ค่าทดลองที่ประมาณ) ÷ ค่าทดลองที่ประมาณ หากตัวหารเป็นศูนย์ต้องใช้ส่วนต่างสัมบูรณ์แทน เครื่องมือจะไม่เทียบจุดที่อยู่นอกช่วง RPM ที่วัด
ดาวน์โหลดเครื่องมือเปรียบเทียบผล ENOLA ด้วย Python ใช้ได้บน Windows/Linux โดยไม่ติดตั้งไลบรารีเพิ่ม ดาวน์โหลด archive ต้นทางแยกตาม README เครื่องมือตรวจ hash ก่อนอ่านไฟล์และไม่เขียนทับรายงานเดิม
การตรวจ normalization ที่แถว 5088 RPM พบว่าเมื่อใช้นิยามมาตรฐานและ D = 0.2794 m การคำนวณกลับจาก T/CT ให้ค่าความหนาแน่น 1.20984 แต่จาก Q/CP ให้ 1.19584 kg/m³ ตัวเลขเหล่านี้เป็นเพียงเครื่องมือตรวจความสอดคล้อง ไม่ใช่ความหนาแน่นที่วัดได้ การเปลี่ยนเส้นผ่านศูนย์กลางเพียงค่าเดียวก็ไม่แก้ความต่างได้ทุกแถว จึงต้องขอนิยามการเฉลี่ยและ normalization จากต้นทางก่อนสรุปสาเหตุ
สิ่งที่ยังยืนยันแทนผู้วิจัยไม่ได้: สภาพอากาศจริงระหว่างวัด การสอบเทียบเซนเซอร์ และ uncertainty budget ไม่อยู่ใน README/CSV ที่ตรวจ จึงไม่ควรนำค่าอุณหภูมิหรือความหนาแน่นที่บทความใช้ตั้งค่า CFD มาอ้างว่าเป็นสภาพทดลอง ค่าที่เราตั้งในการรันต้องติดป้ายว่าเป็น simulation assumptions
ผลรันใบพัดจริง: ตรวจความพร้อมก่อนเชื่อค่าจำลอง

กราฟนี้เป็น ผลที่เรารันเอง ต่างจากกราฟเปรียบเทียบผลต้นทางด้านบน ใช้ผิว MS1101 จาก ENOLA และคำนวณแรงจากความดันรวมกับความหนืด ไม่ได้ป้อนแรงขับทดลองเข้าไปบังคับผล เปิดกราฟขนาดเต็ม
สิ่งที่ชุดทดลองทำได้แล้ว
สร้าง mesh รอบใบพัดจริงและรัน OpenFOAM 2512 แบบ steady MRF / k-omega SST ที่ 5088 RPM ได้ พร้อมบันทึกแรงขับ แรงบิด residual และ yPlus เลือก ρ = 1.225 kg/m³ และ ν = 1.5 × 10⁻⁵ m²/s เป็น สมมติฐานของการจำลอง ซึ่งยังไม่ยืนยันว่าตรงกับสภาพทดลอง ENOLA
ผิวที่ใช้คงพิกัดเดิม ตัดออกเฉพาะสามเหลี่ยมพื้นที่ศูนย์ 2 หน้า จากทั้งหมด 671,620 หน้า แล้วตรวจผิวปิดและทิศ normal ก่อนสร้าง mesh ชุดทดลองตรวจ hash ของ archive และ OBJ ก่อนอ่าน ไม่รวมสำเนารูปทรงต้นทางหรือ OpenFOAM ไว้ในไฟล์ดาวน์โหลด
ดาวน์โหลดชุดรัน MS1101 พร้อมหลักฐาน CFD สำหรับ Ubuntu 24.04 amd64 หรือ Windows ผ่าน WSL Ubuntu 24.04 มี README ขั้นตอนรันและผลตรวจแต่ละกรณี ต้องดาวน์โหลด ENOLA จากเจ้าของแยกต่างหาก และใช้ชื่อโฟลเดอร์ผลลัพธ์ใหม่ทุกครั้ง
อ่านผลอย่างไรโดยไม่สรุปเกินหลักฐาน
รันจบตามจำนวนรอบไม่เท่ากับลู่เข้า เราตรวจ 100 รอบท้าย: ค่าเฉลี่ยระหว่างครึ่งแรกกับครึ่งหลังเปลี่ยนต่ำกว่า 1% และช่วงสูงสุด–ต่ำสุดต่ำกว่า 2% ของค่าเฉลี่ย ทั้งแรงขับและแรงบิด พร้อม initial residual ของตัวแปรทั้งหกต่ำกว่า 10⁻⁵ เกณฑ์นี้เป็นเกณฑ์คัดกรองเชิงตัวเลขของแบบฝึก ไม่ใช่ใบรับรองความถูกต้องทางกายภาพ
กริด 85,289 cells ที่รอบ 800 ให้แรงขับรอบสุดท้ายประมาณ 2.5165 N แต่แรงขับ 100 รอบท้ายยังแกว่งเป็นช่วงประมาณ 14.12% ของค่าเฉลี่ย ส่วนกริด 156,104 cells ให้ประมาณ 2.7336 N และช่วงแกว่ง 8.83% จึงยังไม่ผ่านการลู่เข้า ไม่ควรเลือกตัวเลขรอบสุดท้ายไปใส่ DroneSim เป็นสมรรถนะที่ยืนยันแล้ว
เมื่อลด relaxation และรันกริด 156,104 cells ต่อถึงรอบ 1600 แรงขับ 100 รอบท้ายแกว่งเหลือประมาณ 1.24% และผ่านเกณฑ์ plateau ของแรงทั้งสองตัว แต่ residual สูงสุดยังประมาณ 8.42 × 10⁻⁴ จึง ยังไม่ผ่านเกณฑ์รวม ตัวอย่างนี้แสดงว่ากราฟแรงดูนิ่งขึ้นเพียงอย่างเดียวยังไม่เพียงพอ
การศึกษากริดที่สาม โดเมนใหญ่ขึ้น และการลด relaxation มีบันทึกใน results/*/summary.json และกราฟด้านบน:
| กรณีในชุดดาวน์โหลด | จำนวน cells | รอบสุดท้ายที่มีแรง | สถานะ |
|---|---|---|---|
| coarse — กริดตั้งต้น | 85,289 | 800 | ไม่ผ่านเกณฑ์การลู่เข้า |
| fine — เพิ่มความละเอียดผิว | 156,104 | 800 | ไม่ผ่านเกณฑ์การลู่เข้า |
| finer — ละเอียดขึ้นอีก | 399,881 | 358 | หยุดก่อนครบ ไม่มีหลักฐานรันจบ |
| finer-resumed — รันต่อในสำเนาแยก | 399,881 | 800 | รันครบแล้ว แต่ไม่ผ่าน plateau และ residual |
| domain — ขยายกล่องคำนวณ | 234,113 | 800 | รันต่อจาก checkpoint; ยังไม่ผ่านเกณฑ์ |
| relaxed — ลด relaxation ของ fine | 156,104 | 1,600 | ผ่าน plateau แต่ residual ไม่ผ่าน |
กรณี finer มีค่า yPlus จาก checkpoint รอบ 350 จึงไม่อ้างว่าเป็นค่ารอบ 358 และยังไม่สรุปสาเหตุการหยุดจากหลักฐานที่มี การปรับ relaxation เปลี่ยนวิธีแก้สมการ ไม่ได้ปรับความหนาแน่นหรือแรงให้เข้ากับข้อมูลทดลอง
อัปเดต 1.12.6: รันกริด finer ต่อจาก checkpoint 350 ในสำเนาแยกจนถึง 800 สำเร็จแล้ว โดยไม่เปลี่ยน mesh หรือเงื่อนไข แรงขับรอบสุดท้าย 2.8932 N, แรงบิด 0.08292 N·m แต่แรงขับ 100 รอบท้ายยังมีช่วงแกว่ง 12.33% และ residual สูงสุด 1.37 × 10⁻³ จึงยังไม่ลู่เข้า ค่า yPlus รอบ 800 อยู่ประมาณ 1.10–64.48 (เฉลี่ย 16.76) การรันครบช่วยปิดช่องว่างการประมวลผล แต่ไม่ทำให้การตรวจเทียบผ่านโดยอัตโนมัติ
ข้อจำกัดสำคัญ: mesh ยังไม่มี prism layers และ yPlus กระจายหลายช่วง; ใช้ convection แบบ first-order upwind; การแกว่งตาม SIMPLE iteration ไม่ใช่การแกว่งตามเวลาจริงของใบพัด แม้มีหลายกริดก็ยังอ้าง grid independence, Richardson extrapolation หรือ GCI ไม่ได้เมื่อผลยังไม่ลู่เข้า
ทางไปสู่แบบจำลองที่ตรวจเทียบได้
- ตรวจชั้นใกล้ผิวและความไวต่อ mesh/ขอบเขต พร้อมความสอดคล้องของแกนหมุนและแรง หาก steady MRF ยังไม่ลู่เข้า ให้ศึกษา transient พร้อม timestep และช่วงเฉลี่ยที่เพียงพอ
- ขอข้อมูลสภาพทดลอง นิยาม normalization การติดตั้งและความไม่แน่นอนจากเจ้าของข้อมูล แล้วเก็บแยกจากค่าที่ตั้งสมมติใน CFD
- เมื่อผ่านการตรวจเชิงตัวเลขแล้วจึงเทียบ T/Q และสัมประสิทธิ์ ณ รอบและสภาวะเดียวกัน พร้อม uncertainty ก่อนส่งค่าผ่าน adapter เข้า DroneSim
ชุดนี้จึง พร้อมใช้ฝึกรันและวิเคราะห์สาเหตุที่ผลยังไม่น่าเชื่อถือ ส่วนการยืนยันสมรรถนะใบพัดยังไม่ผ่าน ไม่ใช้ผลนี้ตัดสินใจการบินจริง
ข้อมูลเพิ่มจากการตรวจงานวิจัยและวิธีรายงานผล
เราเปิดตรวจ งาน ICAS 2024 ของทีม ENOLA เพิ่มแล้ว พบว่าใช้ใบพัดคนละรุ่นกับ MS1101 จึงไม่ยกข้อมูลการสอบเทียบหรือวิธีเก็บตัวอย่างของงานนั้นมาเป็น metadata ของชุดนี้ ส่วน บทความ AST ที่เกี่ยวข้อง ระบุว่าขอข้อมูลจากผู้วิจัยได้ การค้นรอบนี้ยังไม่ยืนยันสภาพอากาศและ uncertainty ของแถว MS1101 ที่ใช้ตรวจเทียบ
NASA แนะนำให้ดูทั้ง residual และปริมาณวิศวกรรมที่สนใจ ค่าแรงที่นิ่งและสมการที่ลู่เข้าอาจเกิดคนละช่วงเวลา เกณฑ์ 10⁻⁵ ในชุดฝึกเป็นเกณฑ์ที่เราประกาศใช้ ไม่ใช่ค่ามาตรฐานสากลที่ NASA รับรองให้ทุกกรณี
ต่อมาพบ ฉบับเต็ม AST ที่ผู้เขียนเผยแพร่ ซึ่งมีตารางความไม่แน่นอนของเครื่องชั่งแรง แต่ยังเป็นการทดลองใบพัดอีกชุด จึงเพิ่มคำถามเรื่องเครื่องชั่ง การสอบเทียบ แกน และ coverage factor ในคำขอข้อมูล แทนการนำค่าจากตารางนั้นมาใช้กับ MS1101 ทันที
ค่า yPlus ในชุดนี้ใช้ค่าเริ่มต้น useWallFunction = true ตาม OpenFOAM 2512 จึงต้องอ่านร่วมกับ wall function ที่เลือก ไม่ถือว่าเป็นการตรวจ shear จากสนามไหลโดยตรงเสมอไป ส่วน kOmegaSSTLM รองรับการเปลี่ยนจาก laminar เป็น turbulent แต่ต้องเตรียมตัวแปรและเงื่อนไขเพิ่ม สูตร turbulence intensity ที่หารด้วยความเร็วขาเข้าใช้ตรง ๆ กับความเร็วศูนย์ของ hover ไม่ได้ จึงยังไม่สลับโมเดลแล้วอ้างว่าปัญหาหาย
เตรียมความไม่แน่นอนก่อนเทียบ CT และ CP

ภาพใช้ค่าจาก uncertainty-example.json เพื่อแสดงว่าแต่ละอินพุตมีส่วนต่อความแปรปรวนมากเพียงใด เมื่อเปลี่ยนค่าหรือ uncertainty สัดส่วนก็เปลี่ยน ไม่มีผลการวัด ENOLA อยู่ในตัวอย่างนี้ เปิดกราฟขนาดเต็ม
เมื่อ CT = T/(ρn²D⁴) และ CP = 2πQ/(ρn²D⁵) โดย n = RPM/60 หากอินพุตเป็นอิสระและความไม่แน่นอนเล็กพอสำหรับการประมาณอันดับหนึ่ง จะได้:
u(CT)/CT = √[(u(T)/T)² + (u(ρ)/ρ)² + (2u(n)/n)² + (4u(D)/D)²]
u(CP)/CP = √[(u(Q)/Q)² + (u(ρ)/ρ)² + (2u(n)/n)² + (5u(D)/D)²]
u คือ standard uncertainty ไม่ใช่ค่าความคลาดเคลื่อนสูงสุดจากสเปกโดยอัตโนมัติ หากตัวแปรสัมพันธ์กันต้องรวม covariance ตาม แนวทาง NIST TN 1297 จุดที่พลาดได้ง่ายคือคำนวณ P = 2πnQ แล้วนำ P กับ n ไปถือว่าเป็นอิสระอีกครั้ง จึงควรลดสูตรให้เหลือ Q และ n ก่อนอย่างที่แสดงด้านบน
ตัวอย่างสมมติเพื่อเรียนรู้: หากมีเพียง u(D)/D = 1% และอินพุตอื่นไม่มีความไม่แน่นอน สูตรให้ u(CT)/CT = 4% และ u(CP)/CP = 5% นี่แสดงความไวต่อเส้นผ่านศูนย์กลาง ไม่ใช่ uncertainty ที่วัดได้ของ ENOLA
ชุด Python เปรียบเทียบ ENOLA เพิ่ม uncertainty.py และ uncertainty-example.json แล้ว รัน python uncertainty.py uncertainty-example.json new-result.json โดยตัวอย่างทั้งหมดติดป้ายสมมติ เครื่องมือไม่เติมค่าที่ขาดเป็นศูนย์ ไม่ประเมิน model bias และไม่ประกาศผล validation อัตโนมัติ
แบบฝึกทบทวนและแนวคำตอบ
โจทย์: ในตัวอย่างสมมติ หากเพิ่ม n เป็น 200 รอบ/s โดยตรึง ρ, D และสมมติ CT, CP คงเดิม จะได้ T และ P เท่าไร? สมมติฐานใดต้องตรวจใหม่?
แนวคำตอบ: T เพิ่มสี่เท่าเป็น 7.84 N และ P เพิ่มแปดเท่าเป็น 156.8 W แต่ต้องตรวจ Reynolds, tip Mach, J และช่วงข้อมูล เพราะสัมประสิทธิ์อาจไม่คงที่ การคูณตามสูตรไม่ได้ขยายช่วง validation
สิ่งที่พร้อมใช้คือสูตร แบบบันทึก โค้ด adapter ข้อมูล geometry อ้างอิง และชุดรัน CFD พร้อมหลักฐาน สิ่งที่ยังต้องยืนยันคือการลู่เข้าของผลและข้อมูลแรงตรงสภาวะที่ผ่าน validation รวมถึงโมเดลหลายมุมและ angular rates สำหรับการบินทั่วไป กลับไปตรวจ กระบวนการ CFD หรือทบทวน ภาพรวมบทเรียน
บรรณานุกรม
-
García-Tíscar et al. — On the effect of popular additive manufacturing technologies (AST 169, 2026)
-
UPV — ENOLA numerical and experimental propeller database, v1 (2026)
-
Aular et al. — Assessing the Fidelity of Steady-State MRF Modeling (2026)
-
Brandt, Deters, Ananda, Dantsker & Selig — UIUC Propeller Database, Vols 1–4
-
APC — Propeller Geometry Data และ archive 202602, ตรวจไฟล์ 10x5E-PERF.PE0 วันที่ 26 กันยายน 2569
ตรวจแหล่งต้นทาง 26 กันยายน 2569