Appearance
4.示教模式类型切换与轨迹回放功能
在使用上位机开启拖拽模式前,需要先在示教器上做好拖拽的辨识。
注意:切换到拖拽模式后需要调用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); ////.....等待10s,等待拖拽结束
}
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); //需要回放刚才记录的轨迹就调用这个函数
}