C++ (Ubuntu)¶
本章介绍如何在 Ubuntu 系统中使用 CMake 配置 Mech-Eye API 的 C++ 例程,并使用 make 指令构建例程。
例程简介¶
例程分为 6 类:Basic、Advanced、Util、Laser、UHP 和 Halcon。
Basic
ConnectToCamera:连接相机。
ConnectAndCaptureImage:连接相机并获取 2D 图、深度图及点云数据。
CaptureColorMap:从相机获取并保存 2D 图。
CaptureDepthMap:从相机获取并保存深度图。
CapturePointCloud:使用单个曝光时间采集图像,生成并保存白色点云和彩色点云。
CaptureHDRPointCloud:使用多个曝光时间采集图像,生成并保存白色点云和彩色点云。
CapturePointCloudROI:获取并保存感兴趣区域内的白色点云和彩色点云。
CapturePointCloudFromTextureMask:从覆盖掩膜的 2D 图和深度图生成并保存白色点云和彩色点云。
Advanced
CaptureCloudFromDepth:从 2D 图与深度图生成并保存点云。
CaptureSequentiallyMultiCamera:使用多台相机按序获取并保存 2D 图、深度图及点云。
CaptureSimultaneouslyMultiCamera:使用多台相机同时获取并保存 2D 图、深度图及点云。
CaptureTimedAndPeriodically:在设定时间内,定时获取并保存 2D 图、深度图和点云。
Util
GetCameraIntri:获取并打印相机内参。
PrintDeviceInfo:获取并打印相机型号、序列号、固件版本等信息。
SetDepthRange:设置相机深度范围。
SetParameters:设置相机参数。
SetUserSets:执行参数组相关功能,如获取参数组名称,修改参数组名称,保存参数组参数信息等。通过参数组可以保存一组参数值并快速应用。
Laser
SetLaserFramePartitionCount:将投影仪视野分为多个分区,结构光一次投射到一个分区。整个视野的输出由所有分区的图像融合而成。
SetLaserFrameRange:设置结构光投射范围,整个视野范围从 0 到 100。
SetLaserFringeCodingMode:设置结构光样式的编码模式。
SetLaserPowerLevel:设置激光器的输出功率(最大输出功率的百分比),影响激光强度。
UHP
SetUHPCaptureMode:设置采集模式(分为:2D 相机 1,2D 相机 2 及同时使用两个 2D 相机并融合输出)。
SetUHPFringeCodingMode:设置结构光样式的编码模式。
Halcon
CaptureHalconPointCloud :从相机获取点云数据,通过HALCON C++接口转换并保存点云。
使用前提¶
使用 Mech-Eye API 的 C++ 例程,需先满足以下使用前提:
Ubuntu 系统版本为 18 或以上。
安装必需软件。
安装例程依赖的可选软件。
注意
若使用 Ubuntu 系统的虚拟机,请保证磁盘可用空间大于 20G,否则软件安装可能失败。
必需软件和可选软件及其安装注意事项,详见以下小节。
安装必需软件¶
使用 Mech-Eye API 的 C++ 例程,必须更新软件源列表,并安装依赖库及 Mech-Eye SDK。
更新软件源列表。
sudo apt-get update
安装依赖库。
sudo apt-get install -y build-essential pkg-config cmake
安装 Mech-Eye SDK, 详见 在 Ubuntu 上安装 Mech-Eye SDK。
安装完成后,例程所在文件夹的路径为 /opt/mech-mind/mech-eye-sdk/samples/。
安装可选软件¶
部分例程中的功能依赖以下第三方软件库。如需使用下表中列出的例程,则必须安装其依赖的软件。
OpenCV:最新版本
PCL:最新版本
HALCON:20.11 或以上版本
注意
如未安装可选软件,则配置例程前必须执行 禁用不需要的例程(可选) 中的操作。
依赖第三方软件库的例程详见下表。
例程 |
OpenCV |
PCL |
HALCON |
CaptureColorMap |
√ |
||
CaptureDepthMap |
√ |
||
CapturePointCloud |
√ |
||
CaptureHDRPointCloud |
√ |
||
CapturePointCloudROI |
√ |
||
CapturePointCloudFromTextureMask |
√ |
||
CaptureCloudFromDepth |
√ |
||
CaptureTimedAndPeriodically |
√ |
√ |
|
CaptureSimultaneouslyMultiCamera |
√ |
√ |
|
CaptureSequentiallyMultiCamera |
√ |
√ |
|
CaptureHalconPointCloud |
√ |
√ |
安装 OpenCV:
sudo apt update && sudo apt install -y unzip wget -O opencv.zip https://github.com/opencv/opencv/archive/4.x.zip unzip opencv.zip mkdir build && cd build cmake ../opencv-4.x cmake --build . sudo make install
安装 PCL:
sudo apt-get install libpcl-dev
安装 HALCON 并添加环境变量:
下载 HALCON 安装包后使用以下指令安装 HALCON (以 20.11 版本为例):
tar zxvf halcon-20.11.3.0-linux.tar.gz sudo sh install-linux.sh #Note down the installation directory of HALCON.
添加 HALCON 的环境变量:在编辑器(如 vi)中打开 /etc/profile,并将以下内容复制到该文件末尾。将 /opt/halcon 替换为 HALCON 的实际安装路径。
HALCONARCH=x64-linux; export HALCONARCH HALCONROOT="/opt/halcon"; export HALCONROOT HALCONEXAMPLES=${HALCONROOT}/examples; export HALCONEXAMPLES HALCONIMAGES=${HALCONROOT}/examples/images; export HALCONIMAGES PATH=${HALCONROOT}/bin/${HALCONARCH}:${PATH}; export PATH if [ ${LD_LIBRARY_PATH} ] ; then LD_LIBRARY_PATH=${HALCONROOT}/lib/${HALCONARCH}:${LD_LIBRARY_PATH}; export LD_LIBRARY_PATH else LD_LIBRARY_PATH=${HALCONROOT}/lib/${HALCONARCH}; export LD_LIBRARY_PATH fi
注解
环境变量在重新登录后生效。或者请在构建例程前先执行
source /etc/profile/
指令。更多关于 HALCON 安装的内容,请参阅 HALCON 的安装指南。
构建及运行例程¶
您可以一次性构建全部例程,也可以仅构建单独一个例程。
禁用不需要的例程(可选)¶
注意
未安装可选软件的情况下一次性构建全部例程时,必须进行该节的操作。否则使用 CMake 配置例程时将报错。
如不需要使用依赖 OpenCV、PCL 或 HALCON 的例程,在一次性构建全部例程前,需对 CMakeLists 文件进行编辑,禁用这些例程。
在编辑器(如 vi)中打开 /opt/mech-mind/mech-eye-sdk/samples/CMakeLists.txt。
编辑 option 语句:找到以 option 开头的行,将行末的 ON 改为 OFF,可禁用依赖该行提及软件的例程。
示例:不需要构建依赖 HALCON 的例程,则将以 option(USE_HALCON 开头的行末尾的 ON 改为 OFF。
在编辑器中保存对 CMakeLists 文件的修改。
构建例程¶
进入例程所在路径:
如一次性构建全部例程,请使用以下指令。
cd /opt/mech-mind/mech-eye-sdk/samples/
如单独构建某个例程,请使用以下指令。将路径中的 Category 替换为例程所在类别的名称,将 SampleName 替换为例程名称。
cd /opt/mech-mind/mech-eye-sdk/samples/Category/SampleName/
在例程所在路径下新建 build 文件夹,用于保存编译完成的例程等。
mkdir build && cd build
配置并构建例程:
cmake .. make
小技巧
如修改了例程文件夹中的源码文件,需删除 build 文件夹后,重新执行第 2 和 3 步,重新构建例程。
运行例程¶
进入例程路径下的 build 文件夹(如构建例程后直接运行例程,可跳过此步):
如一次性构建了全部例程,请使用以下指令。
cd /opt/mech-mind/mech-eye-sdk/samples/build/
如单独构建了某个例程,请使用以下指令。将路径中的 Category 替换为例程所在类别的名称,将 SampleName 替换为例程名称。
cd /opt/mech-mind/mech-eye-sdk/samples/Category/SampleName/build/
运行例程:将 SampleName 替换为例程名称。例程运行过程中,请根据提示输入待连接相机的编号 (device index),并按回车键连接相机。
./SampleName
如例程保存了图像或点云,将在 build 文件夹中得到保存的文件。