หน้าแรก คลังความรู้ ระบบควบคุม โรโบติกส์
Control Systems Engineering ดูครบทุกส่วน · 26 หน้า
// บทที่ 13.24 · ระบบควบคุม · Robotics & Robot Control
ระบบควบคุมโรโบติกส์: แขนกล หุ่นยนต์เคลื่อนที่ และการควบคุมข้อต่อ
หุ่นยนต์คือเมคาทรอนิกส์ที่มีหลายข้อต่อทำงานประสานกัน คำถามเปลี่ยนจาก “มอเตอร์หมุนไปมุมนี้” เป็น “ปลายแขนไปตำแหน่งนี้ตามเส้นทางนี้” ต้องเพิ่มจลนศาสตร์ (เรขาคณิต) พลศาสตร์ (แรงบิดที่ต้องใช้) และการวางแผนวิถี แต่ลึก ๆ แล้วทุกข้อต่อยังเป็นเซอร์โวที่คุมด้วยหลักการเดียวกับเมคาทรอนิกส์ หน้านี้พาจากแขนกลสองข้อต่อไปถึงหุ่นยนต์ล้อและหุ่นยนต์ทรงตัว สูตรใช้รหัส A
สรุปใน 30 วินาที
จลนศาสตร์ตรง x = f ( q ) \mathbf x = f(\mathbf q) x = f ( q ) · ผกผัน q = f − 1 ( x ) \mathbf q = f^{-1}(\mathbf x) q = f − 1 ( x ) · ความเร็ว x ˙ = J ( q ) q ˙ \dot{\mathbf x} = J(\mathbf q)\dot{\mathbf q} x ˙ = J ( q ) 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 M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + g ( q ) = τ
PD + ชดเชยแรงโน้มถ่วง → เสถียรเสมอ (ลียาปูนอฟ) · computed torque → ทุกข้อต่อเป็นระบบอันดับสองเชิงเส้นที่เลือก ζ , ω n \zeta, \omega_n ζ , ω n ได้
หุ่นยนต์ล้อ: v = r 2 ( ω R + ω L ) v = \frac r2(\omega_R + \omega_L) v = 2 r ( ω R + ω L ) , ω = r b ( ω R − ω L ) \omega = \frac rb(\omega_R - \omega_L) ω = b r ( ω R − ω L )
ค้นหาสูตรในหน้านี้
โหมดฝึกทำ: ซ่อนวิธีทำ
จลนศาสตร์แขนกลสองข้อต่อ กลาง
A1 Forward kinematics (2-link planar) จลนศาสตร์ตรง
x = l 1 cos θ 1 + l 2 cos ( θ 1 + θ 2 ) , y = l 1 sin θ 1 + l 2 sin ( θ 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) x = l 1 cos θ 1 + l 2 cos ( θ 1 + θ 2 ) , y = l 1 sin θ 1 + l 2 sin ( θ 1 + θ 2 )
ใช้ตรีโกณมิติ ล้วน ๆ · แขนหลายข้อต่อใช้เมทริกซ์แปลงพิกัด (Denavit–Hartenberg) คูณต่อกัน
A2 Inverse kinematics จลนศาสตร์ผกผัน
cos θ 2 = x 2 + y 2 − l 1 2 − l 2 2 2 l 1 l 2 , θ 1 = atan2 ( y , x ) − atan2 ( l 2 sin θ 2 , l 1 + l 2 cos θ 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) cos θ 2 = 2 l 1 l 2 x 2 + y 2 − l 1 2 − l 2 2 , θ 1 = atan2 ( y , x ) − atan2 ( l 2 sin θ 2 , l 1 + l 2 cos θ 2 )
θ 2 = ± cos − 1 ( ⋅ ) \theta_2 = \pm\cos^{-1}(\cdot) θ 2 = ± cos − 1 ( ⋅ ) ให้สองคำตอบ (ข้อศอกขึ้น/ลง) · ถ้า ∣ cos θ 2 ∣ > 1 |\cos\theta_2| \gt 1 ∣ cos θ 2 ∣ > 1 ปลายแขนเอื้อมไม่ถึง
A3 Jacobian จาโคเบียนและภาวะเอกฐาน
( x ˙ y ˙ ) = ( − l 1 s 1 − l 2 s 12 − l 2 s 12 l 1 c 1 + l 2 c 12 l 2 c 12 ) ⏟ J ( θ ) ( θ ˙ 1 θ ˙ 2 ) , det J = l 1 l 2 sin θ 2 , τ = J T F \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 ( x ˙ y ˙ ) = J ( θ ) ( − l 1 s 1 − l 2 s 12 l 1 c 1 + l 2 c 12 − l 2 s 12 l 2 c 12 ) ( θ ˙ 1 θ ˙ 2 ) , det J = l 1 l 2 sin θ 2 , τ = J T F
s 12 = sin ( θ 1 + θ 2 ) s_{12} = \sin(\theta_1 + \theta_2) s 12 = sin ( θ 1 + θ 2 ) · θ 2 = 0 , π \theta_2 = 0, \pi θ 2 = 0 , π (แขนเหยียดตรงหรือพับสุด) เป็นภาวะเอกฐาน · J T J^T J T แปลงแรงที่ปลายแขนเป็นแรงบิดข้อต่อ (ใช้ใน force control) · ดูอินเวอร์ส และดีเทอร์มิแนนต์
ตัวอย่าง A-1 · ไปและกลับ แขนกล l 1 = l 2 = 0.5 l_1 = l_2 = 0.5 l 1 = l 2 = 0.5 m ที่ θ 1 = 30 ∘ , θ 2 = 60 ∘ \theta_1 = 30^\circ,\ \theta_2 = 60^\circ θ 1 = 3 0 ∘ , θ 2 = 6 0 ∘ ปลายแขนอยู่ที่ไหน แล้วคำนวณย้อนกลับ
A1 : x = 0.5 cos 30 ∘ + 0.5 cos 90 ∘ = 0.433 x = 0.5\cos30^\circ + 0.5\cos90^\circ = 0.433 x = 0.5 cos 3 0 ∘ + 0.5 cos 9 0 ∘ = 0.433 m · y = 0.5 sin 30 ∘ + 0.5 sin 90 ∘ = 0.75 y = 0.5\sin30^\circ + 0.5\sin90^\circ = 0.75 y = 0.5 sin 3 0 ∘ + 0.5 sin 9 0 ∘ = 0.75 m
A2 : cos θ 2 = 0.1875 + 0.5625 − 0.25 − 0.25 0.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 cos θ 2 = 0.5 0.1875 + 0.5625 − 0.25 − 0.25 = 0.5 ⇒ θ 2 = 6 0 ∘ · θ 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 θ 1 = atan2 ( 0.75 , 0.433 ) − atan2 ( 0.433 , 0.75 ) = 6 0 ∘ − 3 0 ∘ = 3 0 ∘ ✓
A3 : det J = 0.25 sin 60 ∘ = 0.217 \det J = 0.25\sin60^\circ = 0.217 det J = 0.25 sin 6 0 ∘ = 0.217 ห่างจากเอกฐาน ✓
ปลายแขนที่ (0.433, 0.75) m · คำนวณย้อนกลับได้มุมเดิม (คำตอบข้อศอกลง) · อีกคำตอบคือ θ 2 = − 60 ∘ , θ 1 = 90 ∘ \theta_2 = -60^\circ,\ \theta_1 = 90^\circ θ 2 = − 6 0 ∘ , θ 1 = 9 0 ∘
พลศาสตร์และการควบคุมข้อต่อ ขั้นสูง
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 M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + g ( q ) + f ( q ˙ ) = τ
M M M เมทริกซ์ความเฉื่อย (สมมาตร บวกแน่นอน เปลี่ยนตามท่า) · C C C แรงโคริโอลิสและหนีศูนย์ · g \mathbf g g แรงโน้มถ่วง · f \mathbf f f แรงเสียดทาน · ได้จากสมการออยเลอร์–ลากรานจ์ d d t ∂ L ∂ q ˙ − ∂ L ∂ q = τ \frac{d}{dt}\frac{\partial\mathcal L}{\partial\dot q} - \frac{\partial\mathcal L}{\partial q} = \tau d t d ∂ q ˙ ∂ L − ∂ q ∂ L = τ
A5 PD + gravity compensation PD + ชดเชยแรงโน้มถ่วง
τ = K P ( q d − q ) − K D q ˙ + g ( q ) \boldsymbol\tau = K_P(\mathbf q_d - \mathbf q) - K_D\dot{\mathbf q} + \mathbf g(\mathbf q) τ = K P ( q d − q ) − K D q ˙ + g ( q )
ลู่เข้า q d \mathbf q_d q d คงที่เสมอสำหรับ K P , K D ≻ 0 K_P, K_D \succ 0 K P , K D ≻ 0 ใดก็ได้ (พิสูจน์ด้วยลียาปูนอฟ V = 1 2 q ˙ T M q ˙ + 1 2 e T K P e V = \tfrac12\dot{\mathbf q}^TM\dot{\mathbf q} + \tfrac12\mathbf e^TK_P\mathbf e V = 2 1 q ˙ T M q ˙ + 2 1 e T K P e ) · ไม่ต้องรู้ M M M และ C C C เลย · ไม่มีเทอม I จึงไม่ต้องกลัว windup
A6 Computed torque (inverse dynamics) คอมพิวเต็ดทอร์ก
τ = M ( q ) [ q ¨ d + K D e ˙ + K P e ] + C q ˙ + g ⇒ e ¨ + K D e ˙ + K P e = 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 τ = M ( q ) [ q ¨ d + K D e ˙ + K P e ] + C q ˙ + g ⇒ e ¨ + K D e ˙ + K P e = 0
ความผิดพลาดทุกข้อต่อกลายเป็นระบบอันดับสองเชิงเส้นอิสระ เลือก K P = ω n 2 , K D = 2 ζ ω n K_P = \omega_n^2,\ K_D = 2\zeta\omega_n K P = ω n 2 , K D = 2 ζ ω n · ต้องรู้แบบจำลองแม่น · คือ feedback linearization
ตัวอย่าง A-2 · ตั้งเกน computed torque
ต้องการให้ความผิดพลาดของทุกข้อต่อลู่เข้าแบบหน่วงวิกฤต เวลาเข้าที่ประมาณ 0.6 s
หน่วงวิกฤต ζ = 1 \zeta = 1 ζ = 1 : t s ≈ 5.8 / ω n t_s \approx 5.8/\omega_n t s ≈ 5.8/ ω n (2%) → ω n ≈ 10 \omega_n \approx 10 ω n ≈ 10 rad/s
A6 : K P = 100 s − 2 K_P = 100\ \text{s}^{-2} K P = 100 s − 2 , K D = 20 s − 1 K_D = 20\ \text{s}^{-1} K D = 20 s − 1 (เป็นเมทริกซ์ทแยงมุม)
K P = 100 I , K D = 20 I K_P = 100I,\ K_D = 20I K P = 100 I , K D = 20 I ทุกข้อต่อตอบสนองเหมือนกันไม่ว่าท่าไหน (ตราบที่แบบจำลองถูก) · ต้องตรวจว่าแรงบิดที่คำนวณได้ไม่เกินขีดจำกัดของมอเตอร์
วางแผนวิถี กลาง
A7 Cubic and quintic trajectories วิถีพหุนาม (จากหยุดนิ่งถึงหยุดนิ่ง)
q ( t ) = q 0 + Δ [ 3 ( t T ) 2 − 2 ( t T ) 3 ] , q ˙ m a x = 3 Δ 2 T , q ¨ m a x = 6 Δ T 2 q(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} q ( t ) = q 0 + Δ [ 3 ( T t ) 2 − 2 ( T t ) 3 ] , q ˙ ma x = 2 T 3Δ , q ¨ ma x = T 2 6Δ
ความเร็วต่อเนื่อง ความเร่งกระโดดที่ต้นและปลาย · พหุนามกำลังห้า Δ [ 10 τ 3 − 15 τ 4 + 6 τ 5 ] \Delta[10\tau^3 - 15\tau^4 + 6\tau^5] Δ [ 10 τ 3 − 15 τ 4 + 6 τ 5 ] ให้ความเร่งต่อเนื่องด้วย (นุ่มกว่า กระตุ้นเรโซแนนซ์น้อยกว่า) · ส่ง q , q ˙ , q ¨ q, \dot q, \ddot q q , q ˙ , q ¨ ไปเป็น feedforward (K4 )
ตัวอย่าง A-3 · หมุนข้อต่อ 90° ใน 2 วินาที
หาวิถีกำลังสามและความเร็ว ความเร่งสูงสุด
Δ = π / 2 , T = 2 \Delta = \pi/2,\ T = 2 Δ = π /2 , T = 2 : q ( t ) = 1.178 t 2 − 0.393 t 3 q(t) = 1.178t^2 - 0.393t^3 q ( t ) = 1.178 t 2 − 0.393 t 3 rad A7
q ˙ m a x = 3 ( π / 2 ) 4 = 1.178 \dot q_{max} = \dfrac{3(\pi/2)}{4} = 1.178 q ˙ ma x = 4 3 ( π /2 ) = 1.178 rad/s ที่ t = 1 t = 1 t = 1 s · q ¨ m a x = 6 ( π / 2 ) 4 = 2.356 \ddot q_{max} = \dfrac{6(\pi/2)}{4} = 2.356 q ¨ ma x = 4 6 ( π /2 ) = 2.356 rad/s² ที่ t = 0 t = 0 t = 0
q ( t ) = 1.178 t 2 − 0.393 t 3 q(t) = 1.178t^2 - 0.393t^3 q ( t ) = 1.178 t 2 − 0.393 t 3 · ความเร็วสูงสุด 67.5°/s · ใช้ตรวจว่ามอเตอร์และเกียร์รับไหว (แรงบิดสูงสุด ≈ J e q q ¨ m a x \approx J_{eq}\ddot q_{max} ≈ J e q q ¨ ma x + แรงโน้มถ่วง)
หุ่นยนต์ล้อและหุ่นยนต์ทรงตัว กลาง
A8 Differential-drive kinematics จลนศาสตร์หุ่นยนต์สองล้อขับ
v = r 2 ( ω R + ω L ) , ω = r b ( ω R − ω L ) , x ˙ = v cos ϕ , y ˙ = v sin ϕ , ϕ ˙ = ω 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 v = 2 r ( ω R + ω L ) , ω = b r ( ω R − ω L ) , x ˙ = v cos ϕ , y ˙ = v sin ϕ , ϕ ˙ = ω
r r r รัศมีล้อ b b b ระยะห่างล้อ · ผกผัน: ω R , L = v ± ω b / 2 r \omega_{R,L} = \dfrac{v \pm \omega b/2}{r} ω R , L = r v ± ωb /2 แล้วใช้ PI คุมความเร็วล้อแต่ละข้าง
A9 Go-to-goal / heading control นำทางไปเป้าหมาย
ϕ d = atan2 ( y g − y , x g − x ) , ω = K ϕ wrap ( ϕ d − ϕ ) , v = min ( v m a x , 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) ϕ d = atan2 ( y g − y , x g − x ) , ω = K ϕ wrap ( ϕ d − ϕ ) , v = min ( v ma x , K ρ ρ )
ρ \rho ρ = ระยะถึงเป้า · wrap มุมให้อยู่ใน ( − π , π ] (-\pi, \pi] ( − π , π ] · หุ่นเดินตามเส้นใช้ PD กับความคลาดจากเส้นแทน ϕ d − ϕ \phi_d - \phi ϕ d − ϕ
ตัวอย่าง A-4 · สั่งล้อ หุ่นยนต์ล้อรัศมี 5 cm ระยะห่างล้อ 30 cm ต้องการ v = 0.5 v = 0.5 v = 0.5 m/s และเลี้ยวด้วย ω = 1 \omega = 1 ω = 1 rad/s
A8 : ω R = 0.5 + 1 ( 0.15 ) 0.05 = 13 \omega_R = \dfrac{0.5 + 1(0.15)}{0.05} = 13 ω R = 0.05 0.5 + 1 ( 0.15 ) = 13 rad/s · ω L = 0.5 − 0.15 0.05 = 7 \omega_L = \dfrac{0.5 - 0.15}{0.05} = 7 ω L = 0.05 0.5 − 0.15 = 7 rad/s
ล้อขวา 13 rad/s (124 rpm) ล้อซ้าย 7 rad/s (67 rpm) รัศมีวงเลี้ยว v / ω = 0.5 v/\omega = 0.5 v / ω = 0.5 m · ส่งเป็นค่าอ้างอิงให้ลูปความเร็วล้อแต่ละข้าง
หุ่นยนต์ทรงตัวสองล้อ คือลูกตุ้มกลับหัว บนล้อ (ขั้วฝั่งขวา) วัดมุมเอียงด้วย IMU (complementary filter: θ ^ = α ( θ ^ + ω g y r o T ) + ( 1 − α ) θ a c c \hat\theta = \alpha(\hat\theta + \omega_{gyro}T) + (1 - \alpha)\theta_{acc} θ ^ = α ( θ ^ + ω g yro T ) + ( 1 − α ) θ a cc , α ≈ 0.98 \alpha \approx 0.98 α ≈ 0.98 ) แล้วใช้ LQR กับสถานะ (มุม อัตรามุม ตำแหน่ง ความเร็ว) หรือ PID สองลูป ลูปในคุมมุมเร็ว ลูปนอกคุมความเร็วช้า
แล็บ: ข้อต่อหนึ่งข้อต่อ
ข้อต่อที่มีความเฉื่อยและแรงโน้มถ่วงถูกชดเชยแล้ว คือพลานต์ 1 J s 2 + b s \frac{1}{Js^2 + bs} J s 2 + b s 1 ลองตั้ง K P = 100 , K D = 20 K_P = 100,\ K_D = 20 K P = 100 , K D = 20 (ตัวอย่าง A-2 กับ J = 1 J = 1 J = 1 ) ดูการตอบสนองแบบหน่วงวิกฤต แล้วลองข้อต่อที่ยืดหยุ่น
กำลังโหลดแล็บ (ต้องเปิด JavaScript)
ไอเดียโปรเจกต์หุ่นยนต์
พื้นฐาน หุ่นเดินตามเส้น PD · หุ่นหลบสิ่งกีดขวางด้วยอัลตราโซนิก · แขนกลเซอร์โว RC 3 แกนพร้อมจลนศาสตร์ผกผัน
กลาง หุ่นยนต์ล้อนำทางด้วยเอนโค้ดเดอร์ (odometry) ไปยังพิกัด · หุ่นทรงตัวสองล้อ · พล็อตเตอร์วาดรูป SCARA สองข้อต่อ
ขั้นสูง แขนกล 6 แกนด้วย computed torque · โดรนสี่ใบพัด (PID คาสเคดมุม–อัตรา) · หุ่นยนต์ทำแผนที่ด้วย LiDAR + ตัวกรองคาลมาน · หุ่นยนต์ขาเดิน
ไอเดียเพิ่มเติมอยู่ในคลังไอเดียระบบควบคุม
ต่อยอดไปหน้าถัดไป
ทุกมอเตอร์ในหุ่นยนต์ต้องการแหล่งจ่ายที่นิ่ง และไดรเวอร์ทุกตัวคือตัวแปลงกำลัง ไปที่สะพานสู่อิเล็กทรอนิกส์กำลัง เพื่อดูว่าวิชาควบคุมทั้งหมดไปอยู่ในพาวเวอร์ซัพพลายได้อย่างไร
คำถามที่พบบ่อย ทำไมควบคุมแขนกลด้วย PID แยกแต่ละข้อต่อได้? เพราะข้อต่อส่วนใหญ่มีเกียร์ทดสูง ความเฉื่อยของโหลดที่สะท้อนมายังมอเตอร์ลดลงตามกำลังสองของอัตราทด ผลกระทบระหว่างข้อต่อ (coupling) จึงเล็กเมื่อเทียบกับความเฉื่อยของมอเตอร์เอง มองเป็นการรบกวนที่ PID จัดการได้ แต่หุ่นยนต์ที่ขับตรง (direct drive) หรือเคลื่อนที่เร็วมาก ต้องใช้ computed torque
ภาวะเอกฐาน (singularity) คืออะไร? คือท่าที่จาโคเบียนเสียแรงก์ (ดีเทอร์มิแนนต์เป็นศูนย์) เช่น แขนกลเหยียดตรงสุด ปลายแขนเคลื่อนในบางทิศไม่ได้ และการคำนวณความเร็วข้อต่อจากความเร็วปลายแขนจะได้ค่าอนันต์ ต้องวางแผนวิถีให้ห่างจากท่าเหล่านี้
หุ่นยนต์ทรงตัวสองล้อควบคุมอย่างไร? เป็นลูกตุ้มกลับหัวบนล้อ พลานต์ไม่เสถียรวงเปิด นิยมใช้ LQR กับสถานะ มุมเอียง อัตราเอียง ตำแหน่ง และความเร็วล้อ หรือ PID สองลูป (ลูปในคุมมุมเอียง ลูปนอกคุมความเร็ว) มุมเอียงได้จากการหลอมรวมไจโรกับ accelerometer
มด
อาจารย์มด · ธีรวุฒิ แสวงบุญ อาจารย์สาขาวิชาวิศวกรรมไฟฟ้า มหาวิทยาลัยราชภัฏธนบุรี สมุทรปราการ · ดูโปรไฟล์
บทความอ่านง่ายเกี่ยวกับหัวข้อนี้
ดูบทความทั้งหมด →