การเคลื่อนไหวของเซอร์โวราบรื่นสำหรับหุ่นยนต์ที่คลาน


11

เมื่อไม่นานมานี้ฉันได้สร้างหุ่นยนต์ตัวเล็กตัวหนึ่งซึ่งมีสองขาที่มีอิสระสององศาแต่ละตัวดังนั้น RC 4 เซอร์โวจึงรวมกัน ในขณะที่ฉันกำลังเขียนโปรแกรมการเคลื่อนไหวของขาฉันสังเกตเห็นว่าพวกเขาเคลื่อนไหวค่อนข้างแข็งทื่อ มันสมเหตุสมผลแล้วที่คอนโทรลเลอร์ภายใน RC servo จะมีการตอบสนองอย่างรวดเร็วมากต่อคำสั่งตำแหน่ง แต่ฉันต้องการให้โปรแกรมรวบรวมข้อมูลของฉันเคลื่อนที่ในลักษณะที่ดูราบรื่นและเหมือนจริงมากขึ้นเล็กน้อย

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

แก้ปัญหาสำหรับ , ,และ :a0a1a2a3

position(t)=a0+a1t+a2t2+a3t3
rate(t)=position(t)=a1+2a2t+3a3t2

ให้ไว้: , , ,position(0)position(tf)rate(0)rate(tf)

ฉันกำหนดอัตราของเซอร์โวระหว่างการเคลื่อนไหวของคู่ให้เป็นศูนย์หากการเคลื่อนไหวอยู่ในทิศทางตรงกันข้ามและเป็นบวกหรือลบหากการเคลื่อนไหวนั้นอยู่ในทิศทางบวกหรือลบตามลำดับ

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

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

มีวิธีที่ดีกว่านี้เพื่อให้การเคลื่อนไหวของเซอร์โวราบรื่นและดูเหมือนชีวิตมากขึ้นหรือไม่?


รหัสควรตรงไปตรงมา คุณช่วยพูดคุยเพิ่มเติมเกี่ยวกับสาเหตุที่เกี่ยวข้องได้ไหม
DaemonMaker

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

NURBS , B-splines ที่ไม่สมเหตุสมผล, อาจจะทำงานได้
James Waldby - jwpat7

@ jwpat7 ขอบคุณสำหรับการป้อนข้อมูลของคุณ แต่ฉันไม่คิดว่า NURBS จะทำงานได้เพราะเส้นโค้งเหล่านั้นไม่รับประกันว่าจะได้คะแนนที่ให้
Robz

Kp

คำตอบ:


6

การสร้างโปรไฟล์เคลื่อนไหว

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

ตั้งค่าการกรองล่วงหน้า

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


+1: การสร้างโปรไฟล์การเคลื่อนไหวอย่างแน่นอน
Guy Sirton

2

ฉันคิดว่าคำถามหมายถึงอุปกรณ์ประเภทนี้: RC servo

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

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

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