본문 바로가기

개인 프로젝트

2023-1 4족보행 로봇(Quadruped robot) 만들기 #11 (Physical prototype 제작 - 하드웨어)

반응형

지금까지 만들어온 모델링과 gazebo 시뮬레이션을 바탕으로 실제 로봇 prototype 제작에 들어갔다.
 
 
설계할 때 당연히 실물 제작에서 문제가 될 수 있는 부분들을 최대한 고려하면서 했지만 그럼에도 이번 실물용 설계 및 수정 과정에 시간이 많이 들어갔다.
 
 
다만 각 link의 길이, 모터 및 회로의 배치 등은 유의미한 변화가 없었다. 
 
 
또한 원래 하드웨어 제작과 소프트웨어 세팅(RPI4+ROS, 모터 영점 조절 등)을 같이 진행하면서 둘 다 고려한 설계 수정을 했었다. 하지만 글은 하드웨어와 소프트웨어로 나누어 작성하였다.
 
 
일단 이 글에서는 2023.11.22 기준으로 제작된 버전을 다루었으며 각 파트, 부품 별로 고민하고 수정했던 부분들을 중점적으로 작성하였다. 당연히 이후에도 수정되는 부분이 있을 예정이며 이는 추후 최종본이 나올 때 다시 한번 정리할 예정이다.
 
 
 
 
 
 
 
 

femur

femur

●설계 때 가장 많이 고려했던 부분이었기에 의외로 수정이 거의 없었던 부품이다. prototype에는 femur-tibia joint 부분을 단순 볼트+와셔+너트 조합으로 구성했기에 너트가 풀리지 않도록 너트 구멍을 추가했다. 또 안쪽에 와셔가 있을 홈도 추가했다.
 
●테스트 때 기어가 설계 가동 범위 이상으로 돌아 기어나 femur가 파손되는 것을 막기 위해 파두었던 빈 공간 부분이 신의 한 수였다. 실제 기어가 몇 번 이탈해서 파손될 뻔한 것을 이 부분이 많이 막아주었다.
 
 
 
 

motor_cover

(좌) motor_cover,  (우) motor_plate

●femur_jig와 femur 사이에 약간의 간섭이 발생해서 motor_cover에서 살짝 단차를 주었다.
 
●motor_plate가 모터의 진동으로 인해 자리에서 이탈하는 현상이 발생해서 motor_cover 중간 부분에 억지 끼워맞춤 할 수 있는 홈을 추가로 파주었다. 끼워 맞춤으로도 충분히 잘 고정되었기에 추가적인 체결부품을 사용하지는 않았다. 
 
 
 
 

gear

gear

●femur와 thickness 방향으로 물리지 않는 부분이 발생해서 기어 teeth의 thickness를 살짝 줄여주었다.
 
●현재 좀만 사용하면 horn, 모터와 체결하는 볼트가 닿는 부분의 표면이 파손되는 문제가 발생하고 있다. 이후 와셔를 넣는 형태로 수정하거나 메이커스페이스에 있는 J55(Polyjet 방식)의 프린터를 사용해 좀 더 강도가 좋은 재질로 제작할 예정이다. 일단 기능상에 큰 문제를 만들지는 않고 있다.
 

(좌) 정상적으로 체결된 gear  (우) 파손이 발생해 볼트가 파고 들어간 gear

 
 
 
 

femur_link

femur_link

●femur와 마찬가지로 설계 때 많은 고민을 해서 그런지 문제도 없고 변경점도 없었다. tibia_link와 연결되는 부분에 들어갈 와서의 홈만 추가한게 전부였다.
 
●다만 최초 출력 때 까먹고 출력 방향을 위 그림과 같이 하지 않고 xz평면이 바닥에 오도록 했었는데 그렇게 뽑은 부품은 몇번 쓰니까 바로 예상했던 방향으로 파손이 발생했었다. 당연히 지금은 정상적인 방향으로 출력한 부품으로 전부 바꿨다. 

파손이 발생했던 femur_link

 
 
 
 

femur_jig

femur_jig

●femur와 간섭이 약간 발생해서 y방향으로 살짝 더 크기를 키웠다.
 
●femur_link와 모터 사이의 볼트 체결이 느슨해질때마다 jig를 풀고 조일 수는 없기에 이를 위한 구멍을 중심축 부분에 추가했다.
 
●원래는 x축 끝부분에 motor_cover와 추가적으로 연결되는 기둥 부분이 있었는데 너무 얇아 약하기도 하고 볼트 체결도 어려웠으며 결정적으로 굳이 없어도 femur가 motor_cover에 잘 고정되었기에 해당 기둥을 없앴다. 
 
 
 
 

tibia

tibia

●중심까지 사이의 거리는 유지한채로 바닥과 닿는 부분을 구형으로 만들었다. 바닥 접촉점까지의 상대 좌표가 달라지긴 하지만 IK 계산에 큰 영향을 주지 않기에 일단 그대로 진행했다. (#10에서 자세히 다룬 내용이다.)
 
●마찬가지로 joint부분에 와셔가 들어갈 수 있는 홈을 추가했다.
 
●바닥면과의 마찰력을 위해 구형 부분의 설계를 바꿀 필요가 있다. 현재는 마찰계수를 높이기 위해 다이소에서 구매 가능한 논슬립 패드를 잘라서 임시방편으로 사용하고 있다. 

non-slip tibia

 
 
 

 
tibia_link

tibia_link

●femur와 마찬가지로 너트가 풀리지 않도록 너트 구멍과 와셔 홈을 추가했다.
 
 
 

 
shoulder

shoulder

●이번 실물 제작에서 가장 시간을 많이 먹은 부품이었다. 작은 크기에 여러 개의 체결부가 있어서 최대한 볼트끼리 간섭이 나지 않도록 신경을 써야 했다.
 
●다른 부분보다도 motor1, motor2와 체결되는 부분에서 고민이 많았는데, 처음에는 tapered된 부분에 너트 구멍을 파서 너트로 체결하는 방식을 적용했었다. 하지만 지나치게 긴 볼트가 사용되기도 하고 아래쪽은 구조상 불가능했기에 일반 구멍을 판 후 hand-tapping으로 tapping을 넣는 식으로 바꿨다. 

최초 shoulder 설계 출력물

일단 현재는 이 방식으로 진행하지만 파손에 취약한 방식이기에 추후 퀵서트를 사용하거나 설계를 바꿀 예정이다.
 
●아래쪽 motor0과 연결되는 부분은 gear와 마찬가지로 원형 25T 혼과 연결하는 방식을 사용했다.
 
 
 
 

spine

spine

●4개의 motor0를 연결하는 부품이다. motor0와의 체결은 볼트+너트를 사용했으며 양끝의 사각형 구멍에 너트를 넣는다.
 
●중앙의 구멍 4개는 rpi4, pca9685 2개가 올라가는 top_plate와 체결되는 부분이다. 
 
 
 
 

spine_holder

spine_holder

●처음에는 spine과 side만으로 motor0가 잘 고정될 것으로 예상했지만 만들어보니 아무리 세게 체결해도 정렬이 틀어졌다. 그래서 spine_holder를 추가해 모터의 rib가 고정핀의 역할을 하도록 해주었다.

spine_holder 장착

 
 
 
 

side

side

●양 옆에서 motor0 L끼리, R끼리 연결해 주는 부품이다. spine과 같은 방식으로 너트를 이용해 motor0와 연결되며 중앙의 사각 구멍은 모터 선이 지나가는 곳이다.
 
●z방향으로 관통되어 있는 구멍은 배터리, xl4015가 있는 bot_plate와 체결되는 부분이다. 이 부분은 너트를 사용하지 않고 hand-tapping으로 thread를 만들어주었다.
 
 
 
 

top_plate

top_plate

●라즈베리파이4, pca9685가 올라가는 부품으로 shoulder 다음으로 시간을 많이 잡아먹은 부품이었다. 중앙의 너트 구멍에 너트를 넣고 spine의 중앙을 관통시킨 볼트와 체결하는 방식이다.
 
●spine과 붙지 않고 높이차이를 준 이유는 선들이 이 공간으로 지나갈 것이기 때문이다.
 
●다른 부품은 전부 M3규격을 사용했지만 RPI4, pca9685를 체결하는 부분은 M2.5를 부득이하게 사용했다.
 
●고민을 또 많이 했던 부분이 RPI4와 pca9685의 배치였다. 최초 설계는 현재 배치에서 두 기판 사이에 높이차가 없는 형태였는데 이렇게 하니 RPI4의 전원 공급용 usb ctype이 들어갈 자리가 나지 않았다. 워낙 전반적인 설계를 compact하게 했다 보니 배선에서 예상치 못했던 문제가 많이 생겼었다. 다행히 이는 pca9685의 쓰지 않는 핀을 제거하는 것과, 두 기판 사이에 높이 차이를 주는 것으로 해결되었다.
 
 
 
 

bot_plate

bot_plate

●배터리, RPI4 전원 공급용 step-down converter XL4015가 장착되는 부품이다. 추가로 배터리의 전원공급선이 연결될 포트와 전원 스위치도 추가적으로 만들어주었다. side의 위아래로 뚫려있는 threaded hole과 볼트 체결하는 방식이다.
 
●top_plate와 마찬가지로 일부 선이 지나갈수 있도록 spine과 딱 붙지 않고 약간의 높이 차이를 주었다.
 
●현재 시간 문제로 imu(mpu6050 예정) 장착을 하지 못했는데 추후 이 부품 중앙에 imu가 위치할 예정이다.
 

 
 
 
 

배선

●우선 schematic diagram은 최초 설계와 크게 달라지지 않았다.
 
●아직 본격적인 작동 상황에서의 가동시간 테스트를 하진 않았지만 1차 테스트에서는 RPI4와 모터에 충분한 전력이 공급되고 있는 것으로 확인되었다. 
 
ⓐ. 이 부분에 전원 스위치 겸, emergency-stop용 스위치를 연결했다. 굳이 스위치를 2개로 나눈 이유는 emergency-stop상황에서 RPI4까지 전원을 내려야 되는 상황은 없을 것이라고 판단했기도 하고, 모터 사용 없이 RPI4만 사용하는 경우도 많을 것이라고 판단했기 때문이다.
 
ⓑ. 배선에서 가장 애먹은 부분이었다. RPI4의 GPIO 5V핀에는 polyfuse가 연결되어 있지 않아서 과전류에 의한 회로 손상을 막아주지 못한다. 따라서 안전을 위해 무조건 ctype으로 전원을 넣어주어야 했다. 이를 위해 아래의 부품을 처음에 구매했었다.
https://www.devicemart.co.kr/goods/view?no=1322132&NaPm=ct%3Dlpbdgohe%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3Dnull%7Chk%3D47b9b42b37665fd1e05ace01af3f0049db641ec8

 

USB 3.1 커넥터 male type-C [NW3-USBC-018]

USB 3.1 / C Type Socket / MALE / 4pin

www.devicemart.co.kr

당시 datasheet와 인터넷에서 허용 전류에 대한 정보를 얻을 수 없었지만 '설마 2A도 못 흘리겠어?' 하는 생각으로 이를 구매했었다. 이걸 못 흘렸었다.... 처음에는 해당 커넥터가 문제가 아니라 사용했던 케이블이나 배터리가 문제일 거라 생각했지만 사용한 전선은 5.7A까지 가능하고 배터리도 다른 회로에서 문제가 없는 것을 확인한 후 커넥터가 문제라는 결론을 내렸었다. 이에 내가 사용한 방법은 그냥 다이소에서 파는 스마트폰 충전용 케이블을 잘라서 사용하는 것이었다.
 
이 방법으로 하니 바로 해결되었다.

 
ⓒ. schematic diagram은 parallel로 pca9685에 I2C 케이블이 각각 연결되어 있지만 실물 제작 때는 serial 방식(daisy chain)방식으로 연결했다. 추가로 pca9685 2개를 사용하기에 한쪽에는 납땜으로 I2C adress를 바꿔주었다. 이 부분과 관련된 자세한 내용은 [소프트웨어]편에서 다룰 예정이다.
 
 
 
 
 
 
 
 
 
 
이렇게 나의 quadruped robot '1차' protoype 하드웨어를 완성했다. 글 초입에도 말했지만 소프트웨어 세팅과 시험 작동도 동시에 진행했었고 예상보다 성공적으로 작동했다. 실제 테스트 작동 영상은 다음 글에 같이 첨부할 것이다.
 
 

 
 
 
 
 
 

========================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다.   : )
========================================================================

반응형