
두산로보틱스 협동로봇을 운영해 보면서 가장 많이 사용해 본 모션에 대해서 간단하게 알아보려고 함!!
가장 많이 사용된 모션은 MoveJ와 MoveL를 가장 많이 활용했음!!
MoveJ


MoveJ에서 J는 관절(Joint)의 약자임. 이 모션은 각 관절이 목표 각도로 동시에 이동 후 동시에 정지함!
이동방식
- 로봇의 모든 관절이 현재 각도에서 목표 각도를 동시에 이동 후 동시에 멈춤.
장점
- 이동 속도가 빠름.
- 로봇 특이점(Singularity)의 영향을 받지 않음.
다관절 로봇에서 특이점(Singularity)이란 로봇이 이동 중 다음 자세를 계산하기 어려운 자세(또는 점).
단점
- 모든 축이 동시에 목표 각도로 회전하기 때문에 이동 경로를 예측할 수 없음.
- 목표 각도를 각 축의 각도로 표기하므로 로봇 끝단의 위치 및 로봇 자세를 예측하기 어려움.
활용
- 로봇 특이점(Singularity)의 영향을 받지 않으므로 특이점 회피 시 사용.
- 원거리를 이동할 때에 적합함.
MoveJ의 모션을 활용하기 위해 각 관절의 위치를 생성해줘야 하는데~
그때 조인트 좌표계를 활용함!

Joint 좌표계는 공장 홈위치의 6축 각도를 원점으로 하는 좌표계임!
"공장 홈위치"는 로봇 시스템에서 로봇이 초기화될 때나 전원이 켜졌을 때, 또는 특정 작업을 시작할 때 기본적으로 설정되는 초기 위치를 의미. 일반적으로 이 위치는 로봇의 움직임을 제어하는 기준점으로 사용.

간단한 사용 예시를 보자!~
파이썬을 활용하여 동작을 구현할 수 있음!
아래는 6개 축의 각도를 지정해 준 거임.
q1 = posj(0, 0, 90, 0, 90, 0)
q2 = posj(0, 30, 60, 0, 90, 0)
그때 q1(초기) 자세에서 q2로 로봇을 움직이고 싶다!! 할 때 쓰는 게 MoveJ임!
q1 = posj(0, 0, 90, 0, 90, 0) #초기자세
q2 = posj(0, 30, 60, 0, 90, 0)
movej(q2, vel=10, acc=20)
# 속도 10(deg/sec), 가속도 20(deg/sec2)로 q2관절각으로 이동
- q1 = posj(0, 0, 90, 0, 90, 0)
- posj 함수는 로봇의 각 관절의 위치를 정의하는 함수. 여기서 q1은 로봇의 초기 위치를 설정하는 것으로, 각 관절의 각도가 (0°, 0°, 90°, 0°, 90°, 0°)인 위치를 나타냄.
- q2 = posj(0, 30, 60, 0, 90, 0)
- q2는 q1에서 q2로 이동할 목표 관절 위치를 정의. q2의 각도는 (0°, 30°, 60°, 0°, 90°, 0°)로 설정.
- movej(q2, vel=10, acc=20)
- movej 함수는 로봇을 q2 위치로 이동시키는 함수.
- vel=10 - 이동 속도는 10(deg/sec)으로 설정.
- acc=20 - 가속도는 20(deg/sec2)으로 설정.
이 코드는 로봇이 초기 위치 q1에서 목표 위치 q2로 이동하도록 명령하며, 이동하는 동안 속도와 가속도를 지정하여 부드럽고 정확한 이동을 유도함.
MoveJ를 활용하기 위해서는 각 관절의 각이 필요하기 때문에 조인트 좌표계가 필요함!!

MoveJ는 조인트 공간에서의 이동을 의미함. 즉, 로봇 팔의 각 관절(joint)의 각도만을 제어함. 이 함수는 로봇의 관절 각도를 목표 값으로 지정하고, 그에 맞게 로봇을 움직임.
- movej는 TCP(Tool Center Point, 툴 중심점)의 위치와 방향에 영향을 미치지 않으며, 오직 로봇의 관절 각도만을 고려!!!! 즉, 로봇이 어떤 위치에서 어떤 자세로 이동할지는 관절 각도의 변화에 의해 결정됨.
- BASE 좌표계와는 상관이 없으며, 조인트 공간에서 각도만 다루기 때문에 BASE와는 관련이 없음.
따라서 MoveJ는 조인트만 다루고, TCP나 BASE 좌표계는 고려하지 않으므로 MoveJ는 TCP와 상관 관계없음!!!
MoveL


MoveL에서 L은 선형(Linear)의 약자임. 이 모션은 로봇 끝단의 TCP가 목표 자세(위치 및 회전 각도)로 선형으로 이동함.
이동방식
- 로봇 끝단의 TCP가 선택한 좌표계에 대해 선형 모션(Linear motion)으로 이동.
장점
- TCP의 이동 경로를 직선으로 유지하므로, 로봇의 이동 경로를 미리 인지할 수 있음.
- 목표 위치를 위치 및 회전(X, Y, Z, A, B, C)으로 표기하므로 대략적인 로봇 끝단의 위치를 예측할 수 있음.
단점
- MoveJ에 비해 상대적으로 모션의 속도가 느림.
- 로봇 특이점(Singularity)의 영향을 받음.
활용
- 물체 회피 및 미세한 이동에 적합함
MoveL를 사용하기 위해서도 좌표값을 지정해주어야 하는데



BASE 좌표계 – 로봇 베이스의 바닥 중심을 원점으로 한 좌표계
TOOL 좌표계 – 로봇의 툴 중심위치를 원점으로 한 좌표계 → 로봇 자세 이동에 따라 좌표계 원점이 이동함.
x1 = posx(400, 300, 500, 0, 180, 0)
x2 = posx(350, 350, 450, 0, 180, 0)
BASE 좌표계와 TOOL 좌표계를 활용해서 이동할 때 MoveL를 사용함!
x1 = posx(400, 300, 500, 0, 180, 0)
x2 = posx(350, 350, 450, 0, 180, 0)
movel(x2, v=100, a=200)
- x1 = posx(400, 300, 500, 0, 180, 0)
- posx는 로봇의 목표 위치와 자세를 설정하는 함수.
- (400, 300, 500)은 목표 위치의 3D 좌표 (x, y, z).
- (0, 180, 0)은 목표 위치에서 로봇의 자세를 나타내는 Roll, Pitch, Yaw 각도. 여기서는 Roll과 Yaw는 0으로 설정되고, Pitch만 180도로 설정.
- x2 = posx(350, 350, 450, 0, 180, 0)
- x2는 또 다른 목표 위치와 자세를 정의. (350, 350, 450)은 목표 위치의 새로운 좌표이고, (0, 180, 0)은 여전히 같은 자세를 유지.
- movel(x2, v=100, a=200)
- movel은 로봇을 직선 경로로 이동시키는 함수.
- x2는 목표 위치와 자세를 나타냄.
- v=100: 이동 속도는 100mm/s로 설정.
- a=200: 가속도는 200mm/s²로 설정.
이 코드는 로봇이 x1에서 x2로 직선 경로를 따라 이동하도록 명령하는 코드임. 이 이동은 속도 100mm/s와 가속도 200mm/s²로 수행함.
MoveL의 이동 경로는 TCP 기준으로 결정되며, 개별 조인트(Joint) 값에는 관심이 없음.
즉, 로봇의 각 관절이 어떻게 움직이는지는 내부적으로 계산되며, 사용자는 TCP가 지정된 위치로 가는 것만 신경 쓰면 됨!!
이렇게 MoveJ, MoveL를 알아보았고 모션을 주기 위해서 필요한 좌표계에 대해서도 알아보았음!
모션이 종류는 더 많이 존재함 🔽

다른 모션들도 사용해 보았지만 그중에서 가장 많이 사용한 2가지를 간단하게 정리해 보았음!
모션 영상도 같이 정리했다면 더욱 좋았을 거 같은데.. 아쉬움ㅠ
사실 모든 정보를 전달하지는 못했는데, 나중에 다시 협동로봇을 운용할 기회가 있다면 더 자세하게 알아보겠음!!!