이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

set_stiffnessx

이 함수는 지정한 기준 좌표계(Reference Coordinate System)에서 각 병진 축과 회전 축의 작업 공간(Task Space) 강성(Stiffness)(직교 좌표 강성) 값을 설정합니다.

강성은 지정한 시간 fTargetTime 동안 현재 값에서 선형으로 전환됩니다.

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool set_stiffnessx(float fTargetStiffness[NUM_TASK],
                    COORDINATE_SYSTEM eForceReference = COORDINATE_SYSTEM_TOOL,
                    float fTargetTime = 0.f) {
    return _set_stiffnessx(_rbtCtrl, fTargetStiffness, eForceReference, fTargetTime);
};

매개변수

매개변수 이름

자료형

기본값

설명

fTargetStiffness

float[6]

XYZ와 Rx/Ry/Rz의 강성 값
범위: 0-20000 N/m(병진), 0-400 N·m/rad(회전).
클수록: 더 단단한 모션
작을수록 → 더 유연함

eForceReference

COORDINATE_SYSTEM

COORDINATE_SYSTEM_TOOL

강성을 적용할 좌표계(예: TOOL, BASE, WORLD)입니다.

fTargetTime

float

0

강성 보간 전환 시간 [sec] (0-1.0)
주어진 시간 동안 서서히 바뀝니다.

반환값

값

설명

0

실패

1

성공

참고

open_connection에 전달한 주소가 정확히 “127.0.0.1”이면 task_compliance_ctrl, set_stiffnessx, release_compliance_ctrl, set_desired_force, release_force는 컨트롤러에 명령을 보내지 않고 true를 반환합니다.

예제 A — 수동 모드(핸드가이딩 조정)

// 사전 조건:
// - 연결됨, 교시 모드 활성, 서보 온

// 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 baseStiff[6] = {3000.f, 3000.f, 3000.f, 200.f, 200.f, 200.f};
drfl.task_compliance_ctrl(baseStiff, COORDINATE_SYSTEM_TOOL, 0.0f);

// 3) Z축과 회전 방향의 순응성을 높이도록 강성 조정
float softStiff[6] = {2000.f, 2000.f, 1000.f, 120.f, 120.f, 120.f};
drfl.set_stiffnessx(softStiff, COORDINATE_SYSTEM_TOOL, 0.5f);

printf("Stiffness adjusted for smoother hand guidance.\n");

// 4) 순응 제어 중지
drfl.release_compliance_ctrl();
printf("Compliance released.\n");

예제 B — 자동 모드(삽입 중 강성 동적 조정)

// 1) 목표 영역으로 접근
float p_app[NUM_TASK] = {550.f, 200.f, 150.f, 180.f, 0.f, 0.f};
float vel1[2] = {100.f, 30.f}, acc1[2] = {400.f, 150.f};
drfl.movel(p_app, vel1, acc1);
drfl.mwait();

// 2) 순응 제어 활성화
float initStiff[NUM_TASK] = {3000.f, 3000.f, 2000.f, 200.f, 200.f, 200.f};
drfl.task_compliance_ctrl(initStiff, COORDINATE_SYSTEM_TOOL, 0.1f);

// 3) 삽입을 위해 Z축 강성을 점진적으로 낮춤
float tunedStiff[NUM_TASK] = {3000.f, 3000.f, 800.f, 150.f, 150.f, 150.f};
drfl.set_stiffnessx(tunedStiff, COORDINATE_SYSTEM_TOOL, 0.3f);

// 4) 순응 상태에서 동작 실행
float p_insert[NUM_TASK] = {550.f, 200.f, 90.f, 180.f, 0.f, 0.f};
float vel2[2] = {40.f, 15.f}, acc2[2] = {200.f, 80.f};
drfl.movel(p_insert, vel2, acc2);
drfl.mwait();

// 5) 정밀 작업을 위해 강성을 원래대로 복원
float normalStiff[NUM_TASK] = {3000.f, 3000.f, 3000.f, 200.f, 200.f, 200.f};
drfl.set_stiffnessx(normalStiff, COORDINATE_SYSTEM_TOOL, 0.2f);
drfl.release_compliance_ctrl();

printf("Dynamic stiffness control completed.\n");

참고 사항 및 모범 사례

  • 힘 순응과 위치 정확도 사이의 균형을 맞추도록 강성을 동적으로 조정하세요.

  • 접촉 단계나 정렬 단계에서는 낮은 강성(1000–2000 N/m)을 사용하세요.

  • 부드러운 실시간 제어(Real-time Control) 응답을 위해 전환 시간을 짧게(0.3–0.5s) 유지하세요.

  • 고급 순응 작업에는 task_compliance_ctrl과 함께 사용하세요.

  • 고속 모션이나 궤적(Trajectory) 블렌딩 전에는 항상 순응 제어를 해제하세요.