Skip to content
Published on

로봇 팔은 무엇으로 이루어지는가 — 링크, 조인트, 그리고 관절을 실제로 움직이는 것들

공유하기
Authors

들어가며 — 서보 여섯 개로 만든 팔이 자기 무게에 무너집니다

로봇 팔을 만들기로 하고 부품을 삽니다. 검색하면 가장 많이 나오는 조합이 있습니다. MG996R 서보 여섯 개, 아크릴이나 3D 프린트 브래킷, 5V 전원.

조립합니다. 전원을 넣습니다. 서보들이 자기 자리를 찾아 움직입니다.

팔을 수평으로 뻗으라고 명령합니다. 어깨가 부르르 떨면서 조금씩 내려앉습니다. 서보는 계속 소리를 내고 있는데 팔은 올라가지 않습니다. 뭔가 집으라고 시키면 아예 주저앉습니다.

코드 문제가 아닙니다. 전원 문제도 아닙니다. 어깨 관절에 필요한 토크가 그 서보가 낼 수 있는 값의 1.66배이기 때문입니다.

이 숫자는 뒤에서 직접 계산하겠습니다. 지금 중요한 것은, 이 계산이 부품을 사기 전에 종이 위에서 끝날 수 있었다는 점입니다. 팔 길이와 들 물건의 무게만 정하면 각 관절이 요구하는 토크가 나오고, 그 값을 데이터시트와 비교하면 됩니다.

이 글은 그 계산에 필요한 것들을 다룹니다. 로봇 팔이 무엇으로 이루어지는지, 자유도가 실제로 무엇을 세는지, 관절을 돌리는 세 가지 방법이 각각 무엇을 잘하고 못하는지, 감속기가 무엇을 주고 무엇을 빼앗는지. 그리고 마지막에 그 토크 계산을 처음부터 끝까지 합니다.

링크, 조인트, 엔드이펙터 — 세 단어의 정확한 뜻

용어부터 정확히 하고 가겠습니다. 이 세 단어의 정의가 뒤에 나오는 모든 계산의 기초입니다.

링크는 변형하지 않는 강체 부재입니다. 로봇 팔에서는 관절과 관절 사이를 잇는 구조물입니다. 사람 팔로 치면 위팔뼈와 아래팔뼈입니다. 기구학에서 링크를 강체로 가정하는 이유는 계산을 위해서이고, 실물이 휘는 만큼은 오차가 됩니다.

조인트는 두 링크를 연결하면서 그 사이에 상대 운동을 허용하는 요소입니다. 어떤 운동을 허용하느냐가 조인트의 종류를 정합니다.

엔드이펙터는 팔 맨 끝에 붙어 실제 작업을 하는 장치입니다. 그리퍼, 흡착판, 용접 토치, 카메라. 기구학 계산에서 "손끝의 위치"라고 할 때 그 손끝은 엔드이펙터에 정한 기준점이고, 이것을 도구 중심점이라고 부릅니다.

여기에 베이스를 더하면 구조가 완성됩니다. 베이스에서 시작해 링크와 조인트가 번갈아 이어지고 엔드이펙터에서 끝나는 사슬입니다. 갈라지지 않고 한 줄로 이어지는 이 구조를 열린 운동 사슬이라고 하고, 산업용 로봇 팔의 절대다수가 이 형태입니다.

닫힌 사슬도 있습니다. 델타 로봇처럼 여러 갈래가 끝에서 다시 만나는 구조인데, 강성과 속도에서 유리한 대신 작업 공간이 좁고 기구학이 훨씬 복잡합니다. 이 글은 열린 사슬만 다룹니다.

한 가지 관례가 있습니다. 링크와 조인트에 번호를 매길 때 베이스에서 시작해 바깥으로 셉니다. 베이스가 링크 0, 첫 관절이 조인트 1, 그다음이 링크 1. 이렇게 하면 조인트 i가 링크 i-1과 링크 i를 잇습니다. 순기구학의 변환 행렬 첨자가 이 규칙을 그대로 따릅니다.

자유도가 실제로 뜻하는 것과 6이 기준인 이유

자유도는 독립적으로 지정할 수 있는 운동 변수의 개수입니다. 로봇 팔에서는 대개 관절의 개수와 같습니다.

왜 6이 기준인지는 목표 쪽에서 세어 보면 명확합니다. 3차원 공간에서 강체 하나의 상태를 완전히 지정하려면 몇 개의 수가 필요할까요.

위치에 세 개가 필요합니다. x, y, z.

자세에도 세 개가 필요합니다. 물체를 그 자리에 고정한 채로도 세 축 둘레로 독립적으로 돌릴 수 있기 때문입니다.

합쳐서 여섯 개입니다. 그래서 엔드이펙터를 임의의 위치에, 임의의 방향으로 놓으려면 관절이 최소 여섯 개 필요합니다.

이 숫자를 기준으로 로봇 팔이 세 부류로 나뉩니다.

자유도이름할 수 있는 것
6 미만부족구동위치나 자세 중 일부만 지정 가능SCARA(4), 델타(3), 취미용 5축 팔
6완전구동작업공간 안에서 임의의 위치와 자세대부분의 산업용 로봇
7 이상여유구동같은 손끝 자세를 여러 팔 모양으로협동로봇 다수, 사람 팔

부족구동이 나쁘다는 뜻은 아닙니다. SCARA는 4자유도인데, 기판에 부품을 꽂는 작업에서는 부품이 수직으로 내려가기만 하면 되므로 나머지 자유도가 필요 없습니다. 자유도를 뺀 대신 훨씬 빠르고 강하고 쌉니다. 필요한 만큼만 갖는 것이 설계이고, 6은 상한이 아니라 기준점입니다.

여유구동이 주는 것은 손끝을 고정한 채 팔 모양을 바꿀 수 있는 능력입니다. 손을 책상 위 한 점에 붙여 놓고 팔꿈치를 위아래로 움직여 보면 바로 느껴집니다. 이 여유를 장애물 회피나 관절 한계 회피에 쓸 수 있고, 그 수학이 역기구학 편의 널스페이스입니다.

취미용 팔에서 자주 보는 5자유도는 애매한 자리입니다. 손목의 회전 축 하나가 빠져 있어서, 물체를 특정 방향으로 잡아야 하는 작업에서 갑자기 닿지 않는 자세가 생깁니다. 위치는 맞출 수 있는데 자세가 안 맞는 상황이고, 프로그램을 짜다 보면 반드시 만납니다.

회전 조인트와 직동 조인트

실제 로봇 팔에서 쓰이는 조인트는 사실상 두 종류입니다.

회전 조인트는 한 축 둘레로 돕니다. 관절 변수는 각도입니다. 사람의 팔꿈치와 어깨가 이것이고, 산업용 로봇 팔의 관절은 거의 전부 회전 조인트입니다.

직동 조인트는 한 축을 따라 미끄러집니다. 관절 변수는 길이입니다. 3D 프린터의 각 축, 갠트리 로봇, SCARA의 z축이 이것입니다.

둘의 차이는 성능 곡선의 모양에서 나옵니다.

기준회전 조인트직동 조인트
관절 변수각도거리
작업 공간 대 설치 면적넓음좁음
강성링크가 길수록 급감대체로 균일
정밀도링크 끝으로 갈수록 오차 증폭위치와 무관하게 균일
부하에 따른 토크 변화자세에 따라 크게 변함대체로 일정
기구학삼각함수, 해가 여럿대체로 선형, 해가 하나
밀봉과 청결쉬움레일이 노출되어 어려움

네 번째 줄이 로봇 팔에서 회전 조인트가 만드는 고유한 문제입니다. 관절의 각도 오차가 링크 길이에 비례해 손끝 위치 오차로 증폭됩니다. 어깨 관절이 0.1도 틀리면 0.35미터 떨어진 손끝에서는,

0.1도 = 0.001745 rad
0.001745 × 0.35 m = 0.000611 m = 0.61 mm

0.61밀리미터입니다. 그리고 이 오차는 어깨에 가까운 관절일수록 크게 증폭됩니다. 베이스 쪽 관절의 정밀도가 손끝 정밀도를 지배합니다. 뒤에 나올 감속기 이야기에서 어깨 쪽에 비싼 감속기를 쓰는 이유가 여기에도 있습니다.

기구학이 국제 표준 URDF에서는 조인트 타입 문자열로 표현되고, 쓸 수 있는 값은 정확히 여섯 개입니다. revolute(범위 제한이 있는 회전), continuous(무한 회전), prismatic(직동), fixed(고정), floating(6자유도), planar(평면 3자유도). 앞의 세 개가 실제 구동 관절이고, fixed는 계산상 프레임을 하나 더 두고 싶을 때 씁니다.

관절을 실제로 움직이는 것들 — 서보, 스테퍼, BLDC

이제 본론입니다. 관절이 회전한다는 것은 알겠는데, 무엇이 그것을 돌립니까.

RC 서보 — 각도를 지령하면 알아서 갑니다

취미용 로봇 팔에서 압도적으로 많이 쓰입니다. 안에 DC 모터, 감속 기어, 위치 센서, 그리고 제어 회로가 다 들어 있습니다. 외부에서는 목표 각도만 주면 되고, 그 각도로 가는 것은 서보 내부의 폐루프가 알아서 합니다.

지령은 PWM 펄스의 폭으로 전달합니다. 표준적인 관례는 약 20밀리초마다 펄스를 하나 보내되, 폭이 1밀리초면 한쪽 끝, 1.5밀리초면 중립, 2밀리초면 반대쪽 끝입니다. 갱신 주기는 관대해서 40Hz에서 200Hz 사이면 대체로 동작합니다.

여기서 주의할 점이 두 가지 있습니다.

첫째, 펄스 폭 범위는 제조사와 모델마다 다릅니다. 널리 쓰이는 SG90의 경우 유통사 자료에 500에서 2400마이크로초로 적혀 있는데, 제조사인 TowerPro 자신은 펄스 폭 규격을 공표하지 않습니다. 1000에서 2000마이크로초만 쓰면 가동 범위의 절반 정도만 사용하게 되는 셈입니다. 실제 범위는 서보를 조금씩 움직여 보며 찾아야 합니다.

둘째, 일반 PWM 출력으로는 해상도가 턱없이 모자랍니다. 아두이노의 analogWrite()는 8비트라 20밀리초 주기를 256등분하는데,

20000 μs / 256 = 78.125 μs

한 단계가 78마이크로초입니다. 1000에서 2000마이크로초가 180도에 대응한다면 1도가 5.56마이크로초이므로,

78.125 μs / 5.56 μs = 14.06도

한 단계가 14도입니다. 각도를 14도 단위로만 지정할 수 있다는 뜻입니다. 그래서 서보는 analogWrite()가 아니라 전용 라이브러리로 구동합니다. 아두이노 Servo 라이브러리는 타이머를 직접 잡아 마이크로초 단위의 폭을 만듭니다.

#include <Servo.h>

// 서보 전원은 반드시 별도로 공급하고 GND만 보드와 묶습니다.
// 이유는 아래 "전원" 절에서 계산으로 확인합니다.
Servo shoulder;

const int SERVO_PIN = 9;
const int PULSE_MIN = 600;    // 이 두 값은 모델마다 다릅니다.
const int PULSE_MAX = 2400;   // 조금씩 좁혀 가며 실제 한계를 찾으십시오.

void setup() {
  // attach에 최소/최대 펄스 폭을 함께 주면 write(각도)가 그 범위로 사상됩니다.
  shoulder.attach(SERVO_PIN, PULSE_MIN, PULSE_MAX);
  shoulder.writeMicroseconds(1500);   // 중립에서 시작합니다
  delay(500);
}

void loop() {
  // write(도)보다 writeMicroseconds(마이크로초)가 해상도가 높습니다.
  // 한 스텝을 20us로 두면 각도로는 약 2도이고, 그만큼 부드럽습니다.
  for (int us = 1000; us <= 2000; us += 20) {
    shoulder.writeMicroseconds(us);
    delay(20);                        // 갱신 주기와 맞춥니다
  }
  for (int us = 2000; us >= 1000; us -= 20) {
    shoulder.writeMicroseconds(us);
    delay(20);
  }
}

RC 서보의 한계는 명확합니다. 현재 각도를 읽을 수 없고, 토크를 지령할 수 없고, 얼마나 힘을 쓰고 있는지 알 수 없습니다. 명령을 보내고 도착했으리라 믿는 것이 전부입니다. 부하가 걸려 못 갔어도 알 방법이 없습니다.

이 한계를 해결한 것이 스마트 서보입니다. ROBOTIS의 다이나믹셀 계열이 대표적인데, 시리얼 버스로 여러 개를 데이지 체인으로 물리고 각 서보의 현재 위치, 속도, 부하, 온도를 읽을 수 있습니다. 제조사 자료 기준으로 AX-12A는 12V에서 스톨 토크 1.5 N·m, 위치 분해능 0.29도(300도 범위를 1024로 분할)입니다. 상위 X 계열은 분해능이 한 바퀴당 4096으로 올라가고, XM430-W350-R은 11.1V에서 3.8 N·m를 냅니다. 이 모델은 전류 기반 위치 제어 모드가 있어 "이 힘 이상으로는 밀지 말라"는 지령이 가능합니다.

스테퍼 모터 — 세어서 가되, 도착했는지는 모릅니다

스테퍼는 코일을 순서대로 여자해 회전자를 한 스텝씩 끌고 갑니다. 위치 센서가 없어도 스텝 수를 세면 각도를 아는 셈이 됩니다.

가장 흔한 NEMA 17 규격의 스텝각은 1.8도이고, 한 바퀴는 200스텝입니다. 이 값을 그대로 쓰면 관절 하나의 분해능이 1.8도인데, 팔 길이 0.35미터에서 손끝 오차로 환산하면,

1.8도 = 0.031416 rad
0.031416 × 0.35 = 0.011 m = 11.0 mm

11밀리미터입니다. 로봇 팔로 쓰기에는 어림도 없습니다. 그래서 마이크로스테핑을 씁니다. 코일 전류를 계단이 아니라 사인파 근사로 흘려 스텝 사이를 나누는 기법입니다.

드라이버최대 마이크로스텝한 바퀴 스텝 수스텝당 각도0.35m에서의 손끝 이동
없음 (풀스텝)1/12001.8도11.00 mm
A49881/1632000.1125도0.687 mm
DRV88251/3264000.0563도0.344 mm
TMC22091/256512000.0070도0.043 mm

TMC2209의 1/256은 MicroPlyer라는 보간 기능으로 만들어지고, 핀으로 직접 고를 수 있는 값은 8, 16, 32, 64입니다.

여기서 반드시 알아야 할 것이 있습니다. 마이크로스테핑은 분해능을 올리지 정확도를 올리지 않습니다. 스텝을 잘게 나눌수록 각 미세 스텝에서 나오는 유지 토크가 작아지고, 정지 마찰이나 부하 토크가 그보다 크면 회전자가 실제로는 안 움직입니다. 지령상으로는 1/256스텝씩 가고 있지만 물리적으로는 몇 스텝마다 한 번씩 툭툭 건너뛰는 상황이 생깁니다.

그리고 스테퍼의 근본적인 위험이 탈조입니다.

스테퍼는 개루프입니다. 회전자가 고정자 자기장을 따라오고 있다고 가정할 뿐, 확인하지 않습니다. 이 동기가 깨지는 조건이 세 가지 있습니다.

하나, 부하 토크가 그 속도에서 낼 수 있는 토크를 넘을 때입니다. 스테퍼의 토크는 속도에 따라 급격히 떨어지므로, 정지 상태의 유지 토크만 보고 고르면 안 됩니다. 제조사 자료에서는 토크-속도 곡선에 30퍼센트의 여유를 두라고 권합니다.

둘, 가속이 너무 급할 때입니다. 회전자와 부하의 관성이 요구하는 토크가 순간적으로 초과됩니다.

셋, 저주파 공진입니다. 대략 분당 50에서 150회전 구간, 초당 167에서 500 풀스텝에 해당하는 영역에서 회전자가 회전 진자처럼 울면서 유효 토크가 꺼집니다. 다른 속도에서는 멀쩡한데 특정 속도 대역에서만 스텝을 잃는다면 이것입니다.

탈조가 무서운 이유는 조용하기 때문입니다. 열 스텝을 잃어도 드라이버는 아무 말이 없고, 제어기는 여전히 자기가 아는 각도를 믿습니다. 그 오차는 다시 원점 복귀를 하기 전까지 영구히 남습니다. 로봇 팔에서 이것은 관절 각도가 실제와 다르다는 뜻이고, 순기구학이 계산한 손끝 위치가 전부 틀렸다는 뜻입니다.

참고로 흔히 쓰이는 17HS4401S의 제조사 규격은 유지 토크 43 N·cm, 상전류 1.7A입니다. 0.43 N·m인데, 뒤에서 계산할 어깨 관절 요구 토크의 4분의 1도 안 됩니다. 감속 없이 직결하면 안 된다는 뜻입니다.

BLDC와 엔코더 — 진짜 폐루프

성능의 상한을 원하면 브러시리스 모터에 엔코더를 붙이고 직접 제어합니다. 협동로봇과 최근의 고성능 취미용 팔이 이 방향입니다.

BLDC는 브러시가 없어 마모가 없고, 같은 크기에서 브러시 모터보다 토크 밀도가 높고, 냉각이 유리합니다. 대신 회전자 위치를 알아야만 코일을 언제 여자할지 정할 수 있어서 위치 센서가 필수입니다.

위치 센서로는 자기식 로터리 엔코더가 널리 쓰입니다. 축 끝에 작은 자석을 붙이고 칩이 자기장 방향을 읽습니다.

부품분해능한 바퀴 분할각도0.35m 손끝 환산
AS560012비트40960.0879도0.537 mm
AS5047P14비트163840.0220도0.134 mm
다이나믹셀 AX-12A1024분할 / 300도10240.2930도1.790 mm
다이나믹셀 X 계열4096 pulse/rev40960.0879도0.537 mm

AS5047P는 분당 28000회전까지 지원하고 ABI 증분 출력에서 이진 모드 기준 한 바퀴 4096스텝을 냅니다.

BLDC를 제대로 돌리는 방법이 벡터 제어입니다. 3상 전류를 그대로 다루는 대신 두 번의 좌표 변환을 거칩니다. 클라크 변환이 3상을 고정 2축으로 옮기고, 파크 변환이 그것을 회전자와 함께 도는 좌표계로 옮깁니다. 이 좌표계에서 전류는 직류량이 되어 평범한 PI 제어기로 다룰 수 있게 되고, 두 성분의 역할이 분리됩니다. d축 전류가 자속을, q축 전류가 토크를 만듭니다. 그래서 토크를 직접 지령할 수 있습니다.

취미 영역에서는 SimpleFOC 라이브러리가 이 일을 해 줍니다. 2026년 2월에 나온 v2.4.0 기준으로 AVR, STM32, ESP32, Teensy, RP2040 등 폭넓은 보드를 지원하고, 문서는 전류 센싱까지 고려하면 STM32 계열을 권합니다.

세 방식을 정리하면 이렇습니다.

기준RC 서보스테퍼BLDC + 엔코더
제어 루프내장 폐루프개루프직접 구성한 폐루프
지령하는 것각도스텝 수전류, 속도, 위치 중 선택
현재 각도 읽기불가 (스마트 서보는 가능)불가가능
토크 제어불가불가가능
조용한 실패도착 못 해도 모름탈조를 모름오차가 즉시 드러남
배선 난이도3선4선 + 드라이버3상 + 엔코더 + 드라이버
진입 난이도가장 쉬움중간가장 어려움
감속기대개 내장별도별도

감속기 — 기어비가 토크와 백래시에 하는 일

모터를 골랐다고 끝이 아닙니다. 로봇 팔의 관절은 대부분 감속기를 통해 구동됩니다. 이유는 세 가지이고, 세 번째가 가장 중요한데 잘 언급되지 않습니다.

기어비를 N이라고 하겠습니다.

첫째, 토크가 N배로 커집니다. 정확히는 기계 효율 η를 곱한 값입니다.

출력 토크 = 모터 토크 × N × η

둘째, 속도가 N분의 1로 줄어듭니다. 이것은 대가입니다. 모터가 분당 3000회전을 해도 100:1 감속기를 지나면 분당 30회전이 됩니다.

셋째, 부하 관성이 N의 제곱분의 1로 보입니다. 이것이 반사 관성이고, 감속기가 제어를 쉽게 만드는 진짜 이유입니다. 20:1이면 모터가 느끼는 팔의 관성이 400분의 1이 됩니다. 관성이 작아 보이면 같은 토크로 더 빨리 가속할 수 있고, 무엇보다 부하의 변화가 모터에 덜 전달되어 제어기가 안정적으로 동작합니다.

숫자로 보겠습니다. 0.09 N·m를 내는 작은 모터에 여러 감속비를 붙이면,

기어비효율 가정출력 토크속도반사 관성
5:10.970.437 N·m1/51/25
20:10.941.692 N·m1/201/400
50:10.904.050 N·m1/501/2500
100:10.908.100 N·m1/1001/10000

효율 값은 가정이고, 실제 값은 감속기 종류와 등급에 따라 크게 다릅니다. 정밀 유성 감속기 제조사가 공표하는 값은 1단 97퍼센트 이상, 2단 94퍼센트 이상 수준이지만, 취미용 저가 기어박스는 이보다 한참 낮습니다.

백래시 — 감속기가 빼앗아 가는 것

감속기가 공짜로 토크를 주지는 않습니다. 가장 큰 대가가 백래시입니다.

기어의 이가 맞물리려면 사이에 틈이 있어야 합니다. 틈이 없으면 열팽창이나 가공 오차로 이가 물려 버립니다. 그런데 이 틈 때문에, 입력이 회전 방향을 바꾸면 틈을 건너가는 동안 출력이 따라오지 않습니다. 그 각도가 백래시입니다.

로봇에서는 아크분 단위로 관리합니다. 1아크분은 60분의 1도입니다. 0.35미터 팔에서 환산하면,

백래시라디안손끝에서의 유격
10아크분2909 μrad1.018 mm
5아크분1454 μrad0.509 mm
3아크분873 μrad0.305 mm
1아크분291 μrad0.102 mm
36아크초175 μrad0.061 mm
2아크초9.7 μrad0.003 mm

정밀 유성 감속기 제조사가 공표하는 값은 등급에 따라 1단에서 1, 3, 5아크분, 2단에서 3, 5, 7아크분 수준입니다. 좋은 등급이라도 손끝에서 0.1밀리미터 안팎의 유격이 남는 셈입니다.

백래시가 왜 그렇게 문제인지는 제어 루프 편에서 다시 다룹니다. 요약하면, 유격 구간에서는 모터가 돌아도 관절이 안 움직이므로 제어기가 보는 이득이 0이 되고, 이가 맞물리는 순간 갑자기 정상으로 돌아옵니다. 이득이 구간마다 다른 시스템은 하나의 게인으로 안정화하기 어렵고, 목표 근처에서 계속 왔다 갔다 하는 리밋 사이클이 생깁니다.

하모닉 드라이브가 로봇에 쓰이는 이유

산업용 로봇 팔의 관절, 특히 손목 쪽을 열어 보면 파동 기어가 들어 있습니다. 하모닉 드라이브라는 상표명으로 더 널리 알려져 있습니다.

구조가 특이합니다. 세 부품으로 이루어집니다.

웨이브 제너레이터  타원형 허브 + 얇은 베어링. 입력축.
플렉스플라인      얇은 컵 모양. 반지름 방향으로는 휘고 비틀림에는 강함.
                  바깥면에 이가 있음. 출력축.
서큘러 스플라인    두꺼운 링. 안쪽에 이가 있고, 플렉스플라인보다 이가 2개 많음.

웨이브 제너레이터가 플렉스플라인을 타원으로 밀어내면
타원의 긴 축 부분에서만 이가 맞물립니다.
입력이 한 바퀴 돌면 플렉스플라인은 이 2개만큼 뒤로 밀립니다.

여기서 두 가지가 나옵니다.

한 단으로 큰 감속비가 나옵니다. 이의 개수 차이가 2뿐이므로 감속비가 매우 큽니다. 제조사 자료 기준으로 컴포넌트 세트는 30, 50, 80, 100, 120, 160:1을 제공하고, 기술 문서에서는 단일 단 감속비가 50:1에서 320:1에 이른다고 밝힙니다. 유성 감속기로 100:1을 얻으려면 2단이나 3단이 필요하고, 단이 늘 때마다 백래시가 누적됩니다.

이가 언제나 여러 개 맞물려 있습니다. 타원의 긴 축 양쪽에서 넓은 영역이 동시에 맞물리므로, 제조사는 이 맞물림에 백래시가 없다고 표현합니다.

여기서 정확히 짚어야 할 것이 있습니다. "제로 백래시"는 이 맞물림에 대한 것이지, 축과 축 사이 전체의 유격이 0이라는 뜻이 아닙니다. 제조사 자신도 컵 형태 기어는 맞물림에서 백래시가 0이지만 입력 커플링에서 오는 축간 백래시가 2에서 36아크초 사이라고 밝히고 있습니다. 위 표에서 36아크초는 0.35미터 팔의 손끝에서 0.061밀리미터입니다. 그리고 이것과 별개로 비틀림 강성에 따른 탄성 변형이 존재하며, 이쪽이 실제로는 더 큰 오차원인 경우가 많습니다.

효율은 제조사가 최대 90퍼센트까지 얻을 수 있다고 밝힙니다. 정밀 유성 감속기의 1단 97퍼센트보다 낮습니다. 하모닉 드라이브는 효율을 대가로 정밀도와 감속비를 사는 선택입니다.

세 번째 선택지가 사이클로이드 감속기입니다. 대형 로봇의 어깨나 허리처럼 큰 토크가 필요한 자리에 씁니다. 이 부품의 자료가 특히 유용한 이유는 오차를 세 가지로 분리해 공표하기 때문입니다. 기계적 백래시 0.1에서 0.3아크분, 로스트 모션 0.3에서 0.6아크분, 히스테리시스 손실 0.2에서 최대 1아크분. 백래시와 로스트 모션과 히스테리시스가 서로 다른 양이라는 것이 여기서 드러납니다. "제로 백래시"라는 표현이 정직할 수 있는 이유이자, 그것만 보고 부품을 고르면 안 되는 이유이기도 합니다.

정적 토크를 숫자로 구하기 — 어깨가 손목보다 큰 이유

이제 첫 문단의 그 숫자를 계산하겠습니다.

팔을 이렇게 정합니다.

부위길이질량
위팔 (어깨에서 팔꿈치)0.20 m0.15 kg
아래팔 (팔꿈치에서 손목)0.15 m0.10 kg
그리퍼 (손목 끝)손목 축에서 0.05 m0.15 kg
페이로드 (집은 물건)그리퍼와 같은 위치0.25 kg

계산할 자세는 팔을 수평으로 완전히 뻗은 자세입니다. 중력이 만드는 토크가 최대가 되는 최악의 경우이고, 부품 선정은 최악의 경우로 해야 합니다.

토크는 힘에 팔길이를 곱한 것입니다. 균일한 막대의 무게는 그 가운데에 걸린다고 보면 됩니다.

먼저 팔꿈치입니다. 팔꿈치보다 바깥에 있는 것만 셉니다.

아래팔:   0.10 kg × 9.81 × 0.075 m = 0.073575 N·m
그리퍼:   0.15 kg × 9.81 × 0.15  m = 0.220725 N·m
페이로드: 0.25 kg × 9.81 × 0.15  m = 0.367875 N·m
------------------------------------------------
합계                                0.662175 N·m

다음은 어깨입니다. 거리를 전부 어깨에서 다시 잽니다.

위팔:     0.15 kg × 9.81 × 0.10 m  = 0.147150 N·m
아래팔:   0.10 kg × 9.81 × 0.275 m = 0.269775 N·m
그리퍼:   0.15 kg × 9.81 × 0.35 m  = 0.515025 N·m
페이로드: 0.25 kg × 9.81 × 0.35 m  = 0.858375 N·m
------------------------------------------------
합계                                1.790325 N·m

손목은 그리퍼와 물건의 무게중심까지의 거리만 봅니다.

(0.15 + 0.25) kg × 9.81 × 0.05 m = 0.196200 N·m

세 값을 나란히 놓으면,

어깨   1.790325 N·m
팔꿈치 0.662175 N·m   (어깨의 1/2.704)
손목   0.196200 N·m   (어깨의 1/9.125)

어깨가 손목보다 9.1배 큰 토크를 요구합니다.

이유는 두 가지가 겹쳐서입니다. 하나, 어깨는 자기보다 바깥에 있는 모든 것의 무게를 집니다. 둘, 그 무게들이 어깨에서 더 멀리 있습니다. 거리와 질량이 둘 다 커지므로 곱이 급격히 커집니다.

그래서 로봇 팔은 아래로 갈수록 굵어집니다. 산업용 로봇의 실루엣이 밑동이 두껍고 끝이 가느다란 것은 디자인이 아니라 이 계산의 결과입니다.

import numpy as np

G = 9.81
KGCM_PER_NM = 1.0 / 0.0980665      # 1 kg·cm = 0.0980665 N·m (정의값이라 정확합니다)

# 어깨에서 손목 쪽으로: (링크 길이 m, 링크 질량 kg)
LINKS = [(0.20, 0.15),             # 위팔
         (0.15, 0.10)]             # 아래팔
GRIPPER_MASS = 0.15                # 손목 끝에 달린 그리퍼
PAYLOAD_MASS = 0.25                # 집어 든 물건
WRIST_OFFSET = 0.05                # 손목 축에서 그리퍼+물건 무게중심까지


def static_torque(joint_index):
    """팔을 수평으로 완전히 뻗은 최악의 자세에서 관절 하나에 걸리는 중력 토크.
    이 관절보다 바깥에 있는 질량만 셉니다."""
    outer = LINKS[joint_index:]
    reach, total = 0.0, 0.0
    for length, mass in outer:
        total += mass * G * (reach + length / 2)     # 균일 막대의 무게중심은 가운데
        reach += length
    total += (GRIPPER_MASS + PAYLOAD_MASS) * G * reach
    return total


rows = [("어깨", static_torque(0)),
        ("팔꿈치", static_torque(1)),
        ("손목", (GRIPPER_MASS + PAYLOAD_MASS) * G * WRIST_OFFSET)]

print("팔을 수평으로 완전히 뻗은 최악의 자세에서의 정적 토크")
print(f"{'관절':<6}{'N·m':>10}{'kg·cm':>10}{'안전계수 2배 (kg·cm)':>22}")
for name, t in rows:
    print(f"{name:<6}{t:10.4f}{t * KGCM_PER_NM:10.3f}{t * 2 * KGCM_PER_NM:22.3f}")

print(f"\n어깨 / 팔꿈치 = {rows[0][1] / rows[1][1]:.3f}배")
print(f"어깨 / 손목   = {rows[0][1] / rows[2][1]:.3f}배")

MG996R_6V = 11.0 * 0.0980665       # 제조사 공표 스톨 토크 11 kg·cm @ 6.0V
print(f"\nMG996R의 6V 스톨 토크 11 kg·cm = {MG996R_6V:.4f} N·m")
print(f"어깨가 요구하는 토크는 그 {rows[0][1] / MG996R_6V:.3f}배입니다 (안전계수를 넣기도 전에)")

실행 결과입니다.

팔을 수평으로 완전히 뻗은 최악의 자세에서의 정적 토크
관절           N·m     kg·cm       안전계수 2배 (kg·cm)
어깨        1.7903    18.256                36.512
팔꿈치       0.6622     6.752                13.505
손목        0.1962     2.001                 4.001

어깨 / 팔꿈치 = 2.704배
어깨 / 손목   = 9.125배

MG996R의 6V 스톨 토크 11 kg·cm = 1.0787 N·m
어깨가 요구하는 토크는 그 1.660배입니다 (안전계수를 넣기도 전에)

이 숫자로 부품을 고르기

계산이 끝났으니 데이터시트와 비교합니다.

부품제조사 공표 토크어깨(1.790 N·m)에 쓸 수 있는가
SG901.8 kg·cm @ 4.8V = 0.177 N·m불가. 10분의 1
MG996R11 kg·cm @ 6.0V = 1.079 N·m불가. 요구치의 60퍼센트
다이나믹셀 AX-12A1.5 N·m @ 12V겨우 못 미침. 안전계수 없음
다이나믹셀 XL430-W250-T1.4 N·m @ 11.1V불가
다이나믹셀 XM430-W350-R3.8 N·m @ 11.1V가능. 안전계수 2.1배
NEMA 17 (17HS4401S) 직결0.43 N·m 유지 토크불가. 4분의 1

첫 문단의 그 팔이 왜 무너졌는지가 여기 있습니다. MG996R의 스톨 토크는 어깨가 요구하는 값의 60퍼센트입니다.

그리고 이 표에는 함정이 하나 더 있습니다. 스톨 토크는 축이 완전히 멈춘 상태에서 잠깐 낼 수 있는 최댓값입니다. 그 상태에서는 역기전력이 없어 전류가 최대로 흐르고, 모터가 계속 그러고 있으면 코일이 탑니다. 연속 사용할 수 있는 토크는 스톨 토크의 20에서 30퍼센트로 잡는 것이 관례이고, 그래서 안전계수 2배는 최소한입니다. 안전계수 3배가 더 흔한 권고입니다.

안전계수 2배를 적용하면 어깨는 36.5 kg·cm, 즉 3.58 N·m를 요구합니다. 위 표에서 이것을 만족하는 것은 XM430-W350-R뿐이고, 그마저도 여유가 1.06배입니다.

대안은 감속기입니다. 0.09 N·m짜리 작은 BLDC에 감속기를 붙인다면 필요한 기어비는,

N = 3.58 N·m / (0.09 N·m × 0.94) = 42.3

50:1 감속기면 됩니다. 그러면 출력 토크가 4.05 N·m이고 반사 관성이 2500분의 1이 되어 제어도 쉬워집니다. 대가는 속도로, 모터의 분당 3000회전이 관절에서는 분당 60회전이 됩니다. 로봇 팔에서 관절이 분당 60회전이면 충분히 빠릅니다.

또 다른 대안은 팔을 가볍게 만드는 것입니다. 위 계산에서 페이로드 0.25kg이 어깨 토크의 48퍼센트를 차지합니다. 페이로드를 0.1kg으로 낮추면 어깨 토크가 1.28 N·m로 떨어져 AX-12A로도 안전계수 1.2배가 나옵니다. 부품이 모자랄 때 모터를 키우는 것만이 답은 아닙니다.

전원은 별도로 계산해야 합니다

토크가 맞아도 전원이 안 되면 팔은 여전히 안 움직입니다.

서보 여섯 개를 동시에 움직이면 전류가 더해집니다. MG996R 하나의 스톨 전류가 암페어 단위이고, 여섯 개가 동시에 부하를 만나면 수 암페어가 됩니다. 이 전류를 마이크로컨트롤러 보드의 5V 레일에서 뽑으면 반드시 브라운아웃이 납니다.

이 문제의 물리와 대책은 모터와 유도성 부하 다루기 편에서 자세히 다뤘습니다. 요약하면 세 가지입니다. 서보 전원은 별도 공급 장치에서 뽑고, GND는 반드시 보드와 한 점에서 묶고, 전원 입력에 충분한 용량의 커패시터를 답니다.

로직 전압이 다른 경우도 흔합니다. 라즈베리파이의 3.3V 신호로 5V 서보를 구동하거나, 12V 스테퍼 드라이버의 신호선을 3.3V 보드에 물리는 경우입니다. 어느 쪽이 안전하고 어느 쪽이 칩을 태우는지는 로직 레벨과 레벨 시프팅 편에 정리해 두었습니다. 그리고 리밋 스위치나 원점 센서를 붙일 때 필요한 풀업 저항과 디바운싱은 GPIO 풀업과 디바운싱 편에 있습니다.

마치며 — 팔의 모양은 토크 계산의 결과입니다

이 글에서 다룬 것들은 결국 하나의 계산으로 수렴합니다. 이 관절에 몇 뉴턴미터가 걸리는가.

그 값이 팔의 모양을 정합니다. 어깨가 손목보다 9배 큰 토크를 요구하므로 어깨 쪽 모터가 크고, 모터가 크면 그 무게가 다시 토크를 늘리므로 링크를 짧고 가볍게 만들 이유가 생깁니다. 산업용 로봇의 실루엣이 다들 비슷한 것은 같은 계산을 했기 때문입니다.

그 값이 감속기 선택도 정합니다. 필요한 토크를 모터만으로 못 내면 기어비로 사야 하고, 기어비를 사면 백래시를 함께 사게 되고, 백래시를 줄이려면 하모닉 드라이브의 효율 손실을 받아들여야 합니다. 어느 것도 공짜가 아닙니다.

그리고 그 값이 구동 방식도 정합니다. 서보는 쉽지만 현재 상태를 모르고, 스테퍼는 값싸고 정밀하지만 탈조를 조용히 저지르고, BLDC는 다 되지만 직접 제어 루프를 짜야 합니다.

부품을 사기 전에 종이 위에서 끝낼 수 있는 계산이 이 글의 전부입니다. 링크 길이를 정하고, 들고 싶은 무게를 정하고, 곱해서 더하면 각 관절이 요구하는 토크가 나옵니다. 여기에 2배나 3배를 곱한 값이 데이터시트에서 찾아야 할 숫자입니다. 이것을 안 하고 서보를 사면, 첫 문단의 그 팔이 됩니다.

다음 단계는 이 관절들이 만드는 자세에서 손끝이 어디에 있는지 계산하는 일입니다. 순기구학 편으로 이어집니다.