โมดูล 2/5 · สัปดาห์ 4–6 · 27 ชม.

จลนศาสตร์หุ่นยนต์

UAT 308 ระบบอัตโนมัติและหุ่นยนต์

เวลาเรียนประมาณ 90 นาทีร่าง รอตรวจปรับปรุงล่าสุด 28 กันยายน 2569

บทเรียน

เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ

  1. เขียน Jacobian ของแขนกลระนาบและใช้แปลงความเร็วปลายแขนเป็นความเร็วข้อต่อ
  2. อธิบายภาวะเอกฐาน (singularity) และวัดความใกล้ด้วย manipulability
  3. แก้ inverse kinematics เชิงตัวเลขด้วยวิธี damped least squares
  4. ตั้งขอบเขตการทำงานของแขนกลให้ปลอดภัยต่อคนและโดรน

ความรู้พื้นฐานที่ควรมี: UAT 308 โมดูล 1 · UAT 314 โมดูล 2 (จลนศาสตร์แขนกลสองข้อต่อ)

ทำไมต้องรู้

รถ 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 ยิ่งลดลง และความเร็วข้อต่อที่ต้องใช้พุ่งขึ้นจนเกินขีดความสามารถของมอเตอร์ทั่วไป การออกแบบท่าทำงานจึงควรให้แขนงออยู่พอสมควร และตัวควบคุมควรจำกัดความเร็วข้อต่อ ไม่ใช่พยายามทำตามคำสั่งที่เป็นไปไม่ได้

กราฟ manipulability เทียบกับมุมข้อต่อที่สอง 0 ถึง 180 องศา เส้นสีฟ้าเป็นโค้งไซน์สูงสุดที่ 90 องศา มีจุดสีชมพูที่ 90, 30, 10 และ 2 องศา กำกับความเร็วข้อต่อที่ต้องใช้ 19, 63, 191 และ 957 องศาต่อวินาที
ภาพที่ 1 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 ซึ่งเท่ากับระยะที่ขาดจริง () ระบบจริงควรตรวจก่อนว่าเป้าอยู่ในพื้นที่ทำงานหรือไม่ และแจ้งเตือนแทนที่จะพยายามต่อไป

สองภาพแขนกลสามข้อต่อสีฟ้า ภาพซ้ายแขนงอขึ้นไปแตะเป้าสีชมพูที่ 0.5, 0.4 ภาพขวาแขนเหยียดตรงตามแนวนอนไปทางเป้าสีชมพูที่ 1.2, 0 ซึ่งอยู่นอกเส้นประครึ่งวงกลมที่แสดงระยะเอื้อมสูงสุด 0.90 เมตร เหลือระยะห่าง 0.30 เมตร
ภาพที่ 2 ท่าแขนสามข้อจาก IK แบบ damped least squares

ความปลอดภัยของแขนกล

แขนกลที่ทำงานใกล้คนและโดรนต้องกำหนดพื้นที่ทำงาน ความเร็ว และแรงสูงสุด มาตรฐาน ISO 10218 ฉบับปี 2025 กำหนดข้อกำหนดความปลอดภัยของหุ่นยนต์อุตสาหกรรมและการนำไปใช้ในเซลล์หุ่นยนต์ แม้แขนบนรถ UGV จะเล็ก หลักการเดียวกันยังใช้ได้ ได้แก่ ปุ่มหยุดฉุกเฉิน จำกัดความเร็วข้อต่อ จำกัดขอบเขตการเคลื่อนที่ในซอฟต์แวร์ และหยุดทันทีเมื่อตรวจพบคนหรือใบพัดที่ยังหมุนอยู่ในพื้นที่

ปฏิบัติการประจำโมดูล

ปฏิบัติการ: Jacobian และ IK บนแขนฝึก

  1. วัดความยาวข้อแขนของแขนฝึก เขียนฟังก์ชัน forward kinematics และ Jacobian แล้วตรวจกับการวัดจริง 5 ท่า
  2. ใช้ตัวอย่างที่ 1 คำนวณความเร็วข้อต่อที่ต้องใช้ในท่าทำงานจริง เทียบกับความเร็วสูงสุดของเซอร์โว
  3. เขียน IK แบบ DLS ตามตัวอย่างที่ 2 สั่งแขนไปยังช่องแบตเตอรี่จำลอง 5 ตำแหน่ง วัดความคลาดด้วยไม้บรรทัด
  4. ลองค่า λ ต่าง ๆ บันทึกความแม่นกับความนุ่มนวลของการเคลื่อนที่
  5. เขียนขอบเขตการทำงานและเงื่อนไขหยุดฉุกเฉินของแขน

ข้อผิดพลาดที่พบบ่อย

ระวัง

  • ออกแบบท่าทำงานใกล้ภาวะเอกฐาน เช่นให้แขนเหยียดสุดตลอด
  • ใช้ pseudoinverse โดยไม่จำกัดขนาดการขยับ
  • ไม่ตรวจว่าเป้าอยู่ในพื้นที่ทำงาน ก่อนสั่ง IK
  • ตั้ง λ ใหญ่เกินไป จนแขนไปไม่ถึงเป้าที่เอื้อมถึงได้
  • ไม่มีขอบเขตซอฟต์แวร์และปุ่มหยุดฉุกเฉิน

สรุป

  • Jacobian แปลงความเร็วข้อต่อเป็นความเร็วปลายแขน และใช้ย้อนกลับได้
  • ใกล้ภาวะเอกฐาน manipulability เข้าใกล้ศูนย์และความเร็วข้อต่อพุ่งสูง
  • DLS ทำให้ IK เชิงตัวเลขนุ่มนวลและทนต่อเป้าที่เอื้อมไม่ถึง
  • แขนกลต้องมีขอบเขตการทำงานและมาตรการความปลอดภัยตามหลักของ ISO 10218

แบบฝึกตรวจความเข้าใจ

  1. แขนสองข้อต่อยาว 0.4 และ 0.3 m ที่ θ2 = 90° มี manipulability เท่าใด
  2. ภาวะเอกฐานคืออะไร
  3. ทำไมแขนที่เหยียดตรงจึงเลื่อนปลายแขนออกไปอีกไม่ได้
  4. ค่า λ ใน DLS แลกอะไรกับอะไร
  5. แขนสามข้อต่อยาวรวม 0.9 m เป้าอยู่ห่าง 1.1 m DLS จะเหลือความคลาดประมาณเท่าใด
เฉลย
  1. ท่าที่ Jacobian เสียอันดับ ทำให้ปลายแขนเคลื่อนบางทิศไม่ได้
  2. ทิศออกตามแนวแขนอยู่ในทิศที่ Jacobian เคลื่อนไม่ได้ในท่านั้น
  3. แลกความแม่นเล็กน้อยกับการเคลื่อนที่ที่นุ่มนวลและไม่กระโดด
  4. ประมาณ m

สรุปสูตรสำคัญ

ความเร็วปลายแขน
manipulability
damped least squares

แหล่งอ้างอิงหลัก

  1. Lynch, K. M., & Park, F. C. (2017). Modern robotics: Mechanics, planning, and control. Cambridge University Press. link
  2. Yoshikawa, T. (1985). Manipulability of robotic mechanisms. The International Journal of Robotics Research, 4(2), 3–9. link
  3. 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
  4. Corke, P. (2023). Robotics, vision and control: Fundamental algorithms in Python. Springer. link
  5. International Organization for Standardization. (2025). Robotics – Safety requirements – Part 1: Industrial robots (ISO 10218-1:2025). link

อ่านเพิ่มเติม

ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล

ในชั้นเรียน / ภาคสนาม

ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย

หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz

แบบทดสอบประจำโมดูล

แบบทดสอบนี้ใช้ตรวจความเข้าใจ (formative) ไม่ใช่การสอบเก็บคะแนน

โดเมนความรู้: ระบบอัตโนมัติ หุ่นยนต์ และฝูงโดรน