API激光跟踪仪SDK基础使用

需要添加的头文件

#include "APISDK/include/apidevice.h"

激光跟踪仪的连接

激光跟踪仪的连接需要知道设备的IP地址,然后以该IP地址为参数,调用函数进行激光跟踪仪的连接。
从line_edit中读取ip地址,然后作为参数传入到Connect函数中。

char add[20];
LPTSTR addr;
sprintf_s(add, ui->lineEdit_ipaddr->text().toStdString().c_str());
addr = add;
int nRetCode = g_tracker.Connect(nullptr, 0, TheCallBack, nullptr, add);

//check RetCode
if(API_ERROR_SUCCESS != nRetCode)
{
   g_tracker.DisplayAPIErrorMessage(nRetCode);
   QMessageBox::information(nullptr,
                            QObject::tr("message"),
                            QObject::tr("Laser tracker connection failed"),
                            QMessageBox::Ok);
   return;
}
//连接成功提示
...

激光跟踪仪的断开

当由于某些原因,激光跟踪仪主动断开连接,而软件不知道设备主动断开。因此不能进行其他操作。所以需要设计激光跟踪仪的断开方法。

if(g_tracker.IsConnected())
{
    timer->stop();
    int nRetCode = g_tracker.DisConnect();
    
    if(API_ERROR_SUCCESS != nRetCode)
    {
        g_tracker.DisplayAPIErrorMessage(nRetCode);
        QMessageBox::information(nullptr,
                                 QObject::tr("message"),
                                 QObject::tr("Failed to disconnect"),
                                 QMessageBox::Ok);
        return;
    }
    //断开成功提示
    ...
}
//已经断开提示
...

激光跟踪仪回鸟巢

在激光跟踪仪进行连接后,需要进行回鸟巢操作,API激光跟踪仪提供3中大小的靶标。分别是Home函数的参数,有3个选项:0 最大 、2 中型、 1最小

int nRetCode=g_tracker.Home(0); //此处参数是靶球类型

if(API_ERROR_SUCCESS != nRetCode)
{
    g_tracker.DisplayAPIErrorMessage(nRetCode);
    QMessageBox::information(nullptr,
                             QObject::tr("message"),
                             QObject::tr("Back to the nest failed, please check the target ball type"),
                             QMessageBox::Ok);
    return;
}
//回鸟巢成功提示
...

激光跟踪仪实时测量

当激光跟踪仪由于其他原因断开连接时,实时测量线程不能立即知道,导致在请求实时位置数据时产生“设备丢失”错误。所以在每次请求测量时首先判断激光跟踪仪是否连接。
本项目是在qt中开发的,实时测量使用一个定时器每隔100ms进行测量。测量结果通过信号槽机制发射到数据处理类。

void DeviceInitDock::on_timer()
{
    if(g_tracker.IsConnected())
    {
        REALTIME_INFO		rtInfo ;
        int ret = g_tracker.getRTData(rtInfo); //rtInfo
        if(API_ERROR_SUCCESS != ret){
            g_tracker.DisplayAPIErrorMessage(ret);
            return;
        }
        float dis = rtInfo.Laser_Distance;
        float x = rtInfo.Current_Position_X;
        float y = rtInfo.Current_Position_Y;
        float z = rtInfo.Current_Position_Z;
        emit on_trackpos(x,y,z);
        //qDebug() << x << y << z << dis << endl;
    }
}

你可能感兴趣的:(开发技术,教程,激光跟踪仪,二次开发,SDK)