4. 티치 모드 유형 전환 및 궤적 재생 기능
상위컴퓨터(上비트機)를 사용하여 드래그 모드를 활성화하기 전에 먼저 티치盒(티치 펜던트)에서 드래그 식별(identification)을 수행해야 합니다.
주의: 드래그 모드로 전환한 후 set_servo_poweron 인터페이스를 호출하여 서보 上활성화을 활성화해야 드래그을 진행할 수 있습니다.
1. 티치 모드 유형 전환 함수
cpp
/*
* 티치 모드 유형 전환 함수 캡슐화
*/
void Switching_teach_type(int fd)
{
int type;
get_teach_type(fd, type);
switch (type)
{
case 0: //현재 티치 모드 유형이 조그 모드
set_teach_type(fd, 1); //현재 티치 모드 유형을 드래그 모드로 전환
break;
case 1: //현재 티치 모드 유형이 드래그 모드
set_teach_type(fd, 0); //현재 티치 모드 유형을 조그 모드로 전환
break;
}
}2. 모션 종료 대기 함수 캡슐화
cpp
/*
* 모션 종료 시까지 루프 블로킹 함수
*/
void wait_for_running_over(int fd)
{
// 모션 완료 대기
int running_state = 0;
get_robot_running_state(fd, running_state); // 로봇이 모션 중인지 조회 2-모션 중
while (running_state == 2)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 500ms 블로킹
get_robot_running_state(fd, running_state); // 다시 조회
}
}3. 궤적 재생 기능 함수 캡슐화
cpp
/*
* 궤적 재생 기능 함수 캡슐화
*/
void record_playback(int fd)
{
int vel = 30; //궤적 재생 속도
set_teach_type(fd, 0);
track_record_playback(fd, vel); //기록된 궤적 재생
wait_for_running_over(fd);
}4. 드래그 轨 기록 함수 캡슐화
cpp
/*
* 드래그 轨 기록 함수 캡슐화
*/
void track_record(int fd)
{
set_teach_type(fd, 1); //현재 티치 모드 유형을 드래그 모드로 전환
double maxSamplingNum = 200; //궤적의 샘플링 간격
double samplingInterval = 0.05; //최대 샘플링 포인트 수
int vel = 30; //궤적 재생 속도
track_record_delete(fd); //새 궤적 기록 전 기존 궤적 제거
track_record_start(fd, maxSamplingNum, samplingInterval); //궤적 기록 시작
for(int i = 0; i < 50; i++)
{
sleep(0.2); ////.....10초 대기, 드래그 종료 대기
}
track_record_stop(fd); //궤적 기록 종료
}5. 드래그 재생 기능
cpp
#include <chrono>
#include <iostream>
#include <string>
#include <unistd.h>
#include <thread>
#include "cpp_interface/nrc_api.h"
using namespace std;
int main()
{
SOCKETFD fd = connect_robot("192.168.1.15", "6001"); // 컨트롤러 연결
if (fd <= 0)
{
std::cout << "연결 실패" << std::endl;
return 0;
}
std::cout << "연결 성공: "<< fd << std::endl;
clear_error(fd); //오류 제거
track_record(fd);
//record_playback(fd); //방금 기록된 궤적을 재생하려면 이 함수를 호출
}