53 std::cout <<
"........................................." << std::endl;
54 std::cout <<
"Model: " << profilerInfo.
model << std::endl;
56 const auto consoleCP = GetConsoleOutputCP();
57 SetConsoleOutputCP(CP_UTF8);
59 std::cout <<
"Device name: " << profilerInfo.
deviceName << std::endl;
61 SetConsoleOutputCP(consoleCP);
63 std::cout <<
"Controller serial number: " << profilerInfo.
controllerSN << std::endl;
64 std::cout <<
"Sensor head serial number: " << profilerInfo.
sensorSN << std::endl;
65 std::cout <<
"IP address: " << profilerInfo.
ipAddress << std::endl;
66 std::cout <<
"Subnet mask: " << profilerInfo.
subnetMask << std::endl;
67 std::cout <<
"IP address assignment method: "
70 std::cout <<
"Hardware version: "
72 std::cout <<
"Firmware version: "
74 std::cout <<
"Support status: "
75 << (profilerInfo.
supported ?
"Supported" :
"Unsupported") << std::endl;
77 std::cout <<
"Last supported version: "
80 std::cout <<
"........................................." << std::endl;
81 std::cout << std::endl;
86 std::cout <<
".....Profiler temperatures....." << std::endl;
87 std::cout << std::fixed << std::setprecision(1);
92 std::cout <<
"..............................." << std::endl;
93 std::cout << std::defaultfloat << std::setprecision(6);
94 std::cout << std::endl;
103 std::cout <<
"Looking for available profilers..." << std::endl;
104 std::vector<mmind::eye::ProfilerInfo> profilerInfoList =
107 if (profilerInfoList.empty()) {
108 std::cout <<
"No profilers are available." << std::endl;
112 for (
size_t i = 0; i < profilerInfoList.size(); i++) {
113 std::cout <<
"Mech-Eye device index: " << i << std::endl;
117 std::cout <<
"Enter the index of the device to which you want to connect: ";
118 unsigned inputIndex = 0;
123 if (std::regex_match(str.begin(), str.end(), std::regex{
"[0-9]+"}) &&
124 atoi(str.c_str()) <
static_cast<int>(profilerInfoList.size())) {
125 inputIndex = atoi(str.c_str());
128 std::cout <<
"The entered index is invalid. Please enter the device index again: ";
132 status = profiler.
connect(profilerInfoList[inputIndex]);
134 if (!status.
isOK()) {
139 std::cout <<
"Successfully connected to the profiler." << std::endl;
145 std::cout <<
"Looking for available profilers..." << std::endl;
146 std::vector<mmind::eye::ProfilerInfo> profilerInfoList =
149 if (profilerInfoList.empty()) {
150 std::cout <<
"No profilers are available." << std::endl;
154 for (
size_t i = 0; i < profilerInfoList.size(); i++) {
155 std::cout <<
"Mech-Eye device index: " << i << std::endl;
160 std::set<unsigned> indices;
163 std::cout <<
"Enter the indices of the devices to which you want to connect: " << std::endl;
164 std::cout <<
"Enter the character \"c\" at the end of all the indices" << std::endl;
169 if (std::regex_match(str.begin(), str.end(), std::regex{
"[0-9]+"}) &&
170 atoi(str.c_str()) <
static_cast<int>(profilerInfoList.size()))
171 indices.insert(atoi(str.c_str()));
173 std::cout <<
"The entered indices are invalid. Please enter the device indices again: ";
176 std::vector<mmind::eye::Profiler> profilerList{};
178 for (
const auto index : indices) {
180 const auto status = profiler.
connect(profilerInfoList[index]);
182 profilerList.push_back(profiler);
193 <<
"Do you want the profiler to capture image? Enter \"y\" to confirm or \"n\" to cancel: "
196 std::string confirmStr;
197 std::cin >> confirmStr;
198 if (confirmStr ==
"y") {
200 }
else if (confirmStr ==
"n") {
201 std::cout <<
"The capture command was canceled." << std::endl;
204 std::cout <<
"The entered character was invalid. Please enter \"y\" ot confirm or "
213 bool saveCSV =
true,
bool isOrganized =
false)
219 double xResolution{};
222 if (!status.isOK()) {
228 double yResolution{};
231 if (!status.isOK()) {
253 int lineScanTriggerSource{};
255 lineScanTriggerSource);
256 if (!status.isOK()) {
261 bool useEncoderValues =
262 lineScanTriggerSource ==
265 int triggerInterval{};
268 if (!status.isOK()) {
273 std::cout <<
"Save the point cloud." << std::endl;
276 xResolution, yResolution, useEncoderValues, triggerInterval,
281 xResolution, yResolution, useEncoderValues, triggerInterval,
293 double xResolution{};
296 if (!status.isOK()) {
302 double yResolution{};
305 if (!status.isOK()) {
327 int lineScanTriggerSource{};
329 lineScanTriggerSource);
330 if (!status.isOK()) {
335 bool useEncoderValues =
336 lineScanTriggerSource ==
339 int triggerInterval{};
342 if (!status.isOK()) {
358 double xResolution{};
361 if (!status.isOK()) {
367 double yResolution{};
370 if (!status.isOK()) {
392 int lineScanTriggerSource{};
394 lineScanTriggerSource);
395 if (!status.isOK()) {
400 bool useEncoderValues =
401 lineScanTriggerSource ==
404 int triggerInterval{};
407 if (!status.isOK()) {
void savePLY(const mmind::api::PointXYZMap &pointXYZMap, const std::string &path)
Definition PclUtil.h:121
void showError(const mmind::api::ErrorStatus &status)
Definition SampleUtil.h:40
mmind::eye::ProfileBatch::TexturedPointCloud getTexturedPointCloud(const mmind::eye::ProfileBatch &batch, const mmind::eye::UserSet &userSet)
Definition api_util.h:351
bool findAndConnect(mmind::eye::Profiler &profiler)
Discovers all available laser profilers and allows the user to connect to a laser profiler by inputti...
Definition api_util.h:101
std::vector< mmind::eye::Profiler > findAndConnectMultiProfiler()
Definition api_util.h:143
bool confirmCapture()
Definition api_util.h:190
void printProfilerStatus(const mmind::eye::ProfilerStatus &profilerStatus)
Definition api_util.h:84
void printProfilerInfo(const mmind::eye::ProfilerInfo &profilerInfo)
Prints the data in the ProfilerInfo object.
Definition api_util.h:51
void savePointCloud(const mmind::eye::ProfileBatch &batch, const mmind::eye::UserSet &userSet, bool savePLY=true, bool saveCSV=true, bool isOrganized=false)
Definition api_util.h:211
mmind::eye::ProfileBatch::PointCloud getUntexturedPointCloud(const mmind::eye::ProfileBatch &batch, const mmind::eye::UserSet &userSet)
Definition api_util.h:286
Represents the data struct of the profile data.
Definition BatchArray.h:16
Represents a batch of profiles, which can be obtained by calling Profiler::retrieveBatchData()....
Definition ProfileData.h:74
TexturedPointCloud getTexturedPointCloud(double xResolution, double yResolution, bool useEncoderValues, int triggerInterval, CoordinateUnit coordinateUnit=CoordinateUnit::Millimeter) const
Gets the textured point cloud data in the batch. Each point in TexturedPointCloud contains the X,...
UntexturedPointCloud getUntexturedPointCloud(double xResolution, double yResolution, bool useEncoderValues, int triggerInterval, CoordinateUnit coordinateUnit=CoordinateUnit::Millimeter) const
Gets the untextured point cloud data in the batch. Each point in UntexturedPointCloud contains the X,...
ErrorStatus saveUntexturedPointCloud(double xResolution, double yResolution, bool useEncoderValues, int triggerInterval, FileFormat fileFormat, const std::string &fileName, CoordinateUnit coordinateUnit=CoordinateUnit::Millimeter, bool isOrganized=false) const
Saves the untextured point cloud data in the batch. Each point in UntexturedPointCloud contains the X...
bool isEmpty() const
Checks if the ProfileBatch object has no elements.
Operates the laser profiler. Use Profiler::connect to connect an available laser profiler,...
Definition Profiler.h:100
static std::vector< ProfilerInfo > discoverProfilers(unsigned int timeoutMs=5000)
Discovers all available laser profilers and returns the list of information of all available laser pr...
ErrorStatus connect(const ProfilerInfo &info, unsigned int timeoutMs=5000)
Connects to a laser profiler via ProfilerInfo.
ErrorStatus getIntValue(const std::string ¶meterName, int &value) const
Gets the current value of an _Int-type device parameter. See Parameter for details.
ErrorStatus getEnumValue(const std::string ¶meterName, int &value) const
Gets the current value of an _Enum-type device parameter in the form of the integer value....
ErrorStatus getFloatValue(const std::string ¶meterName, double &value) const
Gets the current value of a _Float-type device parameter. See Parameter for details.
std::string toString() const
Converts a Version object to a string.
Definition Version.h:71
bool isEmpty() const
Checks if a Version object is empty.
Definition Version.h:95
static constexpr const char * name
Definition ScanParameters.h:291
static constexpr const char * name
Definition ScanParameters.h:305
static constexpr const char * name
Definition ScanParameters.h:194
static constexpr const char * name
Definition ScanParameters.h:82
Describes the types of errors.
Definition ErrorStatus.h:12
bool isOK() const
Returns true if the operation succeeded.
Definition ErrorStatus.h:85
Describes the laser profiler information.
Definition ProfilerInfo.h:44
IpAssignmentMethod ipAssignmentMethod
The IP address assignment method of the laser profiler.
Definition ProfilerInfo.h:54
std::string controllerSN
The controller serial number.
Definition ProfilerInfo.h:47
bool supported
The support status of the device.
Definition ProfilerInfo.h:56
std::string sensorSN
The sensor serial number.
Definition ProfilerInfo.h:48
std::string model
The laser profiler model.
Definition ProfilerInfo.h:45
Version lastSupportedVersion
The last supported version of the device.
Definition ProfilerInfo.h:57
Version firmwareVersion
The version of the firmware. The firmware can be upgraded.
Definition ProfilerInfo.h:50
std::string subnetMask
The IP subnet mask of the laser profiler.
Definition ProfilerInfo.h:52
Version hardwareVersion
The version of the hardware. The hardware cannot be upgraded.
Definition ProfilerInfo.h:49
std::string deviceName
The device name (UTF-8 encoded).
Definition ProfilerInfo.h:46
std::string ipAddress
The IP address of the laser profiler.
Definition ProfilerInfo.h:51
Describes the laser profiler's statuses.
Definition Profiler.h:90
ProfilerTemperature temperature
Definition Profiler.h:91
float controllerCpuTemperature
The temperature (in °C) of the controller CPU.
Definition Profiler.h:82
float sensorCpuTemperature
The temperature (in °C) of the FPGA.
Definition Profiler.h:83