최신 버전 정보는 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의 강성 값 |
|
eForceReference |
|
강성을 적용할 좌표계(예: 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) 블렌딩 전에는 항상 순응 제어를 해제하세요.