หน่วย 2 / 9

ปัญญาประดิษฐ์ในหุ่นยนต์และการควบคุมการเคลื่อนไหว

กำไร:

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

การนำกริปเปอร์ที่ส่วนท้ายของแขนหุ่นยนต์ไปยังจุดหนึ่งในอวกาศในทิศทางที่แน่นอน ฟังดูเรียบง่าย แต่มีสมการจลนศาสตร์ ขีดจำกัดร่วม ภาวะเอกฐาน และการวางแผนวิถีอยู่เบื้องหลัง วิศวกรเมคคาทรอนิกส์ใช้ตรีโกณมิติ พีชคณิตเชิงเส้น และทฤษฎีการควบคุมร่วมกัน ปัญญาประดิษฐ์เป็นตัวช่วยที่ทรงพลังในกระบวนการนี้ โดยสามารถสร้างสมการจลนศาสตร์ไปข้างหน้า แนะนำแนวทางการแก้ปัญหาสำหรับจลนศาสตร์แบบผกผัน กำหนดพารามิเตอร์วิถีตามข้อจำกัดด้านความเร็ว/ความเร่ง อย่างไรก็ตาม วิทยาการหุ่นยนต์เป็นหนึ่งในสาขาเมคคาทรอนิกส์ที่มีความเสี่ยงทางกายภาพสูงที่สุด หากลำดับมุมที่สร้างโดย AI ถูกส่งไปยังหุ่นยนต์โดยไม่มีการตรวจสอบ แขนอาจชนตัวเอง สภาพแวดล้อม หรือผู้ปฏิบัติงาน ในบทนี้ เราจะดูวิธีตั้งค่าและตรวจสอบจลนศาสตร์และการวางแผนวิถีด้วย AI

จลนศาสตร์ไปข้างหน้าและผกผัน

จลนศาสตร์ไปข้างหน้า (FK): การค้นหาตำแหน่งและการวางแนวของเอนด์เอฟเฟกต์หากทราบมุมของข้อต่อ มีทางแก้ทางเดียวเท่านั้นคือทางตรง

จลนศาสตร์ผกผัน (IK): หากทราบตำแหน่งที่ต้องการของฟังก์ชันสุดท้าย ให้ค้นหามุมร่วมที่จะให้สิ่งนี้ โดยปกติจะมีวิธีแก้ปัญหามากกว่าหนึ่งวิธี (เช่น ศอกขึ้น/ลง) บางครั้งมันก็ไม่มีวิธีแก้ปัญหา (จุดที่เข้าถึงไม่ได้) บางครั้งก็มีวิธีแก้ปัญหาที่ไม่มีที่สิ้นสุด (ภาวะเอกฐาน)

แนวคิด

อินพุต

เอาท์พุท

จำนวนโซลูชั่น

จลนศาสตร์ไปข้างหน้า

มุมร่วม

ตำแหน่ง/ทิศทางที่รุนแรง

โสด

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

ตำแหน่ง/ทิศทางที่รุนแรง

มุมร่วม

หลายรายการ/ไม่มี/อนันต์

สำหรับ planar arm แบบสองข้อต่อ สามารถตั้งค่าจลนศาสตร์ผกผันใน AI และตรวจสอบด้วยตนเองได้ดังนี้:

นำเข้า numpy เป็น npdef inverse_kinematik_2r(x, y, L1, L2): """IK สำหรับ 2-joint planar arm ส่งกลับมุมเป็นเรเดียน (วิธีแก้ปัญหาแบบศอกลง)""" r2 = x**2 + y**2 # การตรวจสอบการเข้าถึง: เป็นจุดในพื้นที่ทำงานหรือไม่ ถ้า np.sqrt(r2) > (L1 + L2) หรือ np.sqrt(r2) < abs(L1 - L2): Raise ValueError("Point is Outside the allowance work space") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # ความปลอดภัยเชิงตัวเลข t2 = np.arccos(cos_t2) # ข้อศอกลง t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) กลับ np.degrees(t1), np.degrees(t2)# การตรวจสอบความถูกต้อง: L1=L2=1, เป้าหมาย (1,1) -> คาดว่า t2=90 องศาการพิมพ์ (inverse_kinematik_2r (1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)

เส้นวิกฤตที่นี่คือจุดที่ AI มักจะข้าม: การตรวจสอบความสามารถในการเข้าถึง (คือจุดในพื้นที่ทำงาน) และ `np.clip` (ป้องกันไม่ให้อินพุต arccos เกิน ±1 เนื่องจากข้อผิดพลาดในการปัดเศษ) หากไม่มีการป้องกันทั้งสองนี้ โค้ดจะสร้าง NaN หรือเกิดข้อขัดข้องที่จุดที่ไม่ถูกต้อง

เคล็ดลับ: เมื่อขอความละเอียด IK ให้บอก AI ให้ชัดเจน "เพิ่มการควบคุมการเข้าถึงและจำกัดอินพุต Arccos ไว้ที่คลิป" สองบรรทัดนี้ป้องกันข้อผิดพลาดแบบเงียบๆ ที่ทำให้เกิดอาการปวดหัวมากที่สุดในภาคสนาม

ขีดจำกัดร่วม ภาวะเอกฐาน และหลายทางแก้ไข

ข้อต่อแต่ละตัวของหุ่นยนต์จริงมีช่วงมุม (เช่น -170° ถึง +170°) ขีดจำกัดความเร็ว และขีดจำกัดความเร่ง แม้ว่า IK จะให้มุมที่ถูกต้องตามหลักคณิตศาสตร์ แต่ก็ไม่สามารถนำมาใช้ได้หากมุมนั้นอยู่นอกช่วงทางกายภาพของข้อต่อ นอกจากนี้ หุ่นยนต์ยังตกอยู่ในภาวะเอกฐานในการกำหนดค่าบางอย่าง: แกนสองแกนอยู่ในแนวเดียวกัน ความเป็นอิสระหายไปหนึ่งระดับ และความเร็วของข้อต่อจะพยายามไปที่อนันต์สำหรับการเคลื่อนที่ของส่วนปลายเล็กๆ

นั่นเป็นเหตุผลว่าทำไมโซลูชันด้านทรัพยากรบุคคลเพียงอย่างเดียวจึงไม่เพียงพอ ทุกโซลูชันจะต้องผ่านตัวกรองการยอมรับ:

def solution_gecerli_mi(acilar_deg,limits_deg): """pains: [t1,t2,...], จำกัด: [(min,max),...]""" สำหรับความเจ็บปวด (amin, amax) ใน zip(acilar_deg, Limits_deg): ถ้าไม่ (amine <= pain <= amax): return False, f"เกินขีดจำกัดข้อต่อ: {pain:.1f} deg ({amine},{amax}) ยกเว้น" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], Limits)) # (True, 'OK')print(cozum_valid_mi([0.0, 150.0], Limits)) # (เท็จ, 'เกินขีดจำกัดร่วม...')

AI สามารถให้คำตอบ "ทางคณิตศาสตร์" ของ IK ได้ แต่ข้อจำกัดร่วมกันและการหลีกเลี่ยงภาวะเอกฐานนั้นเฉพาะเจาะจงกับระบบของคุณและจะต้องได้รับเป็นบริบทของพรอมต์

การวางแผนวงโคจร

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

นำเข้าตัวเลขเป็น npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """โปรไฟล์ความเร็วสี่เหลี่ยมคางหมูสำหรับข้อต่อเดียว อาร์เรย์ตำแหน่งจะถูกส่งกลับ""" Distance = abs(q1 - q0) ทิศทาง = np.sign(q1 - q0) t_speed = v_max / a_max Distance_speed = 0.5 * a_max * t_speed**2 ถ้า 2 * Distance_speed > ระยะทาง: # โปรไฟล์สามเหลี่ยม (v_max ไม่สามารถเข้าถึงได้) t_speed = np.sqrt(distance / a_max) t_constant = 0.0 v_peak = a_max * t_speed else: t_constant = (distance - 2 * Distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... การคำนวณตำแหน่งสำหรับแต่ละ t (ขึ้นอยู่กับเฟสความเร่ง/คงที่/ความหน่วง) กลับ t, T, v_peak, ระยะเวลา, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"Total Duration: {duration:.3f} s ความเร็วสูงสุด: {vz:.1f} องศา/วินาที")

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

พรอมต์ที่อ่อนแอ / พรอมต์ที่แข็งแกร่ง

อ่อนแอ:"เขียนวิถีที่นำแขนหุ่นยนต์จาก A ไป B"(ไม่มีข้อจำกัด: การจำกัดความเร็ว การเร่งความเร็ว ระยะห่างของข้อต่อ เอาท์พุตที่มองไม่เห็น) แข็งแกร่ง:"สร้างวิถีแบบจุดต่อจุดในพื้นที่ข้อต่อสำหรับหุ่นยนต์ 6 แกน ขีดจำกัดความเร็วสำหรับข้อต่อแต่ละอันคือ 90 องศา/วินาที ขีดจำกัดความเร่งคือ 180 องศา/วินาที^2 ช่วงมุมจะได้รับในตาราง ใช้ความเร็วรูปสี่เหลี่ยมคางหมู โปรไฟล์ ถ้าระยะทางสั้น ให้ตกอยู่ในโปรไฟล์สามเหลี่ยม ผลลัพธ์ของข้อต่อแต่ละอันจะเขียนฟังก์ชันการตรวจสอบที่ตรวจสอบว่าไม่เกินขีดจำกัดของข้อต่อ: {{table}}"

การตรวจสอบ: จากการจำลองไปจนถึงหุ่นยนต์

วิถีที่สร้างโดย AI ได้รับการตรวจสอบตามลำดับนี้ก่อนที่จะไปที่หุ่นยนต์:

  1. เชิงตัวเลข: มุมข้อต่อ ความเร็ว และความเร่งของแต่ละก้าวอยู่ในขีดจำกัดหรือไม่
  2. การชน: ตามแนววิถี แขนจะชนกับตัวเองหรือสิ่งแวดล้อมหรือไม่ (แสดงภาพ/จำลองถ้าเป็นไปได้)
  3. ภาวะเอกฐาน: วงโคจรผ่านบริเวณเอกฐานหรือไม่ (ปัจจัยกำหนดจาโคเบียนเข้าใกล้ศูนย์หรือไม่)
  4. การทดสอบฮาร์ดแวร์ช้า: ควบคุมหุ่นยนต์ด้วยความเร็วต่ำ (เช่น 10%) และตรวจดูด้วยสายตา
  5. เพิ่มความเร็วทีละน้อย: เมื่อทุกอย่างได้รับการตรวจสอบแล้ว ความเร็วจะเพิ่มขึ้นทีละขั้นตอนจนได้ค่าที่ระบุ
ข้อควรระวัง: เมื่อสตาร์ทหุ่นยนต์ด้วยวิถีใหม่เป็นครั้งแรก การแทนที่ความเร็วควรจะต่ำเสมอ และ E-stop ควรจะพร้อมใช้งาน แม้ว่าเอาท์พุต AI จะ "ถูกต้องตามหลักคณิตศาสตร์" แต่ออฟเซ็ต แกนกลับ หรือปัญหาสายเคเบิลในการตั้งค่าทางกายภาพจะถูกเปิดเผยด้วยการทดสอบที่ช้าเท่านั้น

มินิเคส

วิศวกรระบบอัตโนมัติ Ece ถาม AI เกี่ยวกับรหัสวิถีในพื้นที่ร่วมสำหรับแอปพลิเคชันแบบหยิบและวาง AI สร้างโปรไฟล์สี่เหลี่ยมคางหมู แต่เมื่อ Ece ทดสอบการเคลื่อนที่ในระยะสั้น เธอพบว่าเวลาเป็นลบ: รหัสไม่รองรับกรณีโปรไฟล์สามเหลี่ยมซึ่งไม่สามารถเข้าถึง v_max ได้ Ece แก้ไขสิ่งนี้โดยบอกข้อความว่า "ถ้าระยะทางสั้น ให้ตกไปอยู่ในรูปสามเหลี่ยม" จากนั้นจะเรียกใช้มุมข้อต่อที่ AI กำหนดไว้ผ่านฟังก์ชันการตรวจสอบเทียบกับตารางขีดจำกัดของตัวเอง และพบว่าข้อต่อ 5 ต้องการ +125° ที่จุดหนึ่ง ในขณะที่ขีดจำกัดคือ +120° เขาวางแผนวิถีใหม่และติดตามดู คราวนี้หุ่นยนต์วิ่งด้วยความเร็ว 10% ในรอบแรก เขาเห็นว่ามือจับเข้าใกล้โต๊ะมากเกินไป จึงแก้ไขออฟเซ็ต Z AI ส่งคืนโครงร่างการทำงานภายในไม่กี่นาที แต่การตรวจสอบแยกกันสามครั้ง (โปรไฟล์สามเหลี่ยม ขีดจำกัดร่วม การทดสอบช้า) พบปัญหาจริงสามประการที่แยกจากกัน

ข้อผิดพลาดทั่วไป

  • การใช้โซลูชัน IK โดยไม่มีข้อจำกัดร่วมกันและการควบคุมการเข้าถึง
  • ไม่ตัดรายการ arccos/arcsin แต่สร้าง NaN ในกรณีที่เกิดข้อผิดพลาดในการปัดเศษ
  • ร้องขอวงโคจรโดยไม่จำกัดความเร็ว/ความเร่ง และสร้างแรงสั่นสะเทือนทางกล
  • ละเลยโซนเอกภาวะและปล่อยให้ความเร็วร่วมพุ่งสูงขึ้น
  • ข้ามการเปลี่ยนโปรไฟล์สี่เหลี่ยมคางหมู - สามเหลี่ยมในระยะทางสั้น ๆ และคำนวณเวลาผิด
  • ทำการทดสอบวงโคจรครั้งแรกด้วยความเร็วสูงสุดและไม่มีการเข้าถึง E-stop

โดยสรุป

  • จลนศาสตร์ไปข้างหน้ามีวิธีแก้ปัญหาเดียว จลนศาสตร์ผกผันสามารถสร้างวิธีแก้ปัญหาหลายแบบที่ไม่มีอยู่จริงหรือไม่มีที่สิ้นสุด
  • จำเป็นต้องกรองโซลูชัน IK ในแง่ของขีดจำกัดร่วม การเข้าถึง และความพิเศษ
  • การวางแผนวิถี ใช้โปรไฟล์แบบอ่อนที่เข้ากันได้กับขีดจำกัด เช่น สี่เหลี่ยมคางหมูหรือเส้นโค้ง S
  • ในระยะทางสั้นๆ โปรไฟล์จะเปลี่ยนจากรูปสี่เหลี่ยมคางหมูเป็นรูปสามเหลี่ยม สิ่งนี้ควรได้รับการจัดการในโค้ด
  • AI เร่งความเร็วทางคณิตศาสตร์ ขีดจำกัดและบริบทการติดตั้งทางกายภาพควรป้อนพร้อมท์
  • วิถีใหม่จะทำงานเป็นครั้งแรกเสมอด้วยอัตราส่วนความเร็วต่ำและ E-stop ที่เข้าถึงได้

งานสมัคร

เลือกโมเดลแขนสองหรือสามข้อต่อ (ที่มีความยาวลิงก์จริงหรือจินตภาพและขีดจำกัดข้อต่อ) ให้ AI สร้างฟังก์ชันจลนศาสตร์ผกผันและวางแผนวิถีด้วยบริบทนี้ จากนั้น: (1) ตรวจสอบเอาท์พุต IK ด้วยตนเองกับเป้าหมายที่ทราบ (คุณวางมุมกลับและกลับไปยังจุดเดียวกันกับ FK หรือไม่) (2) ทดสอบว่าโค้ดจับพวกมันโดยให้จุดที่ไม่สามารถเข้าถึงได้อย่างน้อยหนึ่งจุดและขีดจำกัดข้อต่อหนึ่งจุดเกินเป้าหมาย (3) ตรวจสอบว่าในระยะทางสั้น ๆ เวลาการโคจรจะสมเหตุสมผล จดบันทึกจำนวนปัญหาในการตรวจสอบที่คุณพบในโค้ดเวอร์ชันแรก และเลเยอร์ใดที่ตรวจพบแต่ละปัญหา