2.12.4 2.12.3 2.12.2 2.12.1 2.12 2.11.2 2.11.0.1 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish
2.12.4 2.12.3 2.12.2 2.12.1 2.12 2.11.2 2.11.0.1 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish

set_desired_force(fd, dir, time, mod)

기능

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

주의

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


주의

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

인수

인수명

자료형

기본값

설명

Fd

float[6]

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

(Translational) 힘 성분 3개,
(Rotational) 모멘트 성분 3개

dir

int[6]

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

1이면 해당 방향 힘 제어

0이면 해당 방향 compliance 제어

time

float

0

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

범위 0~1.0

mod

int

DR_FC_MOD_ABS

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

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


주의

Non-FTS 모델은 fd, dir 파라미터의 자료형이 float[3]으로 변경됩니다.(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)

프로그램 강제 종료 시


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

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


주의

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

예제

Python
# Example # 1
# 전역좌표계(Tool) 기준으로 힘제어 수행
# Tool-z축방향 zero force제어, Tool-z축 모멘트 제어, 나머지축 Compliance 제어
# Relative Force Mode 활성화 (초기외력 기준의 상대적 외력을 참조하여 힘제어)
set_ref_coord(DR_TOOL)
x0 = posx(0, 0, 90, 0, 90, 0)
movej(x0)
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
# 초기 자세 이동: [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)


관련 명령어