จลนศาสตร์หุ่นยนต์
UAT 308 ระบบอัตโนมัติและหุ่นยนต์
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- เขียน Jacobian ของแขนกลระนาบและใช้แปลงความเร็วปลายแขนเป็นความเร็วข้อต่อ
- อธิบายภาวะเอกฐาน (singularity) และวัดความใกล้ด้วย manipulability
- แก้ inverse kinematics เชิงตัวเลขด้วยวิธี damped least squares
- ตั้งขอบเขตการทำงานของแขนกลให้ปลอดภัยต่อคนและโดรน
ทำไมต้องรู้
รถ UGV ในโซลาร์ฟาร์มมีแขนกลขนาดเล็กสำหรับเปลี่ยนแบตเตอรี่โดรนบนหลังคารถ และจับหัวฉีดทำความสะอาดแผง UAT 314 แก้ forward และ inverse kinematics ของแขนสองข้อต่อด้วยสูตรปิด แต่แขนจริงมักมีข้อต่อมากกว่านั้นจนไม่มีสูตรปิดที่สะดวก และบางท่าทำให้แขนต้องหมุนข้อต่อเร็วเกินจริง หน่วยความรู้เรื่องจลนศาสตร์หุ่นยนต์และการวางแผนการเคลื่อนที่ของคลังความรู้โดรนกล่าวถึงกรอบพิกัด forward/inverse kinematics และ motion planning ตำรา Modern Robotics ของ Lynch และ Park อธิบาย Jacobian และ IK เชิงตัวเลขละเอียด โมดูลนี้ใช้ Jacobian เป็นเครื่องมือหลัก
Jacobian ความเร็วปลายแขน
Jacobian คือเมทริกซ์ของอนุพันธ์ตำแหน่งปลายแขนเทียบกับมุมข้อต่อ มันบอกว่าถ้าข้อต่อหมุนด้วยความเร็ว ปลายแขนจะเคลื่อนด้วย ถ้าต้องการให้ปลายแขนเคลื่อนตามที่กำหนด ก็แก้หา ย้อนกลับ ท่าที่ เสียอันดับ (rank) เรียกว่า ภาวะเอกฐาน ปลายแขนจะเคลื่อนในบางทิศไม่ได้เลย และใกล้ท่านั้นข้อต่อต้องหมุนเร็วมาก Yoshikawa (1985) เสนอดัชนี manipulability ที่เป็นศูนย์ที่ภาวะเอกฐาน สำหรับแขนระนาบสองข้อต่อ
ตัวอย่างที่ 1 ยื่นแขนออกไปจนเกือบสุด
แขนสองข้อต่อยาว 0.40 และ 0.30 m ข้อต่อแรกอยู่ที่ 0° ต้องการให้ปลายแขนเลื่อนออกตามแนว x ด้วย 0.10 m/s เพื่อดันแบตเตอรี่เข้าช่อง เทียบที่มุมข้อต่อที่สองต่าง ๆ (ข้อมูลจำลอง)
import numpy as np
l1, l2 = 0.40, 0.30 # ความยาวข้อแขน m
v_tool = np.array([0.10, 0.0]) # ปลายแขนต้องเลื่อน 0.10 m/s
def jacobian(t1, t2):
return np.array([
[-l1*np.sin(t1) - l2*np.sin(t1+t2), -l2*np.sin(t1+t2)],
[ l1*np.cos(t1) + l2*np.cos(t1+t2), l2*np.cos(t1+t2)]])
t1 = np.radians(0)
for deg in [90, 30, 10, 2]:
J = jacobian(t1, np.radians(deg))
w = abs(np.linalg.det(J))
qdot = np.linalg.solve(J, v_tool)
print(f"θ2={deg:>2}° manipulability={w:.4f} "
f"max joint speed={np.degrees(np.abs(qdot)).max():6.1f} deg/s")
θ2=90° manipulability=0.1200 max joint speed= 19.1 deg/s
θ2=30° manipulability=0.0600 max joint speed= 63.0 deg/s
θ2=10° manipulability=0.0208 max joint speed= 191.2 deg/s
θ2= 2° manipulability=0.0042 max joint speed= 957.4 deg/s
ยิ่งแขนเหยียดตรง (θ2 เข้าใกล้ 0) manipulability ยิ่งลดลง และความเร็วข้อต่อที่ต้องใช้พุ่งขึ้นจนเกินขีดความสามารถของมอเตอร์ทั่วไป การออกแบบท่าทำงานจึงควรให้แขนงออยู่พอสมควร และตัวควบคุมควรจำกัดความเร็วข้อต่อ ไม่ใช่พยายามทำตามคำสั่งที่เป็นไปไม่ได้
IK เชิงตัวเลขด้วย damped least squares
เมื่อไม่มีสูตรปิด เราหาอินเวิร์สคิเนแมติกส์ด้วยการวนซ้ำ ทุกรอบคำนวณความคลาด ระหว่างเป้ากับปลายแขนปัจจุบัน แล้วขยับข้อต่อด้วย ที่ได้จาก Jacobian วิธี pseudoinverse () ให้คำตอบเร็วเมื่อเป้าเอื้อมถึง แต่ใกล้ภาวะเอกฐานจะสั่งให้ข้อต่อกระโดดมหาศาล Buss (2004) อธิบายวิธี damped least squares (DLS) ที่เพิ่ม เข้าไปเพื่อแลกความแม่นเล็กน้อยกับการเคลื่อนที่ที่นุ่มนวล
ตัวอย่างที่ 2 แขนสามข้อต่อ เป้าที่เอื้อมถึงและเป้าที่ไกลเกินไป
แขนสามข้อต่อยาว 0.40, 0.30 และ 0.20 m (ยื่นได้ไกลสุด 0.90 m) เป้าแรกคือช่องแบตเตอรี่ที่ (0.50, 0.40) m เป้าที่สองคือจุดที่อยู่นอกระยะ (1.20, 0) m เปรียบเทียบ λ = 0 กับ λ = 0.2 วนซ้ำ 200 รอบ (ข้อมูลจำลอง)
import numpy as np
L = np.array([0.40, 0.30, 0.20]) # แขนสามข้อ ยื่นได้ไกลสุด 0.90 m
def fk(q):
a = np.cumsum(q)
return np.array([np.sum(L*np.cos(a)), np.sum(L*np.sin(a))])
def jac(q):
a = np.cumsum(q)
J = np.zeros((2, 3))
for i in range(3):
J[0, i] = -np.sum(L[i:]*np.sin(a[i:]))
J[1, i] = np.sum(L[i:]*np.cos(a[i:]))
return J
def ik(target, lam, iters=200):
q = np.radians([10.0, 20.0, 20.0])
max_step = 0.0
for _ in range(iters):
e = target - fk(q)
J = jac(q)
dq = J.T @ np.linalg.solve(J @ J.T + (lam**2 + 1e-12) * np.eye(2), e)
max_step = max(max_step, np.degrees(np.abs(dq)).max())
q = q + dq
return np.linalg.norm(target - fk(q)), max_step
for lam in [0.0, 0.2]:
for target in [np.array([0.50, 0.40]), np.array([1.20, 0.0])]:
err, step = ik(target, lam)
print(f"lambda={lam} target {target} error {err*1000:5.1f} mm "
f"largest joint step {step:6.1f} deg")
lambda=0.0 target [0.5 0.4] error 0.0 mm largest joint step 76.2 deg
lambda=0.0 target [1.2 0. ] error 799.9 mm largest joint step 1480.9 deg
lambda=0.2 target [0.5 0.4] error 0.0 mm largest joint step 22.7 deg
lambda=0.2 target [1.2 0. ] error 300.0 mm largest joint step 28.4 deg
เมื่อเป้าเอื้อมถึง ทั้งสองวิธีไปถึงเป้า แต่ DLS ขยับข้อต่อต่อรอบน้อยกว่ามาก เมื่อเป้าอยู่นอกระยะ pseudoinverse สั่งข้อต่อกระโดดกว่าพันองศาต่อรอบและจบห่างเป้า 0.80 m ส่วน DLS ยืดแขนตรงไปทางเป้าอย่างนุ่มนวล ห่างเป้า 0.30 m ซึ่งเท่ากับระยะที่ขาดจริง () ระบบจริงควรตรวจก่อนว่าเป้าอยู่ในพื้นที่ทำงานหรือไม่ และแจ้งเตือนแทนที่จะพยายามต่อไป
ความปลอดภัยของแขนกล
แขนกลที่ทำงานใกล้คนและโดรนต้องกำหนดพื้นที่ทำงาน ความเร็ว และแรงสูงสุด มาตรฐาน ISO 10218 ฉบับปี 2025 กำหนดข้อกำหนดความปลอดภัยของหุ่นยนต์อุตสาหกรรมและการนำไปใช้ในเซลล์หุ่นยนต์ แม้แขนบนรถ UGV จะเล็ก หลักการเดียวกันยังใช้ได้ ได้แก่ ปุ่มหยุดฉุกเฉิน จำกัดความเร็วข้อต่อ จำกัดขอบเขตการเคลื่อนที่ในซอฟต์แวร์ และหยุดทันทีเมื่อตรวจพบคนหรือใบพัดที่ยังหมุนอยู่ในพื้นที่
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: Jacobian และ IK บนแขนฝึก
- วัดความยาวข้อแขนของแขนฝึก เขียนฟังก์ชัน forward kinematics และ Jacobian แล้วตรวจกับการวัดจริง 5 ท่า
- ใช้ตัวอย่างที่ 1 คำนวณความเร็วข้อต่อที่ต้องใช้ในท่าทำงานจริง เทียบกับความเร็วสูงสุดของเซอร์โว
- เขียน IK แบบ DLS ตามตัวอย่างที่ 2 สั่งแขนไปยังช่องแบตเตอรี่จำลอง 5 ตำแหน่ง วัดความคลาดด้วยไม้บรรทัด
- ลองค่า λ ต่าง ๆ บันทึกความแม่นกับความนุ่มนวลของการเคลื่อนที่
- เขียนขอบเขตการทำงานและเงื่อนไขหยุดฉุกเฉินของแขน
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ออกแบบท่าทำงานใกล้ภาวะเอกฐาน เช่นให้แขนเหยียดสุดตลอด
- ใช้ pseudoinverse โดยไม่จำกัดขนาดการขยับ
- ไม่ตรวจว่าเป้าอยู่ในพื้นที่ทำงาน ก่อนสั่ง IK
- ตั้ง λ ใหญ่เกินไป จนแขนไปไม่ถึงเป้าที่เอื้อมถึงได้
- ไม่มีขอบเขตซอฟต์แวร์และปุ่มหยุดฉุกเฉิน
สรุป
- Jacobian แปลงความเร็วข้อต่อเป็นความเร็วปลายแขน และใช้ย้อนกลับได้
- ใกล้ภาวะเอกฐาน manipulability เข้าใกล้ศูนย์และความเร็วข้อต่อพุ่งสูง
- DLS ทำให้ IK เชิงตัวเลขนุ่มนวลและทนต่อเป้าที่เอื้อมไม่ถึง
- แขนกลต้องมีขอบเขตการทำงานและมาตรการความปลอดภัยตามหลักของ ISO 10218
แบบฝึกตรวจความเข้าใจ
- แขนสองข้อต่อยาว 0.4 และ 0.3 m ที่ θ2 = 90° มี manipulability เท่าใด
- ภาวะเอกฐานคืออะไร
- ทำไมแขนที่เหยียดตรงจึงเลื่อนปลายแขนออกไปอีกไม่ได้
- ค่า λ ใน DLS แลกอะไรกับอะไร
- แขนสามข้อต่อยาวรวม 0.9 m เป้าอยู่ห่าง 1.1 m DLS จะเหลือความคลาดประมาณเท่าใด
เฉลย
- ท่าที่ Jacobian เสียอันดับ ทำให้ปลายแขนเคลื่อนบางทิศไม่ได้
- ทิศออกตามแนวแขนอยู่ในทิศที่ Jacobian เคลื่อนไม่ได้ในท่านั้น
- แลกความแม่นเล็กน้อยกับการเคลื่อนที่ที่นุ่มนวลและไม่กระโดด
- ประมาณ m
สรุปสูตรสำคัญ
| ความเร็วปลายแขน | |
| manipulability | |
| damped least squares |
แหล่งอ้างอิงหลัก
- Lynch, K. M., & Park, F. C. (2017). Modern robotics: Mechanics, planning, and control. Cambridge University Press. link
- Yoshikawa, T. (1985). Manipulability of robotic mechanisms. The International Journal of Robotics Research, 4(2), 3–9. link
- Buss, S. R. (2004). Introduction to inverse kinematics with Jacobian transpose, pseudoinverse and damped least squares methods [Unpublished manuscript]. University of California, San Diego. link
- Corke, P. (2023). Robotics, vision and control: Fundamental algorithms in Python. Springer. link
- International Organization for Standardization. (2025). Robotics – Safety requirements – Part 1: Industrial robots (ISO 10218-1:2025). link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz