Mech-Eye API 2.3.3
API reference documentation for Mech-Eye 3D Laser Profiler
Loading...
Searching...
No Matches
api_util.h
1/*******************************************************************************
2 *BSD 3-Clause License
3 *
4 *Copyright (c) 2016-2024, Mech-Mind Robotics
5 *All rights reserved.
6 *
7 *Redistribution and use in source and binary forms, with or without
8 *modification, are permitted provided that the following conditions are met:
9 *
10 *1. Redistributions of source code must retain the above copyright notice, this
11 * list of conditions and the following disclaimer.
12 *
13 *2. Redistributions in binary form must reproduce the above copyright notice,
14 * this list of conditions and the following disclaimer in the documentation
15 * and/or other materials provided with the distribution.
16 *
17 *3. Neither the name of the copyright holder nor the names of its
18 * contributors may be used to endorse or promote products derived from
19 * this software without specific prior written permission.
20 *
21 *THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 *AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 *IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24 *DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
25 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 *DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 *SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 *CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 *OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 *OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 ******************************************************************************/
32
33#pragma once
34#include <iostream>
35#include <set>
36#include <utility>
37#include <regex>
38#include "ErrorStatus.h"
39#include "CommonTypes.h"
40#include "Profiler.h"
41#include "ProfilerInfo.h"
42
46inline void printProfilerInfo(const mmind::eye::ProfilerInfo& profilerInfo)
47{
48 std::cout << "........................................." << std::endl;
49 std::cout << "Profiler Model Name: " << profilerInfo.model << std::endl;
50 std::cout << "Controller Serial Number: " << profilerInfo.controllerSN << std::endl;
51 std::cout << "Sensor Serial Number: " << profilerInfo.sensorSN << std::endl;
52 std::cout << "Profiler IP Address: " << profilerInfo.ipAddress << std::endl;
53 std::cout << "Profiler IP Subnet Mask: " << profilerInfo.subnetMask << std::endl;
54 std::cout << "Profiler IP Assignment Method: "
55 << mmind::eye::ipAssignmentMethodToString(profilerInfo.ipAssignmentMethod)
56 << std::endl;
57 std::cout << "Hardware Version: "
58 << "V" << profilerInfo.hardwareVersion.toString() << std::endl;
59 std::cout << "Firmware Version: "
60 << "V" << profilerInfo.firmwareVersion.toString() << std::endl;
61 std::cout << "........................................." << std::endl;
62 std::cout << std::endl;
63}
64
69inline bool findAndConnect(mmind::eye::Profiler& profiler)
70{
71 std::cout << "Find Mech-Eye 3D Laser Profilers..." << std::endl;
72 std::vector<mmind::eye::ProfilerInfo> profilerInfoList =
74
75 if (profilerInfoList.empty()) {
76 std::cout << "No Mech-Eye 3D Laser Profiler found." << std::endl;
77 return false;
78 }
79
80 for (int i = 0; i < profilerInfoList.size(); i++) {
81 std::cout << "Mech-Eye 3D Laser profiler index : " << i << std::endl;
82 printProfilerInfo(profilerInfoList[i]);
83 }
84
85 std::cout << "Please enter the profiler index you want to connect: ";
86 unsigned inputIndex = 0;
87
88 while (true) {
89 std::string str;
90 std::cin >> str;
91 if (std::regex_match(str.begin(), str.end(), std::regex{"[0-9]+"}) &&
92 atoi(str.c_str()) < profilerInfoList.size()) {
93 inputIndex = atoi(str.c_str());
94 break;
95 }
96 std::cout << "Input invalid! Please enter the profiler index you want to connect: ";
97 }
98
100 status = profiler.connect(profilerInfoList[inputIndex]);
101
102 if (!status.isOK()) {
103 showError(status);
104 return false;
105 }
106
107 std::cout << "Connect Mech-Eye 3D Laser Profiler Successfully." << std::endl;
108 return true;
109}
110
111inline std::vector<mmind::eye::Profiler> findAndConnectMultiProfiler()
112{
113 std::cout << "Find Mech-Eye 3D Laser Profilers..." << std::endl;
114 std::vector<mmind::eye::ProfilerInfo> profilerInfoList =
116
117 if (profilerInfoList.empty()) {
118 std::cout << "No Mech-Eye 3D Laser Profilers found." << std::endl;
119 return {};
120 }
121
122 for (int i = 0; i < profilerInfoList.size(); i++) {
123 std::cout << "Mech-Eye 3D Laser Profiler index : " << i << std::endl;
124 printProfilerInfo(profilerInfoList[i]);
125 }
126
127 std::string str;
128 std::set<unsigned> indices;
129
130 while (true) {
131 std::cout << "Please enter the device index you want to connect: " << std::endl;
132 std::cout << "Enter the character 'c' to terminate adding devices" << std::endl;
133
134 std::cin >> str;
135 if (str == "c")
136 break;
137 if (std::regex_match(str.begin(), str.end(), std::regex{"[0-9]+"}) &&
138 atoi(str.c_str()) < profilerInfoList.size())
139 indices.insert(atoi(str.c_str()));
140 else
141 std::cout << "Input invalid. Please enter the device index you want to connect: ";
142 }
143
144 std::vector<mmind::eye::Profiler> profilerList{};
145
146 auto iter = indices.cbegin();
147 for (int i = 0; i < indices.size(); ++i, ++iter) {
148 mmind::eye::Profiler profiler;
149 auto status = profiler.connect(profilerInfoList[*iter]);
150 if (status.isOK())
151 profilerList.push_back(profiler);
152 else
153 showError(status);
154 }
155
156 return profilerList;
157}
158
159inline bool confirmCapture()
160{
161 std::cout << "Do you want the profiler to capture image? Please input y/n to confirm: "
162 << std::endl;
163 while (true) {
164 std::string confirmStr;
165 std::cin >> confirmStr;
166 if (confirmStr == "y") {
167 return true;
168 } else if (confirmStr == "n") {
169 std::cout << "program ends!" << std::endl;
170 return false;
171 } else {
172 std::cout << "Please input y/n again!" << std::endl;
173 }
174 }
175}
Operates the laser profiler. Use Profiler::connect to connect an available laser profiler,...
Definition Profiler.h:51
static std::vector< ProfilerInfo > discoverProfilers()
Discovers all available laser profilers, and returns the laser profiler information list....
ErrorStatus connect(const ProfilerInfo &info, unsigned int timeoutMs=5000)
Connects to a laser profiler via ProfilerInfo.
std::string toString() const
Converts a Version object to a string.
Definition Version.h:71
Describes the types of errors.
Definition ErrorStatus.h:12
bool isOK() const
Returns true if the operation succeeded.
Definition ErrorStatus.h:71
Describes the laser profiler information.
Version hardwareVersion
The version of the hardware. The hardware cannot be upgraded.
Version firmwareVersion
The version of the firmware. The firmware can be upgraded.
std::string subnetMask
The IP subnet mask of the laser profiler.
IpAssignmentMethod ipAssignmentMethod
The IP address assignment method of the laser profiler.
std::string model
The laser profiler model.
std::string controllerSN
The controller serial number.
std::string sensorSN
The sensor serial number.
std::string ipAddress
The IP address of the laser profiler.