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개, |
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 옵션을 설정하고 힘제어를 시작하며, 또한 힘제어 중 제한된 영역에서 위치/자세를 변화시키는 것을 권장합니다.
예제
# 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)