C++(Ubuntu)
本章介绍如何在Ubuntu系统中使用CMake配置Mech-Eye API的C++例程,并使用make指令构建例程。
例程简介
例程分为以下类别:Basic、Advanced、Util、Calibration、Pcl和Halcon。
-
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:定义并注册检测相机连接状态的回调函数。
Util
-
GetCameraIntrinsics:获取并打印相机内参。
-
PrintCameraInfo:获取并打印相机型号、序列号、固件版本、温度等信息。
-
SetScanningParameters:设置3D参数、2D参数和感兴趣区域分组下的参数。
-
SetDepthRange:设置深度范围参数。
-
SetPointCloudProcessingParameters:设置点云后处理参数。
-
ManageUserSets:管理参数组,如获取所有参数组的名称、新增参数组、切换参数组和保存参数设置至参数组。
-
SaveAndLoadUserSet:从JSON文件导入并替换所有参数组,将所有参数组保存为JSON文件。
Calibration
-
HandEyeCalibration: 进行手眼标定。
Pcl
-
ConvertPointCloudToPcl:从相机获取点云数据并转换为PCL数据结构。
-
ConvertPointCloudWithNormalsToPcl:从相机获取含法向量的点云数据并转换为PCL数据结构。
Halcon
-
ConvertPointCloudToObjectModel3D:从相机获取点云数据,通过HALCON C++接口转换并保存点云。
该例程无法在ARM64架构的平台上使用。
使用前提
使用Mech-Eye API的C++例程,需先满足以下使用前提:
-
Ubuntu系统版本为18或以上。
-
获取例程。
-
安装必需软件。
-
(可选)安装例程依赖的软件库。
若使用Ubuntu系统的虚拟机,请保证磁盘可用空间大于20G,否则软件安装可能失败。 |
获取例程
C++例程包含在Mech-Eye SDK的安装路径中,也可从GitHub克隆获取。安装路径中的例程为Mech-Eye SDK发布时的版本,GitHub上的例程可能包含最新修改。
-
安装路径中的例程位于/opt/mech-mind/mech-eye-sdk/samples/cpp/area_scan_3d_camera路径下;
-
通过GitHub克隆获取的例程位于xxx/mecheye_cpp_samples/area_scan_3d_camera路径下。
安装必需软件
使用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 |
---|---|---|---|
Capture2DImage |
√ |
||
CaptureDepthMap |
√ |
||
CapturePeriodically |
√ |
||
ConvertPointCloudToObjectModel3D |
√ |
||
ConvertPointCloudToPCL |
√ |
||
ConvertPointCloudWithNormalsToPCL |
√ |
||
HandEyeCalibration |
√ |
||
MultipleCamerasCaptureSequentially |
√ |
||
MultipleCamerasCaptureSimultaneously |
√ |
安装OpenCV
请执行以下命令安装最新版本的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
请执行以下命令安装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安装包后,执行以下命令安装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/cpp/area_scan_3d_camera/CMakeLists.txt。
-
编辑
option
语句:找到以option
开头的行,将行末的ON
改为OFF
,可禁用依赖该行提及软件库的例程。示例:不需要构建依赖HALCON的例程,则将
option(USE_HALCON…)
行末尾的ON
改为OFF
。 -
在编辑器中保存对CMakeLists文件的修改。
构建例程
请执行以下步骤构建例程:
-
进入例程所在路径:
-
如一次性构建全部例程,请使用以下指令。
cd /opt/mech-mind/mech-eye-sdk/samples/cpp/area_scan_3d_camera/
-
如单独构建某个例程,请使用以下指令。将路径中的Category替换为例程所在类别的名称,将SampleName替换为例程名称。
cd /opt/mech-mind/mech-eye-sdk/samples/cpp/area_scan_3d_camera/Category/SampleName/
-
-
在例程所在路径下新建build文件夹,用于保存编译完成的例程等。
sudo mkdir build && cd build
-
配置并构建例程:
sudo cmake .. sudo make
如修改了例程文件夹中的源码文件,需删除build文件夹后,重新执行第2和3步,重新构建例程。 |
运行例程
构建例程后,请执行以下步骤运行例程:
-
进入例程路径下的build文件夹(如构建例程后直接运行例程,可跳过此步):
-
如一次性构建了全部例程,请使用以下指令。
cd /opt/mech-mind/mech-eye-sdk/samples/cpp/area_scan_3d_camera/build/
-
如单独构建了某个例程,请使用以下指令。将路径中的Category替换为例程所在类别的名称,将SampleName替换为例程名称。
cd /opt/mech-mind/mech-eye-sdk/samples/cpp/area_scan_3d_camera/Category/SampleName/build/
-
-
运行例程:将SampleName替换为例程名称。例程运行过程中,请根据提示输入待连接相机的编号(index),并按Enter键连接相机。
sudo ./SampleName
-
如例程保存了图像或点云,将在build文件夹中得到保存的文件。