C++(Ubuntu)
本章介绍如何在Ubuntu系统中使用CMake配置Mech-Eye API的C++例程,并使用make指令构建例程。
例程简介
例程分为7类:Basic、Advanced、Util、Laser、UHP、Calibration和Halcon。
-
Basic例程:与连接和基础采集相关。
-
Advanced例程:与高级采集技巧相关。
-
Util例程:与获取相机信息及设置参数相关。
-
Laser例程:仅适用于Laser,DEEP与LSR系列相机。
-
UHP例程:仅适用于UHP系列相机。
-
Calibration例程:通过Mech-Eye API进行手眼标定。
-
Halcon例程:通过Mech-Eye API获取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:设置结构光样式的编码模式。
Calibration
-
HandEyeCalibration: 用于进行手眼标定。
Halcon
-
CaptureHalconPointCloud:从相机获取点云数据,通过HALCON C++接口转换并保存点云。
使用前提
使用Mech-Eye API的C++例程,需先满足以下使用前提:
-
Ubuntu系统版本为18或以上。
-
获取例程。
-
安装必需软件。
-
安装例程依赖的可选软件。
若使用Ubuntu系统的虚拟机,请保证磁盘可用空间大于20G,否则软件安装可能失败。 |
获取例程
C++例程包含在Mech-Eye SDK的安装路径中,也可从GitHub克隆获取。安装路径中的例程为Mech-Eye SDK发布时的版本,GitHub上的例程可能包含最新修改。
-
安装路径中的例程位于/opt/mech-mind/mech-eye-sdk/samples/c++/source路径下;
-
通过GitHub克隆获取的例程位于xxx/mecheye_cpp_samples/source路径下。
安装必需软件
使用Mech-Eye API的C++例程,必须更新软件源列表,并安装依赖库及Mech-Eye SDK。
-
更新软件源列表:
sudo apt-get update
-
安装依赖库:
sudo apt-get install -y build-essential pkg-config cmake
-
安装Mech-Eye SDK:详见Mech-Eye SDK安装指南(Ubuntu)。
安装可选软件
部分例程中的功能依赖以下第三方软件库。如需使用下表中列出的例程,则必须安装其依赖的软件。
-
OpenCV:最新版本
-
PCL:最新版本
-
HALCON:20.11或以上版本
低于20.11版本的HALCON未经完全验证。
如未安装可选软件,则配置例程前必须执行禁用不需要的例程(可选)中的操作。 |
依赖第三方软件库的例程详见下表。
例程 | 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
不同版本的Ubuntu,运行该指令安装的PCL版本不同。Ubuntu 18.04将安装PCL 1.8.1,Ubuntu 20.04将安装PCL 1.10.0. -
安装HALCON并添加环境变量:
-
下载HALCON安装包后使用以下指令安装HALCON(以20.11版本为例):
tar zxvfHALCON-20.11.3.0-linux.tar.gz sudo sh install-linux.sh #Note down the installation directory ofHALCON.
-
添加HALCON的环境变量:在编辑器(如vi)中打开/etc/profile,并将以下内容复制到该文件末尾。将
/opt/halcon
替换为HALCON的实际安装路径。HALCONARCH=x64-linux; exportHALCONARCH HALCONROOT="/opt/halcon"; exportHALCONROOT HALCONEXAMPLES=${HALCONROOT}/examples; exportHALCONEXAMPLES HALCONIMAGES=${HALCONROOT}/examples/images; exportHALCONIMAGES 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的安装指南。
-
构建及运行例程
你可以一次性构建全部例程,也可以仅构建单独一个例程。
本节以安装路径中包含的例程为例提供相关路径,如使用从GitHub克隆获取的例程,需对应更改路径。 |
禁用不需要的例程(可选)
未安装可选软件的情况下一次性构建全部例程时,必须进行该节的操作。否则使用CMake配置例程时将报错。 |
如不需要使用依赖OpenCV、PCL或HALCON的例程,在一次性构建全部例程前,需对CMakeLists文件进行编辑,禁用这些例程。
-
在编辑器(如vi)中打开/opt/mech-mind/mech-eye-sdk/samples/c++/source/CMakeLists.txt。
-
编辑
option
语句:找到以option
开头的行,将行末的ON
改为OFF
,可禁用依赖该行提及软件的例程。 示例:不需要构建依赖HALCON的例程,则将以option(USE_HALCON
开头的行末尾的ON
改为OFF
。 -
在编辑器中保存对CMakeLists文件的修改。
构建例程
请执行以下步骤构建例程:
-
进入例程所在路径:
-
如一次性构建全部例程,请使用以下指令。
cd /opt/mech-mind/eye-sdk/samples/c++/source/
-
如单独构建某个例程,请使用以下指令。将路径中的Category替换为例程所在类别的名称,将SampleName替换为例程名称。
cd /opt/mech-mind/eye-sdk/samples/c++/source/Category/SampleName/
-
-
在例程所在路径下新建build文件夹,用于保存编译完成的例程等。
mkdir build && cd build
-
配置并构建例程:
cmake .. make
如修改了例程文件夹中的源码文件,需删除build文件夹后,重新执行第2和3步,重新构建例程。 |
运行例程
构建例程后,请执行以下步骤运行例程:
-
进入例程路径下的build文件夹(如构建例程后直接运行例程,可跳过此步):
-
如一次性构建了全部例程,请使用以下指令。
cd /opt/mech-mind/eye-sdk/samples/c++/source/build/
-
如单独构建了某个例程,请使用以下指令。将路径中的Category替换为例程所在类别的名称,将SampleName替换为例程名称。
cd /opt/mech-mind/eye-sdk/samples/c++/source/Category/SampleName/build/
-
-
运行例程:将SampleName替换为例程名称。例程运行过程中,请根据提示输入待连接相机的编号(device index),并按Enter键连接相机。
./SampleName
-
如例程保存了图像或点云,将在build文件夹中得到保存的文件。