LibMultiSense
LibMultiSense Documentation
Loading...
Searching...
No Matches
MultiSenseSerialization.hh
Go to the documentation of this file.
1
37#pragma once
38
39#include <nlohmann/json.hpp>
40
41#include "MultiSenseChannel.hh"
42#include "MultiSenseTypes.hh"
43
44namespace nlohmann
45{
46 template <>
47 struct adl_serializer<std::chrono::microseconds>
48 {
49 static void to_json(json& j, const std::chrono::microseconds &d)
50 {
51 j = d.count();
52 }
53
54 static void from_json(const json& j, std::chrono::microseconds &d)
55 {
56 d = std::chrono::microseconds(j.get<std::chrono::microseconds::rep>());
57 }
58 };
59
60 template <>
61 struct adl_serializer<std::chrono::milliseconds>
62 {
63 static void to_json(json& j, const std::chrono::milliseconds &d)
64 {
65 j = d.count();
66 }
67
68 static void from_json(const json& j, std::chrono::milliseconds &d)
69 {
70 d = std::chrono::milliseconds(j.get<std::chrono::milliseconds::rep>());
71 }
72 };
73
74 template <>
75 struct adl_serializer<std::chrono::nanoseconds>
76 {
77 static void to_json(json& j, const std::chrono::nanoseconds &d)
78 {
79 j = d.count();
80 }
81
82 static void from_json(const json& j, std::chrono::nanoseconds &d)
83 {
84 d = std::chrono::nanoseconds(j.get<std::chrono::nanoseconds::rep>());
85 }
86 };
87
91 template <typename T>
92 struct adl_serializer<std::optional<T>>
93 {
94 static void to_json(json& j, const std::optional<T> &opt)
95 {
96 if (opt.has_value())
97 {
98 j = *opt;
99 }
100 else
101 {
102 j = nullptr;
103 }
104 }
105
106 static void from_json(const json& j, std::optional<T> &opt)
107 {
108 if (j.is_null())
109 {
110 opt = std::nullopt;
111 }
112 else
113 {
114 T v{};
115 j.get_to(v);
116 opt = std::move(v);
117 }
118 }
119 };
120
121}
122
123namespace multisense
124{
125
127 {Status::UNKNOWN, "UNKNOWN"},
128 {Status::OK, "OK"},
129 {Status::TIMEOUT, "TIMEOUT"},
130 {Status::INTERNAL_ERROR, "INTERNAL_ERROR"},
131 {Status::FAILED, "FAILED"},
132 {Status::UNSUPPORTED, "UNSUPPORTED"},
133 {Status::EXCEPTION, "EXCEPTION"},
134 {Status::UNINITIALIZED, "UNINITIALIZED"},
135 {Status::INCOMPLETE_APPLICATION, "INCOMPLETE_APPLICATION"}
136})
137
139 {DataSource::UNKNOWN, "UNKNOWN"},
140 {DataSource::ALL, "ALL"},
141 {DataSource::LEFT_MONO_RAW, "LEFT_MONO_RAW"},
142 {DataSource::RIGHT_MONO_RAW, "RIGHT_MONO_RAW"},
143 {DataSource::LEFT_MONO_COMPRESSED, "LEFT_MONO_COMPRESSED"},
144 {DataSource::RIGHT_MONO_COMPRESSED, "RIGHT_MONO_COMPRESSED"},
145 {DataSource::LEFT_RECTIFIED_RAW, "LEFT_RECTIFIED_RAW"},
146 {DataSource::RIGHT_RECTIFIED_RAW, "RIGHT_RECTIFIED_RAW"},
147 {DataSource::LEFT_RECTIFIED_COMPRESSED, "LEFT_RECTIFIED_COMPRESSED"},
148 {DataSource::RIGHT_RECTIFIED_COMPRESSED, "RIGHT_RECTIFIED_COMPRESSED"},
149 {DataSource::LEFT_DISPARITY_RAW, "LEFT_DISPARITY_RAW"},
150 {DataSource::LEFT_DISPARITY_COMPRESSED, "LEFT_DISPARITY_COMPRESSED"},
151 {DataSource::AUX_COMPRESSED, "AUX_COMPRESSED"},
152 {DataSource::AUX_RECTIFIED_COMPRESSED, "AUX_RECTIFIED_COMPRESSED"},
153 {DataSource::AUX_LUMA_RAW, "AUX_LUMA_RAW"},
154 {DataSource::AUX_LUMA_RECTIFIED_RAW, "AUX_LUMA_RECTIFIED_RAW"},
155 {DataSource::AUX_CHROMA_RAW, "AUX_CHROMA_RAW"},
156 {DataSource::AUX_CHROMA_RECTIFIED_RAW, "AUX_CHROMA_RECTIFIED_RAW"},
157 {DataSource::AUX_RAW, "AUX_RAW"},
158 {DataSource::AUX_RECTIFIED_RAW, "AUX_RECTIFIED_RAW"},
159 {DataSource::COST_RAW, "COST_RAW"},
160 {DataSource::IMU, "IMU"}
161})
162
167})
168
173})
174
179})
180
193})
194
205})
206
214})
215
220})
221
224})
225
226NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(CameraCalibration,
227 K,
228 R,
229 P,
230 distortion_type,
231 D)
232
233NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(StereoCalibration,
234 left,
235 right,
236 aux)
237
238NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::StereoConfig,
239 postfilter_strength)
240
241NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::ManualExposureConfig,
242 gain,
243 exposure_time)
244
245NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::AutoExposureRoiConfig,
246 top_left_x_position,
247 top_left_y_position,
248 width,
249 height)
250
251NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::AutoExposureConfig,
252 max_exposure_time,
253 decay,
254 target_intensity,
255 target_threshold,
256 max_gain,
257 roi)
258
259NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::ManualWhiteBalanceConfig,
260 red,
261 blue)
262
263NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::AutoWhiteBalanceConfig,
264 decay,
265 threshold)
266
267NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::ImageConfig,
268 gamma,
269 auto_exposure_enabled,
270 manual_exposure,
271 auto_exposure,
272 auto_white_balance_enabled,
273 manual_white_balance,
274 auto_white_balance)
275
276NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::AuxConfig,
277 image_config,
278 sharpening_enabled,
279 sharpening_percentage,
280 sharpening_limit)
281
282NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::TimeConfig,
283 ptp_enabled)
284
285NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::NetworkTransmissionConfig,
286 packet_delay_enabled)
287
288NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ImuRate,
289 sample_rate,
290 bandwith_cutoff)
291
292NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(ImuRange,
293 range,
294 resolution)
295
296NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::ImuConfig::OperatingMode,
297 enabled,
298 rate,
299 range)
300
301NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::LightingConfig::InternalConfig,
302 intensity,
303 flash)
304
305NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::LightingConfig::ExternalConfig,
306 intensity,
307 flash,
308 pulses_per_exposure,
309 startup_time)
310
311NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::LightingConfig,
312 internal,
313 external)
314
315NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig::ImuConfig,
316 samples_per_frame,
317 accelerometer,
318 gyroscope,
319 magnetometer)
320
321NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseConfig,
322 width,
323 height,
324 disparities,
325 frames_per_second,
326 stereo_config,
327 image_config,
328 aux_config,
329 time_config,
330 network_config,
331 imu_config,
332 lighting_config)
333
334NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus::PtpStatus,
335 grandmaster_present,
336 grandmaster_id,
337 grandmaster_offset,
338 path_delay,
339 steps_from_local_to_grandmaster)
340
341NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus::CameraStatus,
342 cameras_ok,
343 processing_pipeline_ok)
344
345NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus::TemperatureStatus,
346 cpu_temperature,
347 fpga_temperature,
348 left_imager_temperature,
349 right_imager_temperature)
350
351NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus::PowerStatus,
352 input_voltage,
353 input_current,
354 fpga_power)
355
356NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus::ClientNetworkStatus,
357 received_messages,
358 dropped_messages,
359 invalid_packets)
360
361NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus::TimeStatus,
362 camera_time,
363 client_host_time,
364 network_delay)
365
366NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseStatus,
367 system_ok,
368 ptp,
369 camera,
370 temperature,
371 power,
372 client_network,
373 time)
374
375NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::NetworkInfo,
376 ip_address,
377 gateway,
378 netmask)
379
380NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::DeviceInfo::PcbInfo,
381 name,
382 revision)
383
384NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::DeviceInfo,
385 camera_name,
386 build_date,
387 serial_number,
388 hardware_revision,
389 pcb_info,
390 imager_name,
391 imager_type,
392 imager_width,
393 imager_height,
394 lens_name,
395 lens_type,
396 nominal_stereo_baseline,
397 nominal_focal_length,
398 nominal_relative_aperture,
399 lighting_type,
400 number_of_lights)
401
402NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::Version,
403 major,
404 minor,
405 patch)
406
407NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::SensorVersion,
408 firmware_build_date,
409 firmware_version,
410 hardware_version)
411
412NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::SupportedOperatingMode,
413 width,
414 height,
415 disparities,
416 supported_sources)
417
418NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::ImuInfo::Source,
419 name,
420 device,
421 rates,
422 ranges)
423
424NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo::ImuInfo,
425 accelerometer,
426 gyroscope,
427 magnetometer)
428
429NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(MultiSenseInfo,
430 device,
431 version,
432 operating_modes,
433 imu,
434 network)
435
436NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Channel::ReceiveBufferConfig,
437 num_small_buffers,
438 small_buffer_size,
439 num_large_buffers,
440 large_buffer_size)
441
442NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Channel::Config,
443 ip_address,
444 mtu,
445 receive_timeout,
446 command_port,
447 interface,
448 receive_buffer_configuration)
449
450}
Copyright 2013-2025 Carnegie Robotics, LLC 4501 Hatfield Street, Pittsburgh, PA 15201 http://www....
Copyright 2013-2025 Carnegie Robotics, LLC 4501 Hatfield Street, Pittsburgh, PA 15201 http://www....
ChannelImplementation
Identifiers for the different Channel implementations.
@ LEGACY
Use the Legacy MultiSense wire protocol implemented as part of LibMultiSense.
DataSource
Identifies which camera or data source the image is from.
NLOHMANN_JSON_SERIALIZE_ENUM(Status, { {Status::UNKNOWN, "UNKNOWN"}, {Status::OK, "OK"}, {Status::TIMEOUT, "TIMEOUT"}, {Status::INTERNAL_ERROR, "INTERNAL_ERROR"}, {Status::FAILED, "FAILED"}, {Status::UNSUPPORTED, "UNSUPPORTED"}, {Status::EXCEPTION, "EXCEPTION"}, {Status::UNINITIALIZED, "UNINITIALIZED"}, {Status::INCOMPLETE_APPLICATION, "INCOMPLETE_APPLICATION"} }) NLOHMANN_JSON_SERIALIZE_ENUM(DataSource
MaxDisparities
Predefined disparity pixel search windows.
HardwareRevision
MultiSense Hardware revisions.
@ OUTPUT_TRIGGER
A GPIO line is used to trigger an external light.
@ PATTERN_PROJECTOR_OUTPUT_TRIGGER
A pattern projector with a GPIO line used to trigger a external light.
@ EXTERNAL
Drive lights via an external output.
static void from_json(const json &j, std::chrono::microseconds &d)
static void to_json(json &j, const std::chrono::microseconds &d)
static void to_json(json &j, const std::chrono::milliseconds &d)
static void from_json(const json &j, std::chrono::milliseconds &d)
static void from_json(const json &j, std::chrono::nanoseconds &d)
static void to_json(json &j, const std::chrono::nanoseconds &d)
static void to_json(json &j, const std::optional< T > &opt)
static void from_json(const json &j, std::optional< T > &opt)