🧪 새 튜토리얼이 계속 업데이트 중 — 로봇 팔부터 센서까지
본문으로 건너뛰기

SCS0009 서보 디버깅과 캘리브레이션 ​

SCS0009 버전에는 두 가지 디버깅 내용이 있습니다:

  1. TTL 조립과 중간 위치 디버깅: 배선, 서보 ID 설정, 서보 혼 고정, 중간 위치 미세 조정, 테스트 실행.
  2. SCS0009 디버깅 도구: Python + PySide6 GUI, 버스 스캔, 모든 레지스터 읽기/쓰기, 위치 제어, 보드레이트/공장 초기화, xdat EEPROM 백업.

프로토콜 레지스터 세부 사항은 SCS0009 프로토콜 메모리 표를 참고하세요.
Arduino/확장 배선은 Arduino Nano를 참고하세요.

1. TTL 디버깅: 조립, ID와 중간 위치 ​

먼저 "로봇 손 디버깅.zip" 압축 파일을 다운로드해 압축을 풀면, "Arduino 프로그램으로 로봇 손 디버깅 과정(TTL 서보)" 문서를 통해 서보 ID 설정, 캘리브레이션, 중간 위치 보정, 데모 프로그램 실행을 할 수 있습니다. 또는 공식 오픈 소스 코드를 참고하세요.

완제품을 분해하지 않은 경우(출하 시 서보 ID, 캘리브레이션, 중간 위치가 이미 조정됨)에는 바로 6번 "02 데모 프로그램" 실행과 손 추적으로 건너뛸 수 있습니다.

TTL 디버깅에 필요한 도구와 배선

1. 로봇 손 디버깅 배선 방식 ​

하나는 PC에서 Python 등 호스트 소프트웨어를 실행하는 방식입니다. 예: Feetech 서보 상위 프로그램 또는 Python 코드 실행

하나는 MEGA328P 같은 MCU나 직접 구매한 개발 보드/컨트롤러를 사용하는 방식입니다

배선 방식은 다음과 같습니다:

(1) Python 방식 디버깅 시 배선(서보 드라이버 보드만 연결):

1. 로봇 손 디버깅 배선 방식 – 1

(2) MEGA328P 개발 보드 디버깅 시 배선(서보 드라이버 보드 + 328P 개발 보드):

MEGA328P 개발 보드의 핀 위치를 정확히 확인하세요!

1. 로봇 손 디버깅 배선 방식 – 2

1. 로봇 손 디버깅 배선 방식 – 3

1. 로봇 손 디버깅 배선 방식 – 4

1. 로봇 손 디버깅 배선 방식 – 5

아래는 MCU를 사용한 디버깅 과정을 설명합니다. MCU 자체가 데모 프로그램을 계속 반복 실행하므로 데이터 케이블만 분리하면 멈춥니다.

2. 서보 ID 설정 ​

로봇 손 하나에는 서보 8개가 사용됩니다. 오른손 ID는 1-8, 왼손 ID는 11-18로 설정해야 합니다

중간 위치 캘리브레이션 기본값은 오른손[451,571,451,571,451,571,451,571], 왼손[571,451,571,451,571,451,571,451]

  1. 연결: 하나의 서보와 서보 드라이버 보드를 차례로 연결합니다.

2.서보 ID 설정 – 1

  1. 서보 제조사가 제공하는 상위 프로그램 FD1.9.8.2로 설정합니다

FD.rar

2.서보 ID 설정 – 2

2.서보 ID 설정 – 3

2.서보 ID 설정 – 4

3. 서보 혼 고정 ​

  1. "흰색 서보 혼 장착 시 사용" 코드 프로그램을 개발 보드에 업로드합니다

이 프로그램의 역할: 서보 기어 위치를 대략 중앙에 두며, 이후 동작 각도는 모두 이 중간 위치를 기준으로 합니다.

(1) Arduino 소프트웨어를 직접 설치하고, 자신의 시스템에 맞춰 설치 튜토리얼을 참고하세요. Arduino 프로그램을 컴파일해 다운로드하려면 먼저 라이브러리 관리자에서 FTServo 라이브러리, SCServo 라이브러리를 설치해야 합니다

3.서보 혼 고정 – 1

(2) 개발 보드 종류 선택: "Arduino Nano" 선택

3.서보 혼 고정 – 2

  1. 서보 1, 2 디버깅

(1) 편집: 디버깅할 서보 ID에 따라 아래 위치를 수정합니다. 예를 들어 검지를 디버깅하려면 ID 값을 1, 2로 설정합니다

3.서보 혼 고정 – 3

(2) 프로그램을 개발 보드에 업로드합니다

(3) 연결: 개발 보드와 서보 드라이버 보드, 1, 2번 서보를 연결하면 서보 기어가 일정 각도 회전한 뒤 멈추는 소리를 들을 수 있습니다.

3.서보 혼 고정 – 4

(4) 서보 혼을 기어에 장착하며, 위치는 가능한 한 평행하게 유지합니다

3.서보 혼 고정 – 5

  1. 서보 3, 4 디버깅

(1) 328P 개발 보드와 서보 드라이버 보드 사이의 배선을 분리합니다(그렇지 않으면 업로드할 수 없음)

(2) 편집: ID 값을 3, 4로 설정

3.서보 혼 고정 – 6

(3) 프로그램을 개발 보드에 업로드합니다

(4) 연결: 개발 보드와 서보 드라이버 보드, 3, 4번 서보를 연결하면 서보 기어가 일정 각도 회전한 뒤 멈추는 소리를 들을 수 있습니다.

(5) 서보 혼을 기어에 장착하며, 위치는 가능한 한 평행하게 유지합니다

  1. 서보 5, 6 디버깅

절차는 위와 같습니다

  1. 서보 7, 8 디버깅

절차는 위와 같습니다

4. 중간값 미세 조정 ​

  1. "01 MiddlePos 값 미세 조정 시 사용" 코드 프로그램을 개발 보드에 업로드합니다

  2. 손가락이 닫힌 위치에 있을 때 프로그램을 즉시 중지하고(데이터 케이블 분리), 서보 혼이 올바르게 정렬되었는지 확인합니다(아래 그림). 정렬되지 않았으면 프로그램의 MiddlePos_1, MiddlePos_2 값을 조정해 정렬될 때까지 맞춥니다. 이 값을 기록합니다(서보 8개에 값 8개). 최종 프로그램에서 사용합니다.

4.중간값 미세 조정 – 1

4.중간값 미세 조정 – 2

5. 테스트 프로그램 실행 ​

  1. 위에서 저장한 MiddlePos_1, MiddlePos_2 값을 아래 배열에 채우고 프로그램을 다운로드합니다.

5.테스트 프로그램 실행 – 1

6. "02 데모 프로그램" 실행 ​

(1) Arduino 소프트웨어를 직접 설치하고, 자신의 시스템에 맞춰 설치 튜토리얼을 참고하세요

(2) 灵巧手调试\00 TTL串口舵机\arduino程序(MEGA328P开发板)\02 演示程序 디렉터리에서 왼손/오른손에 따라 해당 ino 파일을 엽니다

6."02 데모 프로그램" 실행 – 1

(3) Arduino 프로그램을 컴파일해 개발 보드에 업로드하려면 먼저 라이브러리 관리자에서 FTServo 라이브러리, SCServo 라이브러리를 설치해야 합니다

6."02 데모 프로그램" 실행 – 2

(4) 개발 보드 종류 선택: "Arduino Nano" 선택

6."02 데모 프로그램" 실행 – 3

(5) 컴파일 및 업로드

주의: 이때 PC는 개발 보드에만 단독 연결하고, 개발 보드는 서보 드라이버 보드에 연결하지 않습니다(즉 로봇 손과 연결하지 않음).

업로드 성공 후 개발 보드를 점퍼 와이어 3개로 서보 드라이버 보드에 연결하고, 서보를 서보 드라이버 보드에 연결합니다. MEGA328P 개발 보드 디버깅 시 배선 방식 참고.

로봇 손은 **"02 데모 프로그램"**을 계속 반복 실행합니다

실행 결과는 다음과 같습니다:

6."02 데모 프로그램" 실행 – 4


2. SCS0009 디버깅 도구 ​

Windows 10 / 11에 적용됩니다; Linux와 macOS 차이는 8절을 참고하세요. 이 튜토리얼은 환경 설치부터 전체 디버깅까지 모든 단계를 다룹니다.

⚠️ 호환성 안내: 이 도구는 현재 Feetech SCS0009 서보만 지원합니다(SCS 시리즈, 포텐셔미터 위치 피드백, 10비트 분해능 0–1023). 레지스터 표와 xdat 파라미터 형식은 모두 Feetech SCS0009에 맞춰 설계되었으며, 다른 브랜드/모델의 호환성은 보장하지 않습니다.

1. 환경 요구 사항 ​

의존성버전설명
Python>= 3.83.10+ 권장, python.org에서 다운로드
PySide6>= 6.0GUI 프레임워크
pyserial>= 3.5시리얼 통신
시스템Win10 / Win11아무 버전

2. Python 설치 ​

  1. https://www.python.org/downloads/ 방문
  2. Python 3.10+ 설치 패키지 다운로드
  3. 설치 시 반드시 "Add Python to PATH" 체크(그렇지 않으면 명령줄에서 python을 찾지 못함)

설치 확인:

bash
python --version

3. 의존성 설치 ​

시스템 Python을 오염시키지 않도록 가상 환경에 설치하는 것을 권장합니다:

bash
# 프로젝트 디렉터리로 이동
cd SCS0009_ServoController

# 가상 환경 생성
python -m venv .venv

# 가상 환경 활성화(Windows)
.venv\Scripts\activate

# 의존성 설치
pip install -r requirements.txt

⚠️ 가상 환경은 한 번만 생성하면 됩니다. 반복 실행하면 기존 환경을 덮어씁니다(설치된 의존성 초기화). 이후에는 activate로 활성화만 하면 됩니다.

팁: 활성화 후 명령줄 앞에 (.venv)가 표시됩니다.

4. 환경 확인 ​

bash
python setup.py

[OK] 环境检查通过,可以运行项目가 보이면 환경이 올바른 것입니다.

5. 하드웨어 연결 ​

  1. USB-시리얼 어댑터(예: CH340 / CP2102)를 PC에 꽂습니다
  2. 서보 컨트롤러(로봇 팔 제어 보드)를 연결합니다
  3. 서보에 전원 공급(권장 DC 5V 5A, Pro 버전 DC 12V 5A)

장치 관리자(Win+X → 장치 관리자)를 열어 시리얼 포트 번호 확인:

端口 (COM 和 LPT)
  └─ USB-SERIAL CH340 (COM3)     ← 서보 시리얼 포트

COM 번호를 기록하고 프로그램 시작 시 선택하세요.

6. GUI 시작 ​

bash
python -m src.gui.factory_calibration_tool

또는 수동으로 포트 지정(시리얼 포트가 점유된 경우):

bash
python -m src.gui.factory_calibration_tool --port COM3

사용 가능한 포트 확인:

bash
python -m src.gui.factory_calibration_tool --list-ports

7. 화면 조작 흐름 ​

화면은 단일 패널 레이아웃이며, 창 높이가 부족하면 자동으로 스크롤바가 나타나고, 최대화하면 자동으로 늘어납니다.

7.1 시리얼 연결 ​

  • 포트, 보드레이트(기본 1M)를 선택하고 연결 클릭
  • 상태 표시 🟢 已连接

7.2 서보 스캔 ​

  • 서보 스캔 클릭, ID 1-254의 온라인 서보 감지
  • 스캔 결과가 서보 목록에 실시간 표시(모델 포함)
  • 서보 목록의 행 클릭 → 서보 드롭다운에 자동 입력

7.3 파라미터 읽기/쓰기 ​

  • 파라미터 읽기: 레지스터 44개(EEPROM + SRAM) 전체 읽기, 로그에 결과 실시간 표시
  • 파라미터 표: 5열 표시(주소/레지스터/값/저장 영역/읽기·쓰기), EPROM/SRAM/DEFAULT 색상 구분
  • 선택 연동: 파라미터 표의 행 클릭 → "쓰기 주소" "길이" "값" 자동 입력
  • 쓰기: 값을 수정한 뒤 쓰기를 클릭하면 프로그램이 자동으로 잠금 해제/쓰기/잠금
  • 쓰기 결과 팝업: 성공 시 녹색 "✅ 已成功写入", 실패 시 빨간색 "❌ 写入失败"(원인 포함)

7.4 서보 ID 변경 ​

  1. 버스에는 ID를 바꿀 서보 하나만 연결해 기존 ID와 충돌하지 않게 합니다.
  2. 파라미터 표에서 "서보 ID"(주소 0x05) 행을 찾아 선택합니다.
  3. "값"을 목표 ID로 바꾸고 ✏️ 쓰기 클릭; 프로그램이 자동으로 잠금 해제 → 쓰기 → 다시 잠금.
  4. 변경 후 버스를 다시 스캔해 확인합니다. 오른손은 1–8, 왼손은 11–18.

7.5 위치 제어 ​

  1. 슬라이더를 드래그하거나 목표 위치(0–1023)를 직접 입력하며, 숫자 상자와 슬라이더가 동기화됩니다.
  2. ▶ 이동 클릭, 상태 표시줄에 "移动中…" 표시.
  3. 도달 후 "已移动完成,请关闭力矩" 안내가 뜨면 ⏹ 토크 끄기 클릭.

7.6 보드레이트/공장 초기화 ​

  • 보드레이트 변경: 새 보드레이트(38400–1000000 bps)를 선택해 쓰기; 프로그램이 시리얼 보드레이트를 전환하고 ping으로 검증하며, 실패하면 자동 롤백.
  • 공장 초기화: 출하 기본값으로 복원(ID=1, 보드레이트 1M), 이후 다시 스캔 필요.

7.7 xdat 파라미터(EEPROM만 저장) ​

  1. 💾 현재 서보 저장: 현재 ID 서보의 EEPROM 파라미터를 xdat 파일로 저장(백업)
  2. 📂 xdat 열기: 백업 파일 로드
  3. 📤 서보에 파라미터 복원: 백업을 서보에 다시 쓰기

8. Linux와 macOS 차이 ​

Linux ​

  • 글꼴: sudo apt install fonts-noto-cjk fonts-noto-color-emoji, 그렇지 않으면 중국어 UI가 비어 보이거나 emoji가 네모로 표시될 수 있습니다.
  • 시리얼 권한: sudo usermod -a -G dialout $USER, 로그아웃 후 다시 로그인해야 적용; groups에 dialout이 포함되어야 합니다. 임시로 sudo chmod 666 /dev/ttyUSB0 사용 가능.
  • 장치 이름: /dev/ttyUSB*(CH340 / CP2102 / PL2303) 또는 /dev/ttyACM*(온보드 USB 시리얼); lsusb, dmesg | grep -i tty로 제조사 확인.
  • 장치 이름 고정(선택): /etc/udev/rules.d/99-servo.rules에 SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyServo"를 작성하고 이후 /dev/ttyServo 사용.
  • 시작: python -m src.gui.factory_calibration_tool --port /dev/ttyUSB0.
  • 자주 묻는 질문: pip가 externally-managed-environment를 보고하면 venv 사용 또는 --break-system-packages 추가.

macOS ​

  • Python: Homebrew로 brew install python 설치 권장, 시스템 기본 구버전 사용 금지.
  • 시리얼 이름: /dev/cu.* 사용, /dev/tty.* 사용 금지(후자는 블록될 수 있음); ls /dev/cu.*로 확인.
  • USB 드라이버: CH340 / CP2102 / FTDI는 대부분 드라이버 불필요; 구형 CH340은 WCH 드라이버 필요, system_profiler SPUSBDataType로 진단.
  • 시작: python -m src.gui.factory_calibration_tool --port /dev/cu.usbserial-0001.
  • Apple Silicon: 네이티브 Python 3.10+ 사용, Rosetta의 구형 Python 회피; 첫 실행 시 "개발자를 확인할 수 없음"이 뜨면 "개인정보 보호 및 보안"에서 허용.
  • 절전: macOS 절전 모드에서 시리얼이 끊길 수 있으므로 작업 중에는 깨어 있게 유지.

9. 주의 사항 ​

  1. 쓰기는 영구 반영: 파라미터를 EEPROM에 쓰면 원래 값이 덮어써져 되돌릴 수 없습니다; 수정 전에 xdat로 백업하세요.
  2. 전원 안정: 전원이 부족하면 스텝 손실, 통신 실패, 서보 연결 끊김이 발생할 수 있습니다; SCS0009 배선과 전원 공급의 요구 사항에 맞춰 공급하세요.
  3. 시리얼 포트 독점: 같은 포트를 두 프로그램이 동시에 열 수 없습니다; 사용 전에 시리얼 모니터, 상위 프로그램 등 점유 프로그램을 닫으세요.
  4. ID 변경 위험: 버스에는 ID를 바꿀 서보 하나만 연결하세요; 변경 후 연결이 끊기면 "공장 초기화"를 시도할 수 있습니다(ID가 1로 돌아감).
  5. 과온/과전압: 도구가 전압과 온도를 모니터링합니다(온도 > 60 °C 경고); 지속 고온 시 정지해 방열하세요.
  6. 핫플러그: USB를 뽑으면 프로그램이 재연결을 시도합니다; 다시 꽂은 뒤 포트 새로 고침을 클릭하세요.
  7. Windows 콘솔 깨진 문자: 명령줄 도구에서 emoji가 깨져 보이면 PYTHONIOENCODING=utf-8을 설정한 뒤 실행하세요.

10. 자주 묻는 질문 ​

문제해결
시리얼 포트를 찾을 수 없음장치 관리자에서 드라이버 확인; USB 포트 교체; CH340 드라이버 설치
시리얼 포트가 점유됨시리얼 모니터 등 프로그램 종료; 도구 재시작
중국어 글꼴이 비어 보임시스템 기본 Microsoft YaHei, 이상 시 중국어 글꼴 설치
서보 스캔 안 됨전원/배선 확인; 보드레이트 1M 확인
쓰기 실패서보 전원과 연결 확인; 대상 레지스터가 쓰기 가능한지 확인
PermissionError 시리얼 포트 열기 실패다른 프로세스가 해당 COM 포트를 점유하지 않는지 확인
Linux: Permission denied: /dev/ttyUSB0dialout 그룹에 추가되지 않음; 위 Linux 절 참고
macOS: 시리얼 이름에 tty.가 있으면 멈춤해당 /dev/cu.* 장치로 변경

11. 명령줄(선택) ​

bash
# 사용 가능한 시리얼 포트 나열
python -m src.gui.factory_calibration_tool --list-ports

# 지정 포트로 시작
python -m src.gui.factory_calibration_tool --port COM3

관련 페이지 ​