38 #ifndef WIN32_LEAN_AND_MEAN
39 #define WIN32_LEAN_AND_MEAN 1
52 #include <MultiSense/MultiSenseChannel.hh>
63 volatile bool done =
false;
65 void usage(
const char *name)
67 std::cerr <<
"USAGE: " << name <<
" [<options>]" << std::endl;
68 std::cerr <<
"Where <options> are:" << std::endl;
69 std::cerr <<
"\t-a <current-address> : CURRENT IPV4 address (default=10.66.171.21)" << std::endl;
70 std::cerr <<
"\t-m <mtu> : MTU to use to communicate with the camera (default=1500)" << std::endl;
71 std::cerr <<
"\t-n <number-of-images> : Number of images to save (default=1)" << std::endl;
72 std::cerr <<
"\t-d : Save depth images" << std::endl;
73 std::cerr <<
"\t-l : Save left rectified images" << std::endl;
74 std::cerr <<
"\t-c : Save color images" << std::endl;
84 case lms::DataSource::LEFT_DISPARITY_RAW:
87 lms::Image::PixelFormat::MONO16,
95 case lms::DataSource::LEFT_RECTIFIED_RAW:
100 case lms::DataSource::AUX_RAW:
129 int main(
int argc,
char** argv)
131 using namespace std::chrono_literals;
139 std::string ip_address =
"10.66.171.21";
141 size_t number_of_images = 1;
142 bool save_depth =
false;
143 bool save_left_rect =
false;
144 bool save_color =
false;
147 while(-1 != (c =
getopt(argc, argv,
"a:m:n:dlc")))
151 case 'a': ip_address = std::string(
optarg);
break;
152 case 'm': mtu =
static_cast<uint16_t
>(atoi(
optarg));
break;
153 case 'n': number_of_images =
static_cast<size_t>(atoi(
optarg));
break;
154 case 'd': save_depth =
true;
break;
155 case 'l': save_left_rect =
true;
break;
156 case 'c': save_color =
true;
break;
157 default:
usage(*argv);
break;
164 std::cerr <<
"Failed to create channel" << std::endl;;
171 auto info = channel->get_info();
173 std::cout <<
"Firmware build date : " << info.version.firmware_build_date << std::endl;
174 std::cout <<
"Firmware version : " << info.version.firmware_version.to_string() << std::endl;
175 std::cout <<
"Hardware version : 0x" << std::hex << info.version.hardware_version << std::endl;
176 std::cout << std::dec;
181 auto config = channel->get_config();
182 config.frames_per_second = 9.0;
183 if (
const auto status = channel->set_config(config); status != lms::Status::OK)
185 std::cerr <<
"Cannot set config: " <<
lms::to_string(status) << std::endl;
189 std::vector<lms::DataSource> image_streams{};
190 if (save_depth) image_streams.push_back(lms::DataSource::LEFT_DISPARITY_RAW);
191 if (save_left_rect) image_streams.push_back(lms::DataSource::LEFT_RECTIFIED_RAW);
192 if (save_color) image_streams.push_back(lms::DataSource::AUX_RAW);
194 if (image_streams.empty())
196 std::cerr <<
"No image streams requested" << std::endl;
203 if (
const auto status = channel->start_streams(image_streams); status != lms::Status::OK)
205 std::cerr <<
"Cannot start streams: " <<
lms::to_string(status) << std::endl;
212 size_t saved_images = 0;
216 if (saved_images < number_of_images)
218 if (
const auto image_frame = channel->get_next_image_frame(); image_frame)
220 for (
const auto &stream : image_streams)
229 if (
const auto status = channel->get_system_status(); status)
231 if (status->time) std::cout <<
"Camera Time(ns): " << status->time->camera_time.count() <<
", ";
232 std::cout <<
"System Ok: " << status->system_ok <<
", ";
233 if (status->temperature) std::cout <<
"FPGA Temp (C): " << status->temperature->fpga_temperature <<
", ";
234 if (status->temperature) std::cout <<
"Left Imager Temp (C): " << status->temperature->left_imager_temperature <<
", ";
235 if (status->temperature) std::cout <<
"Right Imager Temp (C): " << status->temperature->right_imager_temperature <<
", ";
236 if (status->power) std::cout <<
"Input Voltage (V): " << status->power->input_voltage <<
", ";
237 if (status->power) std::cout <<
"Input Current (A): " << status->power->input_current <<
", ";
238 if (status->power) std::cout <<
"FPGA Power (W): " << status->power->fpga_power <<
" , ";
239 std::cout <<
"Received Messages: " << status->client_network.received_messages <<
" , ";
240 std::cout <<
"Dropped Messages: " << status->client_network.dropped_messages << std::endl;
244 std::cerr <<
"Failed to query sensor status" << std::endl;
247 std::this_thread::sleep_for(1s);
250 channel->stop_streams({lms::DataSource::ALL});