set_desired_force()

정의

set_desired_force(fd, dir, time, mod, vel_limit_dir, vel_limit)

기능

전역으로 설정된 좌표계(set_ref_coord() 참조) 기준으로 힘 제어 목표값, 힘 제어 방향, 힘 목표값, 외력참조모드를 설정합니다.

주의

Non-FTS 모델(A0509, A0912, A0509F, A0912F, E0509)에서는 Translation 힘제어만 가능하며, 제어 오차가 클 수 있습니다.

주의

로봇 없이 시뮬레이션 환경에서 해당 명령어를 사용하는 경우, 정상적으로 동작하지 않을 수 있습니다.

인수

인수명

자료형

기본값

설명

fd

float[6]

[0, 0, 0, 0, 0, 0]

(Translational) 힘 성분 3개 [N],
(Rotational) 모멘트 성분 3개 [N·m]

dir

int[6]

[0, 0, 0, 0, 0, 0]

1이면 해당 방향 힘 제어

0이면 해당 방향 compliance 제어

최소 한 방향은 1로 설정해야 합니다.

time

float

0

힘을 증가시키는데 소요되는 시간 [sec]

범위 0~1.0

mod

int

DR_FC_MOD_ABS

DR_FC_MOD_ABS(0): 힘제어 시 외력을 센서값 그대로(절대적) 참조

DR_FC_MOD_REL(1): 힘제어 초기의 센서값을 기준으로 상대적인 외력만 참조

vel_limit_dir

int[6]

[0, 0, 0, 0, 0, 0]

1이면 해당 방향의 속도 제한 활성화

0이면 속도 제한 없이 최대한 빠른 속도로 동작

vel_limit

float[6]

[0, 0, 0, 0, 0, 0]

각 방향의 속도 제한치 (Translational) [mm/s], (Rotational) [deg/s]

(해당 방향의 vel_limit_dir가 0일 경우 이 값은 무시됨)

주의

Non-FTS 모델은 fd, dir 파라미터의 자료형을 float[3]으로도 사용 가능합니다. Rotational Parameter 입력 시(float[6]) Rotational Parameter 입력 값은 기본 값으로 변경되어 사용합니다.

리턴

설명

0

성공

음수값

오류

예외

예외

설명

DR_Error (DR_ERROR_TYPE)

인수들의 데이터형 오류 시

DR_Error (DR_ERROR_VALUE)

인수의 값이 유효하지 않을 시

DR_Error (DR_ERROR_RUNTIME)

C Extension 모듈 에러 발생 시

DR_Error (DR_ERROR_STOP)

프로그램 강제 종료 시

알아두기

  • 이 명령은 task_compliance_ctrl()로 태스크 순응제어가 활성화된 상태에서만 동작합니다. 순응제어가 활성화되지 않은 상태에서 호출하면 명령이 무시되고, 태스크 모션이 실행 중인 동안에 호출하면 경고와 함께 거부됩니다. 따라서 모션이 정지한 상태에서 task_compliance_ctrl() 다음에 set_desired_force()를 호출해야 합니다.

  • release_force() 명령을 통한 힘제어 종료(강성제어 전환)시 외력값은 센서값을 참조합니다. 따라서 mod=DR_FC_MOD_REL 옵션을 선택한 경우에 참조하는 외력값의 변화가 발생합니다.

  • mod를 DR_FC_MOD_REL로 설정하더라도 충돌 감지나 툴 무게 추정에서는 센서값을 참조합니다

주의

dir로 힘제어를 활성화한 축에는 위치 제어가 수행되지 않습니다. 따라서 모션 명령이 지시하는 궤적 중 힘제어 축과 겹치는 성분은 힘제어로 대체되어 실행되지 않고, 겹치지 않는 성분만 실행됩니다. 이는 특정 모션 명령에 한정된 동작이 아니며 모든 모션 명령에 동일하게 적용됩니다.

궤적의 일부만 실행되어 의도한 경로와 달라지는 것이 특히 잘 드러나는 예는 다음과 같습니다.

  • Z 병진을 힘제어로 지정하고 move_periodic()으로 Z 진폭을 지정한 경우: Z 병진은 동작하지 않고 rz 회전만 동작합니다.

  • Y 병진을 힘제어로 지정하고 move_spiral()을 Z축 기준으로 실행한 경우: XY 나선 중 Y 성분이 소실되어 X축 왕복 동작으로 변형됩니다.

힘제어 축과 겹치는 성분이 없으면 모션은 정상 동작합니다. 힘제어 축과 겹치지 않는 방향으로 movel(), movec() 등을 사용하는 것은 정상적인 사용 방법입니다(예제 #3 참조).

주의

힘제어 시의 정확도를 확보하기 위해서는 접촉할 대상물에 근접하여 mod=DR_FC_MOD_REL 옵션을 설정하고 힘제어를 시작하며, 또한 힘제어 중 제한된 영역에서 위치/자세를 변화시키는 것을 권장합니다.

예제

Python
# Example # 1
# 전역좌표계(Tool) 기준으로 힘제어 수행
# Tool-z축방향 zero force제어, Tool-z축 모멘트 제어, 나머지축 Compliance 제어
# Relative Force Mode 활성화 (초기외력 기준의 상대적 외력을 참조하여 힘제어)
set_ref_coord(DR_TOOL)
q0 = posj(0, 0, 90, 0, 90, 0)
movej(q0, vel=30, acc=30)
task_compliance_ctrl(stx=[500, 500, 500, 100, 100, 100])
fd = [0, 0, 0, 0, 0, 10]
fctrl_dir= [0, 0, 1, 0, 0, 1]
set_desired_force(fd, dir=fctrl_dir, mod=DR_FC_MOD_REL) 

# Example # 2
# 로봇의 기저좌표계(Base) 기준으로 힘제어 수행
# z축방향 force 제어, 나머지축 Compliance 제어
# 힘 제어 방향의 속도 제한 활성화
set_ref_coord(DR_BASE)
q0 = posj(0, 0, 90, 0, 90, 0)
movej(q0, vel=30, acc=30)
task_compliance_ctrl()
fd = [0, 0, -30, 0, 0, 0]
fctrl_dir = [0, 0, 1, 0, 0, 0]
fctrl_vel_limit = [0, 0, 20, 0, 0, 0]
fctrl_vel_limit_dir = [0, 0, 1, 0, 0, 0]
set_desired_force(fd, dir=fctrl_dir, vel_limit=fctrl_vel_limit, \
                  vel_limit_dir=fctrl_vel_limit_dir) 

# Example #3
# 초기 자세 이동: [J1, J2, J3, J4, J5, J6] = [0, 0, 90, 0, 90, 0]
# 1. 힘 제어를 수행하고자 하는 대상 위치로 Approach: 초기 자세(1)에서 
# (Base 기준) –z 방향으로 100mm 이동
# 2. 힘 제어 수행: (Base 기준) –z 방향으로 20N의 힘 인가
# 3. 외력 감지 후 힘-강성 제어: 외력을 가하고 있는 방향(Base 기준 z 방향)에서 
# 20N의 힘이 감지되면, 기존의 힘 제어를 유지하면서 (Base 기준) y 방향으로 
# 200mm 이동하는 힘-강성 동시 제어 수행
# 4. 힘-강성 제어 종료 후 Retract 및 초기 자세 이동: 힘 제어 및 강성 제어 종료 
# 후 (Base 기준) +z 방향으로 150mm 이동하여 Retract, Retract 완료 후 초기 
# 자세(1)로 이동

# 1. 초기 자세 이동
q0 = posj(0.0, 0.0, 90.0, 0.0, 90.0, 0.0)
set_velj(30.0)
set_accj(60.0)
movej(q0)

# 2. 힘 제어 대상 위치 접근
set_velx(75.0)
set_accx(100.0)
delta_approach = [0.0, 0.0, -100.0, 0.0, 0.0, 0.0]
movel(delta_approach, mod=DR_MV_MOD_REL)

# 3. 힘 제어 수행 (Base 좌표계 기준 -z 방향 힘 인가)
k_d = [3000.0, 3000.0, 3000.0, 200.0, 200.0, 200.0]
task_compliance_ctrl(k_d)
force_desired = 20.0
f_d = [0.0, 0.0, -force_desired, 0.0, 0.0, 0.0]
f_dir = [0, 0, 1, 0, 0, 0]
set_desired_force(f_d, f_dir)

# 4. 외력 감지 후 힘-강성 제어 수행
force_check = 20.0
force_condition = check_force_condition(DR_AXIS_Z, max=force_check)
while (force_condition):
    force_condition = check_force_condition(DR_AXIS_Z, max=force_check)
    if force_condition == 0:
        break
delta_motion = [0.0, 200.0, 0.0, 0.0, 0.0, 0.0]
movel(delta_motion, mod=DR_MV_MOD_REL)

# 5. 힘-강성 제어 종료 후 Retract 및 초기 자세 이동
release_force()
wait(0.5)
delta_retract = [0.0, 0.0, 150.0, 0.0, 0.0, 0.0]
release_compliance_ctrl()
movel(delta_retract, mod=DR_MV_MOD_REL)
movej(q0)

관련 명령어

Keyword

set / desired / force / set_desired / desired_force