ด้วยหุ่นยนต์ 6 แกนให้ตำแหน่ง end-effector และช่วงของการวางแนววิธีการหาค่ารอยต่อที่ดีที่สุด


10

ด้วยแขนหุ่นยนต์หกเหลี่ยมที่มีแขนจับเครื่องมือที่ปลายเอฟเฟกต์ถ้าฉันมีตำแหน่งเครื่องมือและการวางแนวเครื่องมือที่ต้องการจะมีวิธีแก้ปัญหา 1 อย่างเดียวสำหรับสมการจลศาสตร์ผกผันสำหรับหุ่นยนต์ที่ไปถึงตำแหน่งนั้น
(หรือมากกว่า 16 โซลูชั่นที่แตกต่างกันขึ้นอยู่กับช่วงของข้อต่อ)

http://en.wikipedia.org/wiki/Robotic_arm

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

ดังนั้นสมการผกผัน - จลนศาสตร์จะมีคำตอบมากมาย

ฉันจะเลือกวิธีการกำหนดค่าร่วมที่ใกล้เคียงกับการกำหนดค่าปัจจุบันที่สุดได้อย่างไร: วิธีหนึ่งที่จะต้องใช้การเคลื่อนไหวน้อยที่สุดในการเข้าถึง
(หรือการกำหนดค่าข้อต่อที่เหมาะสมที่สุดตามเกณฑ์อื่น ๆ ที่คล้ายกันเช่นว่ามุมรอยต่อทั้งหมดอยู่ไกลจากสูงสุดและต่ำสุด?)

คำตอบ:


9

อันดับแรกเราจำเป็นต้องกำหนดที่ดีที่สุด เนื่องจากคุณไม่ได้พูดในสิ่งที่คุณคิดว่าดีที่สุดคนส่วนใหญ่จึงเลือกนิพจน์กำลังสอง ตัวอย่างเช่นสมมติว่าคุณมีมุมร่วมในปัจจุบันโดยเวกเตอร์α. เราสามารถพิจารณาการเคลื่อนไหวที่ต้องการน้อยที่สุด - ด้วยข้อผิดพลาดx=α-αsเสื้อaRเสื้อคุณสามารถกำหนดฟังก์ชันต้นทุน J=xTQx สำหรับเมทริกซ์บางตัว Q. โดยปกติเราใช้เมทริกซ์แนวทแยง แต่เมทริกซ์บวกแน่นอนใด ๆ จะทำ

ในตัวอย่างง่าย ๆ ที่มีสองมุมร่วมถ้าร่วมกัน a มีมอเตอร์ราคาถูกกว่า (อาจใกล้เคียงกับเอฟเฟกต์ท้าย) เราอาจมีฟังก์ชั่นค่าใช้จ่าย

J=[xax][1002][xax]เช่น การเคลื่อนไหวของข้อต่อ มีราคาแพงกว่าสองเท่า a.

ตอนนี้สมการจลนศาสตร์เป็นสูตรเมทริกซ์และในเครื่องหมาย Denavit-Hartenberg อาจเป็น:

ΠTผม=[100x010Y001Z0001]ซึ่งด้านขวาแสดงถึงตำแหน่ง (x,Y,Z) และการวางแนว (ตั้งค่าปัจจุบันเป็นศูนย์การหมุน) ได้รับมุมร่วมกัน

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

[100001000010]ΠTผม[0001]=[xYZ]

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

Kx=[xYZ]สำหรับเมทริกซ์บางตัว K.

โปรแกรมกำลังสองเป็นปัญหาที่สามารถแสดงในรูปแบบ:

ลด J=12xTQx+Tx

ขึ้นอยู่กับ Ax, Ex=d

ในการแก้ปัญหานี้มีอัลกอริทึมจำนวนหนึ่งที่คุณสามารถใช้ได้เช่นจุดตกแต่งภายในชุดที่ใช้งานอยู่ ... แค่หาห้องสมุดที่เหมาะสมแล้วมันก็จะแก้ให้คุณ

ระบบสมการไม่เชิงเส้นนั้นยากต่อการแก้ สิ่งนี้เรียกว่าการเขียนโปรแกรมแบบไม่ใช่เชิงเส้นแต่เป็นสิ่งที่คุณมีหากคุณมีข้อต่อหมุน

โดยพื้นฐานแล้วในสถานที่ของสมการเมทริกซ์คุณมีฟังก์ชั่นที่ไม่ใช่เชิงเส้น

ลด (x) ภายใต้ ชั่วโมง(x)=0, ก.(x)0 (จัดใหม่หากจำเป็นเพื่อทำให้ RHS ของข้อ จำกัด เป็นศูนย์)

อัลกอริธึมที่ใช้ในการแก้ปัญหานี้มีความซับซ้อนมากขึ้น แต่รวมถึง Interior-point, Sequential quadratic programming (SQP), Active-set, อัลกอริธึมไตร่ตรอง Trust-region เห็นได้ชัดว่าคำอธิบายวิธีการทำงานของอัลกอริทึมเหล่านี้มีความยาวมากและฉันจะปล่อยให้มันอยู่นอกขอบเขตของคำตอบนี้ พอพูดได้ว่าปริมาณของเนื้อหาในอัลกอริธึมที่ใช้สำหรับการเขียนโปรแกรมกำลังสองเพียงอย่างเดียวอาจเป็นหลักสูตรทั้งหมดด้วยตัวเอง

คุณควรหาไลบรารีเพื่อแก้ปัญหามันใช้เวลานานในการเขียนโค้ดการใช้งานที่มีประสิทธิภาพและการใช้งานที่มีประสิทธิภาพสามารถจัดการตัวแปร 100 ตัว (หรือมากกว่า) ในแต่ละครั้ง ตัวอย่างเช่นถ้าคุณใช้ MATLAB จะมีเอกสารเกี่ยวกับวิธีการใช้ฟังก์ชั่นfminconจาก Optimization Toolbox

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


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

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

ด้วยการวางแนวที่คาดการณ์ใหม่เพียงใส่ผ่านตัวแก้ปัญหาผกผันอีกครั้งและทำซ้ำจนกว่าความแม่นยำจะเพียงพอ

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


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

  • รีสตาร์ทแบบสุ่ม (มันถูกสร้างขึ้นแบบสุ่ม)
  • ตามตาราง

หรือวิธีการที่กำหนดเองอื่น ๆ

อย่างไรก็ตามโปรดทราบว่าหากมีจำนวนน้อยมากไม่มีวิธีที่ดีที่จะรับประกันได้ว่าคุณจะพบกับระดับต่ำสุดในโลก คุณสามารถปรับปรุงโอกาสของคุณเท่านั้น


2

เนื่องจากคำถามเกี่ยวกับหุ่นยนต์อุตสาหกรรมเราอาจไม่มีแบบจำลองพลวัตของหุ่นยนต์ดังนั้นฉันสมมติว่าเรากำลังมองหาวิธีแก้ปัญหาที่เหมาะที่สุดกับเกณฑ์จลนศาสตร์เท่านั้น

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

เคล็ดลับที่พบบ่อยสำหรับหุ่นยนต์ที่เกือบจะไม่ซ้ำซ้อนเช่นนั้นคือการล็อคองศาอิสระเพิ่มขึ้นและแก้ปัญหาสำหรับค่ารอยต่อที่เหลือวิเคราะห์ สมมติว่าเราเขียน solver IK แบบปิดสำหรับหุ่นยนต์6 dofที่ส่งคืนโซลูชัน0.05ms โดยเฉลี่ย โดยวนซ้ำจาก1 ถึง 360 คุณจึงสามารถหาคำตอบที่ดีที่สุดสำหรับการลดมุมของมุมปากกา 1 ในประมาณ 18 ms ซึ่งได้รับแอปพลิเคชันอาจมากกว่าเพียงพอ

หากเวลาส่วนใหญ่ปากกาเคลื่อนที่เพียงเล็กน้อย (เช่นเมื่อวาดเส้น) เคล็ดลับอีกวิธีในการเพิ่มความเร็วในการค้นหาคือการใช้ตัวเลข IK เช่นเมธอด pseudoinverse:

ปล่อย Q1 เป็นการกำหนดค่าปัจจุบันของหุ่นยนต์ให้ J เป็นของ Jacobian และปล่อยให้ Δxเป็นการกระจัดของเป้าหมายที่สัมพันธ์กับการเปลี่ยนแปลง end-effector ปัจจุบัน แก้Δx=JΔQ สำหรับ ΔQ และคำนวณการกำหนดค่าใหม่ Q2=Q1+ΔQ. ฉันกำลังข้ามรายละเอียดที่นี่ แต่วิธีแก้ปัญหาΔQ ควรลด ΔQ สำหรับเมตริกที่เลือกอย่างเหมาะสม

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


1

มีรูปแบบปิดที่ดีสำหรับสิ่งนี้ สมมติว่าเราไม่สนใจอะไรRZคือ (คือเราไม่สนใจว่าเราจะเปลี่ยนแปลงอย่างไร)

J-1X˙=Θ˙=[J1J2J3J4J5J6][x˙Y˙Z˙Rx˙RY˙RZ˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
ที่ไหน Jผม คือ ผมเสื้อชั่วโมง คอลัมน์ของ J-1. เราสามารถเลิกกันได้Θ˙ เป็นส่วนที่ขึ้นอยู่กับ RZ˙ และส่วนที่ไม่
Θ˙=Θ˙x˙...RY˙+Θ˙RZ˙Θ˙RZ˙=J6RZ˙
ดังนั้นตอนนี้เกมได้กลายเป็นให้ลดลง
(Θ˙x˙...RY˙+Θ˙RZ˙)TD(Θ˙x˙...RY˙+Θ˙RZ˙)
สำหรับเมทริกซ์ทแยงมุมบางอัน Dเหมือน Ronchchn กล่าวข้างต้น ฉันจะใช้A=Θ˙x˙...RY˙ และ B=Θ˙RZ˙* * * * สำหรับการดูง่ายขึ้น

เราสามารถขยายออกไปเป็น

ATDA+2BTDA+BTDBหรือATDA+2RZ˙J6TDA+RZ˙2J6TDJ6

ตอนนี้เรามีสมการง่าย ๆ ที่จะแยกความแตกต่าง RZ˙. เราหาอนุพันธ์ด้วยความเคารพRZ˙ และตั้งเป็น 0.

2J6TDA+2RZ˙J6TDJ6=0RZ˙=-J6TDAJ6TDJ6
วิธีนี้จะลดมุมร่วม "ระยะทาง" ระหว่างสองตำแหน่งของคุณ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.