크롤링 로봇을위한 원활한 서보 이동


11

얼마 전에 작은 자유 크롤러 로봇을 만들었습니다. 각각 2 개의 자유도를 가진 2 개의 다리가 있었으므로 총 4 개의 RC 서보가 있습니다. 다리의 움직임을 프로그래밍하는 동안 다리가 약간 뻣뻣하게 움직이는 것을 알았습니다. RC 서보의 내부 컨트롤러는 위치 명령에 매우 빠르게 반응 할 수 있지만 크롤러가 좀 더 부드럽고 생생한 방식으로 움직이기를 원했습니다.

내 솔루션은 서보의 경로를 설명하는 입방 시간 함수를 만든 다음 작은 시간 단위로 위치를 설정하여보다 부드러운 움직임을 얻었습니다. 본질적으로 내가 한 것은 서보의 시간 간격, 시작 및 종료 위치 및 서보가 이동 해야하는 시작 및 종료 속도 (위치의 미분)를 사용하여 입방 방정식 의 계수를 해결 하는 것입니다.ai

, , 및 해결하십시오 .a0a1a2a3

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

주어진 : , , ,position(0)position(tf)rate(0)rate(tf)

운동이 반대 방향에 있으면 한 쌍의 운동 사이의 서보 속도를 0으로 설정하고 운동이 양수 또는 음수 모두에 있으면 양수 또는 음수로 설정했습니다.

이것은 꽤 잘 작동했지만이 솔루션은 몇 가지 방식으로 제한됩니다. 우선, 같은 방향으로 진행하는 움직임 사이의 비율이 정확히 무엇인지 결정하기가 어렵습니다. 나는 움직임 사이의 특정 위치 앞뒤의 평균 경사를 사용했지만 최적인지는 확실하지 않습니다. 둘째, 입방체 커브는 서보를 이동 시작 및 끝 위치의 범위 밖의 위치로 가져갈 수 있으며, 이는 바람직하지 않을 수 있습니다. 예를 들어, 시간 간격 동안 어느 시점에서 커브는 서보가 두 번째 위치를 넘어서거나 첫 번째 위치 아래로 이동하게 할 수 있습니다. 셋째, 여기서 곡선 생성은 서보가 회전 할 수있는 최대 속도를 고려하지 않으므로 곡선이 비현실적인 속도로 서보를 움직일 수 있습니다. 그것으로,

마지막 관심사를 무시하고, 이러한 문제는 다항식의 정도를 높이고 계수를 풀기 위해 제약 조건을 추가하여 해결할 수 있지만 이제 궁금해하고 있습니다 ...

이보다 더 나은 방법으로 서보를 부드럽게 움직이고 실물처럼 보이게합니까?


코드는 비교적 간단해야합니다. 그것이 왜 관여했는지에 대해 더 이야기 할 수 있습니까?
DaemonMaker

1
서보를 제어하는 ​​결과적인 방법이 이전보다 더 복잡했지만 코드는 매우 간단했습니다. 대신이 방법의 한계에 대한 설명을 포함하도록 질문을 편집했습니다.
Robz

비 균일 합리적 B- 스플라인 인 NURBS 가 그 일을 할 수도 있습니다
James Waldby-jwpat7

@ jwpat7 귀하의 의견에 감사드립니다. 그러나 NURBS는 그 곡선이 제공된 점수에 도달하지 않을 것이기 때문에 작동하지 않을 것이라고 생각합니다.
Robz

계수 를 낮추는 것만 큼 간단 합니까? Kp
Ian

답변:


6

모션 프로파일 생성

과거에는 모션 프로파일 생성기를 사용하여이 문제를 해결했습니다. 이를 사용하려면 모터와 관련된 원하는 목표 위치 (설정 점), 최대 속도 및 가속도 값이 필요합니다. 부드러운 위치 프로파일을 얻기 위해 사다리꼴 속도 곡선을 통합하여 작동합니다. 모션이 더 매끄러 워야하는 경우 S- 커브를 사용할 수 있습니다. 모션 프로파일 링을 설명하는 기사를 참조하십시오 .

설정 점 사전 필터링

모션 프로파일 링 경로 외에도 서보로 명령을 저역 통과 필터링 할 수 있습니다. 이러한 유형의 설정 점 필터링은 응답 속도를 늦출 수 있지만 매끄럽게하고 구현하기도 쉽습니다. 차단 주파수는 시스템의 대역폭을 지원하도록 선택해야하므로 원하는 동작을 필터링하지 않습니다. C에서 간단한 저역 통과 필터 구현


+1 : 확실히 모션 프로파일 생성.
Guy Sirton

2

나는이 질문이 이런 종류의 장치와 관련이 있다고 생각한다 : RC 서보

이들은 일반적으로 성능이 높지 않기 때문에 생성 된 모션 프로파일을 잘 추적 할 수 없습니다. 대부분의 상용 모터 제어 시스템은 각 세그먼트가 다른 방정식을 사용하는 부분 별 프로파일을 수행하는 지점 간 이동 (@ddevaz의 답변 참조)에 S 곡선을 사용합니다. 문제는 모터가 생성 된 프로파일을 추적하기 위해 아마도 매우 "느린"프로파일을 가질 것입니다. 그렇지 않으면 장치를 따르도록 명령하고 프로필에 장치의 실제 위치와 비교하여 큰 위치 오류가 발생합니다.

이상적으로는 모션을 실행하는 동안 볼 수있는 일종의 피드백을 원하므로 장치가 명령을 얼마나 잘 추적하고 있는지 확인할 수 있습니다. 보다 실용적인 관점에서보다 나은 모션을 원한다면 다른 모터와 다른 모터 제어가 필요할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.