본문 바로가기
  • SDXL 1.0 + 한복 LoRA
  • SDXL 1.0 + 한복 LoRA
Study/아두이노

[아두이노] 아두이노 4족보행 로봇 만들기 ~ 3

by 마즈다 2016. 7. 5.
반응형


좌충우돌 로봇 만들기 3


집안에 우환이 좀 있어 이번 3번 째 이야기는 하루 늦었습니다.
오늘은 자세한 내용보다는 조금은 일반적인 이야기를 좀 하고 현재까지 진행된
2관절 4족 보행 로봇은 전진 동작 동영상으로 마무리 하겠습니다.

딱히 도움이 될만한 내용은 없을 듯하니 동영상이나 잠시 감상하시길^^
(주의 : 동영상 보다가 답답해서 사망하셔도 책임은 못집니다…-.-)


3주간의 정리


3주 정도 주말 작업을 진행해오면서 참으로 재미있었다.
처음 접해보는 아두이노, 뜬금없는 4족 보행 로봇에 도전,
그리고 좌충우돌…


일단 3주동안 만들어낸 2과절 4족보행 로봇의 외관은 아래 사진과 같다.
지난 번 제 1관절 4개를 테스트할 때 사용했던 나무젓가락을 재활용하여 1관절용 모터와
2관절용 모터를 연결하는데 사용하였다. 아무래도 이놈은 완성되면 중국집 배달용으로
방향을 잡아야겠다(하지만 마지막 동영상에서 보다시피 속도가…ㅠ.ㅠ).


그래도 일단 제법 그럴싸한 이름을 하나 붙여줬다.
SEW-Prototype. SEW는 그 자체로 ‘꿰메다’, ‘깁다’ 라는 의미가 있다.
그렇다. 사진에서 보다시피 누덕누덕 기워서 만든 로봇이다.
하지만 이름을 풀어쓰면 Save the Earth from Waste
즉, 쓰레기로부터 지구를 구하자라는 거창한 의미가 있다.
(이런데서 문돌이의 재능이 발휘된다…-.-)
하지만 고작 나무젓가락과 폐 박스를 재활용한 정도…-.- 



그리고 오늘 간단한 코딩을 통해 드디어 앞으로 전진하는 모습을 볼 수 있었다.
나름 감격이 아닐 수 없다.


하지만…문돌이의 한계에 부딪치다.


물론 아두이노는 취미생활로 하는 것이지만 내 본업은 프로그래머다.
어찌되었건 내가 접하는 것들은 기술이요, 과학이다.
이말인 즉슨 대충 감으로 때려 잡아서 하면 안된다는 말이다.
하지만 아마도 인문계열 전공을 한 개발자들에게서 흔히 보이는 모습이 바로
이런 모습이 아닐까 한다. 


철저한 실험과 테스트를 통해 도출한 정확한 결과가 아닌
그간의 경험과 실무에서 습득된 직관을 통해 개발을 해나가는 것!
물론 국내에서 진행되는 대부분의 프로젝트에서는 이런 직관을 통한 개발도
큰 무리 없이 적응 가능하다.


하지만 자율주행 자동차와 같이 사람의 목숨을 위협할 수도 있는 분야의 개발이라면
결코 그렇게 해서는 안될 것이다.


물론 이런 성향은 문돌이와 공돌이의 차이보다는 개인 성향의 차이일 수도 있다…


어쨌든…
나의 문돌이적 성향이 여실히 드러나는 부분들을 한 번 신랄하게 까발려보자.


우선 로봇의 본체…



제 1관절용 서보모터와 제 2관절용 서보모터를 연결하고나니 두 모터의 축이
바깥으로 향하게 되어버렸다. 물리학을 잘 몰라 설명은 어렵지만 이렇게 되면
제 1관절의 축이 몸통과 연결되어야 하고 그 축에 받는 힘이 커져 내구도가 약한 경우
모터든 몸통이든 쉽게 파손될 우려가 있다. 


이런 생각을 하고 유튜브에서 동영상을 보다보니 역시나 대부분 구조가 모터 몸통이 
로봇 본체에 붙고 축은 바깥으로 향해 2과절의 모터 몸통 또는 축쪽으로 연결이 되는 
형태였다. 이렇게 되어야만 몸통과 제 2과절 사이에서 힘이 적절히 분배 될 것 같다. 


아래 그림에서 1번과 2번은 분명 1번쪽이 빨간 원 안에 있는 축에 힘이 많이 걸릴 것이다.



뿐만아니라 각 관절들의 각도라든지 부분 부분 형태에 의한 장애 등을 판단해야 한다.
보면 위의 사진에는 SEW-Prototype의 다리가 그냥 편면 사각형인데, 동영상을 보면
하단부를 비스듬하게 깎아냈다. 그냥 사각형인 상태에서는 다리를 들어올려도 사각형의
모서리가 바닥에 다아 마찰을 일으키면서 제대로 전진을 못하였다. 그래서 다리를
들었을 때 마찰이 생기지 않도록 잘라내버렸다.


다음은 소프트웨어…


개발자들이 시스템을 개발할 때 많이 간과하는 것 중 하나가 바로 성공 케이스,
정상적인 작동에 많이 집중한다는 것이다. 뭐 목적이 그것이니 그리 뭐라 할 것은 아니지만
정작 중요한 것은 예기치 못한 오작동에 대한 대응이다. 그런데 로봇을 만들다보니
이런 예기치 못한 오류(혹은 오류는 아니지만 제어가 안되는 상태)에 대한 처리에
감이 오질 않는다.


예를들어 한참 잘 돌아가다가 배터리가 소모되어 이상한 위치에서 모터가 정지되는 경우
전원이 공극되기 시작한 이후 그 다음 동작들을 어떻게 처리할까 같은 문제다.
물론 만고의 진리가 있다. 바로 리셋이다. 무조건 초기 상태로 돌려놓고 다시 시작하면
된다. 하지만 뭔가 뒤끝이 찜찜하다.


바로 이러한 이유로 소프트웨어를 개발할 때는 개발자가 설계한 수치보다는 시스템 자체가
리턴해주는 상태 값이 더 중요하다. 시스템 자체의 상태가 시스템의 다음 동작을
결정하는 근거가 되어야 할 것이다.


그런 측면에서 현재 SEW-Prototype이 앞으로 가고는 있지만 언제 이상한
동작(이상한 동작이라고 뭐 헤드스핀을 하거나 그러진 않겠지만…)을 보일지 모른다.
이후 작업은 아마도 이 부분을 개발하는데 거의 모든 시간을 투자하게 될 것 같다.


다시 시작!


앞서 말했듯이 지금까지의 작업은 그냥 아이들 레고놀이에 불과하다.
이제부터가 진짜 작업이 아닌가 싶다. 그리고 내가 해낼 수 있을까도 의문이다.
아직 전진, 그것도 하드코딩으로 된 프로그램을 통한 전진밖에는 못한다.
어떻게 해야 서보 모터 상태를 통한 동작 제어가 가능할지 고민을 좀 해봐야겠다.


마지막으로 인류 최초의 로봇이 이러지 않았을까 싶을 정도로 굼뜬 동작이지만
나름 육중한 맛을 풍기는 SEW-Prototype의 전진 모습이다.
배경음으로 들리는 나의 사적인 단편들은 보너스이니 그냥 들어주시길…-.-



반응형