C++(Windows)

本章介绍如何在Windows系统中使用CMake配置Mech-Eye API的C++例程,并使用Visual Studio构建例程。

例程简介

例程分为以下类别:BasicAdvancedUtilCalibrationPclHalcon

  • Basic例程:连接和采集数据。

  • Advanced例程:通过复杂、高阶的方式采集数据,设置部分型号特有参数。

  • Util例程:获取相机信息和设置通用参数。

  • Calibration例程:通过Mech-Eye API进行手眼标定。

  • Pcl例程:利用PCL库进行数据格式转换、可视化等。

  • Halcon例程:通过Mech-Eye API获取HALCON可读取的点云。

各分类中包含的例程及其简介如下。

Basic
  • ConnectToCamera:连接相机。

  • ConnectAndCaptureImages:连接相机并获取2D图、深度图及点云数据。

  • Capture2DImage:从相机获取并保存2D图。

  • CaptureDepthMap:从相机获取并保存深度图。

  • CapturePointCloud:从相机获取并保存无纹理点云和纹理点云。

  • CapturePointCloudHDR:设置多个曝光时间,然后从相机获取并保存点云。

  • CapturePointCloudWithNormals:计算法向量,并保存含法向量的点云。

Advanced
  • ConvertDepthMapToPointCloud:从深度图生成并保存点云。

  • MultipleCamerasCaptureSequentially:使用多台相机按序获取并保存2D图、深度图及点云。

  • MultipleCamerasCaptureSimultaneously:使用多台相机同时获取并保存2D图、深度图及点云。

  • CapturePeriodically:在设定时间内,定时获取并保存2D图、深度图和点云。

  • Mapping2DImageToDepthMap:从覆盖掩膜的2D图和深度图生成并保存无纹理点云和纹理点云。

  • SetParametersOfLaserCameras:设置激光相机特有的参数。

  • SetParametersOfUHPCameras:设置UHP系列相机特有的参数。

  • RegisterCameraEvent:定义并注册检测相机连接状态的回调函数。

  • CaptureStereo2DImages:获取Deep(V3)、Laser L Enhanced(V3)、PRO XS(V4)、LSR L(V4)、LSR S(V4)和DEEP(V4)的两个2D相机的2D图像。

Util
  • GetCameraIntrinsics:获取并打印相机内参。

  • PrintCameraInfo:获取并打印相机型号、序列号、固件版本、温度等信息。

  • SetScanningParameters:设置3D参数2D参数感兴趣区域分组下的参数。

  • SetDepthRange:设置深度范围参数。

  • SetPointCloudProcessingParameters:设置点云后处理参数。

  • ManageUserSets:管理参数组,如获取所有参数组的名称、新增参数组、切换参数组和保存参数设置至参数组。

  • SaveAndLoadUserSet:从JSON文件导入并替换所有参数组,将所有参数组保存为JSON文件。

Calibration
  • HandEyeCalibration: 进行手眼标定。

Pcl
  • ConvertPointCloudToPcl:从相机获取点云数据并转换为PCL数据结构。

  • ConvertPointCloudWithNormalsToPcl:从相机获取含法向量的点云数据并转换为PCL数据结构。

Halcon
  • ConvertPointCloudToObjectModel3D:从相机获取点云数据,通过HALCON C++接口转换并保存点云。

使用前提

使用Mech-Eye API的C++例程,需先满足以下使用前提:

  • 正确连接相机和电脑

  • 获取例程。

  • 安装必需软件。

  • (可选)安装例程依赖的软件库,并添加相关的环境变量。

获取例程

C++例程包含在Mech-Eye SDK的安装路径中,也可从GitHub克隆获取。安装路径中的例程为Mech-Eye SDK发布时的版本,GitHub上的例程可能包含最新修改。

  • 安装路径中的例程位于xxx/Mech-Eye SDK-2.3.2/API/samples/cpp/area_scan_3d_camera路径下;

  • 通过GitHub克隆获取的例程位于xxx/mecheye_cpp_samples/area_scan_3d_camera路径下。

安装必需软件

使用Mech-Eye API的C++例程,必须安装Mech-Eye SDK、CMake及Visual Studio。

安装最新版本的Mech-Eye SDK

请根据Mech-Eye SDK安装指南安装或升级Mech-Eye SDK。

安装CMake(3.2或以上版本)

  1. 下载CMake:下载Windows x64 Installer右侧的安装包。

    cmake download
  2. 安装时,请选择以下两个选项,以将CMake添加至环境变量,并创建CMake的桌面快捷方式。

    • Add CMake to the system PATH for all users

    • Create Cmake Desktop Icon

cmake 1

安装Visual Studio(2017或以上版本)

  1. 下载Visual Studio安装包

  2. 安装时,勾选桌面应用和移动应用分类中的以下两个工作负荷,再点击安装

    • 使用C++的桌面开发

    • 通用Windows平台开发

安装完成后,请重启电脑。如仍需安装例程依赖的软件库,可在添加环境变量后再重启。

(可选)安装依赖的软件库

部分例程中的功能依赖以下第三方软件库。如需使用下表中列出的例程,则必须安装其依赖的软件库。

  • OpenCV:3.4.5或以上版本

  • PCL:1.8.1或以上版本

  • HALCON:20.11或以上版本

    低于20.11版本的HALCON未经完全验证。
如未安装可选软件库,则配置例程前必须执行禁用不需要的例程(可选)中的操作。

依赖第三方软件库的例程详见下表。

例程 OpenCV PCL HALCON

Capture2DImage

CaptureDepthMap

MultipleCamerasCaptureSequentially

MultipleCamerasCaptureSimultaneously

CapturePeriodically

CaptureStereo2DImages

HandEyeCalibration

ConvertPointCloudToObjectModel3D

ConvertPointCloudToPcl

ConvertPointCloudWithNormalsToPcl

安装OpenCV

  1. 下载并安装OpenCV。请记录OpenCV的安装路径。

  2. 将OpenCV添加至环境变量。详见添加环境变量

安装PCL

  1. 参照下表,根据安装的Visual Studio版本确定需安装的PCL版本。

    Visual Studio 支持的PCL版本

    2017

    1.8.1~1.9.1

    2019

    1.8.1~1.12.1

    2022

    1.8.1 及以上

  2. 打开PCL下载页面,单击对应版本下的Assets,并下载exe格式的安装包。

  3. 运行安装包以安装PCL。安装时,请选择Add PCL to the system PATH for all users,以将PCL添加至环境变量。

    pcl 2

    安装过程中,可能弹出如下报错:

    Warning! PATH too long installer unable to modify PATH!

    此情况下,需安装完成后手动将PCL添加至系统变量。详见添加环境变量

  4. 将PCL依赖的OpenNI2添加至环境变量。详见添加环境变量

安装HALCON

安装 HALCON20.11或以上版本。需确保HALCON的证书在有效期内。

添加环境变量

如需使用依赖OpenCV或PCL的例程,请根据以下步骤添加相关的环境变量。

  1. 右键单击桌面上的此电脑,选择属性

  2. 选择高级系统设置,再在弹出的系统属性窗口单击环境变量,进入环境变量界面。

  3. 双击Path变量进入编辑环境变量页面。单击右上角新建,依次添加以下路径。添加完成后,单击右下角确定

    • PCL相关:C:/Program Files/OpenNI2/Tools

    • OpenCV相关:

      • xxx/OpenCV/build/x64/vc14/bin

      • xxx/OpenCV/build/x64/vc14/lib

    • 如安装PCL时弹出报错,则需添加以下路径:

      • xxx/PCL 1.12.1/bin

      • xxx/PCL 1.12.1/3rdParty/VTK/bin

添加环境变量后,请重启电脑,否则可能导致添加的环境变量不生效。

构建及运行例程

你可以一次性构建全部例程,也可以仅构建单独一个例程。

本节以安装路径中包含的例程为例提供相关路径,如使用从GitHub克隆获取的例程,需对应更改路径。

禁用不需要的例程(可选)

未安装可选软件库的情况下一次性构建全部例程时,必须进行该节的操作。否则使用CMake配置例程时将报错。

如不需要使用依赖OpenCV、PCL或HALCON的例程,在一次性构建全部例程前,需对CMakeLists文件进行编辑,禁用这些例程。

  1. 打开xxx/Mech-Eye SDK-2.3.2/API/samples/cpp/area_scan_3d_camera路径下的CMakeLists.txt

  2. 编辑option语句:找到以option开头的行,将行末的ON改为OFF,可禁用依赖该行提及软件库的例程。

    示例:不需要构建依赖HALCON的例程,则将option(USE_HALCON…​)行末尾的ON改为OFF

  3. 保存修改后,关闭CMakeLists.txt

使用CMake配置例程

  1. 右键单击CMake并选择以管理员身份运行

  2. 输入源码路径与构建目录路径。

    • 如需一次性构建所有例程,请输入如下路径。

      Where is the source code

      xxx/Mech-Eye SDK-2.3.2/API/samples/cpp/area_scan_3d_camera

      Where to build the binaries

      xxx/Mech-Eye SDK-2.3.2/API/samples/cpp/area_scan_3d_camera/build

    • 如需单独构建某一例程,请输入如下路径。将路径中的Category替换为例程所在类别的名称,将SampleName替换为例程名称。

      Where is the source code

      xxx/Mech-Eye SDK-2.3.2/API/samples/cpp/area_scan_3d_camera/Category/SampleName

      Where to build the binaries

      xxx/Mech-Eye SDK-2.3.2/API/samples/cpp/area_scan_3d_camera/Category/SampleName/build

  3. 单击Configure,进入配置页面。选择Visual Studio的版本,并将平台设置为x64,然后单击Finish。配置成功后,日志最末行将显示Configuring done

    configuration 1
  4. 单击Generate生成解决方案。生成成功后,日志最末行将显示Generating done。然后,单击Open Project,使用Visual Studio打开解决方案。

使用Visual Studio构建例程

  1. 在Visual Studio工具栏中,将解决方案配置从Debug改为Release模式。

  2. 在菜单栏中选择生成  生成解决方案。每个例程会生成对应的可执行文件(.exe),保存在Release文件夹中,位于在CMake中输入的Where to build the binaries目录下。

运行例程

你可以在Visual Studio中直接运行例程,也可以双击运行例程的可执行文件。

在Visual Studio中运行例程

  1. 解决方案资源管理器窗口中右键单击想要运行的例程,并选择设为启动项目

  2. 单击工具栏中的本地Windows调试器即可在Visual Studio中运行例程。

    例程运行过程中,请根据提示输入待连接相机的编号(index),并按Enter键连接相机。

  3. 如例程保存了图像或点云,将在build文件夹中得到保存的文件(即在CMake中输入的Where to build the binaries目录)。

运行例程可执行文件

  1. 进入在CMake中输入的Where to build the binaries目录,打开其中的Release文件夹。

  2. 运行与例程同名的可执行文件。

    例程运行过程中,请根据提示输入待连接相机的编号(index),并按Enter键连接相机。

  3. 如例程保存了图像或点云,将在Release文件夹中得到保存的文件。

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。