반응형



좌충우돌 로봇 만들기 4


일단 2관절 4족 보행은 조만간 마무리가 될 것 같습니다.
아직 손봐야 할 곳들이 좀 있지만 일단 가볍게 처리하고 넘어가야 할 것 같네요.
지난 번 잠시 말씀드린대로 집에 우환이 좀 있어 작업 속도가 더딥니다.
일단 7월 안에 마무리를 짓고 8월부터는 관절을 1개씩 더붙여 3관절 작업을
시작하고 하드보드나 골판지를 이용하여 옷도 좀 예쁘게 입혀줘야겠네요^^


오늘도 크게 특별한 내용은 없습니다. 동영상이나 감상하고 가시죠~ 


전/후/좌/우 이동 구현


대각선으로 마주보는 다리 (제 1관절)을 엇갈려 움직이는 방식은
제 2관절의 움직임을 제어하는 것 만으로 전진과 후진, 왼쪽과 오른쪽
움직임을 구현할 수 있다는 점에서 편하다.


제 1관절은 정해진 각도에서만 움직이면 된다.
나의 경우 45도를 기준으로 잡았다.
아래 그림을 참고해서 보면 1관절은 서로 대각선에 위치한 것들이 동시에
같은 방향으로 움직이며 이때 제 2관절이 움직이느냐 안움직이느냐에 따라
전진과 후진이 결정된다.
(참고) F : Front, R : Rear, L : Left, R : Right



즉, 한단 왼쪽 그림에서는 FR과 RL이 전진을 하고 FL과 RR은 후진을 한다.
이 때 전진하는 다리의 제 2관절을 들어주면 앞으로 이동하고 후진하는 다리의
제 2관절을 들어주면 후진을 한다.


이렇게 좀 쉽게 가나 했는데 제 2관절을 연결할 때 앞 뒤가 서로 대칭이 되도록
모터를 연결하였더니 올리는 각도가 서로 반대가 되어 계산하는데 골치가 좀
아팠다...역시 문돌이의 한계랄까...다음에는 같은 방향으로 연결해서 동일한
각도로 움직이게 해야겠다.


그리고 마지막으로 좌/우로의 방향 전환인데...
뭔가 동작 처리를 잘못 한 것 같다. 정방향으로 움직이지를 않고 각도가 자꾸
틀어진다. '전'에서 '좌'로, 또는 '우'에서 '후'로 등 방향 전환을 할 때 '좌향 앞으로 갓!'이
아니라 '줄줄이 좌로 갓!'의 느낌으로 삐딱하게 돌아간다...이 부분도 손볼 부분 중
하나다.


어쨌든 이제 회전과 트위스트, 그리고 업/다운 정도만 구현하면 기본적인 동작은
다 구현하게 되는 것이다. 일단 예상으로는 그리 어려울 것 같진 않은데...


아래는 이번 주 작업의 최종 결과이다.
그런데 이놈 이거...배터리 먹는 하마다.
현재 듀라셀 AA 배터리 4개를 직렬로 연결하여 사용하는데 주말에만 잠깐씩
돌리는데도 매주 배터리를 갈아줘야 한다...ㅠ.ㅠ
아무래도 고용량 배터리를 사야 할 것 같다.

그럼 다음 시간에~


최종 소스 : https://github.com/mazdah/BluetoothController



반응형


좌충우돌 로봇 만들기 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의 전진 모습이다.
배경음으로 들리는 나의 사적인 단편들은 보너스이니 그냥 들어주시길…-.-



반응형


좌충우돌 로봇 만들기 2


일단 무작정 시작한 로봇 만들기의 시작은 그리 나쁘지 않았다.
블루투스 통신도 성공을 했고, 4개의 서보모터를 외부 전원을 이용하여 구동하는 것도
성공을 했고, 아이폰 앱을 통해 서보모터를 간단하게나마 제어하는 것도 성공을 했다.
그래도 이정도 하고 나니 할만 하겠다는 생각도 든다.


이제 본격적인 작업에 들어가기 위해 몇가지 준비가 필요하다.

  1. 보드 교체 : 총 12개의 관절이 필요하므로 PWM 핀을 여유있게 사용 가능한 아두이노 MEGA로 보드 교체
  2. 로봇 프레임 제작 : 일단은 집안에서 쉽게 구할 수 있는 재료들을 이용할 생각인데…이 글 중간에 언급하겠지만 이게 의외로 쉽지 않다…ㅠ.ㅠ
  3. 응용 프로토콜 설계
  4. 4족 보행 걸음 걸이에 대한 분석 : 이거…참 어렵다. Youtube 동영상을 보니 몇가지 패턴이 보이는데 어떤 식으로 구현해야 할지가 살짝 어려웠다.


일단 오늘의 목표는 위 3가지이다.
그럼 구체적으로 들어가보자.


아두이노 메가로 보드 교체하기


일단 지난 시간 까지의 테스트 진행에는 아두이노 나노를 사용하였다. PWM 핀이 
총 6개이므로 서보모터 4개를 테스트하는데는 무리가 없었다. 하지만 이제 본격적으로
작업을 시작하면서 점차 모터 수를 늘려야 하기에 보드를 메가로 바꾸었다.


아두이노 메가의 핀 배치는 아래 이미지를 참고하시라



하지만 문돌이가 하는데 어디 순순하게 되는게 있으랴…-.-
우선 블루투스(HM-10) 연결에서부터 문제가 생겼다.
아두이노 나노에서 쓰던 스케치 소스를 그대로 이용하여 아두이노 메가의 D2에 TX룰,
D3애 RX를 연결하였다. 그리고 테스트를 하는데…블루투스에서 아이폰 앱으로는
정상적으로 데이터 전송이 되는데 폰에서 HM-10으로의 전송이 안되는 것이었다.


메가가 맛이 갔나? HM-10이 맛이 갔나?
우선 다시 나노를 이용하여 테스트 해보았다. 정상 작동한다.
그럼 메가가 맛이 갔나?
구글링 결과 역시 무지의 소치였다.
다음 유의 사항을 명심하자


유의사항 1.

아두이노 우노/나노의 경우 하드웨어 Serial은 1개 뿐으로 이 것은 주로
하드웨어간 통신(주로 PC와의 USB 연결 등)에 쓰인다. 따라서 가급적면
다른 Serial 통신을 위해서는 SoftwareSerial을 사용한다. 하지만
아두이노 메가 2560의 경우 하드웨어 Serial이 모두 4개로 하드웨어간
통신을 위해 1개를 남겨 두더라도 모두 3개의 추가 Serial을 사용 가능하다.


즉, 아두이노 나노에서 테스트했던 코드는 SoftwareSerial을 이용하여 D2, D3 핀을
이용하는 것이었는데 아우이노 메가에서는 이게 정상 작동하지 않았던 것이다.
결국 하드웨어 시리얼 중 하나인 D14(TX3), D15(RX3)로 연결하여 성공하였다.


참고로 스케치 상에서 TX0과 RX0은 Serial로 TX1과 RX1은 Serial1로 TX2와 RX2는
Serial2로 TX3과 RX3은 Serial3으로 사용하면 된다.


그리고 아두이노 메가의 어떤 핀들이 PWM핀인지 몰라 검색하던 중 위의 이미지를
찾았다. 보시다시피 2~13은 모두 PWM 출력이 가능하며 추가로 D44, D45, D46 핀이
PWM 핀으로 총 15개를 PWM으로 사용 가능하다.

최종 연결 형태는 다음과 같다.


로봇 프레임 제작


일단 인터넷에 보면 너무나 멋진 4 또는 6족 로봇들이 검색된다.
특히 마음에 들었던 것은 종이로 프레임을 만든 ZURI라는 프로젝트였다.
아래 이미지에서 보다시피 마치 공각기동대에 나왔던 로봇 그 느낌이다.


하지만 종이라고 만만하랴…처음에 하드보드지를 이용하여 해보려고 했으나
하드보드는 워낙 자르기가 어렵고 또 두껍다보니 접을 경우 모서리가 갈라지기도 하여
아무래도 어려울 것 같았다. 그렇다고 프레임에 돈을 투자하기도 아깝고…일단
방향은 폐 페트병이나 캔, 스티로폼 등 재활용 가능한 재로를 목표로 하였다.


맨 아래 결과 동영상에서 보다시피 일단 몸통은 공CD 케이스를 선택하였다.
저 밑판이 생각보다 두꺼워서 모터 고정시킬 나사 구명 뚫느라 고생 좀 했다.


결국은 나사보다 조금 가능 간이 드라이버를 불에 지져 구멍을 뚫었다.


이후 숙제는 제 2관절을 어떻게 붙일 것인지 그리고 2관절과 3관절 사이, 3관절
끝의 다리를 어떻게 만들 것인지가 문제다…프레임 만들다 시간 다보내게 생겼다.
배보다 배꼽이 더 큰…


응용 프로토콜 설계

이건 뭐 설계라고 하기엔 뭐하고…
암튼 응용 프로토콜을 나름 만들어 사용하기로 했다. ASCII 코드를 기준으로 하였다. 
간단하게 아래 이미지 참고하시길…

간단하게 아래 이미지 참고하시길…


4족 보행 걸음걸이 분석


역시나 가장 어려운 부분이 아닌가 싶다.
게다가 나는 이제 관절 1개를 붙인 상태이다보니 실제로 전진도 못하고 2번째 관절까지
고려해야 하는데 이 작업을 동영상을 토대로 상상을 하면서 할 수밖에 없었다.
결국 아직은 미완의 작업이다.


Youtube를 통해 검색을 해보면 대체로 3가지 패턴이 보인다.

  1. 다리 4개를 각각 대각선 방향으로 순차적으로 움직이면서 전진
    [https://youtu.be/PL4174oBPTs]
  2. 대각선상의 다리 2개씩을 동시에 번갈아가면서 움직임
    https://youtu.be/Dfke2byJknk
  3. 같은쪽 앞뒤 다리를 순차적으로 움직인 후 전체 1관절을 돌려 몸을 앞으로 밀듯이 전진하는 움직임
    https://youtu.be/87nNW4DgTBc


하지만 동영상을 보면 대체로 하나의 로봇에 2가지 이상의 움직임을 구현하는 경우가
대부분이다.


어쨌든 2번이 조금 쉬울것 같다는 판단에 2번을 우선 구현해 보기로 하고 작업을 하였다.
계획은 대각선 상의 2 다리가 2관절을 들어올려 앞으로 내딛는 동안 바닥에 닿은 나머지
대각선상의 2개의 다리는 1관절만 몸을 앞으로 미는 방식으로 전진하는 것이다.


일단 오늘은 여기까지로 작업 결과는 아래와 같다. 조금 더 부드러운 동작을 표현하고 싶어


for문을 통해 서보모터의 각도를 증감하였다. (나무젓가락 다리가 참 애틋해 보인다...ㅠ.ㅠ)

다음주 부터가 문제인데…도대체 다리를 어떻게 이어붙여야 할지…ㅠ.ㅠ
한 주 동안 열심히 고민을 해봐야겠다.



최종 소스 링크

https://github.com/mazdah/BluetoothController

반응형


좌충우돌 로봇 만들기!


이제 막 걸음마를 뗐는데…
벌써 수퍼맨이 되어 날아가려고 한다고나 할까…
어디서 본 것은 있어가지고…
목표를 3관절의 4족 보행 로봇으로 잡았다…-.-
(일단 기본 지식을 정리하는 내용은 기존의 ‘문돌이의 공돌이 따라잡기’로 계속
포스팅을 할 예정이고 로봇 제작 과정은 ‘좌충우돌 로봇 만들기’로 따로 정리할
생각이다.)


사실 요즘같이 수없이 많은 정보가 공유되는 세상에서
내 것이 아닐 뿐 못만들 것은 없기도 하다.
그래도 최대한 스스로의 연구를 통해 만들어보고자 하지만
시작부터 난관의 연속이다.


우선 오늘의 준비물이다.

  • 아두이노 나노와 빵판
  • 배터리 케이스 2개
  • HM-10 1개
  • 서보모터 MG996R 4개 (사진은 1개만 찍음)




목표 1. 아이폰-아두이노 블루투스 통신


일단 로봇은 무선 통신을 통해 컨트롤하기로 하였다.
무선 통신 중 그래도 가장 무난한(은 무슨…이걸로 하루 그냥 버렸다…ㅠ.ㅠ)
블루투스 통신을 사용하기로 하였다.


첫 번째 난관은 나는 아이폰 사용자인데 미리 구매해놓은 HC-06모듈이
아이폰과 통신이 되지 않는다는 것이었다. 뒤늦게 부랴부랴 블루투스 4.0이
지원되는 HM-10을 새로 구입하여 테스트를 진행하였다.


유의사항 1
참조한 사이트 및 스케치 테스트 코드에서 분명 디지털 2번 핀에 HM-10의 TX를,
디지털 3번 핀에 HM-10의 RX를 연결하라고 되어있음에도 불구하고 나는 아무생각없이
아두이노 나노의 TX와 RX에 연결을 해버렸다. 블루투스 연결 시에는 우선 연결에
주의하도록 하자. 


두 번째 난관은 HM-10을 연결하고 LightBlue Explorer라는 앱을 이용하여
테스트할 때는 정상적으로 데이터 송수신이 잘 되었는데 Swift로 된 샘플 코드를
이용하여 진행하니 커넥팅까지는 잘 되었는데 데이터 송수신이 안되는 것이었다.
일단 HM-10을 scan하고 connect하는 것까지는 잘 되는 것 같은데 이후 작동이
묵묵부답이었다.


확인 결과 CBPeripheral의 discoverCharacteristics 함수에서 파라미터 중
characteristic의 UUID를 정상적으로 설정해주지 않은 것이 원인이었다.
보통의 경우 이 UUID는 0xFFE1으로 표시된다.


이 부분을 제대로 구현하고 나서 앱과 HM-10과의 데이터 송수신이 정상적으로 
처리되는 것을 확인하였다.


확인할 내용 1
CBCentralManager의 scanForPeripheralsWithServices 함수에 첫 번째 인자로
블루투스 기기의 Service UUID를 넣어주면 해당 기기만 스캔한다고 하는데 HM-10의
Service UUID를 넣으면 찾지를 못한다. 인자를 nil로 하여 모든 기기를 찾도록 해야만
HM-10을 찾는데 이 부분은 확인이 필요하다.


목표 2. 서보모터 구동


세 번째 난관은 아두이노 회로 연결 과정에서 발생했다.
아직은 회로 연결에 대한 지식이 부족하다보니 막연히 이렇게 하면 될 것 같다 해서
연결하는 경우가 많다.


처음 HM-10과 서보모터 1개로 테스트했을 때는 아두이노 나노의 5V핀과 GND핀에
바로 연결을 했다. 물론 잘 동작을 하였다. 이제 서보모터 3개를 더 추가하려니 연결할
공간이 모자랐다. 그래서 나름 머리를 굴린 결과 아두이노의 5V를 빵판의 +에 
아두이노의 GND를 빵판의 -에 연결하고 서보모터의 전원을 빵판의 +와 -에 연결을 했다.
결과는…실패였다. 전원이 전혀 들어오지 않는다.


일단 검색을 좀 하고 서보모터 2개 이상인 경우 아두이노의 전원으로는 부족하다는
글들을 보고는 외부 전원을 연결하는 방법을 확인한 후 아래의 그림대로 연결을 하였다.



결과는 성공이었다. 물론 이 과정에서도 아두이노의 GND와 빵판의 -를 연결하지 않아
작동을 하지 않는 실수가 있었다.


확인할 내용 2
아두이노 5V와 GND를 연결하여 다수 기기를 활용하는 방법을 확인한다.


최종 결과


아직은 특정 조건에서 서보모터를 2개씩 짝지어 동일한 각도로 움직이도록 한 것이 다이다.
앞으로 로봇의 움직임을 구현하려면 보다 복잡한 코딩을 해야 할 것 같다.
오늘 작업 결과 동영상으로 이 작업을 마무리 한다.

동영상에서 아이폰을 컨트롤한 사람은 나의 둘 째 공주님이다...^^;;


딸과 함께 하다보니 쓸데없는 목소리가 녹음되어버렸다…-.-


작업에 사용한 스케치 코드 및 Swift 소스 코드
https://github.com/mazdah/BluetoothController


참조 사이트

Swift 소스 참조
https://github.com/0x7fffffff/Core-Bluetooth-Transfer-Demo.git

외부 전원 연결 참조
http://www.hardcopyworld.com/ngine/aduino/index.php/archives/1174

서보모터 배선 참조
http://wiki.vctec.co.kr/opensource/arduino/servocontrol

HM-10 연결 기초 참조
http://bbangpan.tistory.com/17


+ Recent posts