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