GitHub

https://github.com/steeze1213

로보테크AI

융합_로보테크 AI 자율주행 로봇 개발자 과정-26/06/15

steezer 2026. 6. 15. 17:50

전체 수치 중간점검 겸 정리

로봇팔·주차 수치 레퍼런스 (전체)

기준: 2026-06-12 재캘리브레이션 + 펌웨어 RobotArmCase.ino + auto_pick.py + park.py


 

1. 채널별 기본 정보

채널 부위 모터 펄스 min~max(us) 안전범위(도) 실사용 home
5 그리퍼 MG996R 500~2500 0~50 0
7 손목회전 MG996R 500~2500 40~130 130
9 손목굽힘 MG996R 500~2500 70~170 90
11 팔꿈치 FT330M 35kg 400~2600 0~90 60
13 어깨 FT330M 35kg 400~2600 20~140 120
15 베이스 FT330M 35kg 400~2600 0~180 150 

CH15: 펌웨어 cal[] home 필드는 90이지만 미사용.
실제 홈/대기는 poseHome()이 BASE_PLACE=150으로 보냄. 다른 5채널은 cal[] home이 실제 사용됨.

 

2. 각도값 → 물리적 의미 (방향 사전)

채널 의미
5 그리퍼 0 / 50 열림 / 닫힘
7 손목회전 130 / 40 가로(x)잡기 / 세로(y)잡기
9 손목굽힘 170 / 155 / 90 / 70 일자 / 집기(6/12) / 놓기숙임 / 최대숙임
11 팔꿈치 0 / 20 / 90 일자 / 집기 / 최대굽힘
13 어깨 140 / 120 / 100 / 60 / 20 뒤젖힘 / 들기·이동 / 수직 / 놓기 / 집기하강
15 베이스 0 / 90 / 180 / 150 왼쪽 / 뒤 / 오른쪽 / 후면(놓기)

 

3. 물건별 베이스각(CH15) 변천

물건 6/9 최초 조정시도 6/12 확정
L (좌·팔기준) 47 49
C (중앙) 35 37
R (우) 23 18→24→22→23 25

물건 6.5cm 간격, 좌우대칭 ±12도, 재조립으로 전체 +2도 시프트

 

4. 펌웨어 자세 명령 → 채널 목표값

명령 13어깨 11팔꿈치 9손목 7회전 15베이스 5집게
H 홈 120 60 90 130 150 0
RL/RB/RR 준비 90 30 120 · 0/90/180 0
P 내리기 30 30 180 · · 0
G 집기 · · · · · 50
O 놓기 · · · · · 0
L 들기 120 40 120 · · ·
C 이동 120 60 100 · 150 ·
B 후면놓기 30 30 180 · 150 0
BL/BR 좌우놓기 60 30 120 · 0/180 0

 

5. auto_pick.py 시퀀스 (동작 × 채널, 6/12 최신)

동작 5 7 9 11 13 15 대기s
준비:집게열기 0 · · · · · 1.0
준비:들기 · · · · 120 · 3.0
준비:팔꿈치 · · · 20 · · 1.7
준비:손목 · · 155 · · · 1.7
준비:손목회전 · 130 · · · · 1.7
조준 · · · · · L49/C37/R25 3.0
하강 · · · · 20 · 3.0
집기 50 · · · · · 1.0
들기 · · · · 120 · 3.0
후면회전 · · · · · 150 3.0
놓기하강 · · · · 60 · 3.0
손목숙임 · · 90 · · · 1.7
놓기 0 · · · · · 1.0
손목복귀 · · 155 · · · 1.7
다시들기 · · · · 120 · 3.0
(H 명령)           3.0

ALL: 준비 1회 → 물건마다 조준~다시들기 반복(L→C→R) → 마지막 홈

 

6. 변환식 (각도↔펄스↔거리)

변환
각도→펄스 us = map(angle,0,180, pMin,pMax)
펄스→PCA틱 ticks = us×4096×50/1,000,000 (50Hz)
무부하 실측 400us=0°, 2600us=180° (FT330M, 중심1500us)
핵심 펄스=위치만 결정, 토크는 모터스펙(힘≠펄스)

 

7. FK — 자세별 도달거리 (수직평면)

어깨/팔꿈치/손목 수평(mm) 높이(어깨기준mm) 비고
30/30/180 246 +33 P 뻗기
30/20/90 198 -15 최대도달
40/68/113 159 -35 (구 집기)
링크 L1=130, L2=65, L3=60   mm
충돌영역 베이스반경 R_BASE=70, 어깨높이 H_SHLDR=40    

 

8. 속도/타이밍

항목
펌웨어 moveDelay 25ms/도 기본, SP 17=1.5배
auto_pick WAIT (big/small/grip) 3.0 / 1.7 / 1.0초
교훈 WAIT < 이동시간이면 펌웨어가 명령 씹음 (R회전 최장~2.5s)

 

주차 현황 (미완)

버전 결과
step&measure (3축)  2회 성공 (X오차 0.4mm). 가장 잘 된 버전
연속 비주얼서보 (이후 변경)  회전이 마커를 시야 밖으로 밀어냄 → 놓침 반복 → 타임아웃. 수정할수록 악화

결론: 주차는 미완성. 재개 시 연속서보 버리고 step&measure로 롤백 권장.

안전 결함 — 추락 사고 원인

park.py를 Ctrl+C/kill로 죽여도, 마지막 /cmd_vel 속도가 남아 바퀴 계속 회전
→ 터틀봇 책상에서 추락 → 기둥 파손 (6/10)

대응 필수:

  • 테스트는 바닥에서 (책상 위 금지) 또는 바퀴 들고
  • 종료 시 반드시 ros2 topic pub --once /cmd_vel ... "{}" 로 정지 확인
  • 별도 watchdog: 일정시간 명령 없으면 자동 0속도 (미구현)
  • E-stop 물리 버튼 / 터틀봇 전원 즉시 차단 수단 확보

 

9. 주차 기준점 (park.py, 6/12 실측 — 참고용, 주차 자체는 미완)

목표 허용(TOL) 측정노이즈 제어
X (전후, mm) -12.0 ±2.0 ±0.5 전/후진
yaw (방향, 도) -2.0 ±2.0 ±0.8 제자리 회전
Z (횡거리, mm) 236.0 ±10.0 ±0.5 평행주차 기동

 

10. 주차 제어 파라미터 (연속서보)

항목 비고
부호 DIR=-1 / DIR_YAW=1 / DIR_LAT=1 실측
KX/V_MAX/V_MIN 0.0005 / 0.025 / 0.012 전후 P제어
KW/W_MAX/W_MIN 0.006 / 0.08 / 0.04 회전(시야이탈 방지 낮춤)
LOST_SEC / EMA_A / STABLE_SEC 2.0 / 0.5 / 1.5  
횡기동 틀기35°→전진(오차×0.7/sin35°)→되틀기 검증됨
탐색 회전스캔+이동, SCAN_SPEED 0.15 돌면서 검출

 

11. 마커·물건 배치

항목
마커 DICT_5X5_100, ID 99, 한변 85mm(검은변)
마커 높이 바닥에서 3.8cm
물건 중앙=마커 3cm 뒤, 좌우 6.5cm 간격 ×3, 동일크기
물건 특성 스티로폼 고리형(구멍) — 놓을때 걸림 → 손목 숙여 낙하
인식거리 25cm~1.5m (30cm미만 불가: 잘림+초점흐림)
시작위치 권장 보드 횡거리 30~60cm, 마커방향 ±30도

 

12. 시스템 경로/포트

항목
라파이 ssh group4@192.168.0.187
아두이노 by-id usb-Arduino__www.arduino.cc__0043_1344B...
OpenCR by-id usb-ROBOTIS_OpenCR_..._FFFFFFFEFFFF-if00
카메라 camera_ros, camera:=1(imx219), 1640x1232, RGB888
MQTT localhost, 토픽 pack/arm/cmd
PCA9685 I2C 0x40, A4(SDA)/A5(SCL)
전원 18650 3S→벅 6.5V→PCA V+ (GND공통)

 

13. 모터 교체 이력

시점 모터 이유
초기 SG90 1.8kg 약함→기어갈림/부러짐
MG996R 10kg 끝단(손목/그리퍼)
FT330M 35kg ×3 무거운관절, 25kg클론이 못버팀
6/12 CH9 MG996R 신품 낙하 사망 교체

 

14. 그리퍼(CH5) 특이사항

항목
안전범위 0~50 (펌웨어 클램프)
50 = 한계인 이유 그 이상 조이면 물건에 막혀 스톨 → 모터 사망 위험(과거 패턴)
더 조이려면 펌웨어 safeMax 수정+재업로드 (비추, 접촉면 고무가 안전)