본문 바로가기

개인 프로젝트

2023-1 4족보행 로봇(Quadruped robot) 만들기 #3 (다리 설계 1)

반응형

앞선 paper study에서 여러 quadruped의 다리 구조를 확인했고, 이를 참고해서 내가 만들 로봇의 구조를 정했다.

 

 

구조 결정에 핵심이 됐던 생각들은 아래와 같다.

 

 

ⓐ mass moment of inertia를 최대한 줄일 수 있는 구조로 만들자.

 

 

ⓑ 복잡한 linkage 구조가 ⓐ에는 유리하지만 기구학적 해석이나 제어가 어느 정도 쉽고 직관적으로 할 수 있는 구조를 만들자. 

 

 

ⓒ femur-tibia 사이에 스프링을 넣어 compliant leg로 만들자. 다만 어떤 스프링(상수)을 사용할지는 아직 계산적으로 하는 방법을 모르므로(3학년 기계진동에서 배울 예정) 스프링이 없는 것과 스프링 교체가 쉬운 것, 총 2개를 설계해야겠다.

 

 

ⓓfemur, tibia의 length ratio가 중요할 것이라 생각해 관련 논문과 글을 찾아봤지만 쓸만한 내용은 찾지 못했다. (불확실) 생각해 보니 femur-tibial은 1:1이 맞는 것 같다. 바닥 접촉점과 joint1이 일직선상에 올 때 angle1과 angle2를 1:2로 만들 수 있어 제어가 쉽지 않을까? 하고 생각했기 때문이다. 

+)추가로 이미 나와있는 quadruped들의 다리 길이를 확인하려고 했는데 정확한 치수를 찾을 수 없었다. 다만 대부분 femur-tibia가 거의 비슷한(혹은 같은) 길이로 되어있는 것으로 보였다.

 

 

 

 

 

 

이렇게 위의 생각들을 고려해서 최종적인 다리의 구조는 이전 #1 글에서 그렸던 스케치 type2로 결정했다.

 

(+원래 순서상으로는 저 스케치를 그린 것이 가장 마지막이었는데 글을 쓰다 보니 스케치를 먼저 그린 것처럼 되었다.)

 

 

다리 구조를 정했으니 이제 설계를 할 차례다.

 

 

우선 다리가 받쳐야 하는 무게를 대략적으로 계산해봐야 한다. 이를 위해 대략적으로 내가 사용할 부품들과 그 무게를 정리해 봤다. 

품목 수량 무게 [g]
Arduino Mega 1 37
Raspberry Pi 4B 1 45
PCA9685 (HCPCA9685) 1 6
LiFe battery 1450mAh
(Turnigy nano-tech 1.45 20c)
1 85
MG996R 12 55*12 = 660
    총 833g

+)메인 컨트롤러로 라즈베리파이를 사용할지, 아니면 그냥 rosserial을 이용할지 못 정해서 일단은 라즈베리파이를 장착한 경우로 무게를 잡았다.

 

 

위 계산을 토대로 다리가 지탱해야 할 무게를 크게 잡아 1500g = 1.5kg으로 잡았다. 

 

 

이외에 시뮬레이션을 위해 다리의 길이를 femur = tibia = 8cm로 잡았고, tibia를 움직이는 linkage는 짧은 link = 3cm, 긴 link = 8cm로 잡았다.

 

 

추가로 바닥과 tibia의 정마찰계수 μs=1.1 (static coeff. of friction)로 잡았다. 이때  1.1이라는 값은 아래 사이트의 표를 참고해 rubber-rubber의 것을 사용했다.

https://www.engineeringtoolbox.com/friction-coefficients-d_778.html

 

Friction - Friction Coefficients and Calculator

The friction force is the force exerted by a surface when an object moves across it - or makes an effort to move across it. The frictional force can be expressed as Ff = μ N                     (1) where Ff = frictional force (N, lb)

www.engineeringtoolbox.com

 

 

 

 

시뮬레이션으로 확인하고 싶은 것은 현재 사용하려고 하는 mg996r의 토크가 충분한지였다. (특히 motor2)

 

 

시뮬레이션 전에 먼저 간단하게 직접 상황을 나눠 계산을 해보았다.

 

 

계산은 '①서 있을 때, ②낮은 자세로 서 있을 때, ③이동하기 위해 다리를 움직이기 시작하는 순간' 3개로 나눠서 했다.

 

mg996r의 stall torque가 11kgf-cm이므로 그 50%인 5.5kgf-cm와 비교해 봤다. ①, ②상황의 T-j2모두 5.5kgf-cm보다 작았고, ③상황은 stall torque의 81% 정도의 토크가 필요하다고 나왔다.

 

+)①,②는 저 토크를 유지해야 하므로 stall torque의 50%로 비교를 해야 하지만, ③은 순간적으로 걸리는 토크이므로 (50+a)%와 비교해도 된다고 생각했다. 

 

 

직접 계산해 본 바에 따르면 mg996r은 해당 설계에서 사용이 가능하다는 결론이 나왔다. 물론 위 계산의 FBD는 tibia의 4절 기구도 적용하지 않았고 간략화해서 계산했기에 오차가 존재하지만 그럼에도 50%만 적용한 토크에도 여유가 있는 결과가 나왔기에 사용 가능하다고 판단했다.

 

 

 

 

 

 

직접 계산해 보는 것 외에도 프로그램의 힘을 빌려 시뮬레이션을 해보고 싶었다. simscape나 gazebo를 아직은 온전히 다룰 줄 몰랐기에 다른 방법을 선택했다.

 

 

인벤터에는 dynamic simulation이라는 기능이 있어서 assembly를 가지고 간단한 분석을 할 수 있었다. (아래 영상 참고)

https://www.youtube.com/watch?v=-Jh98oxHV9A 

https://www.youtube.com/watch?v=-Jh98oxHV9A

위 영상과 구글링을 통해 dynamic simulation 사용법을 간단하게 익히고 시뮬레이션을 직접 해보았다.

 

 

인벤터 dynamic simulation도 익숙지는 않아서 제한적인 상황을 두고 시뮬레이션을 했다.

 

 

다리 1개를 간단하게 링크구조로 모델링 한 다음 그 모델로 진행했는데, θ=45º로 두고 motor2에 stall torque/2 = 539N-mm를 걸었을 때 바닥면에 가해지는 힘을 확인했다.

 

다리 모델링 영상
시뮬레이션 영상

tibia-ground contact force graph (x:time[s], y:force[N])

그래프의 남색이 총 힘, 파란색과 빨간색(파란색과 완벽하게 겹쳐서 그래프에는 안 보인다.)이 각각 y방향과 x방향의 힘이다.

 

 

정리하면 motor2에 539N-mm의 토크가 가해지면 tibia-ground contact에서 수직항력이 6.80N, 마찰력 방향의 힘이 6.75N이 발생한다는 것이다.

 

(+그래프 초반에 힘이 튀는 부분은 충돌 때 발생한 것으로 보인다.)

 

 

시뮬레이션 한 상황은 직접 계산의 ①상황과 같은 상황이었고 이때 Ns = 3.68[N] < 6.80[N] 이므로 mg996r은 ①상황 기준 적합하다는 결론을 얻을 수 있었다. 같은 방식으로 ②상황도 적합하다는 결론을 얻을 수 있었다. (③의 경우 시뮬레이션 세팅을 시도했지만 계속 실패해서 스킵했다.)

 

 

이 시뮬레이션 세팅과 결과 분석이 맞는 것인지는 솔직히 100% 확신은 못하겠다. 이 부분은 결과의 정확성보다는 새로운 도구(시뮬레이션 프로그램)를 활용해 설계에 반영했다는 부분에 초점을 두었다.

 

 

 

 

위 두 가지 방식의 검증(직접 계산, 인벤터를 활용한 시뮬레이션)을 통해 mg996r과 시뮬레이션에 사용한 link length로 4족 보행을 만들 수 있다는 나름의 결론을 얻었고 이를 바탕으로 실제 다리의 모델링을 시작했다. (23.01.28)

 

 

 

 

========================================================================

정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.

틀린 내용이 있을 수 있습니다.

틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다.   : )

========================================================================

반응형