พิมพ์คำที่ต้องการค้นหา ทั้งภาษาไทยและอังกฤษ

  1. หน้าแรก
  2. คลังความรู้
  3. ระบบควบคุม
  4. โรโบติกส์

// บทที่ 13.24 · ระบบควบคุม · Robotics & Robot Control

ระบบควบคุมโรโบติกส์: แขนกล หุ่นยนต์เคลื่อนที่ และการควบคุมข้อต่อ

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

เขียนโดย อาจารย์มดอัปเดต
สรุปใน 30 วินาที
  • จลนศาสตร์ตรง x=f(q)\mathbf x = f(\mathbf q) · ผกผัน q=f−1(x)\mathbf q = f^{-1}(\mathbf x) · ความเร็ว x˙=J(q)q˙\dot{\mathbf x} = J(\mathbf q)\dot{\mathbf q}
  • พลศาสตร์: M(q)q¨+C(q,q˙)q˙+g(q)=τM(\mathbf q)\ddot{\mathbf q} + C(\mathbf q, \dot{\mathbf q})\dot{\mathbf q} + \mathbf g(\mathbf q) = \boldsymbol\tau
  • PD + ชดเชยแรงโน้มถ่วง → เสถียรเสมอ (ลียาปูนอฟ) · computed torque → ทุกข้อต่อเป็นระบบอันดับสองเชิงเส้นที่เลือก ζ,ωn\zeta, \omega_n ได้
  • หุ่นยนต์ล้อ: v=r2(ωR+ωL)v = \frac r2(\omega_R + \omega_L), ω=rb(ωR−ωL)\omega = \frac rb(\omega_R - \omega_L)

จลนศาสตร์แขนกลสองข้อต่อ กลาง

A1 Forward kinematics (2-link planar) จลนศาสตร์ตรง

x=l1cos⁡θ1+l2cos⁡(θ1+θ2),y=l1sin⁡θ1+l2sin⁡(θ1+θ2)x = l_1\cos\theta_1 + l_2\cos(\theta_1 + \theta_2), \qquad y = l_1\sin\theta_1 + l_2\sin(\theta_1 + \theta_2)

ใช้ตรีโกณมิติล้วน ๆ · แขนหลายข้อต่อใช้เมทริกซ์แปลงพิกัด (Denavit–Hartenberg) คูณต่อกัน

A2 Inverse kinematics จลนศาสตร์ผกผัน

cos⁡θ2=x2+y2−l12−l222l1l2,θ1=atan2⁡(y,x)−atan2⁡(l2sin⁡θ2, l1+l2cos⁡θ2)\cos\theta_2 = \frac{x^2 + y^2 - l_1^2 - l_2^2}{2l_1l_2}, \qquad \theta_1 = \operatorname{atan2}(y, x) - \operatorname{atan2}(l_2\sin\theta_2,\ l_1 + l_2\cos\theta_2)

θ2=±cos⁡−1(⋅)\theta_2 = \pm\cos^{-1}(\cdot) ให้สองคำตอบ (ข้อศอกขึ้น/ลง) · ถ้า ∣cos⁡θ2∣>1|\cos\theta_2| \gt 1 ปลายแขนเอื้อมไม่ถึง

A3 Jacobian จาโคเบียนและภาวะเอกฐาน

(x˙y˙)=(−l1s1−l2s12−l2s12l1c1+l2c12l2c12)⏟J(θ)(θ˙1θ˙2),det⁡J=l1l2sin⁡θ2,τ=JTF\begin{pmatrix} \dot x \\ \dot y \end{pmatrix} = \underbrace{\begin{pmatrix} -l_1s_1 - l_2s_{12} & -l_2s_{12} \\ l_1c_1 + l_2c_{12} & l_2c_{12} \end{pmatrix}}_{J(\boldsymbol\theta)}\begin{pmatrix} \dot\theta_1 \\ \dot\theta_2 \end{pmatrix}, \qquad \det J = l_1l_2\sin\theta_2, \qquad \boldsymbol\tau = J^T\mathbf F

s12=sin⁡(θ1+θ2)s_{12} = \sin(\theta_1 + \theta_2) · θ2=0,π\theta_2 = 0, \pi (แขนเหยียดตรงหรือพับสุด) เป็นภาวะเอกฐาน · JTJ^T แปลงแรงที่ปลายแขนเป็นแรงบิดข้อต่อ (ใช้ใน force control) · ดูอินเวอร์สและดีเทอร์มิแนนต์

ตัวอย่าง A-1 · ไปและกลับ

แขนกล l1=l2=0.5l_1 = l_2 = 0.5 m ที่ θ1=30∘, θ2=60∘\theta_1 = 30^\circ,\ \theta_2 = 60^\circ ปลายแขนอยู่ที่ไหน แล้วคำนวณย้อนกลับ

  1. A1: x=0.5cos⁡30∘+0.5cos⁡90∘=0.433x = 0.5\cos30^\circ + 0.5\cos90^\circ = 0.433 m · y=0.5sin⁡30∘+0.5sin⁡90∘=0.75y = 0.5\sin30^\circ + 0.5\sin90^\circ = 0.75 m

  2. A2: cos⁡θ2=0.1875+0.5625−0.25−0.250.5=0.5⇒θ2=60∘\cos\theta_2 = \dfrac{0.1875 + 0.5625 - 0.25 - 0.25}{0.5} = 0.5 \Rightarrow \theta_2 = 60^\circ · θ1=atan2⁡(0.75,0.433)−atan2⁡(0.433,0.75)=60∘−30∘=30∘\theta_1 = \operatorname{atan2}(0.75, 0.433) - \operatorname{atan2}(0.433, 0.75) = 60^\circ - 30^\circ = 30^\circ ✓

  3. A3: det⁡J=0.25sin⁡60∘=0.217\det J = 0.25\sin60^\circ = 0.217 ห่างจากเอกฐาน ✓

ปลายแขนที่ (0.433, 0.75) m · คำนวณย้อนกลับได้มุมเดิม (คำตอบข้อศอกลง) · อีกคำตอบคือ θ2=−60∘, θ1=90∘\theta_2 = -60^\circ,\ \theta_1 = 90^\circ

พลศาสตร์และการควบคุมข้อต่อ ขั้นสูง

A4 Manipulator dynamics สมการพลศาสตร์แขนกล

M(q)q¨+C(q,q˙)q˙+g(q)+f(q˙)=τM(\mathbf q)\ddot{\mathbf q} + C(\mathbf q, \dot{\mathbf q})\dot{\mathbf q} + \mathbf g(\mathbf q) + \mathbf f(\dot{\mathbf q}) = \boldsymbol\tau

MM เมทริกซ์ความเฉื่อย (สมมาตร บวกแน่นอน เปลี่ยนตามท่า) · CC แรงโคริโอลิสและหนีศูนย์ · g\mathbf g แรงโน้มถ่วง · f\mathbf f แรงเสียดทาน · ได้จากสมการออยเลอร์–ลากรานจ์ ddt∂L∂q˙−∂L∂q=τ\frac{d}{dt}\frac{\partial\mathcal L}{\partial\dot q} - \frac{\partial\mathcal L}{\partial q} = \tau

A5 PD + gravity compensation PD + ชดเชยแรงโน้มถ่วง

τ=KP(qd−q)−KDq˙+g(q)\boldsymbol\tau = K_P(\mathbf q_d - \mathbf q) - K_D\dot{\mathbf q} + \mathbf g(\mathbf q)

ลู่เข้า qd\mathbf q_d คงที่เสมอสำหรับ KP,KD≻0K_P, K_D \succ 0 ใดก็ได้ (พิสูจน์ด้วยลียาปูนอฟ V=12q˙TMq˙+12eTKPeV = \tfrac12\dot{\mathbf q}^TM\dot{\mathbf q} + \tfrac12\mathbf e^TK_P\mathbf e) · ไม่ต้องรู้ MM และ CC เลย · ไม่มีเทอม I จึงไม่ต้องกลัว windup

A6 Computed torque (inverse dynamics) คอมพิวเต็ดทอร์ก

τ=M(q)[q¨d+KDe˙+KPe]+Cq˙+g ⇒ e¨+KDe˙+KPe=0\boldsymbol\tau = M(\mathbf q)\big[\ddot{\mathbf q}_d + K_D\dot{\mathbf e} + K_P\mathbf e\big] + C\dot{\mathbf q} + \mathbf g \ \Rightarrow\ \ddot{\mathbf e} + K_D\dot{\mathbf e} + K_P\mathbf e = \mathbf 0

ความผิดพลาดทุกข้อต่อกลายเป็นระบบอันดับสองเชิงเส้นอิสระ เลือก KP=ωn2, KD=2ζωnK_P = \omega_n^2,\ K_D = 2\zeta\omega_n · ต้องรู้แบบจำลองแม่น · คือ feedback linearization

ตัวอย่าง A-2 · ตั้งเกน computed torque

ต้องการให้ความผิดพลาดของทุกข้อต่อลู่เข้าแบบหน่วงวิกฤต เวลาเข้าที่ประมาณ 0.6 s

  1. หน่วงวิกฤต ζ=1\zeta = 1: ts≈5.8/ωnt_s \approx 5.8/\omega_n (2%) → ωn≈10\omega_n \approx 10 rad/s

  2. A6: KP=100 s−2K_P = 100\ \text{s}^{-2}, KD=20 s−1K_D = 20\ \text{s}^{-1} (เป็นเมทริกซ์ทแยงมุม)

KP=100I, KD=20IK_P = 100I,\ K_D = 20I ทุกข้อต่อตอบสนองเหมือนกันไม่ว่าท่าไหน (ตราบที่แบบจำลองถูก) · ต้องตรวจว่าแรงบิดที่คำนวณได้ไม่เกินขีดจำกัดของมอเตอร์

วางแผนวิถี กลาง

A7 Cubic and quintic trajectories วิถีพหุนาม (จากหยุดนิ่งถึงหยุดนิ่ง)

q(t)=q0+Δ[3(tT)2−2(tT)3],q˙max=3Δ2T,q¨max=6ΔT2q(t) = q_0 + \Delta\left[3\left(\tfrac tT\right)^2 - 2\left(\tfrac tT\right)^3\right], \qquad \dot q_{max} = \frac{3\Delta}{2T}, \qquad \ddot q_{max} = \frac{6\Delta}{T^2}

ความเร็วต่อเนื่อง ความเร่งกระโดดที่ต้นและปลาย · พหุนามกำลังห้า Δ[10τ3−15τ4+6τ5]\Delta[10\tau^3 - 15\tau^4 + 6\tau^5] ให้ความเร่งต่อเนื่องด้วย (นุ่มกว่า กระตุ้นเรโซแนนซ์น้อยกว่า) · ส่ง q,q˙,q¨q, \dot q, \ddot q ไปเป็น feedforward (K4)

ตัวอย่าง A-3 · หมุนข้อต่อ 90° ใน 2 วินาที

หาวิถีกำลังสามและความเร็ว ความเร่งสูงสุด

  1. Δ=π/2, T=2\Delta = \pi/2,\ T = 2: q(t)=1.178t2−0.393t3q(t) = 1.178t^2 - 0.393t^3 rad A7

  2. q˙max=3(π/2)4=1.178\dot q_{max} = \dfrac{3(\pi/2)}{4} = 1.178 rad/s ที่ t=1t = 1 s · q¨max=6(π/2)4=2.356\ddot q_{max} = \dfrac{6(\pi/2)}{4} = 2.356 rad/s² ที่ t=0t = 0

q(t)=1.178t2−0.393t3q(t) = 1.178t^2 - 0.393t^3 · ความเร็วสูงสุด 67.5°/s · ใช้ตรวจว่ามอเตอร์และเกียร์รับไหว (แรงบิดสูงสุด ≈Jeqq¨max\approx J_{eq}\ddot q_{max} + แรงโน้มถ่วง)

หุ่นยนต์ล้อและหุ่นยนต์ทรงตัว กลาง

A8 Differential-drive kinematics จลนศาสตร์หุ่นยนต์สองล้อขับ

v=r2(ωR+ωL),ω=rb(ωR−ωL),x˙=vcos⁡ϕ, y˙=vsin⁡ϕ, ϕ˙=ωv = \frac r2(\omega_R + \omega_L), \quad \omega = \frac rb(\omega_R - \omega_L), \quad \dot x = v\cos\phi,\ \dot y = v\sin\phi,\ \dot\phi = \omega

rr รัศมีล้อ bb ระยะห่างล้อ · ผกผัน: ωR,L=v±ωb/2r\omega_{R,L} = \dfrac{v \pm \omega b/2}{r} แล้วใช้ PI คุมความเร็วล้อแต่ละข้าง

A9 Go-to-goal / heading control นำทางไปเป้าหมาย

ϕd=atan2⁡(yg−y, xg−x),ω=Kϕ wrap⁡(ϕd−ϕ),v=min⁡(vmax, Kρρ)\phi_d = \operatorname{atan2}(y_g - y,\ x_g - x), \qquad \omega = K_\phi\,\operatorname{wrap}(\phi_d - \phi), \qquad v = \min\big(v_{max},\ K_\rho\rho\big)

ρ\rho = ระยะถึงเป้า · wrap มุมให้อยู่ใน (−π,π](-\pi, \pi] · หุ่นเดินตามเส้นใช้ PD กับความคลาดจากเส้นแทน ϕd−ϕ\phi_d - \phi

ตัวอย่าง A-4 · สั่งล้อ

หุ่นยนต์ล้อรัศมี 5 cm ระยะห่างล้อ 30 cm ต้องการ v=0.5v = 0.5 m/s และเลี้ยวด้วย ω=1\omega = 1 rad/s

  1. A8: ωR=0.5+1(0.15)0.05=13\omega_R = \dfrac{0.5 + 1(0.15)}{0.05} = 13 rad/s · ωL=0.5−0.150.05=7\omega_L = \dfrac{0.5 - 0.15}{0.05} = 7 rad/s

ล้อขวา 13 rad/s (124 rpm) ล้อซ้าย 7 rad/s (67 rpm) รัศมีวงเลี้ยว v/ω=0.5v/\omega = 0.5 m · ส่งเป็นค่าอ้างอิงให้ลูปความเร็วล้อแต่ละข้าง

หุ่นยนต์ทรงตัวสองล้อ คือลูกตุ้มกลับหัวบนล้อ (ขั้วฝั่งขวา) วัดมุมเอียงด้วย IMU (complementary filter: θ^=α(θ^+ωgyroT)+(1−α)θacc\hat\theta = \alpha(\hat\theta + \omega_{gyro}T) + (1 - \alpha)\theta_{acc}, α≈0.98\alpha \approx 0.98) แล้วใช้ LQR กับสถานะ (มุม อัตรามุม ตำแหน่ง ความเร็ว) หรือ PID สองลูป ลูปในคุมมุมเร็ว ลูปนอกคุมความเร็วช้า

แล็บ: ข้อต่อหนึ่งข้อต่อ

ข้อต่อที่มีความเฉื่อยและแรงโน้มถ่วงถูกชดเชยแล้ว คือพลานต์ 1Js2+bs\frac{1}{Js^2 + bs} ลองตั้ง KP=100, KD=20K_P = 100,\ K_D = 20 (ตัวอย่าง A-2 กับ J=1J = 1) ดูการตอบสนองแบบหน่วงวิกฤต แล้วลองข้อต่อที่ยืดหยุ่น

กำลังโหลดแล็บ (ต้องเปิด JavaScript)

ไอเดียโปรเจกต์หุ่นยนต์

  • พื้นฐาน หุ่นเดินตามเส้น PD · หุ่นหลบสิ่งกีดขวางด้วยอัลตราโซนิก · แขนกลเซอร์โว RC 3 แกนพร้อมจลนศาสตร์ผกผัน
  • กลาง หุ่นยนต์ล้อนำทางด้วยเอนโค้ดเดอร์ (odometry) ไปยังพิกัด · หุ่นทรงตัวสองล้อ · พล็อตเตอร์วาดรูป SCARA สองข้อต่อ
  • ขั้นสูง แขนกล 6 แกนด้วย computed torque · โดรนสี่ใบพัด (PID คาสเคดมุม–อัตรา) · หุ่นยนต์ทำแผนที่ด้วย LiDAR + ตัวกรองคาลมาน · หุ่นยนต์ขาเดิน

ไอเดียเพิ่มเติมอยู่ในคลังไอเดียระบบควบคุม

ต่อยอดไปหน้าถัดไป

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

คำถามที่พบบ่อย

ทำไมควบคุมแขนกลด้วย PID แยกแต่ละข้อต่อได้?

เพราะข้อต่อส่วนใหญ่มีเกียร์ทดสูง ความเฉื่อยของโหลดที่สะท้อนมายังมอเตอร์ลดลงตามกำลังสองของอัตราทด ผลกระทบระหว่างข้อต่อ (coupling) จึงเล็กเมื่อเทียบกับความเฉื่อยของมอเตอร์เอง มองเป็นการรบกวนที่ PID จัดการได้ แต่หุ่นยนต์ที่ขับตรง (direct drive) หรือเคลื่อนที่เร็วมาก ต้องใช้ computed torque

ภาวะเอกฐาน (singularity) คืออะไร?

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

หุ่นยนต์ทรงตัวสองล้อควบคุมอย่างไร?

เป็นลูกตุ้มกลับหัวบนล้อ พลานต์ไม่เสถียรวงเปิด นิยมใช้ LQR กับสถานะ มุมเอียง อัตราเอียง ตำแหน่ง และความเร็วล้อ หรือ PID สองลูป (ลูปในคุมมุมเอียง ลูปนอกคุมความเร็ว) มุมเอียงได้จากการหลอมรวมไจโรกับ accelerometer

อาจารย์มด · ธีรวุฒิ แสวงบุญ
อาจารย์สาขาวิชาวิศวกรรมไฟฟ้า มหาวิทยาลัยราชภัฏธนบุรี สมุทรปราการ · ดูโปรไฟล์