본문 바로가기
카테고리 없음

[Robotics] 두산로보틱스 협동로봇 MoveJ, MoveL 알아보기

by ykr0919 2025. 3. 19.

 

 

 

 

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

가장 많이 사용된 모션은 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가지를 간단하게 정리해 보았음!

모션 영상도 같이 정리했다면 더욱 좋았을 거 같은데.. 아쉬움ㅠ

사실 모든 정보를 전달하지는 못했는데, 나중에 다시 협동로봇을 운용할 기회가 있다면 더 자세하게 알아보겠음!!! 

 

 

 

참고 및 인용
https://manual.doosanrobotics.com/?l=ko