산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

KITtyBot

구성품 및 소모품

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
서보(타워 프로 MG996R)
동일한 폼 팩터의 SG-90 또는 9g 서보
× 12
Adafruit UBEC DC/DC 강압(벅) 변환기 - 5V @ 3A 출력
× 1
Adafruit 미니 리모컨
물론 모든 리모컨을 사용할 수 있습니다. 이것은 IRLib 라이브러리와 함께 잘 작동했습니다.
× 1
Adafruit IR(적외선) 수신기 센서 - TSOP38238
× 1
저항 1k 옴
× 1
저항 2.2k 옴
× 1
7.4V/500mAh LiPo 배터리
R/C 취미를 위한 대략 이 용량의 배터리는 충분합니다.
× 1

필요한 도구 및 기계

3D 프린터(일반)
납땜 인두(일반)
브레드보드 디자인은 납땜 없이 할 수 있습니다.

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

소개

보통의 '거미'나 '곤충'보다 '포유류' 스타일에 더 가까운 걷는 네 발 달린 로봇을 만들고 싶었다. 영감은 잘 알려진 Boston Dynamics 로봇과 다른 4족 연구 로봇에서 비롯됩니다. 이와 같은 로봇을 만드는 것은 높은 무게 중심과 모서리로 퍼지지 않고 몸 아래에 발이 있기 때문에 매우 쉽게 넘어지기 때문에 상당히 어렵습니다.

목표는 Arduino와 저렴한 마이크로 서보를 사용하여 저렴한 로봇을 만드는 것이 었습니다. 물론 이 솔루션에는 한계가 있습니다. 완벽할 것이라고 기대할 수는 없지만 이 영화에서 설명한 것처럼 걷는 동작을 수행할 수 있는 몇 대의 로봇을 이제 만들 수 있습니다. 그리고 매우 적은 예산으로 최선을 다하는 것은 그 자체로 어려운 일이며 막대한 자금을 지원받는 연구 프로젝트에 참여하는 사람들이 결코 직면할 수 없는 일입니다. :)

역운동학(IK) 연구를 올바르게 수행하기 위해 필요하다는 것은 일찍이 확인되었습니다. 이 코드에는 원하는 발 움직임을 기반으로 관절 각도를 계산하는 방정식 세트가 있습니다. 이것들은 신체 움직임(네 발 모두 반대 방향으로 이동) 및 완전한 발 움직임(지정된 방향으로 위쪽으로 이동하고 다시 내려놓기)을 수행하는 것과 같은 일부 반복적인 작업에 대한 함수에서 추가로 사용될 수 있습니다.

다음 과제는 보행 연구를 수행하는 것입니다. 즉, 로봇이 몸과 발의 움직임 측면에서 걷고 회전하는 방법을 정의하는 것입니다. 내 로봇은 항상 정적으로 안정적인 보행을 사용합니다. 한 번에 한 발을 들어 올려 새로운 위치에 놓습니다. 몸은 나머지 세 발에 달려 있으며 무게 중심이 넘어지지 않도록 이 발이 형성하는 삼각대 안에 있어야 합니다. 나는 앞으로, 뒤로, 왼쪽, 오른쪽의 4가지 표준 보행을 개발했습니다. 이것은 차례로 발과 몸의 움직임 기능을 활용하여 전체 시퀀스로 결합됩니다.

또한 동기 서보 동작을 위한 기능을 설계했습니다. 어떤 경우에는 여러 서보가 설정된 시간 동안 서로 다른 스트로크를 하고 있습니다. 부드러운 움직임을 위해서는 동기화되어야 합니다.

마지막으로 나는 완전히 보호되지 않은 LiPo 배터리를 사용합니다. 이것은 위험할 수 있습니다. 주요 위험은 그것을 빨리 또는 너무 깊게 방출하는 것입니다. 첫 번째 위험은 실수로 단락되지 않는 한 피할 수 있습니다. 일반 R/C 배터리의 방전율은 25C이며 이 경우 12A를 허용합니다. UBEC는 어떤 상황에서도 배터리가 2A보다 높아지는 것을 방지합니다. 두 번째 위험은 소프트웨어의 감시 기능으로 방지됩니다. 전압은 아날로그 핀 중 하나에서 측정되며 7.0V 미만이면 로봇이 정지됩니다.

마지막으로 배터리는 전용 충전기로 충전해야 하며 평소와 같이 조심스럽게 다루어야 하며, 충전을 방치해 두어서는 안 된다는 점을 강조해야 합니다. 배터리는 로봇에서 분리하고(벨크로를 사용하여 장착) 화재가 진압되고 확산되지 않도록 내화성 백 내부 또는 최소한 가연성 물질로부터 안전한 거리에서 충전해야 합니다. 배터리도 안전하게 보관하십시오.

LiPo 배터리에 익숙하지 않은 경우 지역 R/C 취미 상점에 문의하고 적절한 충전기 및 충전 및 보관을 위한 내화 가방/컨테이너와 함께 배터리를 구입하십시오. 이러한 항목은 종종 경고 표시로 가득 차 있습니다. 그들을 다시 평가하고 자신의 좋은 판단을 사용하십시오. :)

로봇 만들기

제공된 파일에 따라 부품을 인쇄합니다. 시간을 내어 사진을 보고 시작하기 전에 부품을 조립하는 방법을 알아보세요. 저는 스칸디나비아 사람이지만 이 지침은 IKEA나 LEGO 지침 수준과는 거리가 멉니다 :)

고관절을 먼저 조립해야 합니다. 좋은 품질의 양면 테이프를 사용하여 부품을 결합했습니다. 그들은 또한 접착될 수 있지만 부러진 부분을 수리해야 할 필요가 있는 경우 분해할 수 없습니다. 하나의 부서진 서보는 전체 조인트를 교체하게 됩니다.

작동 축과 일직선으로 한 서보의 바닥에 서보 지지대를 놓습니다. 그런 다음 축이 수직인 다른 서보를 결합합니다. 아래 사진은 전후좌우의 고관절을 보여줍니다. 다른 두 모서리의 경우 미러 조인트를 만들어야 합니다.

진행하기 전에 12개의 모든 서보가 중앙에 있는지 확인하는 것이 좋습니다. 가장 좋은 방법은 PCB(또는 브레드보드, 아래 참조)를 조립하고 모든 서보를 연결하고 코드를 로드하는 것입니다. Arduino가 시작되면 모든 서보가 중앙에 위치합니다(명령 신호 90도). 로봇이 조립되면 나중에 중앙 위치를 미세 조정해야 합니다.

다음 단계는 다리 어셈블리의 "상지"인 허벅지라는 부분을 부착하는 것입니다. 이 부품에는 일반적으로 서보와 함께 제공되는 서보 혼과 맞는 홈이 있습니다. 홈에 뿔을 붙입니다. 3D 프린팅 재료와 혼을 구성하는 나일론 플라스틱을 접합하는 데 효과가 있는 접착제를 사용해야 합니다. 내가 사용한 글루건은 잘 작동했지만 CA 글루와 혼합된 성공을 거둔 적이 있습니다(일부 브랜드는 작동하지만 다른 브랜드는 작동하지 않음).

허벅지는 고관절에 60도 각도로 연결됩니다. 서보가 중앙에 있을 때 이 각도에 최대한 가까운 위치를 찾으십시오. 제공된 나사(종종 서보와 함께 제공되는 3개 중 더 짧은 나사)를 사용하여 혼을 서보 스플라인에 고정합니다. 아래는 명확성을 위해 포함되지 않은(또는 내 쪽에서 게으름으로 모델링되지 않은) 허벅지와 엉덩이, 서보 혼을 조립한 두 개의 사진입니다.

다리 하부도 조립해야 합니다. 이 경우 서보는 나사를 사용하여 다리 부분에 부착됩니다. 서보와 함께 제공되는 나사가 있습니다(보통 2개의 더 긴 "나무" 나사).

이제 다리를 본체에 조립할 수 있습니다. 로봇의 전면과 후면에 있는 "범퍼"라고 하는 두 부분이 있습니다(예:자동차의 범퍼). 허벅지 부분과 마찬가지로 서보 혼용 홈이 있습니다. 뿔을 붙입니다. 그런 다음 위쪽 다리의 서보 지지대를 본체의 해당 구멍에 밀어 넣습니다. 이 작업이 양쪽에서 완료되면 어셈블리를 범퍼로 고정할 수 있습니다. 다리가 약 12도를 가리키도록 합니다(다리에서 20mm 토우 아웃). 범퍼는 남은(긴) 서보 나사를 사용하여 본체에 고정됩니다.

드디어 로봇의 하체를 부착할 수 있습니다. 그들은 허벅지의 반대 방향으로 기울어져 발 끝이 각 다리 어셈블리의 고관절 바로 아래에 있도록 해야 합니다.

이것으로 로봇이 조립됩니다. 아래 그림과 같아야 합니다. 상단 이미지와 필름 클립에 비해 로봇의 디자인이 약간 변경되었음을 알려드립니다. 본체는 단순화하고 보다 견고한 디자인을 만들기 위해 재설계되었습니다. 고관절용 서보 지지대와 혼의 위치가 바뀌었습니다. 따라서 3D 이미지에 따라 조립하고 사진과 필름 클립에 혼동되지 않도록 하십시오.

물론 각 관절의 각도가 필요한 각도와 정확히 일치할 수는 없습니다. SG-90 서보의 스플라인 수는 21개이므로 두 위치 사이의 각도는 17도입니다. 기껏해야 10-20도 내에서 로봇을 조립할 수 있으며 나머지 오류는 코드의 중립 위치를 변경하여 조정해야 합니다. 이 지침의 더 아래를 참조하십시오. 다시 한 번 모든 서보를 연결하고 Arduino를 실행하고 중립 위치를 확인하고 필요한 경우 기계적 조정(조인트 스플라인 또는 두 개 이동)을 수행하는 것이 좋습니다. 하나는 작업할 때 실수로 서보를 돌리는 경향이 있습니다.

전자 제품 연결

하나의 브레드보드에 모든 것을 포함하거나 제공된 Fritzing 파일로 PCB를 생산하는 두 가지 옵션이 있습니다. 모든 전원과 접지선을 서보에 연결할 때 주의를 기울이지 않으면 브레드보드의 전압에 문제가 발생할 수 있습니다. 극단적인 경우 하나의 서보가 600mA를 소비할 수 있으며 연결이 불량하면 비정상적인 동작이 발생합니다. PCB에는 전력선에 대한 매우 넓은 구리 트레이스가 있으므로 올바르게 납땜하면 제대로 작동합니다.

내 디자인에는 전원 스위치가 없습니다. 로봇은 배터리를 연결하기만 하면 켜고 끌 수 있습니다. 하나를 추가하려면 배터리 커넥터 뒤에 있어야 하며 Arduino와 UBEC 모두에 대한 7.4V 공급을 차단해야 합니다.

브레드보드 버전

하나의 하프 사이즈 브레드보드에 Pro Mini, 서보용 커넥터 및 기타 대부분의 전자 장치를 사용할 수 있습니다. 나는 아래 그림에서 회로도를 그립니다. 특히 서보에 대한 5V 전원 및 접지 연결의 경우 짧은 점퍼 와이어를 사용해야 합니다. 서보 커넥터는 3조각으로 절단되어 브레드보드에 눌러져 있는 매우 긴 수컷 헤더입니다.

사진에 보이지 않는 것은 배터리와 UBEC입니다. 커넥터 피팅을 배터리에 부착하기 위해 이 문제를 해결하기 위해 약간의 납땜이 있을 수 있습니다. Pro Mini에 전원을 공급하려면 커넥터에서 두 개의 점퍼 와이어를 브레드보드의 하단 "파워 레일"에 연결해야 합니다(RAW 및 GND에 연결). 또한 7.4V 전원에서 A0 핀으로 두 개의 저항을 연결합니다. 2.2k는 긍정적인 측면에서, 1k는 지상에서 이동합니다. 이것은 전체 배터리에서 8V보다 큰 전압을 아날로그 핀으로 측정할 수 있는 5V 미만의 값으로 나눕니다.

UBEC의 출력측에는 서보 커넥터가 있습니다. 상단 "파워 레일"에 두 개의 수 헤더를 추가하는 것이 매우 편리합니다. 서보로의 전원 분배가 가능한 한 균형을 이루도록 그림과 같이 중간 어딘가에 배치하십시오.

IR 수신기는 A1에 연결하고 5V 전원을 공급해야 합니다. 수신기의 핀은 브레드보드의 구멍에 직접 맞도록 충분히 깁니다.

아래 회로도와 완성된 브레드보드의 모양에 대한 그림이 있습니다. 그림은 핀아웃과 연결이 다른 이전 버전의 로봇을 보여줍니다. 점퍼 와이어와 서보 커넥터를 연결하는 방법에 대한 아이디어를 제공합니다.

브레드보드는 자체 접착식 뒷면으로 본체에 부착됩니다. 핀 D3, D4 및 D5에 연결된 서보가 있는 모서리(회로도에서 오른쪽 위)가 로봇의 전면/왼쪽 모서리에 있도록 방향을 지정하고 보드가 본체 중앙(정확한 중심 중력이 중요합니다).

PCB 버전

아래에 Fritzing 파일을 추가했습니다. 이것은 Fritzing에서 제공되는 서비스에서 주문하거나 PCB 제조용 파일을 내보내 PCB를 생산하는 데 사용할 수 있습니다. 나는 아래의 어셈블리를 보여주기 위해 일련의 사진을 만들었습니다. PCB는 모든 서보, IR 및 전압 측정에 대한 커넥터가 있는 이 로봇을 위해 맞춤 제작되었습니다. 그러나 나머지 핀에서 끊어진 커넥터도 있습니다. 나중에 로봇을 확장하고 싶다면 다른 장비를 연결하는 데 사용할 수 있습니다.

본체에는 PCB 모서리에 맞는 작은 "패드"가 있습니다. 또한 여기에서 D3 ~ D5 커넥터가 있는 모서리가 전면/왼쪽에 있어야 합니다. PCB에 장착 구멍이 있지만 본체에 양면 테이프를 사용하여 부착했습니다. 그대로 유지됩니다.

배터리

배터리는 벨크로로 밑면에 부착되어 있습니다. 이를 위해 본체에 평평한 표면이 있습니다. 7.4V/500mAh LiPo 배터리의 폼 팩터는 일반적으로 약 55x30x10mm(몇 mm 정도)이며 이 위치에 아주 잘 맞습니다.

마지막으로 로봇은 걷는 동안 걸려 넘어지지 않도록 서보 와이어를 멋진 묶음으로 묶어서 "손질"할 수 있습니다. 그것은 또한 로봇에게 실제로 서보 와이어 더미가 아니라 걸어 다니는 네 발 달린 생물처럼 멋진 모습을 제공합니다. :)

마무리

로봇을 사용하기 전에 중앙 위치를 미세 조정해야 합니다. 이것은 코드에서 Servodeg0 배열을 편집하여 수행됩니다.

const float servodeg0[12] ={90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90};  

값은 알파, 베타 감마, 앞/왼쪽, 뒤/왼쪽, 앞/오른쪽, 뒤/오른쪽 순입니다. 따라서 전면 오른쪽에 있는 베타는 어레이 또는 Servodeg0[7]에서 8번째 위치입니다(어레이 번호는 0부터 시작).

서보의 회전 방향을 정의하는 Servodir이라는 배열도 있습니다.

const int servodir[12] ={ +1, +1, -1, -1, -1, +1, -1, -1, -1, +1, +1, +1}; // 회전 방향(양수는 서보 시계 반대 방향)  

내가 사용한 서보는 시계 반대 방향으로 0도에서 180도까지 움직입니다. 나는 다른 방향으로 가고 있는 서보가 있다는 것을 어딘가에서 읽었습니다. 이러한 경우 어레이 서보 디렉토리의 부호가 모두 변경되어야 합니다.

Arduino를 시작하고 모든 서보의 각도를 확인하십시오. 측정하고 모든 것이 직선과 대칭으로 보이는지 확인하십시오. 거리와 각도는 아래 그림과 같아야 합니다.

각 측정에서 정확한 밀리미터 내에 있는 것은 어렵습니다. cm 이내가 되는 것이 합리적입니다. 필요한 변경 사항을 확인하고 이를 배열 Servodeg0의 값에 더하거나 뺍니다. 모든 것이 정확하려면 몇 번의 반복이 필요합니다. 다음과 같은 Servodeg0 배열로 끝납니다(내 로봇 중 하나의 실제 코드 조각). 그리고 가장 중요한 것은 결국 네 발로 서 있고 똑바로 서 있는 로봇이 있어야 한다는 것입니다.

 const float Servodeg0[12] ={80, 95, 100, 100, 110, 90, 100, 115, 100, 80, 80, 100}; 

이제 모든 작업이 완료되었습니다. 즐기세요!

방법에 대한 몇 가지 팁일 수 있습니다.

잠시 후 서보를 다시 보정해야 할 수도 있습니다. 중심 위치는 시간이 지남에 따라 변할 수 있습니다. 때때로 모든 것이 정렬되어 있는지 확인하십시오.

모든 것을 올바르게 만들었지만 여전히 넘어질 로봇이 있는 경우 무게 중심을 확인하십시오. 벨크로를 사용하면 좋은 점 중 하나인 배터리를 이동하여 균형을 맞출 수 있습니다.

그리고 다시 한 번. LiPo 배터리를 주의해서 다루십시오.

추가 개선 사항

여기에 내 로봇을 제출함으로써 더 많은 기능을 추가하거나 약간 다른 레이아웃(더 크게, 더 작게, 더 멋지게 보이도록)을 수행하여 디자인을 수정하도록 사람들을 초대합니다. 코드는 레이아웃이나 크기가 약간 다른 로봇에서 재사용할 수 있어야 합니다. 아래 스케치는 코드의 다른 상수를 보여줍니다. 다른 측정을 가진 로봇이 만들어지면 모든 IK 및 이동 기능은 여전히 ​​작동해야 합니다. 또한 좌표가 정의되어 있음을 보여줍니다. x는 정방향을 가리킵니다.

물론 사람들이 로봇에 기능을 추가한다면 흥미로울 것입니다. 리모컨에는 기능을 부여할 수 있는 여러 버튼이 있습니다(버튼을 누르면 춤을 추거나 다른 동작 시퀀스를 수행하지 않는 이유).

저는 개인적으로 아날로그 입력을 실험합니다. 나는 또한 로봇을 어느 정도 조종하거나 자이로 또는 나침반의 도움으로 코스 편차를 수정할 수 있도록 "걸으면서 회전하는" 보행으로 작업했습니다. 그리고 초음파 센서와 자율 동작(장애물 회피)도 추가했습니다. 제 현재 프로젝트는 아날로그 제어와 자율주행을 결합하고 모든 것을 스마트폰에서 제어하는 ​​것입니다. 이로 인해 많은 새로운 것들(Blynk, ESP6822, 장치 간 직렬 통신 등)에 대해 배우게 되었고, 로봇의 세련된 버전을 출시할 수 있기를 바랍니다. /P> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

<울>
  • KITtyBot2용 코드
  • KITtyBot2Arduino용 코드
    Arduino Mini에 업로드
    /* KITtyBot 2의 IR 제어 버전입니다. Arduino Pro Mini와 제가 설계한 PCB 보드를 사용합니다(Fritzing 스케치 Kittybotmini.fzz). 이것은 이전 로봇 KITtyBot과 KITtyBot mini를 기반으로 합니다. 로봇을 제어하는 ​​IR 리모컨 NEC(Adafruit) 리모컨과 IRLib2 라이브러리를 사용합니다(https://github.com/cyborg5/IRLib2 참조). 리포지토리에서 IRLib2 라이브러리를 다운로드하고 지침에 따라 설치합니다. 일반적인 치수는 원래 KITtyBot과 유사하지만 12mm의 감마 축과 알파 축 사이에 어긋남이 있습니다(서보가 서로 겹쳐서 장착됨). 걷기와 회전을 위해 걸음걸이를 연속적으로 조정했지만 지금까지는 이것이 있다고 느낍니다. 가장 안정적인 동작을 제공합니다. 작성:Staffan Ek 2017*/#include #include #include  // 먼저 디코딩 기반을 포함합니다.#include  // 현재 있는 프로토콜만 포함 using#define MY_PROTOCOL NEC //IR 제어(NEC)를 정의합니다.long Previous;IRrecv My_Receiver(A1);//핀 A0에서 수신IRdecodeNEC My_Decoder;const int servonum =12; // 서보의 양Servo 서보[servonum]; // 서보 객체 생성const float servodeg0[12] ={90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90};// 공칭 90도에서 조정된 서보의 중립 위치( 이 값을 조정하려면 보정이 필요합니다.float servodegnew[servonum]; // 원하는 서보 위치(도)floatservodegold[servonum]; // 이전(또는 현재) 서보 위치// 아래 값을 KITtyBot miniconst int servodir[12] ={ +1, +1, -1, -1, -1, +1, -1, -1, -1, +1, +1, +1}; // 회전 방향(양수는 서보 시계 반대 방향) const float pi =3.1416;const float alfa0 =pi / 6; // 알파(30도)의 중립 위치 const float beta0 =pi / 3; // 베타(60도)의 중립 위치 const float jointlength =50; // 다리 부분의 길이(둘 다 같은 길이) const float width =120; // 너비(y 방향에서 발 사이의 거리, toeout0이 추가됨) const float leng =120; // 길이(x 방향에서 발 사이의 거리) const float distag =12; // 알파와 감마 사이의 거리 axisconst float toeout0 =20; // 감마 서보 중심에서 발의 바깥쪽 거리(발이 바깥쪽으로 가리키는 거리) const float leglength0 =2 * jointlength * cos(alfa0);const float gamma0 =asin(toeout0 / (leglength0 + distag)); // 감마의 중립 위치(토우 아웃 20mm 및 distag 12mm로 인한) const float bodyradius =sqrt(pow((width / 2), 2) + pow((leng / 2), 2)); // 대각선 길이(중심에서 발 모서리까지의 거리) const float phi0 =atan(width / leng); // bodyradius 대 x(앞으로 가리키기)의 각도 axisconst float height0 =sqrt(pow(leglength0 + distag, 2) - pow(toeout0, 2)); // 로봇의 일반 높이(각도 또는 거리가 변경되면 업데이트해야 함)float leglength [4] ={sqrt(pow(height0, 2) + pow(toeout0, 2)), sqrt(pow(height0, 2) + pow(toeout0, 2)), sqrt(pow(height0, 2) + pow(toeout0, 2)), sqrt(pow(height0, 2) + pow(toeout0, 2)) };// 시작 값 leglengthunsigned long timestep =500; // 각 시퀀스에 걸리는 시간(servomove() 사용 시)int steplength =40; //보행 중 x 방향의 스텝 길이(정방향 및 역방향 크립) float phi =20; // 회전 중 회전 각도(라디안이 아닌 도 단위!)// 이동을 위한 변수float footpos[12]; // 발 위치, 순서 LeftFrontxyz, LeftRearxyz, RightFrontxyz, RightRearxyzfloat stepturn[12] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 회전 시 발의 움직임 // 발 위치는 각각의 시작 위치로 보정됩니다.const float jointangle0[12] ={alfa0, beta0, 0, alfa0, beta0, 0, alfa0, beta0, 0, alfa0, beta0, 0};플로트 조인트앵글[12]; //각도에 대한 벡터를 사용하여 LeftFrontAlfaBetaGamma를 주문합니다. etcconst int voltagepin =A0; // 전압 측정에 할당된 핀 lowvolt =0; // 전압이 <7.0이면 로봇을 정지시키는 변수 Vint mode =0; // 현재 정렬된 보행 모드; 정방향, 역방향, 왼쪽, rightvoid setup() { Serial.begin(9600); Serial.println("키티봇 미니"); //이 줄은 구성을 확인하기 위한 것입니다. 삭제할 수 있습니다. Serial.print("감마0:"); Serial.println(감마0); Serial.print("다리길이0:"); Serial.println(leglength0); Serial.print("본체 반경:"); Serial.println(바디 반경); Serial.print("파이0:"); Serial.println(phi0); Serial.print("높이0:"); Serial.println(높이0); 서보[0].attach(3); 서보[1].attach(4); 서보[2].attach(5); 서보[3].attach(6); 서보[4].attach(7); 서보[5].attach(8); 서보[6].attach(2); 서보[7].attach(A3); 서보[8].attach(12); 서보[9].attach(11); 서보[10].attach(10); 서보[11].attach(9); for (int i =0; i  2 * 관절 길이) lresult =2 * 관절 길이; // leglength가 가능한 것보다 높으면 다음 함수가 불안정해집니다. return lresult;}float legright(float dx, float dz, float gamma) { float lresult =sqrt(pow(leglength0 - (dz / cos(gamma0 - gamma)), 2) + pow(dx, 2)); if (lresult> 2 * 관절 길이) lresult =2 * 관절 길이; // 다리 길이가 가능한 이상으로 길어지면 다음 기능이 불안정해집니다. return lresult;}// Beta, "무릎 관절"float beta(float leg) { float bresult =2 * acos(leg / (2 * jointlength)); return bresult;}// 알파, 다른 엉덩이 서보float alfafront(float dx, float beta, float leg) { float aresult =(beta / 2) - asin(dx / leg); return 결과;} float alfarear(float dx, float 베타, float 다리) { float 결과 =(베타 / 2) + asin(dx / 다리); return areult;}// 회전 각도 f(도 단위)를 기반으로 발 위치를 제공합니다. Stepturn은 footpos 값을 만드는 데 사용됩니다.void turnpos(float f) { stepturn[0] =bodyradius * cos(phi0 + (f * pi / 180)) - leng / 2; stepturn[1] =몸체반경 * sin(phi0 + (f * pi / 180)) - 너비 / 2; stepturn[3] =몸체 반경 * cos(pi - phi0 + (f * pi / 180)) + 길이 / 2; stepturn[4] =몸체 반경 * sin(pi - phi0 + (f * pi / 180)) - 너비 / 2; stepturn[6] =몸체 반경 * cos(2 * 파이 - phi0 + (f * 파이 / 180)) - 길이 / 2; stepturn[7] =몸체 반경 * sin(2 * 파이 - 파이0 + (f * 파이 / 180)) + 너비 / 2; 스텝턴[9] =몸체반경 * cos(pi + phi0 + (f * pi / 180)) + 길이 / 2; stepturn[10] =bodyradius * sin(pi + phi0 + (f * pi / 180)) + width / 2;}// 위의 함수에서 관절 각도를 기반으로 서보 위치(도)를 계산합니다. int i =0, i <12, i++) {servodegnew[i] =servodeg0[i] + 서보디르[i] * (jointangle[i] - jointangle0[i]) * 180 / 파이; }}// 제어되고 동기화된 움직임을 위한 서보 알고리즘. 모든 서보는 timestepvoid servomove() { int servotimeold[servonum]; // 마지막 서보 위치의 시간에 대한 로컬 변수 int servotimenew[servonum]; // 서보 i가 위치할 때 현재 시간에 대한 로컬 변수 int SERVOPULSE[servonum]; // 서보 드라이버에 쓰기 위한 로컬 변수 float servodeg[servonum]; // 현재 서보 위치에 대한 로컬 변수 float servodegspeed[servonum]; // 밀리초당 원하는 서보 속도 감소에 대한 로컬 변수 unsigned long starttime =millis(); // 알고리즘의 시작 시간 스탬프 unsigned long timenow =starttime; // 현재 재설정 시간 for (int i =0; i   

    맞춤형 부품 및 인클로저

    The body of the robot. Carries the PCB and battery.At each end of body, like bumper on a car. You should have two of these.Supports the hip joint. Print four of theseThe upper limb of leg. Print four.The lower limb (or foot). Print four.All parts put together. Not for printing.

    회로도

    This is a Fritzing file to allow PCB production. Use it to order from Fritzing themselves or export to a suitable format an manufacture elsewhere. kittybotmini_XKZYltyQVJ.fzz

    제조공정

    1. Raspberry Pi 2의 Windows 10 IoT Core – Adafruit 센서 데이터
    2. Adafruit 1/4 60 Ring Neopixel을 사용한 간단한 벽시계
    3. UnifiedWater v1
    4. Avenger Assembled:Iron Man 헬멧 및 아크 원자로
    5. 모바일 투표함
    6. 인텔 Arduino 101 BLE 블링크 탱크
    7. Arduino101 / tinyTILE BLE:매치메이킹 선글라스
    8. Whac-A-Mole(버튼 에디션)
    9. 최신 주크박스
    10. Arduino Apple Watch