Нещодавно я зробив невеликого робочого гусеничного робота, який мав дві ноги з двома ступенями свободи кожна, тому всього 4 RC сервоприводи. Під час програмування руху ніг я помітив, що вони рухаються досить жорстко. Має сенс, що внутрішній контролер RC сервоприймача отримав би дуже швидку реакцію на команди позиції, але я хотів, щоб мій гусеничний рух рухався таким чином, що здається трохи більш плавним та життєвим.
Моє рішення полягало в створенні кубічної функції часу, яка описує шлях сервоприводів, а потім встановлює їх положення невеликими часовими кроками, в результаті чого відбувається більш плавний рух. По суті, те, що я зробив, було вирішено для коефіцієнтів в кубічному рівнянні, використовуючи часовий інтервал, початкове і кінцеве положення сервоприводу, а також стартові та кінцеві швидкості, якими повинен рухатися сервопривід (що є лише похідною позиції):
Вирішіть для , a_1 , a_2 та a_3 :a 1a 3
Дано: , , ,
Я встановив швидкість сервоприводу між парою рухів рівним нулю, якщо рухи були в протилежних напрямках, і позитивним або негативним, якщо рухи були і в позитивному, і в негативному напрямку.
Це спрацювало досить добре, але це рішення обмежено кількома способами. Для одного важко визначити, якими саме повинні бути швидкості між рухами, що йдуть в одному напрямку. Я використовував середнє значення схилів вперед і позаду певної позиції між рухами, але мені не зрозуміло, що це оптимально. По-друге, кубічні криві могли перевести сервопривід у положення поза діапазону положень на початку та в кінці руху, що може бути небажаним. Наприклад, у якийсь момент протягом інтервалу часу крива може призвести до того, що сервопривод виходить за рамки другого положення або нижче першого положення. По-третє, генерація кривої тут не враховує максимальну швидкість, яку може повернути сервопривід, тому крива може мати рух сервоприводу зі швидкістю, яка нереальна. З цим,
Нехтуючи останнім занепокоєнням, ці питання можуть бути вирішені шляхом збільшення ступеня полінома та додавання обмежень для вирішення коефіцієнтів, але я зараз починаю цікавитись ...
Чи є кращий спосіб, ніж цей, щоб зробити рух сервоприводу плавним і здатися більш життєвим?