옴니휠 제어

59
2432

몇가지 사이트와 논문을 참조했습니다만 설명은 아래 사이트로 하겠습니다.

참조 사이트 : How to control omni-direction wheel

바퀴 하나에 대해 살펴보겠습니다.

Vw 는 옴니휠의 속도
Vin 은 옴니휠의 바깥쪽 롤러에 의해 움직이는 속도
Vb 는 로봇의 속도 (위 사진상에서 V)
θ는 기준벡터(reference vector)와 옴니휠의 속도 사이의 각
φ는 기준벡터와 로봇 속도 사이의 각

Vin 과 Vw는 수직입니다. 따라서 Vb는 (1)과 같이 나타낼 수 있습니다.
Vb = Vin + Vw ………….(1)

또한 Vin은 Vw와 Vb로 나타낼 수 있습니다.
Vin = Vb + Vw – 2Vb *cos(θ – φ) ………..(2)
( (2) 식이 이해가 되지 않을 때는 댓글을 남겨주세요.)

(2) 를 (1)에 대입하면
Vw = Vb *cos(θ – φ) …………..(3)
최종식 (3)을 얻을 수 있습니다.

바퀴가 몇개가 되든 바퀴와 기준벡터 θ값을 알면 각 바퀴가 로봇의 속도 Vb에 대해 제어되어야 할 양에 대해 알 수 있습니다.

예를 들어 바퀴 3개의 θ값이  각각 0°, 120°, 240°라면
Vw1 = Vb *cos(φ)
Vw2 = Vb *cos(120 – φ)
Vw3 = Vb *cos(240 – φ)

* 위 사이트에서 (2)식 뒷 부분이 2Vw *Vb *cos(θ – φ) 로 Vw가 포함되어 있는데 오타로 추정됩니다.

*기타 참고 자료
THREE OMNI-DIRECTIONAL WHEELS CONTROL ON A MOBILE ROBOT
논문 모음 다운로드 : paper about omniwheel

유투브에는 다른 방식으로 유도한 동영상이 있어서 첨부 해봤습니다.

 

추가 내용 (18.03.03)

무게 중심이 높을수록 더 안정적일 것이다라는 내용에 대해 그림판으로 나름 열심히 그려봤습니다…

R : 공의 반지름
C1, C2 : 공으로부터 로봇바디의 무게 중심.

a) : 초기에는 무게중심과 지표면과 수직인 상황 즉 θ = 0, 이고 공 위에서 정지인 상황.

b) : 공의 반지름 R에 무게중심의 길이만큼 더한 즉 R+C1, R+C2인 원 위를 움직이는 원운동으로 볼 수 있음.

a)에서 어느 방향으로 같은 속도로 기울기 시작했다고 가정했을 때 잠시 후의 위치를 보면 무게중심이 낮은 상황에서의 θ값이 더 큽니다. (원운동에서 원호를 움직이는 속도가 같을 때 직경이 클수록 변화한 θ값은 작음.) 시간이 지날수록 이 차이가 더 커지게 되는데 이는 중력가속도가 작용하기 때문입니다. 따라서 무게 중심이 낮을수록 더 빨리 기울어지게 되죠.

충분한 설명이 되었는지 모르겠습니다.. 혹시 제가 틀린 부분이 있닫면 알려주세요.

guest
59 Comments
newest
oldest
Inline Feedbacks
View all comments
김성희
김성희
2021년 9월 19일 19:31

안녕하세요 친절한 설명 감사합니다.

혹시 PID 튜닝하실 때 어떻게 하셨나요??
X, Y 따로 튜닝을 해야할 것 같은데 어떻게 하셨는지 궁금합니다

아 혹시 괜찮으시다면 저도 파일을 받을 수 있을까요??

Ballbot
Ballbot
2021년 9월 19일 18:03

안녕하세요 혹시 코드를 공유해주실 수 있으신가요??
ballbot 생각보다 쉽지 않네요ㅠㅠ
2중 휠이라 진동이 심한데 어떻게 해결하셨는지요….

강선규
강선규
2021년 8월 4일 11:22

안녕하세요, 옴니휠로 로봇을 만드려고 했는데, 좋은 자료를 주셔서 감사 합니다,
Vin = Vb + Vw – 2Vb *cos(θ – φ) ………..(2) 식이 잘 이해가 되지 않는데 알려 주실 수 있나요?

유승희
유승희
2021년 5월 27일 17:56

안녕하세요
볼봇에대해 공부해보고자 하는데 아두이노 파일을 공유해주실수 있으신가요?
공유해주시면 감사드리겠습니다

ballrobot want
ballrobot want
2020년 5월 22일 18:51

– 로봇무게 : 3~3.2kg
– IMU : MPU6050 (상보필터를 사용하여 roll, pitch 값을 획득함.)
– 모터 드라이버 : L298N x 4
– 모터 : SE-DM185 x 4
– 제어보드 : 아두이노 메가

——————– Motor control ———————
1. 외부인터럽트를 사용하여 각각의 모터 엔코더 값을 받음.
2. 타이머 인터럽트를 사용하여 받은 엔코더값을 미분하여 RPM을 구함.
3. 미분한 RPM값에 노이즈가 심하여 LOWPASS FILTER를 적용함.
4. 필터처리 된 RPM값을 피드백하여 PID제어로 PWM 출력함. (커맨드에 잘 수렴이 됨을 확인함.)

——————– IMU ——————————–
5. roll, pitch에 PID를 적용한 후, 출력값을 RPM으로 사용.
6. 5에서 얻어진 RPM값을 Motor의 커맨드로 넣어줌.

——————-Motor & IMU MIXING———————-
7. 로봇의 기울어짐에 따라서 모터의 회전방향과 RPM이 출력됨을 확인함.
8. 로봇을 공위에 올려놓았으나, 토크부족인지… 덜덜거리고, 반응성이 낮음.
9. 모터의 P게인을 키워봤지만 진동만 심해질뿐 모터가 돌지않음.

다시한번 제어 정리를 하자면
1. pitch, roll값에 PID 적용 후, 출력된값을 RPM_commend로 함.
2. RPM_commend값을 다시 모터의 커맨드로 넣어주며, 모터는 다시 PID제어를 통하여 PWM 값을 출력함.

현재 상황
– Roll 10도 기울이면, RPM값이 16이 출력됨.
– 그러나 로봇이 부하를 못이겨 돌지못하거나, 덜덜거리거나, 반응이 느림.

질문

– 엘큐님의 로봇은 최소 RPM을 몇으로 셋팅을 하였나요?
같은 모터이고 로봇의 스펙도 비슷하여 상당히 궁금하네요.
– 제가 한 방식이 엘큐님이 제어한 방식과 동일한가요?
저는 바퀴가 4개라서 모터 기구학을 따로 고려하지는 않았습니다.

오기가 생겨서 세우고싶은데..
이것이 하드웨어 문제인건지 저의 제어방식이 잘못되서 그런건지 알고싶네요..