教程4:使用ZED进行位置跟踪
原教程及代码链接:
本教程将介绍如何使用ZED作为位置跟踪器。程序将循环,直到1000位置被抓住。我们假设你已经遵循了以前的教程。
先决条件
- Windows 7 64位或更高版本,Ubuntu 16.04
- ZED SDK及其依赖项(CUDA)
构建程序
构建Windows
- 在源文件夹中创建一个“build”文件夹
- 打开cmake-gui并选择源和构建文件夹
- 生成Visual Studio Win64解决方案
- 打开生成的解决方案并将配置更改为 Release
- 构建解决方案
构建Linux
在示例目录中打开一个终端,并执行以下命令:
mkdir build
cd build
cmake ..
make
代码概述
创建一个相机
与以前的教程一样,我们创建,配置和打开ZED。// Create a ZED camera object
Camera zed;
// Set configuration parameters
InitParameters init_params;
init_params.camera_resolution = RESOLUTION_HD720; // Use HD720 video mode (default fps: 60)
init_params.coordinate_system = COORDINATE_SYSTEM_RIGHT_HANDED_Y_UP; // Use a right-handed Y-up coordinate system
init_params.coordinate_units = UNIT_METER; // Set units in meters
// Open the camera
ERROR_CODE err = zed.open(init_params);
if (err != SUCCESS)
exit(-1);
启用位置跟踪
一旦相机打开,我们必须启用位置跟踪模块才能获得ZED的位置和方向。// Enable positional tracking with default parameters
sl::TrackingParameters tracking_parameters;
err = zed.enableTracking(tracking_parameters);
if (err != SUCCESS)
exit(-1);
在上面的例子中,我们留下默认的跟踪参数。有关可用参数的列表,请查看在线文档。
拍摄姿势数据
现在打开ZED并启用位置跟踪,我们创建一个循环来抓取并检索相机位置。相机位置由类sl :: Pose给出。该类包含相机的翻译和方向,以及图像时间戳和跟踪信心(质量)。
姿势总是与参考框架相关联。SDK提供了两个参考框架:REFERENCE_FRAME_WORLD和REFERENCE_FRAME_CAMERA。
本教程的目的不在于参考这些参考框架的细节。阅读文档了解更多信息。
在这个例子中,我们得到了在World Frame中的设备位置。
// Track the camera position during 1000 frames
int i = 0;
sl::Pose zed_pose;
while (i < 1000) {
if (zed.grab() == SUCCESS) {
zed.getPosition(zed_pose, REFERENCE_FRAME_WORLD); // Get the pose of the left eye of the camera with reference to the world frame
// Display the translation and timestamp
printf("Translation: Tx: %.3f, Ty: %.3f, Tz: %.3f, Timestamp: %llu\n", zed_pose.getTranslation().tx, zed_pose.getTranslation().ty, zed_pose.getTranslation().tz, zed_pose.timestamp);
// Display the orientation quaternion
printf("Orientation: Ox: %.3f, Oy: %.3f, Oz: %.3f, Ow: %.3f\n\n", zed_pose.getOrientation().ox, zed_pose.getOrientation().oy, zed_pose.getOrientation().oz, zed_pose.getOrientation().ow);
i++;
}
}
这将循环,直到ZED被跟踪1000帧。我们在控制台窗口中显示照相机翻译(以米为单位),并在退出应用程序之前关闭相机。
// Disable positional tracking and close the camera
zed.disableTracking();
zed.close();
return 0;
您现在可以使用ZED作为内向外位置跟踪器。您还可以阅读下一个教程,了解如何使用空间映射。