38#include "CameraProperties.h"
39#include "ErrorStatus.h"
40#include "CommonTypes.h"
45 std::cout <<
"............................." << std::endl;
46 std::cout <<
"Model: " << cameraInfo.
model << std::endl;
47 std::cout <<
"Serial number: " << cameraInfo.
serialNumber << std::endl;
48 std::cout <<
"IP address: " << cameraInfo.
ipAddress << std::endl;
49 std::cout <<
"Subnet mask: " << cameraInfo.
subnetMask << std::endl;
50 std::cout <<
"IP address assignment method: "
52 std::cout <<
"Hardware version: "
54 std::cout <<
"Firmware version: "
56 std::cout <<
"............................." << std::endl;
57 std::cout << std::endl;
62 std::cout <<
".....Camera temperatures....." << std::endl;
63 std::cout <<
"CPU: " << cameraStatus.temperature.
cpuTemperature <<
"°C" << std::endl;
66 std::cout <<
"............................" << std::endl;
68 std::cout << std::endl;
74 std::cout <<
".....Image resolutions....." << std::endl;
75 std::cout <<
"2D image (texture): " << cameraResolutions.texture.width <<
" (width) × "
76 << cameraResolutions.texture.height <<
" (height)" << std::endl;
77 std::cout <<
"Depth map: " << cameraResolutions.depth.width <<
" (width) × "
78 << cameraResolutions.depth.height <<
" (height)" << std::endl;
81inline void printCameraMatrix(
const std::string& title,
84 std::cout << title <<
": " << std::endl
85 <<
" [" << cameraMatrix.
fx <<
", " << 0 <<
", " << cameraMatrix.
cx <<
"]"
88 <<
" [" << 0 <<
", " << cameraMatrix.
fy <<
", " << cameraMatrix.
cy <<
"]"
91 <<
" [" << 0 <<
", " << 0 <<
", " << 1 <<
"]" << std::endl;
92 std::cout << std::endl;
95inline void printCameraDistCoeffs(
const std::string& title,
98 std::cout << title <<
": " << std::endl
99 <<
" k1: " << distCoeffs.
k1 <<
", k2: " << distCoeffs.
k2
100 <<
", p1: " << distCoeffs.
p1 <<
", p2: " << distCoeffs.
p2 <<
", k3: " << distCoeffs.
k3
102 std::cout << std::endl;
107 std::cout <<
"Rotation: " << title <<
": " << std::endl;
108 for (
int i = 0; i < 3; i++) {
110 for (
int j = 0; j < 3; j++) {
111 std::cout << transform.
rotation[i][j];
115 std::cout <<
"]" << std::endl;
117 std::cout << std::endl;
118 std::cout <<
"Translation " << title <<
": " << std::endl;
120 <<
"mm, Z: " << transform.
translation[2] <<
"mm" << std::endl;
121 std::cout << std::endl;
126 printCameraMatrix(
"Texture 2D camera matrix", intrinsics.
texture.cameraMatrix);
127 printCameraDistCoeffs(
"Texture 2D camera distortion coefficients",
128 intrinsics.
texture.cameraDistortion);
130 printCameraMatrix(
"Depth 2D camera matrix", intrinsics.
depth.cameraMatrix);
131 printCameraDistCoeffs(
"Depth 2D camera distortion doefficients",
132 intrinsics.
depth.cameraDistortion);
134 printTransform(
"Transformation from depth 2D camera to texture 2D camera",
140 std::cout <<
"Looking for available cameras..." << std::endl;
143 if (deviceInfoList.empty()) {
144 std::cout <<
"No cameras are available." << std::endl;
148 for (
int i = 0; i < deviceInfoList.size(); i++) {
149 std::cout <<
"Mech-Eye device index: " << i << std::endl;
150 printCameraInfo(deviceInfoList[i]);
153 std::cout <<
"Enter the index of the device to which you want to connect: ";
154 unsigned inputIndex = 0;
159 if (std::regex_match(str.begin(), str.end(), std::regex{
"[0-9]+"}) &&
160 atoi(str.c_str()) < deviceInfoList.size()) {
161 inputIndex = atoi(str.c_str());
164 std::cout <<
"The entered index is invalid. Please enter the device index again: ";
168 status = device.
connect(deviceInfoList[inputIndex]);
170 if (!status.
isOK()) {
175 std::cout <<
"Successfully connected to the camera." << std::endl;
179inline std::vector<mmind::eye::Camera> findAndConnectMultiCamera()
181 std::cout <<
"Looking for available cameras..." << std::endl;
184 if (cameraInfoList.empty()) {
185 std::cout <<
"No cameras are avaialble." << std::endl;
189 for (
int i = 0; i < cameraInfoList.size(); i++) {
190 std::cout <<
"Mech-Eye device index: " << i << std::endl;
191 printCameraInfo(cameraInfoList[i]);
195 std::set<unsigned> indices;
198 std::cout <<
"Enter the indices of the devices to which you want to connect: " << std::endl;
199 std::cout <<
"Enter the character \"c\" at the end of all the indices" << std::endl;
204 if (std::regex_match(str.begin(), str.end(), std::regex{
"[0-9]+"}) &&
205 atoi(str.c_str()) < cameraInfoList.size())
206 indices.insert(atoi(str.c_str()));
208 std::cout <<
"The entered indices are invalid. Please enter the device indices again: ";
211 std::vector<mmind::eye::Camera> cameraList{};
213 auto iter = indices.cbegin();
214 for (
int i = 0; i < indices.size(); ++i, ++iter) {
216 auto status = camera.
connect(cameraInfoList[*iter]);
218 cameraList.push_back(camera);
226inline bool confirmCapture3D()
229 <<
"Do you want the camera to capture 3D data? Enter \"y\" to confirm or \"n\" to cancel: "
232 std::string confirmStr;
233 std::cin >> confirmStr;
234 if (confirmStr ==
"y") {
236 }
else if (confirmStr ==
"n") {
237 std::cout <<
"The capture command was canceled." << std::endl;
240 std::cout <<
"The entered character was invalid. Please enter \"y\" to confirm or "
Operates the camera. Use Camera::connect to connect an available camera, and then call the correspond...
static std::vector< CameraInfo > discoverCameras()
Discovers all available cameras and returns the list of information of all available cameras....
ErrorStatus connect(const CameraInfo &info, unsigned int timeoutMs=5000)
Connects to a camera using CameraInfo.
std::string toString() const
Converts a Version object to a string.
Describes the distortion parameters.
double k1
Radial distortion coefficients.
double k3
Radial distortion coefficients.
double p2
Tangential distortion coefficients.
double k2
Radial distortion coefficients.
double p1
Tangential distortion coefficients.
Defines the camera information.
IpAssignmentMethod ipAssignmentMethod
The IP address assignment method of the device.
std::string serialNumber
The serial number of the device.
Version hardwareVersion
The version of the hardware (pre-determined in the factory).
std::string model
The device model, such as Mech-Eye NANO.
Version firmwareVersion
The version of the firmware (upgradable).
std::string subnetMask
The subnet mask of the device.
std::string ipAddress
The IP address of the device.
Defines the 3D camera intrinsic parameters, including the intrinsic parameters of the texture 2D came...
Intrinsics2DCamera texture
Intrinsics2DCamera depth
The intrinsic parameters of the depth 2D camera(s) for capturing the depth map.
Transformation depthToTexture
Describes the camera intrinsic parameter matrix.
double cx
Principal point.
double cy
Principal point.
Defines the camera image resolutions, including the resolutions of the 2D image (texture) and depth m...
Describes the camera's statuses.
float projectorTemperature
The temperature (in °C) of the camera projector.
float cpuTemperature
The temperature (in °C) of the camera CPU.
Describes the types of errors.
bool isOK() const
Returns true if the operation succeeded.