หุ่นยนต์ทรงตัวเองได้ (Self-Balancing Mobile Robot - SBMR) มันพิเศษยังไงนะเหรอ? ก็เพราะมันสามารถทรงตัวอยู่กับที่ได้ไงล่ะน้อง! โดยทั่วไป SBMR จะใช้อุปกรณ์วัดมุมเอียง (Inclination Angle) จากการรวมข้อมูลของ Accelerometer กับ Gyroscope แล้วก็ปรับตัวเองโดยการเคลื่อนที่ไปข้างหน้าหรือถอยหลังเพื่อให้มุมกลายเป็นศูนย์ (นั่นแหละที่เรียกว่าทรงตัว) ตัวควบคุม PID (Proportional-Integral-Derivative) จะเป็นคนตัดสินใจว่า "ต้องขยับเท่าไหร่" และ "ขยับเร็วแค่ไหน" เพื่อแก้ไขการล่องลอยของมุม (Angle Drift) และทำให้หุ่นยนต์นิ่งได้ไวๆ
ความท้าทายจะเพิ่มขึ้นอีกขั้นเมื่อเราต้องการควบคุมหุ่นยนต์แบบนี้ (ให้เคลื่อนที่หรือหมุน) ด้วยมือจากระยะไกล
โปรเจคนี้จะสาธิตวิธีสร้าง SBMR 2 ล้อพื้นฐานที่ควบคุมผ่าน WiFi จากระยะไกล พร้อมกล้อง WiFi ติดตั้งบนชุด Pan & Tilt ที่ขับเคลื่อนด้วยเซอร์โว มันถูกควบคุมด้วยมือโดยผู้ใช้จาก PC ผ่าน WiFi และเพราะเรามีสัญญาณวิดีโอสด (Live Video Feed) จากกล้องบนตัวหุ่น SBMR ตัวนี้จึงไม่จำเป็นต้องอยู่ในสายตาของผู้ควบคุม (ควบคุมลับหลังได้เลย!)
ภาพรวมโปรเจค
"Balance-Bot" ตัวนี้คือคลาสเรียนระดับมาสเตอร์ในเรื่อง การสืบสวนลูกตุ้มกลับหัว (Inverted Pendulum Forensics) และ การวินิจฉัยลูปควบคุมความถี่สูง (High-Frequency Control Loop Diagnostics) การทำให้มันทรงตัวบนสองล้อได้ ต้องอาศัยการประสานข้อมูลความเฉื่อย (Inertial Data) และการตอบสนองเชิงจลน์ (Kinetic Response) ให้แม่นยำ
โปรเจคนี้ใช้ประโยชน์จากสถาปัตยกรรม Dual-Core ของ RP2040 ในการนำกลยุทธ์การควบคุม PID (Proportional-Integral-Derivative) ที่แข็งแกร่งมาใช้ ด้วยการผนวกกล้องที่เชื่อมต่อ WiFi ไว้บนชุด Pan-Tilt แบบเมคคาทรอนิกส์ Balance-Bot นี้จึงช่วยให้เราควบคุมการเดินทางแบบ "เหนือสายตา" (Beyond Line of Sight - BLOS) ได้ ซึ่งเป็นการเปลี่ยนหุ่นยนต์ธรรมดาๆ ให้กลายเป็นโหนดการสื่อสารระยะไกล (Tele-presence Node) ที่ล้ำสมัยขึ้นมาเลย
เริ่มต้นกันเลย!
ขั้นตอนที่ 1: สร้างฮาร์ดแวร์ตามที่อธิบายไว้ในส่วน 'Hardware Development'
ขั้นตอนที่ 2: ติดตั้ง CASP เวอร์ชันล่าสุด (เวอร์ชัน 0.9.5.3 วันที่ 19.09.2022 ขึ้นไปจำเป็นสำหรับโปรเจคนี้) สามารถหาข้อมูลเพิ่มเติมเกี่ยวกับ CASP และวิดีโอสอนได้จากแหล่งข้อมูลที่เกี่ยวข้อง
ขั้นตอนที่ 3: ดาวน์โหลดโปรเจคตัวอย่าง 'Self Balancing Remote Controlled Mobile Robot with On-board Camera' และทำตามขั้นตอนที่กล่าวไว้ในส่วน 'Software Development'
ขั้นตอนที่ 4: จำเป็นต้องมีการปรับแต่งบางอย่างตามที่อธิบายในส่วน 'Adjustments' เพื่อให้ซอฟต์แวร์ทำงานเข้ากันได้กับฮาร์ดแวร์ที่คุณสร้างขึ้น คุณยังสามารถปรับปรุงประสิทธิภาพของหุ่นยนต์เพิ่มเติมได้โดยการแก้ไขซอร์สโค้ดจาก Custom Blocks
ขั้นตอนที่ 5: สุดท้าย วิธีการควบคุม SBMR ด้วยคีย์บอร์ดและเมาส์จะถูกอธิบายไว้ในส่วน 'Control Methodology'
การพัฒนาฮาร์ดแวร์
มอเตอร์กระแสตรง (DC Motor) สองตัวถูกติดตั้งบนโครงฐานที่เหมาะสม พร้อมกับล้อ ส่วนประกอบแพนและทิลท์ (Pan & Tilt Assembly) ที่ติดตั้งเซอร์โวมอเตอร์ขนาดเล็ก (Micro Servo) สองตัว ก็ถูกติดตั้งไว้บนโครงในตำแหน่งที่เหมาะสมเช่นกัน แบตเตอรี่ 12V ถูกวางบนโครงฐาน ส่วนโมดูลอิเล็กทรอนิกส์ต่างๆ ก็ถูกจัดวางและเชื่อมต่อตามแผนภาพการต่อที่แสดงไว้ในส่วน 'Schematic' ครับ ภาพด้านล่างนี้คือตัวอย่างการจัดวางทั่วไป

โปรเจกต์นี้ถูกสร้างและทดสอบแยกกันบนไมโครคอนโทรลเลอร์สองตัว คือ Arduino RP2040 Connect และ Raspberry Pi Pico ครับ บอร์ดไมโครคอนโทรลเลอร์เหล่านี้ทำหน้าที่เป็นสมองหลักของหุ่นยนต์ เราใช้มันในโหมดดวลคอร์ (Dual Core) และโอเวอร์คล็อกความถี่ขึ้นไปที่ 200MHz สำหรับ Arduino RP2040 และ 250MHz สำหรับ Raspberry Pi Pico เพื่อให้ได้เวลาตอบสนองที่เพียงพอสำหรับการทรงตัวของหุ่นยนต์ และการสื่อสารกับพีซีโฮสต์ผ่าน WiFi พร้อมๆ กัน
Arduino RP2040 มี IMU และ WiFi ในตัวอยู่แล้ว ดังนั้นจึงต้องการชิ้นส่วนภายนอกน้อยมากครับ คอร์-0 (Core-0) ถูกใช้สำหรับการสื่อสาร WiFi และบล็อก PWM ทั้งหมดสำหรับขับเคลื่อนล้อและเซอร์โวแพน/ทิลท์ของกล้อง ส่วนคอร์-1 (Core-1) ถูกใช้อย่างเต็มที่สำหรับ IMU และบล็อกที่จำเป็นสำหรับการทรงตัวของหุ่นยนต์
สำหรับ Raspberry Pi Pico นั้น คอร์-0 ถูกใช้สำหรับบล็อกที่จำเป็นสำหรับการทรงตัวของหุ่นยนต์ ส่วนคอร์-1 ถูกใช้สำหรับบล็อกที่เกี่ยวข้องกับการสื่อสารระยะไกลและการควบคุมหุ่นยนต์กับกล้องด้วยมือ เราใช้หน่วยวัดความเฉื่อย (Inertial Measurement Unit - IMU) รุ่น MPU-6050 (หรือ MPU-9250) สำหรับตรวจจับมุมเอียง (ในที่นี้คือมุม Roll เพราะทิศทางการติดตั้งของ IMU) ของหุ่นยนต์ มันสื่อสารกับไมโครคอนโทรลเลอร์บนบอร์ดผ่านอินเทอร์เฟซ I2C ครับ โมดูล WiFi ESP8266 ถูกใช้สำหรับสื่อสารกับพีซีโฮสต์ระยะไกลผ่าน WiFi โดยสื่อสารกับไมโครคอนโทรลเลอร์บนบอร์ดผ่านอินเทอร์เฟซอนุกรม (Serial Interface)
โมดูลกล้อง ESP32 ถูกติดตั้งบนชุดแพนและทิลท์เพื่อถ่ายวิดีโอสดและสตรีมไปยังพีซีโฮสต์ ไฟแฟลชที่อยู่บนโมดูล ESP32-CAM สามารถควบคุมได้ด้วยมือจากพีซีโฮสต์ในสภาพแสงน้อยได้
เราใช้แบตเตอรี่ 9V ถึง 12V เพื่อจ่ายไฟให้กับวงจรทั้งหมดบนหุ่นยนต์ และใช้ตัวแปลงแรงดัน DC Step Down จาก 9V/12V เป็น 5V เพื่อจ่ายไฟ 5V ที่จำเป็นให้กับไมโครคอนโทรลเลอร์, เซอร์โว และโมดูลกล้อง ESP32 ครับ
ล้วงลึกเทคนิค (Technical Deep-Dive)
- การวิเคราะห์เสถียรภาพของลูป PID (PID Loop Stability Forensics):
- เมทริกซ์เกนฮาร์มอนิก (The Gain-Matrix Harmonic): เสถียรภาพของหุ่นยนต์ถูกควบคุมโดยสัมประสิทธิ์สำคัญสามตัว: $K_p$ (สัดส่วน), $K_i$ (อินทิกรัล), และ $K_d$ (อนุพันธ์) ค่า $K_p$ ให้แรงแก้ไขทันทีตามค่าความผิดพลาดของมุมเอียง, $K_i$ ช่วยกำจัดค่าคลาดเคลื่อนคงที่ (Steady-State Offset) ที่เกิดจากการเลื่อนจุดศูนย์ถ่วง (CoG), และ $K_d$ ทำหน้าที่ลดทอนการ "สั่นไหวความถี่สูง (Jitter)" โดยการทำนายอัตราการเปลี่ยนแปลงของมุมเอียงล่วงหน้า
- การวินิจฉัยเวลาลูป (Loop-Timing Diagnostics): เพื่อรักษาท่าทางตั้งตรง ลูปควบคุมต้องทำงานที่ความถี่ที่แน่นอน (โดยทั่วไป >100Hz) โปรเจกต์นี้ใช้ประโยชน์จากดวลคอร์ของ RP2040 โดยให้ คอร์-1 ทำงานเฉพาะสำหรับการอ่านค่า IMU และคำนวณ PID เท่านั้น ในขณะที่ คอร์-0 จัดการกับการส่งข้อมูลระยะไกล (Telemetry) ผ่าน WiFi และการเปลี่ยนสถานะ PWM ของมอเตอร์แบบไม่บล็อก (Non-blocking)
- การผสานข้อมูลความเฉื่อยและฮาร์มอนิกของเซนเซอร์ (Inertial Fusion & Sensor Harmonics):
- ฟิลเตอร์เสริม MPU6050 (MPU6050 Complementary Filter): ข้อมูลจาก Accelerometer ดิบมักมีสัญญาณรบกวนความถี่สูงจากการสั่นสะเทือน ในขณะที่ข้อมูลจาก Gyroscope มักมีปัญหา Drift ความถี่ต่ำ เราจึงใช้ "ฟิลเตอร์เสริม (Complementary Filter)" (หรือรูปแบบของ Kalman Filter) ในการผสานสัญญาณเหล่านี้ เพื่อให้ได้มุมเอียง $(\theta)$ ที่สะอาด, ตอบสนองเร็วสุดๆ และยังคงเสถียรแม้ในระหว่างการเคลื่อนไหวของหุ่นยนต์ที่รุนแรง
- การโอเวอร์คล็อกและการวิเคราะห์การคำนวณ (Overclocking & Compute Forensics):
- การโอเวอร์คล็อกเชิงความร้อน (Thermal Overclocking): เพื่อจัดการกับการคำนวณเลขทศนิยม 64-bit และแพ็กเก็ต WiFi ที่ปริมาณสูงพร้อมกัน RP2040 ถูกโอเวอร์คล็อกไปที่ 200MHz (และ Pico ไปที่ 250MHz) การวิเคราะห์การคำนวณนี้ช่วยให้มั่นใจว่าเวลาแฝง (Latency) ระหว่าง "ตรวจจับการเอียง" กับ "จ่ายแรงดันให้มอเตอร์" นั้นน้อยที่สุด ซึ่งป้องกันไม่ให้หุ่นยนต์เข้าสู่สถานะการแกว่งกวัดที่ควบคุมไม่อยู่ (Catastrophic Oscillatory State) ครับ
การพัฒนาซอฟต์แวร์
A) การตั้งค่า ESP32 Camera
ก่อนจะเอา ESP32 Camera ไปใช้ในโปรเจค ต้องโปรแกรมให้มันมี IP address ที่ถูกต้องก่อนนะน้อง อยากรู้รายละเอียดว่าโปรแกรมยังไง ลองไปดูตัวอย่างของเราได้เลย (ESP32-CAM example) หรือจะไปหาอ่านเพิ่มเติมตามอินเทอร์เน็ตก็มีเพียบ
B) ซอฟต์แวร์สำหรับไมโครคอนโทรลเลอร์และเป้าหมายแบบ Native
เราใช้ซอฟต์แวร์ CASP เพื่อสร้างโมเดลและสร้างโค้ดไบนารีสำหรับไมโครคอนโทรลเลอร์บนบอร์ดและ PC แบบ Native ได้อย่างรวดเร็ว ซอฟต์แวร์ตัวนี้ช่วยให้เรามองเห็นสัญญาณที่จุดไหนของโมเดลก็ได้แบบเรียลไทม์ด้วยภาพกราฟิก ซึ่งฟีเจอร์นี้เราใช้กันหนักเวลาปรับแต่ง PID controller นะตัวนี้
นอกจากบล็อกปกติของ CASP แล้ว ในโมเดลเรายังใช้บล็อกที่เราสร้างขึ้นเอง (Custom Block) สองตัว (ตัวหนึ่งในโมเดล Target อีกตัวในโมเดล Native) เพื่อสร้างตรรกะที่บล็อกปกติทำไม่ได้ และเพื่อลดจำนวนบล็อกทั้งหมดด้วย เรามีซอร์สโค้ดของบล็อกที่เราสร้างเองให้ดูด้วยนะ
บล็อกที่เราสร้างเองในโมเดล Native บน PC จะสร้างสัญญาณควบคุมที่จำเป็นเมื่อผู้ใช้กดปุ่มบางปุ่มเพื่อควบคุมการเคลื่อนที่ของหุ่นยนต์
ส่วนบล็อกที่เราสร้างเองในโมเดล Target จะทำหน้าที่ปรับค่าจุดตั้ง (Set Point) ของมุมเอียง (ที่ป้อนเข้าไปในบล็อก Error) เพื่อนำทางหุ่นยนต์ตามคำสั่งจากผู้ใช้บน PC และยังปรับแต่งสัญญาณเอาต์พุตจาก PID controller ก่อนจะส่งไปขับมอเตอร์อีกด้วย น้องสามารถเข้าไปดูการตั้งค่าและซอร์สโค้ดของบล็อกเหล่านี้ได้เลย จะได้เรียนรู้วิธีนำบล็อกเหล่านี้ไปรวมกับบล็อกอื่นๆ ในโมเดล CASP
เราได้พัฒนาโมเดลสองตัวเพื่อให้บรรลุเป้าหมายที่ต้องการ
B.1) โมเดล Target ที่รันบน Arduino RP2040 Connect และ Raspberry Pi Pico ประกอบด้วย
- ตรรกะ Blink ที่บอกว่าระบบกำลังทำงาน รวมถึงบอกว่า IMU ทำงานปกติหรือเปล่า
- บล็อก IMU, PID controller ที่เราสร้างเอง และบล็อกสนับสนุนอื่นๆ ที่ช่วยรักษาสมดุลของหุ่นยนต์
- บล็อก WiFi และบล็อกสนับสนุนที่รับสัญญาณควบคุมที่จำเป็นจาก PC
- บล็อก PWM และ Servo ที่แมปกับพินของไมโครคอนโทรลเลอร์


ขั้นตอนต่อไปนี้คือวิธีโปรแกรมบอร์ด Target ให้ถูกต้องนะน้อง
- เชื่อมต่อบอร์ด Target กับ PC ผ่านสาย USB
- จดหมายเลขพอร์ตอนุกรม (Serial Port) ที่บอร์ดเชื่อมต่ออยู่จากระบบปฏิบัติการของ PC
- เปิดโปรแกรม CASP แล้วโหลดโปรเจค 'rc_target_arduino' สำหรับเป้าหมาย Arduino RP2040 หรือ 'rc_target_rpi' สำหรับเป้าหมาย Raspberry Pi เปิดไฟล์เวิร์กสเปซแล้วปรับค่าพารามิเตอร์ต่างๆ ของบล็อกตามที่อธิบายไว้ในส่วน Adjustments
- บล็อก WiFi communication ถูกตั้งค่าเป็นโหมด Station (สถานี) น้องอาจต้องป้อน SSID และรหัสผ่านของเครือข่ายที่อุปกรณ์ควรเชื่อมต่อ พารามิเตอร์ Local IP address ควรตั้งค่าเป็นที่ได้รับมาจาก DHCP client ของเครือข่าย
- เปิดเมนู Home->Simulation->Setup Simulation Parameters ภายใต้แท็บ TargetHW->General ให้ตั้งค่าพารามิเตอร์ 'Target Hardware Programmer Port' เป็นพอร์ตอนุกรมที่บอร์ดเชื่อมต่ออยู่
- บิลด์โมเดลและโปรแกรมบอร์ดโดยคลิกปุ่ม Run ได้เลย อย่าลืมเช็คให้ดีก่อนกดนะ!
B.2) โมเดล Native ที่รันบน PC ประกอบด้วย
บล็อก Camera ที่รับวิดีโอสดจาก ESP32 Camera น้องต้องป้อน IP address ของ ESP32 Camera ในพารามิเตอร์ของบล็อกนี้
บล็อก Image display สำหรับแสดงวิดีโอสดที่ได้รับจากกล้อง บล็อกนี้ยังถูกตั้งค่าให้ส่งสัญญาณจากคีย์บอร์ดและเมาส์ออกมาด้วย
บล็อก RC control: นี่คือบล็อกที่เราสร้างเอง มันรับสัญญาณคีย์บอร์ดและเมาส์จากบล็อก Image display แล้วสร้างสัญญาณควบคุมที่เหมาะสมสำหรับควบคุมการเคลื่อนที่ของหุ่นยนต์และการเคลื่อนไหวของหัว (Pan & Tilt)
บล็อก GPIO ที่แมปไปยังโมเดลเป้าหมายผ่านช่องทางการสื่อสาร WiFi

ขั้นตอนต่อไปนี้คือการรันโมเดลเนทีฟบน PC โฮสต์นะน้อง
- ก่อนจะไปต่อ ต้องแน่ใจว่า PC โฮสต์เชื่อมต่อกับเครือข่าย WiFi เดียวกันกับที่หุ่นยนต์เชื่อมอยู่ และหุ่นยนต์ต้องเปิดเครื่องพร้อมทำงานแล้ว
- โหลดโปรเจกต์ 'rc_native' เข้ามา
- คลิกที่เมนู Home->Simulation->Configure Simulation IO
- หน้าต่าง 'Configure Simulation Hardware' จะเปิดขึ้นมา ใต้หัวข้อ Native Nodes และ GPIO Device Nodes ให้เปลี่ยนค่า IP Address ที่วงไว้ในรูปด้านล่าง (โดยดับเบิลคลิกที่รายการ) ให้เป็น IP Address ของเครื่องโฮสต์และของบอร์ดตามลำดับ

- คลิกปุ่ม 'Connect Device' แล้วติ๊กถูกที่ช่อง 'Online Data' โปรแกรมตอนนี้ควรจะสื่อสารกับบอร์ดเป้าหมายได้แล้ว โดยมีรอบเวลาประมาณ 30ms บอร์ดเป้าหมายตอนนี้จะปรากฏเป็นเอนด์พอยต์ 'EP0' ให้กับโมเดลเนทีฟ โมเดลเนทีฟสามารถใช้เอนด์พอยต์นี้เพื่อเชื่อมต่อไปยัง I/O ต่างๆ บนบอร์ดเป้าหมายได้
- คลิกปุ่ม 'Save' เพื่อบันทึกการตั้งค่าแล้วปิดหน้าต่าง
- รันโมเดลโดยคลิกปุ่ม Run หน้าต่าง Simulation Panel ควรจะเปิดขึ้นมาและเริ่มสื่อสารกับบอร์ด
- ภาพหน้าจอของ Simulation Panel ที่รันบน PC โฮสต์แสดงดังด้านล่าง

วิศวกรรมและการนำไปใช้
- WiFi Telemetry & Visual HMI:
- UDP Control Bus: หุ่นยนต์สื่อสารกับ PC โฮสต์ผ่านบริดจ์ ESP8266 คำสั่งจากคีย์บอร์ด $(W, A, S, D)$ จะถูกส่งเป็นแพ็กเก็ต UDP แบบหน่วงเวลาต่ำ ซึ่งจะไปปรับค่าจุดตั้งค่า (set-point) ของ PID $(\theta_{ref})$ เพื่อสร้างความไม่สมดุลที่คำนวณไว้ ทำให้เกิดการเคลื่อนที่ไปหน้า/หลัง
- Visual Pipeline: ESP32-CAM อีกตัวแยกต่างหากจะส่งสตรีมวิดีโอแบบ MJPEG กลับมา HMI บนโฮสต์ (ที่สร้างด้วย CASP) จะซ้อนกราฟสำหรับปรับแต่ง PID แบบเรียลไทม์ลงบนวิดีโอ ทำให้เราสามารถทำ "Live Forensics" คือปรับค่าเกนของคอนโทรลเลอร์ $(K_p, K_i, K_d)$ ไปพร้อมๆ กับที่หุ่นยนต์ทรงตัวอยู่ได้เลย
- Mechatronic Gimbal Diagnostics:
- Pan-Tilt Kinematics: กล้องบนบอร์ดถูกติดตั้งบนกิมบอลเซอร์โวสองแกน ทำให้สามารถสแกนภาพไปรอบๆ ได้โดยอิสระ โดยไม่รบกวนแกนหลัก (แกนโรล) ที่ใช้ทรงตัวของหุ่นยนต์
การปรับแต่ง
สำหรับไมโครคอนโทรลเลอร์บนบอร์ดเป้าหมาย
- ค่าออฟเซตของเซ็นเซอร์ IMU (บล็อก sen_offset) จำเป็นต้องปรับถ้าจุดศูนย์ถ่วงของหุ่นยนต์เอียงไปด้านใดด้านหนึ่ง และ/หรือ พื้นที่วางมีระดับเอียง
- พารามิเตอร์สัดส่วน (Proportional), อินทิกรัล (Integral) และอนุพันธ์ (Derivative) ของคอนโทรลเลอร์ PID ต้องถูกปรับแต่ง (tune) ตามเส้นผ่าศูนย์กลางล้อ, ความคลอนของล้อ (backlash), อัตราทดเกียร์ของมอเตอร์ขับเคลื่อน, ตำแหน่งติดตั้งเซ็นเซอร์ IMU, น้ำหนัก, ความสูง และจุดศูนย์ถ่วงของหุ่นยนต์
- พารามิเตอร์ 'PWM Minimum Offset' ในบล็อกคัสตอม ต้องปรับให้ตรงกับค่าต่ำสุดที่ทำให้มอเตอร์เริ่มหมุนได้เมื่อมีภาระ (โหลด)
- ตรรกะอื่นๆ ที่จำเป็นเพื่อปรับปรุงประสิทธิภาพของหุ่นยนต์ สามารถเพิ่มได้ในซอร์สโค้ดของบล็อกคัสตอม
- การต่อสายมอเตอร์ล้ออาจจะต้องสลับขั้ว เพื่อให้ได้การเคลื่อนที่ไปหน้า/หลังที่ถูกต้องเมื่อกด W และ S
สำหรับเป้าหมายแบบเนทีฟ (บน PC)
- ตรรกะสำหรับสร้างการหมุนของมอเตอร์ไปหน้าและถอยหลัง ถูกพัฒนามาให้เข้ากับไอซีขับมอเตอร์ที่ใช้ในโปรเจกต์นี้คือ TA6586 ผู้ใช้สามารถปรับเปลี่ยนตรรกะนี้ให้เหมาะสมได้ถ้าใช้ไอซีขับมอเตอร์ตัวอื่น
- เซอร์โวมอเตอร์อาจต้องการการปรับตำแหน่งตั้งต้น (alignment) ให้หันไปทางด้านหน้าของหุ่นยนต์ สำหรับมุมเริ่มต้น (default angle) ที่กำหนดในพารามิเตอร์ของบล็อก rc_control
- ความเร็วพื้นฐาน (Base speed), ขีดจำกัดความเร็ว (speed limits) และพารามิเตอร์อื่นๆ ที่เกี่ยวกับการนำทาง สามารถปรับได้จากพารามิเตอร์ของบล็อก rc_control
วิธีการควบคุม (Control Methodology)
- หน้าต่างแผงจำลอง (simulation panel) ที่เห็นด้านบน จะรับค่าจากคีย์บอร์ดและเมาส์ได้เมื่อมันอยู่ในสถานะ "active" นะ
- ผู้ใช้สามารถใช้ปุ่ม W – เพื่อเดินหน้า, S – เพื่อถอยหลัง, A – เพื่อหมุนซ้ายรอบจุดศูนย์กลาง และ D – เพื่อหมุนขวารอบจุดศูนย์กลาง
- สามารถกดปุ่มผสมระหว่าง W/S กับ A/D เพื่อเลี้ยวซ้ายหรือขวาขณะที่กำลังเดินหน้าหรือถอยหลังได้
- สามารถเพิ่มความเร็วชั่วคราวได้ด้วยการกดปุ่ม Shift ค้างพร้อมกับปุ่มอื่นๆ ที่ว่ามา ส่วนความเร็วพื้นฐาน (Base speed) ปรับได้ด้วยปุ่ม Page Up และ Page Down จัดไปวัยรุ่น!
- ปุ่ม K และ M ใช้ปรับมุมเอียงออฟเซต (offset inclination angle) ที่หุ่นยนต์จะทรงตัวได้ ณ ตำแหน่งนั้นๆ ค่านี้จำเป็นถ้าจุดศูนย์ถ่วงของหุ่นยนต์เอียงไปด้านใดด้านหนึ่ง และ/หรือ พื้นมีระดับลาดเอียงบ้าง
- มุมเซอร์โวแนวตั้งและแนวนอน (ตั้งแต่ -90 ถึง +90 องศา) สำหรับควบคุมตำแหน่งหัวหุ่นยนต์ สามารถควบคุมได้ด้วยการขยับเมาส์
- ปุ่ม ‘G’ ใช้เพื่อตั้งมุมเซอร์โวทั้งสองกลับไปที่มุมเริ่มต้น (default angle)
- ปุ่ม 'L' ใช้เพื่อเปิด/ปิดไฟแฟลช LED ของกล้อง ESP32 ห้ามช็อตนะตัวนี้!
สรุป (Conclusion)
Balance-Bot นี่แหละตัวแทนของสุดยอด Embedded Dynamic Stability ด้วยการเชี่ยวชาญ PID Forensics และ Dual-Core Orchestration ทำให้ aadhuniklabs สร้างแพลตฟอร์มหุ่นยนต์ที่ทั้งแข็งแกร่งและสามารถเดินทางในสภาพแวดล้อมซับซ้อนได้ โปรเจกต์นี้เป็นฐานที่มั่นคงสำหรับน้องๆ นักศึกษาและวิศวกรที่กำลังสำรวจจุดตัดระหว่างเมคคาทรอนิกส์, ทฤษฎีการควบคุม และการส่งข้อมูลไอโอทีความเร็วสูง
Equilibrium Mastered: Mastering inverted pendulum forensics through PID harmonics.
หากมีคำถามหรือข้อเสนอแนะเกี่ยวกับโปรเจกต์นี้ สามารถติดต่อเราได้ผ่านช่องทางต่างๆ ของเราเลยครับ