최신 버전 정보는 1.33.5에서 확인하세요.
task_compliance_ctrl
이 함수는 지정한 기준 좌표계(Reference Coordinate System)에서 작업 공간(Task Space) 순응 제어(직교 좌표 강성 제어)를 시작합니다.
순응 제어를 끝내려면 release_compliance_ctrl을 사용하세요.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool task_compliance_ctrl(float fTargetStiffness[NUM_TASK],
COORDINATE_SYSTEM eForceReference = COORDINATE_SYSTEM_TOOL,
float fTargetTime = 0.f) {
return _task_compliance_ctrl(_rbtCtrl, fTargetStiffness, eForceReference, fTargetTime);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetStiffness |
float[6] |
XYZ(병진)와 Rx/Ry/Rz(회전)의 강성(Stiffness) |
|
eForceReference |
|
강성 제어의 기준 좌표계(예: TOOL, BASE, WORLD)입니다. |
|
fTargetTime |
float |
0 |
강성 변경 전환 시간 [sec]입니다(범위 0–1). |
반환값
값 |
설명 |
|---|---|
0 |
실패 |
1 |
성공 |
참고
open_connection에 전달한 주소가 정확히 “127.0.0.1”이면 task_compliance_ctrl, set_stiffnessx, release_compliance_ctrl, set_desired_force, release_force는 컨트롤러에 명령을 보내지 않고 true를 반환합니다.
예제 A — 수동(교시) 핸드가이딩
// 사전 조건:
// - 연결됨
// - 수동(교시) 모드 활성
// - 서보 전원 ON
// 1) 순응 제어를 활성화하기 전에 안전한 위치로 이동
float q0[6] = { 0.0f, 0.0f, 90.0f, 0.0f, 90.0f, 0.0f };
drfl.movej(q0, 60, 30);
drfl.mwait();
// 2) 축별 강성 정의(값이 작을수록 더 유연함)
float stiffness[6] = { 2500.f, 2500.f, 2500.f, 150.f, 150.f, 150.f };
// 3) TOOL 좌표계에서 순응 제어 활성화
if (!drfl.task_compliance_ctrl(stiffness, COORDINATE_SYSTEM_TOOL, 0.1f)) {
printf("Failed to start compliance control.\n");
return -1;
}
printf("Compliance active. The arm can now be hand-guided safely.\n");
// 4) 교시 후 순응 제어 해제
drfl.release_compliance_ctrl();
printf("Compliance control released.\n");
예제 B — 자동 모드(삽입 또는 표면 접촉 작업)
// 1) 접근 위치로 이동
float p_app[NUM_TASK] = {550.f, 200.f, 150.f, 180.f, 0.f, 0.f};
float vel1[2] = {150.f, 30.f}, acc1[2] = {400.f, 150.f};
drfl.movel(p_app, vel1, acc1);
drfl.mwait();
// 2) 순응 제어 활성화(Z축과 회전 방향을 유연하게)
float k_soft[NUM_TASK] = {2500.f, 2500.f, 1200.f, 100.f, 100.f, 100.f};
if (!drfl.task_compliance_ctrl(k_soft, COORDINATE_SYSTEM_TOOL, 0.2f)) {
printf("Failed to enable compliance.\n");
}
// 3) 순응 제어 상태에서 삽입 동작 실행
float p_down[NUM_TASK] = {550.f, 200.f, 90.f, 180.f, 0.f, 0.f};
float vel2[2] = {40.f, 15.f}, acc2[2] = {150.f, 60.f};
drfl.movel(p_down, vel2, acc2);
drfl.mwait();
// 4) 삽입 후 순응 제어 비활성화
drfl.release_compliance_ctrl();
drfl.mwait();
// 5) 정밀 동작 계속 진행
float p_final[NUM_TASK] = {550.f, 200.f, 85.f, 180.f, 0.f, 0.f};
float vel3[2] = {60.f, 20.f}, acc3[2] = {300.f, 120.f};
drfl.movel(p_final, vel3, acc3);
drfl.mwait();
참고 사항 및 모범 사례
순응 제어는 필요한 작업 중에만 활성화하세요. 빠르거나 정밀도가 높은 이동을 실행하기 전에는 release_compliance_ctrl로 해제하세요.
위치 제어와 순응 제어를 전환하기 전에
mwait()로 모션이 끝났는지 확인하세요.권장 강성 값: XYZ 1500–2500, 회전 100–200.
핸드가이딩이나 정렬 작업에는 TOOL 좌표계를 사용하세요.
순응 방향이 작업 영역의 축을 따라야 하면 BASE 좌표계를 사용하세요.