API激光跟踪仪二次开发

硬件

  • API Radian激光跟踪仪
  • 1.5英寸靶球
  • (后面可能还有)API STS六维靶标
  • Windows电脑
  • 网线

环境配置

头文件

API的二次开发用到三个头文件

  • apidevice.h
  • APIGeneric.h
  • BasicGeomStruct.h

需要放进项目文件夹的/include文件夹下面,并右键项目-属性,把VC++目录-包含目录设成刚刚的目录

库文件

API的二次开发用到一个库文件

  • APIInterface.lib

需要放进项目文件夹的/lib文件夹下面,并右键项目-属性,把VC++目录-库目录设成刚刚的目录

并且需要在链接器-输入-附加依赖项中添加该库(添加带后缀的文件名)

dll

该开发包使用动态链接库,需要将dll文件添加到(三选一)

  • (该文件夹可用)编译出来的exe文件所在文件夹
  • (该项目可用)某个特定文件夹,并在属性页-调试-环境中添加“PATH=项目文件夹到文件夹的相对路径”
  • (该用户/系统可用)某个特定文件夹,并右键开始-系统-高级系统设置-环境变量-Path下添加刚刚的文件夹

需要特别注意的地方

  • 属性页-高级-高级属性-字符集需设为“使用Unicode字符集”
  • 属性页-C/C++-语言-将WChar_t视为内置类型需设为“否”
  • 函数是在后台运行的,不会阻塞主进程,因此需要自己手动阻塞一下,否则报错

测试代码

暂时还写得很屎,不过大概功能有

#include <apidevice.h>
#include <string>
#include <iostream>

void taskDone(LPVOID param, LPVOID pvoid)
{
	cout << "task done." << endl;
}

int main()
{
	string my_str;
	// general objects
	int nRetCode = API_ERROR_SUCCESS;
	CAPIDevice my_apidevice;
	cout << "init" << endl;
	cin >> my_str;

	// connect
	int my_nDev = 0; // This value can be either 0 which means Tracker 3/Radian or 1 which means Omni-tracker.
	if ((nRetCode = my_apidevice.Connect(NULL, my_nDev, &taskDone, NULL)) != API_ERROR_SUCCESS)
	{
		my_apidevice.DisplayAPIErrorMessage(nRetCode);
	}
	cout << "connect" << endl;
	cin >> my_str;

	// home
	int my_nIdx = 0; // 0: 1.5 inch; 1: 0.5 inch; 2: 7/8 inch. Default is 0: 1.5 inch.
	if ((nRetCode = my_apidevice.Home(my_nIdx)) != API_ERROR_SUCCESS)
	{
		my_apidevice.DisplayAPIErrorMessage(nRetCode);
	}
	cout << "home" << endl;
	cin >> my_str;

	// get data
	REALTIME_INFO my_rt_info;
	while (true) {
		if ((nRetCode = my_apidevice.getRTData(my_rt_info)) != API_ERROR_SUCCESS)
		{
			my_apidevice.DisplayAPIErrorMessage(nRetCode);
			break;
		}
		string my_rt_x = to_string(my_rt_info.Current_Position_X);
		string my_rt_y = to_string(my_rt_info.Current_Position_Y);
		string my_rt_z = to_string(my_rt_info.Current_Position_Z);
		cout << my_rt_x << "\t";
		cout << my_rt_y << "\t";
		cout << my_rt_z << "\n";
	}
	cout << "can't get data" << endl;
	cin >> my_str;

	// disconnnect
	if ((nRetCode = my_apidevice.DisConnect()) != API_ERROR_SUCCESS)
	{
		my_apidevice.DisplayAPIErrorMessage(nRetCode);
	}
	cout << "disconnect" << endl;
	return 0;
}

常见问题

FTP connection to API Laser Tracker has failed. Check your firewall settings or contact API support team.

连接时出错

重启一下激光跟踪仪即可(关电源,然后再开电源)。

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据