chillibasket/walle-replica

Robot and controller code for a replica robot

428
GitHub 스타
143
포크
JavaScript
언어
GPL-3.0
라이선스
2024.06.09
최근 푸시
2026.03.21
별표한 날

AI 분석

설치 난이도: 어려움
큐레이터 노트
이 프로젝트는 Wall-E 로봇 복제에 관심이 있는 메이커나 로봇 공학 애호가에게 적합합니다. 상세한 하드웨어 가이드와 소프트웨어 코드가 함께 제공되어 실제 제작과 커스터마이징이 용이합니다.

강점

  • 상세한 하드웨어 배선도와 보정 절차를 제공하여 실제 로봇 제작에 필요한 모든 단계를 명확히 설명합니다.
  • Arduino와 Raspberry Pi를 연동한 완전한 웹 기반 제어 시스템을 제공하며, 조이스틱, 게임패드, 텍스트 음성 변환 등 다양한 입력 방식을 지원합니다.
  • 오픈소스 라이선스(GPL-3.0)로 누구나 자유롭게 수정 및 배포할 수 있습니다.

약점

  • README가 완전하지 않으며, Raspberry Pi 웹 서버 설치의 마지막 단계가 잘려 있습니다.
  • 보안 관련 경고(로그인 페이지는 완전한 접근 제어가 아님)가 있지만, 실제 네트워크 보안에 대한 추가 조치가 부족합니다.
  • 하드웨어 의존성이 높아 소프트웨어만으로는 테스트하기 어렵고, 3D 프린팅 및 전자 부품 조립이 필요합니다.

주의사항

  • 웹 인터페이스는 신뢰할 수 없는 네트워크에서 사용하지 말아야 합니다. 기본 비밀번호를 반드시 변경하세요.
  • 배터리 과방전 방지를 위해 배터리 잔량 감지 회로를 권장하며, Raspberry Pi의 SD 카드 손상을 방지하기 위해 안정적인 전원 공급이 필요합니다.
  • 서보 모터 보정 시 물리적 범위를 초과하지 않도록 주의해야 하며, 보정 값은 하드웨어에 따라 다를 수 있습니다.

시작 가이드

  • README의 누락된 부분(Raspberry Pi 웹 서버 설치 완료)을 확인하고, 전체 설치 과정을 완료하세요.
  • Arduino 스케치를 업로드하고 서보 모터 보정을 수행하여 하드웨어가 올바르게 동작하는지 확인하세요.
  • Raspberry Pi에 웹 서버를 설정하고, config.py에서 비밀번호와 직렬 포트를 구성한 후 웹 인터페이스에 접속해 보세요.

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

Wall-E 로봇 복제품

Wall-E 복제 로봇을 위한 로봇 및 컨트롤러 코드. 로봇에 대한 자세한 정보는 https://wired.chillibasket.com/3d-printed-wall-e/ 를 방문하세요.

<br /> <br />

1. Arduino 코드 (wall-e)

  1. 애니메이션 큐: 로봇이 수행해야 할 다음 서보 움직임을 추적합니다.
  2. 무작위 움직임 생성기: 로봇이 자율적으로 움직이고 생동감 있게 보이도록 합니다.
  3. 모든 서보 모터의 속도 제어: 부드러운 가속 및 감속을 가능하게 합니다.
  4. 비차단 직렬 파싱: 로봇의 움직임을 원격으로 제어할 수 있습니다.
  5. 전압 분배기 회로를 사용한 배터리 잔량 모니터링.

로봇의 모터와 서보를 제어하는 메인 프로그램. 기능은 다음과 같습니다: <br />

2. Raspberry Pi 웹 서버 (web_interface)

  1. JavaScript 조이스틱: 로봇의 움직임을 쉽게 제어할 수 있습니다.
  2. 모든 서보 모터의 수동 제어.
  3. 로봇이 수행할 수 있는 움직임 애니메이션 목록.
  4. 재생할 수 있는 사운드 목록.
  5. 설정 페이지: 모터 매개변수, 사운드 볼륨 및 비디오 옵션을 수정할 수 있습니다.
  6. 게임패드 지원: 최신 브라우저에서 Xbox 또는 PlayStation 컨트롤러를 연결하여 로봇을 제어할 수 있습니다.
  7. 간단한 로그인 페이지: 모든 사람이 제어에 접근하는 것을 방지합니다 (참고: 완전한 접근 제어 시스템이 아니므로 신뢰할 수 없거나 공용 네트워크에서는 이 웹 인터페이스를 사용하지 마십시오).
  8. [신규] 텍스트 음성 변환 지원.
  9. [신규] 브라우저 내에서 CodeBlocks 드래그 앤 드롭 편집기를 사용하여 로봇 동작 프로그래밍.

웹 인터페이스는 Python으로 프로그래밍되었으며 Flask를 사용하여 서버를 생성합니다. Raspberry Pi는 USB를 통해 Arduino 마이크로컨트롤러에 연결됩니다. 주요 기능은 다음과 같습니다:

웹 인터페이스 및 로봇 이미지

<br /> <br />

설정 지침

1. Arduino

[a] 기본 설치

  1. 전자 부품의 배선이 아래 다이어그램과 일치하는지 확인하십시오.
  2. GitHub 저장소에서 "wall-e" 폴더를 다운로드/클론하십시오.
  3. Arduino IDE에서 wall-e.ino를 엽니다. animations.ino, MotorController.hppQueue.hpp 파일이 IDE의 별도 탭에서 자동으로 열려야 합니다.
  4. Adafruit_PWMServoDriver.h 라이브러리를 설치하십시오.
  5. Sketch -> Include Library -> Manage Libraries...로 이동합니다.
  6. Adafruit Servo를 검색합니다.
  7. 최신 버전의 라이브러리를 설치합니다.
  8. 컴퓨터를 USB 케이블로 마이크로컨트롤러에 연결합니다. Tools 메뉴에서 올바른 BoardPort가 선택되었는지 확인하십시오.
  9. 스케치를 마이크로컨트롤러에 업로드합니다.

로봇 전자 부품의 배선 다이어그램 <br />

<br />

[b] 메인 프로그램 테스트

  1. 스케치가 Arduino에 업로드된 후, 마이크로컨트롤러가 여전히 컴퓨터에 연결된 상태에서 12V 배터리를 켭니다.
  2. 시리얼 모니터를 엽니다 (Arduino IDE 오른쪽 상단 버튼). 전송 속도를 115200으로 설정합니다.
  3. 로봇의 움직임을 제어하려면 문자 'w', 'a', 's', 'd'를 보내 각각 앞으로, 왼쪽, 뒤로, 오른쪽으로 이동합니다. 'q'를 보내면 모든 움직임을 중지합니다.
  4. 머리를 움직이려면 문자 'j', 'l', 'i', 'k'를 보내 머리를 왼쪽이나 오른쪽으로 기울이고 눈을 위나 아래로 움직입니다. 이 단계에서는 서보가 예상보다 더 움직이려고 하거나 조정되지 않을 수 있습니다. 이는 아래 서보 모터 보정 단계를 수행하면 해결됩니다.

<br />

[c] 서보 모터 보정

  1. GitHub 저장소에서 "wall-e_calibration" 폴더를 다운로드/클론하십시오.
  2. Arduino IDE에서 wall-e_calibration.ino를 엽니다.
  3. 스케치를 마이크로컨트롤러에 업로드하고 시리얼 모니터를 열고 전송 속도를 115200으로 설정합니다.
  4. 이 스케치는 각 서보 모터를 원하는 운동 범위로 움직이는 데 필요한 최대 및 최소 PWM 펄스 길이를 보정하는 데 사용됩니다. 각 서보의 표준 LOW 및 HIGH 위치는 내 웹사이트의 다이어그램에서 확인할 수 있습니다.
  5. 스케치를 시작하고 시리얼 모니터를 열면 2-3초 후에 첫 번째 서보 모터(머리 회전)의 LOW 위치를 보정할 준비가 되었다는 메시지가 나타납니다.
  6. 문자 'a'와 'd'를 보내 모터를 -10 및 +10만큼 앞뒤로 움직입니다. 더 세밀한 제어를 위해 문자 'z'와 'c'를 사용하여 모터를 -1 및 +1만큼 움직입니다.
  7. 모터가 올바른 위치에 있으면 문자 'n'을 보내 보정 단계로 진행합니다. 동일한 서보의 HIGH 위치로 이동한 후, 로봇의 7개 서보 각각에 대해 이 과정이 반복됩니다.
  8. 모든 관절이 보정되면 스케치는 보정 값을 포함하는 배열을 시리얼 모니터에 출력합니다.
  9. 배열을 복사하여 프로그램 wall-e.ino144행에서 150행에 붙여넣습니다. 배열은 다음과 유사해야 합니다:
    int preset[][2] =  {{410,120},  // 머리 회전
                        {532,178},  // 목 상단
                        {120,310},  // 목 하단
                        {465,271},  // 오른쪽 눈
                        {278,479},  // 왼쪽 눈
                        {340,135},  // 왼쪽 팔
                        {150,360}}; // 오른쪽 팔

<br />

[d] 배터리 잔량 감지 (선택 사항)

  1. Arduino에서 배터리 잔량 감지 기능을 사용하려면 아래 이미지와 같이 다음 저항과 배선을 연결하십시오. 저항(전압 분배기)은 12V 전압을 5V 미만으로 낮추어 Arduino가 아날로그 핀을 사용하여 안전하게 측정할 수 있도록 합니다. 권장 저항 값은 R1 = 100kΩR2 = 47kΩ입니다.
  2. 메인 Arduino 스케치 wall-e.ino에서 54행 #define BAT_L의 주석을 해제하십시오.
  3. 다른 저항 값을 사용하는 경우 스케치의 54행에서 전압 분배기 이득 계수 값을 공식 POT_DIV = R2 / (R1 + R2)에 따라 변경하십시오.
  4. 이제 프로그램이 10초마다 자동으로 배터리 잔량을 확인하며, 이 잔량은 Raspberry Pi 웹 인터페이스의 "Status" 섹션에 표시됩니다.

배터리로 로봇을 구동할 때 남은 전력을 추적하는 것이 중요합니다. 일부 배터리는 과방전 시 손상될 수 있으며, Raspberry Pi의 SD 카드는 충분한 전력이 공급되지 않으면 손상될 수 있습니다.

<br /> 배터리 잔량 감지 회로 배선 다이어그램

<br />

[e] oLed 디스플레이 (선택 사항) (hpkevertje 기여)

  1. Arduino에서 oLed 디스플레이 기능을 사용하려면 i2c oLed 디스플레이를 서보 모터 모듈의 i2c 버스에 연결하십시오 (다이어그램 참조).
  2. Arduino 라이브러리 관리자에서 U8g2 라이브러리를 설치하십시오:
  3. Sketch -> Include Library -> Manage Libraries...로 이동합니다.
  4. U8gt를 검색합니다. 라이브러리 게시자는 "oliver"입니다.
  5. 최신 버전의 라이브러리를 설치합니다.
  6. 메인 Arduino 스케치 wall-e.ino에서 74행 #define OLED의 주석을 해제하십시오.
  7. 라이브러리에서 지원하는 다른 디스플레이를 사용하는 경우 78행의 생성자를 라이브러리 참조 페이지에 설명된 대로 변경할 수 있습니다. 기본값은 SH1106128X64NONAME 디스플레이입니다.

작은 oLed 디스플레이를 통합하여 로봇의 전면 배터리 표시 패널에 배터리 잔량을 표시할 수 있습니다. 이 기능을 사용하려면 이전 섹션의 배터리 잔량 감지 회로가 활성화되어 있어야 하며, 배터리 잔량이 계산될 때마다 화면이 업데이트됩니다. 이 기능은 페이지 모드에서 u8g2 디스플레이 라이브러리를 사용합니다. Arduino UNO에서는 메모리 사용량이 높다는 경고가 표시될 수 있지만 무시해도 됩니다.

<br /> oLed 디스플레이 배선 다이어그램

<br />

[f] 나만의 서보 애니메이션 추가 (선택 사항)

  1. 메인 Arduino 스케치와 같은 폴더에 있는 animations.ino 파일을 엽니다.
  2. 각 애니메이션 명령은 모든 서보 모터가 이동할 위치와 다음 명령으로 넘어갈 때까지 애니메이션이 대기해야 하는 시간으로 구성됩니다.
  3. switch 문에 추가 case 섹션을 삽입하여 새 애니메이션을 추가할 수 있습니다. default 섹션 위의 공간에 추가 코드를 넣어야 합니다. 예:

내 코드에는 영화의 장면을 재현하는 두 가지 애니메이션이 포함되어 있습니다: Wall-E가 부팅할 때의 눈 움직임과 Wall-E가 호기심을 가지고 주변을 둘러보는 동작 시퀀스입니다. 코드 버전 2.7부터는 나만의 서보 모터 애니메이션을 더 쉽게 추가하여 Wall-E가 다른 동작을 하도록 만들 수 있습니다...

    case 3:
            // --- 새 동작 시퀀스의 제목 ---
            //          시간,머리,목상,목하,오른눈,왼눈,왼팔,오른팔
            queue.push({  12,  48,  40,   0,  35,  45,  60,  59});
            queue.push({1500,  48,  40,  20, 100,   0,  80,  80});
            // 애니메이션을 완료하는 데 필요한 추가 동작을 여기에 추가
            // queue.push({시간, 머리 회전, 목 상단, 목 하단, 오른쪽 눈, 왼쪽 눈, 왼쪽 팔, 오른쪽 팔})
            break;
  1. 시간은 밀리초 단위의 숫자여야 합니다 (예: 3.5초 = 3500).
  2. 서보 모터 위치 명령은 0에서 100 사이의 정수여야 하며, 여기서 0 = LOW100 = HIGH 서보 위치는 wall-e_calibration.ino 스케치에서 보정된 값입니다.
  3. 특정 동작에서 모터를 비활성화하려면 -1을 사용할 수 있습니다.

<br /> <br />

2. Raspberry Pi 웹 서버

[a] 하드웨어 설정

  1. Raspberry Pi의 전원 케이블을 12V-5V 벅 컨버터의 USB 전원 출력 포트에 연결하십시오.
  2. Arduino의 USB 데이터 케이블을 Raspberry Pi에 연결하십시오.
  3. Raspberry Pi 카메라가 있으면 리본 케이블을 CSI 카메라 커넥터에 연결하십시오.
  4. 설정 및 설치를 위해 HDMI 포트에 모니터를 연결하고 USB 키보드와 마우스를 연결할 수 있습니다. 또는 SSH를 사용하여 다른 컴퓨터에서 Raspberry Pi에 연결하고 구성할 수 있습니다.

<br />

[b] 기본 설치

  1. Raspberry Pi OS Desktop 최신 버전을 실행하도록 Raspberry Pi를 설정하십시오. 설정 지침은 Raspberry Pi 웹사이트에서 찾을 수 있습니다. Raspberry Pi가 인터넷에 연결되어 있는지 확인하십시오.
  2. Raspberry Pi에서 "터미널" 명령줄을 엽니다.
  3. 저장소를 Raspberry Pi의 홈 디렉토리에 클론합니다:
cd ~
git clone https://github.com/chillibasket/walle-replica.git

<br />

[!NOTE]

"config.py" 파일을 편집하여 웹 인터페이스 설정을 구성할 수 있습니다:

* 구성 파일 열기: nano ~/walle-replica/web_interface/config.py

* 14행에서 웹 인터페이스의 비밀번호를 변경할 수 있습니다. 기본 비밀번호는 "walle"입니다.

* 15행에서 Arduino에 연결하는 데 사용되는 기본 직렬 포트를 설정할 수 있습니다. dmseg | grep tty 명령을 사용하여 연결된 모든 직렬 포트 목록을 찾을 수 있습니다.

* 16행17행에서 웹 서버 시작 시 Arduino와 카메라가 자동으로 연결되어야 하는지 구성할 수 있습니다.

<br />

  1. 완료되면...

원본 저장소: chillibasket/walle-replica

라이선스: GPL-3.0

게재 제외를 원하시면 삭제 요청을 보내주세요.