SCS0009 서보 디버깅과 캘리브레이션
SCS0009 버전에는 두 가지 디버깅 내용이 있습니다:
- TTL 조립과 중간 위치 디버깅: 배선, 서보 ID 설정, 서보 혼 고정, 중간 위치 미세 조정, 테스트 실행.
- SCS0009 디버깅 도구: Python + PySide6 GUI, 버스 스캔, 모든 레지스터 읽기/쓰기, 위치 제어, 보드레이트/공장 초기화, xdat EEPROM 백업.
프로토콜 레지스터 세부 사항은 SCS0009 프로토콜 메모리 표를 참고하세요.
Arduino/확장 배선은 Arduino Nano를 참고하세요.
1. TTL 디버깅: 조립, ID와 중간 위치
먼저 "로봇 손 디버깅.zip" 압축 파일을 다운로드해 압축을 풀면, "Arduino 프로그램으로 로봇 손 디버깅 과정(TTL 서보)" 문서를 통해 서보 ID 설정, 캘리브레이션, 중간 위치 보정, 데모 프로그램 실행을 할 수 있습니다. 또는 공식 오픈 소스 코드를 참고하세요.
완제품을 분해하지 않은 경우(출하 시 서보 ID, 캘리브레이션, 중간 위치가 이미 조정됨)에는 바로 6번 "02 데모 프로그램" 실행과 손 추적으로 건너뛸 수 있습니다.

1. 로봇 손 디버깅 배선 방식
하나는 PC에서 Python 등 호스트 소프트웨어를 실행하는 방식입니다. 예: Feetech 서보 상위 프로그램 또는 Python 코드 실행
하나는 MEGA328P 같은 MCU나 직접 구매한 개발 보드/컨트롤러를 사용하는 방식입니다
배선 방식은 다음과 같습니다:
(1) Python 방식 디버깅 시 배선(서보 드라이버 보드만 연결):

(2) MEGA328P 개발 보드 디버깅 시 배선(서보 드라이버 보드 + 328P 개발 보드):
MEGA328P 개발 보드의 핀 위치를 정확히 확인하세요!




아래는 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]
- 연결: 하나의 서보와 서보 드라이버 보드를 차례로 연결합니다.

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



3. 서보 혼 고정
- "흰색 서보 혼 장착 시 사용" 코드 프로그램을 개발 보드에 업로드합니다
이 프로그램의 역할: 서보 기어 위치를 대략 중앙에 두며, 이후 동작 각도는 모두 이 중간 위치를 기준으로 합니다.
(1) Arduino 소프트웨어를 직접 설치하고, 자신의 시스템에 맞춰 설치 튜토리얼을 참고하세요. Arduino 프로그램을 컴파일해 다운로드하려면 먼저 라이브러리 관리자에서 FTServo 라이브러리, SCServo 라이브러리를 설치해야 합니다

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

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

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

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

- 서보 3, 4 디버깅
(1) 328P 개발 보드와 서보 드라이버 보드 사이의 배선을 분리합니다(그렇지 않으면 업로드할 수 없음)
(2) 편집: ID 값을 3, 4로 설정

(3) 프로그램을 개발 보드에 업로드합니다
(4) 연결: 개발 보드와 서보 드라이버 보드, 3, 4번 서보를 연결하면 서보 기어가 일정 각도 회전한 뒤 멈추는 소리를 들을 수 있습니다.
(5) 서보 혼을 기어에 장착하며, 위치는 가능한 한 평행하게 유지합니다
- 서보 5, 6 디버깅
절차는 위와 같습니다
- 서보 7, 8 디버깅
절차는 위와 같습니다
4. 중간값 미세 조정
"01 MiddlePos 값 미세 조정 시 사용" 코드 프로그램을 개발 보드에 업로드합니다
손가락이 닫힌 위치에 있을 때 프로그램을 즉시 중지하고(데이터 케이블 분리), 서보 혼이 올바르게 정렬되었는지 확인합니다(아래 그림). 정렬되지 않았으면 프로그램의 MiddlePos_1, MiddlePos_2 값을 조정해 정렬될 때까지 맞춥니다. 이 값을 기록합니다(서보 8개에 값 8개). 최종 프로그램에서 사용합니다.


5. 테스트 프로그램 실행
- 위에서 저장한 MiddlePos_1, MiddlePos_2 값을 아래 배열에 채우고 프로그램을 다운로드합니다.

6. "02 데모 프로그램" 실행
(1) Arduino 소프트웨어를 직접 설치하고, 자신의 시스템에 맞춰 설치 튜토리얼을 참고하세요
(2) 灵巧手调试\00 TTL串口舵机\arduino程序(MEGA328P开发板)\02 演示程序 디렉터리에서 왼손/오른손에 따라 해당 ino 파일을 엽니다

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

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

(5) 컴파일 및 업로드
주의: 이때 PC는 개발 보드에만 단독 연결하고, 개발 보드는 서보 드라이버 보드에 연결하지 않습니다(즉 로봇 손과 연결하지 않음).
업로드 성공 후 개발 보드를 점퍼 와이어 3개로 서보 드라이버 보드에 연결하고, 서보를 서보 드라이버 보드에 연결합니다. MEGA328P 개발 보드 디버깅 시 배선 방식 참고.
로봇 손은 **"02 데모 프로그램"**을 계속 반복 실행합니다
실행 결과는 다음과 같습니다:

2. SCS0009 디버깅 도구
Windows 10 / 11에 적용됩니다; Linux와 macOS 차이는 8절을 참고하세요. 이 튜토리얼은 환경 설치부터 전체 디버깅까지 모든 단계를 다룹니다.
⚠️ 호환성 안내: 이 도구는 현재 Feetech SCS0009 서보만 지원합니다(SCS 시리즈, 포텐셔미터 위치 피드백, 10비트 분해능 0–1023). 레지스터 표와 xdat 파라미터 형식은 모두 Feetech SCS0009에 맞춰 설계되었으며, 다른 브랜드/모델의 호환성은 보장하지 않습니다.
1. 환경 요구 사항
| 의존성 | 버전 | 설명 |
|---|---|---|
| Python | >= 3.8 | 3.10+ 권장, python.org에서 다운로드 |
| PySide6 | >= 6.0 | GUI 프레임워크 |
| pyserial | >= 3.5 | 시리얼 통신 |
| 시스템 | Win10 / Win11 | 아무 버전 |
2. Python 설치
- https://www.python.org/downloads/ 방문
- Python 3.10+ 설치 패키지 다운로드
- 설치 시 반드시 "Add Python to PATH" 체크(그렇지 않으면 명령줄에서 python을 찾지 못함)
설치 확인:
python --version3. 의존성 설치
시스템 Python을 오염시키지 않도록 가상 환경에 설치하는 것을 권장합니다:
# 프로젝트 디렉터리로 이동
cd SCS0009_ServoController
# 가상 환경 생성
python -m venv .venv
# 가상 환경 활성화(Windows)
.venv\Scripts\activate
# 의존성 설치
pip install -r requirements.txt⚠️ 가상 환경은 한 번만 생성하면 됩니다. 반복 실행하면 기존 환경을 덮어씁니다(설치된 의존성 초기화). 이후에는
activate로 활성화만 하면 됩니다.
팁: 활성화 후 명령줄 앞에
(.venv)가 표시됩니다.
4. 환경 확인
python setup.py[OK] 环境检查通过,可以运行项目가 보이면 환경이 올바른 것입니다.
5. 하드웨어 연결
- USB-시리얼 어댑터(예: CH340 / CP2102)를 PC에 꽂습니다
- 서보 컨트롤러(로봇 팔 제어 보드)를 연결합니다
- 서보에 전원 공급(권장 DC 5V 5A, Pro 버전 DC 12V 5A)
장치 관리자(Win+X → 장치 관리자)를 열어 시리얼 포트 번호 확인:
端口 (COM 和 LPT)
└─ USB-SERIAL CH340 (COM3) ← 서보 시리얼 포트COM 번호를 기록하고 프로그램 시작 시 선택하세요.
6. GUI 시작
python -m src.gui.factory_calibration_tool또는 수동으로 포트 지정(시리얼 포트가 점유된 경우):
python -m src.gui.factory_calibration_tool --port COM3사용 가능한 포트 확인:
python -m src.gui.factory_calibration_tool --list-ports7. 화면 조작 흐름
화면은 단일 패널 레이아웃이며, 창 높이가 부족하면 자동으로 스크롤바가 나타나고, 최대화하면 자동으로 늘어납니다.
7.1 시리얼 연결
- 포트, 보드레이트(기본 1M)를 선택하고 연결 클릭
- 상태 표시
🟢 已连接
7.2 서보 스캔
- 서보 스캔 클릭, ID 1-254의 온라인 서보 감지
- 스캔 결과가 서보 목록에 실시간 표시(모델 포함)
- 서보 목록의 행 클릭 → 서보 드롭다운에 자동 입력
7.3 파라미터 읽기/쓰기
- 파라미터 읽기: 레지스터 44개(EEPROM + SRAM) 전체 읽기, 로그에 결과 실시간 표시
- 파라미터 표: 5열 표시(주소/레지스터/값/저장 영역/읽기·쓰기), EPROM/SRAM/DEFAULT 색상 구분
- 선택 연동: 파라미터 표의 행 클릭 → "쓰기 주소" "길이" "값" 자동 입력
- 쓰기: 값을 수정한 뒤 쓰기를 클릭하면 프로그램이 자동으로 잠금 해제/쓰기/잠금
- 쓰기 결과 팝업: 성공 시 녹색 "✅ 已成功写入", 실패 시 빨간색 "❌ 写入失败"(원인 포함)
7.4 서보 ID 변경
- 버스에는 ID를 바꿀 서보 하나만 연결해 기존 ID와 충돌하지 않게 합니다.
- 파라미터 표에서 "서보 ID"(주소
0x05) 행을 찾아 선택합니다. - "값"을 목표 ID로 바꾸고 ✏️ 쓰기 클릭; 프로그램이 자동으로 잠금 해제 → 쓰기 → 다시 잠금.
- 변경 후 버스를 다시 스캔해 확인합니다. 오른손은 1–8, 왼손은 11–18.
7.5 위치 제어
- 슬라이더를 드래그하거나 목표 위치(0–1023)를 직접 입력하며, 숫자 상자와 슬라이더가 동기화됩니다.
- ▶ 이동 클릭, 상태 표시줄에 "移动中…" 표시.
- 도달 후 "已移动完成,请关闭力矩" 안내가 뜨면 ⏹ 토크 끄기 클릭.
7.6 보드레이트/공장 초기화
- 보드레이트 변경: 새 보드레이트(38400–1000000 bps)를 선택해 쓰기; 프로그램이 시리얼 보드레이트를 전환하고 ping으로 검증하며, 실패하면 자동 롤백.
- 공장 초기화: 출하 기본값으로 복원(ID=1, 보드레이트 1M), 이후 다시 스캔 필요.
7.7 xdat 파라미터(EEPROM만 저장)
💾 현재 서보 저장: 현재 ID 서보의 EEPROM 파라미터를 xdat 파일로 저장(백업)📂 xdat 열기: 백업 파일 로드📤 서보에 파라미터 복원: 백업을 서보에 다시 쓰기
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. 주의 사항
- 쓰기는 영구 반영: 파라미터를 EEPROM에 쓰면 원래 값이 덮어써져 되돌릴 수 없습니다; 수정 전에 xdat로 백업하세요.
- 전원 안정: 전원이 부족하면 스텝 손실, 통신 실패, 서보 연결 끊김이 발생할 수 있습니다; SCS0009 배선과 전원 공급의 요구 사항에 맞춰 공급하세요.
- 시리얼 포트 독점: 같은 포트를 두 프로그램이 동시에 열 수 없습니다; 사용 전에 시리얼 모니터, 상위 프로그램 등 점유 프로그램을 닫으세요.
- ID 변경 위험: 버스에는 ID를 바꿀 서보 하나만 연결하세요; 변경 후 연결이 끊기면 "공장 초기화"를 시도할 수 있습니다(ID가 1로 돌아감).
- 과온/과전압: 도구가 전압과 온도를 모니터링합니다(온도 > 60 °C 경고); 지속 고온 시 정지해 방열하세요.
- 핫플러그: USB를 뽑으면 프로그램이 재연결을 시도합니다; 다시 꽂은 뒤 포트 새로 고침을 클릭하세요.
- Windows 콘솔 깨진 문자: 명령줄 도구에서 emoji가 깨져 보이면
PYTHONIOENCODING=utf-8을 설정한 뒤 실행하세요.
10. 자주 묻는 질문
| 문제 | 해결 |
|---|---|
| 시리얼 포트를 찾을 수 없음 | 장치 관리자에서 드라이버 확인; USB 포트 교체; CH340 드라이버 설치 |
| 시리얼 포트가 점유됨 | 시리얼 모니터 등 프로그램 종료; 도구 재시작 |
| 중국어 글꼴이 비어 보임 | 시스템 기본 Microsoft YaHei, 이상 시 중국어 글꼴 설치 |
| 서보 스캔 안 됨 | 전원/배선 확인; 보드레이트 1M 확인 |
| 쓰기 실패 | 서보 전원과 연결 확인; 대상 레지스터가 쓰기 가능한지 확인 |
| PermissionError 시리얼 포트 열기 실패 | 다른 프로세스가 해당 COM 포트를 점유하지 않는지 확인 |
Linux: Permission denied: /dev/ttyUSB0 | dialout 그룹에 추가되지 않음; 위 Linux 절 참고 |
macOS: 시리얼 이름에 tty.가 있으면 멈춤 | 해당 /dev/cu.* 장치로 변경 |
11. 명령줄(선택)
# 사용 가능한 시리얼 포트 나열
python -m src.gui.factory_calibration_tool --list-ports
# 지정 포트로 시작
python -m src.gui.factory_calibration_tool --port COM3
