Legacy/RectifiedFocalLengthUtility/RectifiedFocalLengthUtility.cc
Go to the documentation of this file.
1 
37 #ifdef WIN32
38 #ifndef WIN32_LEAN_AND_MEAN
39 #define WIN32_LEAN_AND_MEAN 1
40 #endif
41 
42 #include <windows.h>
43 #include <winsock2.h>
44 #else
45 #include <unistd.h>
46 #endif
47 
48 #include <stdio.h>
49 #include <stdlib.h>
50 #include <sys/types.h>
51 #include <sys/stat.h>
52 #include <fstream>
53 #include <map>
54 #include <string.h>
55 
56 #include <getopt/getopt.h>
57 #include <CalibrationYaml.hh>
58 #include <MultiSense/MultiSenseChannel.hh>
59 #include <MultiSense/MultiSenseTypes.hh>
60 
61 using namespace crl::multisense;
62 
63 namespace { // anonymous
64 
65 void usage(const char *programNameP)
66 {
67  fprintf(stderr,
68  "USAGE: %s -f <rectified_focal_length> [<options>]\n",
69  programNameP);
70  fprintf(stderr, "Where <options> are:\n");
71  fprintf(stderr, "\t-a <ip_address> : ip address (default=10.66.171.21)\n");
72  fprintf(stderr, "\t-s : set the rectified focal length (default is query)\n");
73 
74  exit(-1);
75 }
76 
77 
78 } // anonymous
79 
80 int main(int argc,
81  char **argvPP)
82 {
83  std::string ipAddress = "10.66.171.21";
84  double rectifiedFocalLength = -1.0;
85  bool set = false;
86  bool hasAuxCamera = false;
87  double currentFocalLength = 0.0;
88  double tx = 0.0;
89  double auxTx = 0.0;
90  double auxTy = 0.0;
91 
92  //
93  // Parse args
94 
95  int c;
96 
97  while(-1 != (c = getopt(argc, argvPP, "a:f:s")))
98  switch(c) {
99  case 'a': ipAddress = std::string(optarg); break;
100  case 'f': rectifiedFocalLength = atof(optarg); break;
101  case 's': set = true; break;
102  default: usage(*argvPP); break;
103  }
104 
105  //
106  // Verify options. New focal lengths should be positive and large enough for the onboard
107  // stereo pipeline
108 
109  if (rectifiedFocalLength < 200.0) {
110  fprintf(stderr, "Invalid rectified focal length\n");
111  usage(*argvPP);
112  }
113 
114  //
115  // Initialize communications.
116 
117  Channel *channelP = Channel::Create(ipAddress);
118  if (NULL == channelP) {
119  fprintf(stderr, "Failed to establish communications with \"%s\"\n",
120  ipAddress.c_str());
121  return -1;
122  }
123 
124  //
125  // Query Device Info
126 
127  Status status;
128 
129  system::DeviceInfo info;
130  status = channelP->getDeviceInfo(info);
131  if (Status_Ok != status)
132  {
133  fprintf(stderr, "Failed to query device info: %s\n",
134  Channel::statusString(status));
135  goto clean_out;
136  }
137 
142 
143  image::Calibration calibration;
144 
145  status = channelP->getImageCalibration(calibration);
146  if (Status_Ok != status) {
147  fprintf(stderr, "failed to query image calibration: %s\n",
148  Channel::statusString(status));
149  goto clean_out;
150  }
151 
152  currentFocalLength = calibration.left.P[0][0];
153  fprintf(stdout, "updating focal length from %f to %f\n",
154  currentFocalLength, rectifiedFocalLength);
155 
156  if (set) {
157 
158  tx = calibration.right.P[0][3] / calibration.right.P[0][0];
159 
160  calibration.left.P[0][0] = static_cast<float> (rectifiedFocalLength);
161  calibration.left.P[1][1] = static_cast<float> (rectifiedFocalLength);
162  calibration.right.P[0][0] = static_cast<float> (rectifiedFocalLength);
163  calibration.right.P[1][1] = static_cast<float> (rectifiedFocalLength);
164  calibration.right.P[0][3] = static_cast<float> (rectifiedFocalLength * tx);
165 
166  if (hasAuxCamera) {
167 
168  auxTx = calibration.aux.P[0][3] / calibration.aux.P[0][0];
169  auxTy = calibration.aux.P[1][3] / calibration.aux.P[1][1];
170 
171  calibration.aux.P[0][0] = static_cast<float> (rectifiedFocalLength);
172  calibration.aux.P[1][1] = static_cast<float> (rectifiedFocalLength);
173  calibration.aux.P[0][3] = static_cast<float> (rectifiedFocalLength * auxTx);
174  calibration.aux.P[1][3] = static_cast<float> (rectifiedFocalLength * auxTy);
175  }
176 
177  status = channelP->setImageCalibration(calibration);
178  if (Status_Ok != status) {
179  fprintf(stderr, "failed to set image calibration: %s\n",
180  Channel::statusString(status));
181  goto clean_out;
182  }
183 
184  fprintf(stdout, "Rectified focal length successfully updated to %f\n",
185  rectifiedFocalLength);
186  } else {
187 
188  fprintf(stdout, "Please specify -s to update the rectified focal length to %f\n",
189  rectifiedFocalLength);
190  }
191 
192 clean_out:
193 
194  Channel::Destroy(channelP);
195  return 0;
196 }
usage
static void usage()
Definition: FirmwareUpdateUtility.cc:51
crl::multisense::Status_Ok
static CRL_CONSTEXPR Status Status_Ok
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:99
crl::multisense::Channel::getDeviceInfo
virtual Status getDeviceInfo(system::DeviceInfo &info)=0
getopt.h
getopt
int getopt(int argc, char **argv, char *opts)
Definition: getopt.c:31
crl::multisense::Channel::Destroy
static void Destroy(Channel *instanceP)
Definition: Legacy/details/channel.cc:863
crl::multisense::image::Calibration::Data::P
float P[3][4]
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:1927
crl::multisense::Channel::getImageCalibration
virtual Status getImageCalibration(image::Calibration &c)=0
crl::multisense::image::Calibration::aux
Data aux
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:1935
crl::multisense::image::Calibration::left
Data left
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:1931
crl::multisense::Channel::setImageCalibration
virtual Status setImageCalibration(const image::Calibration &c)=0
crl::multisense::Channel::statusString
static const char * statusString(Status status)
Definition: Legacy/details/channel.cc:876
crl::multisense::system::DeviceInfo
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3245
crl::multisense::system::DeviceInfo::HARDWARE_REV_MULTISENSE_MONOCAM
static CRL_CONSTEXPR uint32_t HARDWARE_REV_MULTISENSE_MONOCAM
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3262
crl::multisense::system::DeviceInfo::hardwareRevision
uint32_t hardwareRevision
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3297
crl::multisense::image::Calibration
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:1910
crl::multisense::Channel::Create
static Channel * Create(const std::string &sensorAddress)
Definition: Legacy/details/channel.cc:817
crl::multisense::system::DeviceInfo::HARDWARE_REV_MULTISENSE_C6S2_S27
static CRL_CONSTEXPR uint32_t HARDWARE_REV_MULTISENSE_C6S2_S27
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3258
crl::multisense::Status
int32_t Status
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:94
crl::multisense::system::DeviceInfo::HARDWARE_REV_MULTISENSE_KS21i
static CRL_CONSTEXPR uint32_t HARDWARE_REV_MULTISENSE_KS21i
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3268
crl::multisense::Channel
Definition: Legacy/include/MultiSense/MultiSenseChannel.hh:69
CalibrationYaml.hh
crl::multisense
Definition: Legacy/details/channel.cc:62
crl::multisense::system::DeviceInfo::HARDWARE_REV_MULTISENSE_S30
static CRL_CONSTEXPR uint32_t HARDWARE_REV_MULTISENSE_S30
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:3259
optarg
char * optarg
Definition: getopt.c:29
crl::multisense::image::Calibration::right
Data right
Definition: Legacy/include/MultiSense/MultiSenseTypes.hh:1933
main
int main(int argc, char **argvPP)
Definition: Legacy/RectifiedFocalLengthUtility/RectifiedFocalLengthUtility.cc:80


multisense_lib
Author(s):
autogenerated on Thu Apr 17 2025 02:49:09