6 #include "../src/ds5/ds5-private.h" 12 : dev(dev), _not_model(not_model)
72 #define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8)) 75 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
76 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
77 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
78 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
79 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
80 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
81 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
82 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
83 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
84 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
85 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
86 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
87 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
88 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
89 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
90 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
91 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
92 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
93 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
94 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
95 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
96 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
97 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
98 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
99 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
100 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
101 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
102 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
103 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
104 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
105 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
106 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
107 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
108 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
109 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
110 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
111 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
112 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
113 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
114 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
115 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
116 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
117 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
124 for (; bufsize; --bufsize, ++
buf)
125 oldcrc32 =
UPDC32(*buf, oldcrc32);
132 const auto window_name =
"Calibration Window";
142 catch(std::exception
e)
144 error_message = e.what();
151 bool changed =
false;
155 const float x0 = std::max(window.
width() -
w, 0.f) / 2;
156 const float y0 = std::max(window.
height() -
h, 0.f) / 2;
173 std::string title_message =
"CAMERA CALIBRATION";
192 table->baseline = cf.
get(
"baseline");
195 m.x.x = cf.
get(std::string(
to_string() << name <<
".x.x").c_str());
196 m.x.y = cf.
get(std::string(
to_string() << name <<
".x.y").c_str());
197 m.x.z = cf.
get(std::string(
to_string() << name <<
".x.z").c_str());
199 m.y.x = cf.
get(std::string(
to_string() << name <<
".y.x").c_str());
200 m.y.y = cf.
get(std::string(
to_string() << name <<
".y.y").c_str());
201 m.y.z = cf.
get(std::string(
to_string() << name <<
".y.z").c_str());
203 m.z.x = cf.
get(std::string(
to_string() << name <<
".z.x").c_str());
204 m.z.y = cf.
get(std::string(
to_string() << name <<
".z.y").c_str());
205 m.z.z = cf.
get(std::string(
to_string() << name <<
".z.z").c_str());
208 load_float3x4(
"intrinsic_left",
table->intrinsic_left);
209 load_float3x4(
"intrinsic_right",
table->intrinsic_right);
210 load_float3x4(
"world2left_rot",
table->world2left_rot);
211 load_float3x4(
"world2right_rot",
table->world2right_rot);
215 table->rect_params[
i].x = cf.
get(std::string(
to_string() <<
"rectified." <<
i <<
".fx").c_str());
216 table->rect_params[
i].y = cf.
get(std::string(
to_string() <<
"rectified." <<
i <<
".fy").c_str());
218 table->rect_params[
i].z = cf.
get(std::string(
to_string() <<
"rectified." <<
i <<
".ppx").c_str());
219 table->rect_params[
i].w = cf.
get(std::string(
to_string() <<
"rectified." <<
i <<
".ppy").c_str());
225 catch (
const std::exception& ex)
227 error_message = ex.what();
244 cf.
set(
"baseline",
table->baseline);
247 cf.
set(std::string(
to_string() << name <<
".x.x").c_str(),
m.x.x);
248 cf.
set(std::string(
to_string() << name <<
".x.y").c_str(),
m.x.y);
249 cf.
set(std::string(
to_string() << name <<
".x.z").c_str(),
m.x.z);
251 cf.
set(std::string(
to_string() << name <<
".y.x").c_str(),
m.y.x);
252 cf.
set(std::string(
to_string() << name <<
".y.y").c_str(),
m.y.y);
253 cf.
set(std::string(
to_string() << name <<
".y.z").c_str(),
m.y.z);
255 cf.
set(std::string(
to_string() << name <<
".z.x").c_str(),
m.z.x);
256 cf.
set(std::string(
to_string() << name <<
".z.y").c_str(),
m.z.y);
257 cf.
set(std::string(
to_string() << name <<
".z.z").c_str(),
m.z.z);
260 save_float3x4(
"intrinsic_left",
table->intrinsic_left);
261 save_float3x4(
"intrinsic_right",
table->intrinsic_right);
262 save_float3x4(
"world2left_rot",
table->world2left_rot);
263 save_float3x4(
"world2right_rot",
table->world2right_rot);
268 int w = xy.x;
int h = xy.y;
270 cf.
set(std::string(
to_string() <<
"rectified." <<
i <<
".width").c_str(), w);
271 cf.
set(std::string(
to_string() <<
"rectified." <<
i <<
".height").c_str(), h);
273 cf.
set(std::string(
to_string() <<
"rectified." <<
i <<
".fx").c_str(),
table->rect_params[
i].x);
274 cf.
set(std::string(
to_string() <<
"rectified." <<
i <<
".fy").c_str(),
table->rect_params[
i].y);
276 cf.
set(std::string(
to_string() <<
"rectified." <<
i <<
".ppx").c_str(),
table->rect_params[
i].z);
277 cf.
set(std::string(
to_string() <<
"rectified." <<
i <<
".ppy").c_str(),
table->rect_params[
i].w);
281 catch (
const std::exception& ex)
283 error_message = ex.what();
306 nm->add_notification({
to_string() <<
"Depth Calibration is reset to Factory Settings",
310 catch(
const std::exception& ex)
312 error_message = ex.what();
330 ImGui::SetTooltip(
"%s",
"Write selected calibration table to the device. For advanced users");
347 draw_float(
"Baseline",
table->baseline, orig_table->baseline, changed);
351 draw_float4x4(
"Left Intrinsics",
table->intrinsic_left, orig_table->intrinsic_left, changed);
352 draw_float4x4(
"Right Intrinsics",
table->intrinsic_right, orig_table->intrinsic_right, changed);
353 draw_float4x4(
"World to Left Rotation",
table->world2left_rot, orig_table->world2left_rot, changed);
354 draw_float4x4(
"World to Right Rotation",
table->world2right_rot, orig_table->world2right_rot, changed);
362 std::vector<std::string> resolution_names;
363 std::vector<const char*> resolution_names_char;
364 std::vector<int> resolution_offset;
368 int w = xy.x;
int h = xy.y;
370 resolution_offset.push_back(
i);
372 resolution_names.push_back(name);
375 for (
size_t i = 0;
i < resolution_offset.size();
i++)
377 resolution_names_char.push_back(resolution_names[
i].c_str());
417 ImGui::SetTooltip(
"%s",
"Changing calibration will affect depth quality. Changes are persistent.\nThere is an option to get back to factory calibration, but it maybe worse than current calibration\nBefore writing to flash, we strongly recommend to make a file backup");
443 table->header.crc32 = crc;
449 catch (
const std::exception& ex)
451 error_message = ex.what();
469 ImGui::SetTooltip(
"%s",
"Write selected calibration table to the device. For advanced users");
481 catch (
const std::exception&)
489 catch (
const std::exception& ex)
491 error_message = ex.what();
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val)
std::vector< uint8_t > _calibration
static const ImVec4 white
def get_calibration_table(d435_imu_calib_table)
IMGUI_API void SetTooltip(const char *fmt,...) IM_PRINTFARGS(1)
GLuint const GLchar * name
std::vector< sensor > query_sensors() const
const char * get_info(rs2_camera_info info) const
static const uint32_t crc_32_tab[]
static const ImVec4 light_grey
static config_file & instance()
uint32_t calc_crc32(const uint8_t *buf, size_t bufsize)
Calculate CRC code for arbitrary characters buffer.
IMGUI_API void SetNextWindowPos(const ImVec2 &pos, ImGuiSetCond cond=0)
IMGUI_API bool BeginChild(const char *str_id, const ImVec2 &size=ImVec2(0, 0), bool border=false, ImGuiWindowFlags extra_flags=0)
GLdouble GLdouble GLdouble w
static std::map< ds5_rect_resolutions, int2 > resolutions_list
ImFont * get_large_font() const
void draw_float4x4(std::string name, librealsense::float3x3 &feild, const librealsense::float3x3 &original, bool &changed)
IMGUI_API bool IsWindowHovered()
void draw_float(std::string name, float &x, const float &orig, bool &changed)
GLenum GLuint GLenum GLsizei const GLchar * buf
IMGUI_API void SameLine(float pos_x=0.0f, float spacing_w=-1.0f)
std::string get(const char *key, const char *def) const
IMGUI_API void PopStyleVar(int count=1)
IMGUI_API ImVec2 CalcTextSize(const char *text, const char *text_end=NULL, bool hide_text_after_double_hash=false, float wrap_width=-1.0f)
static const ImVec4 regular_blue
IMGUI_API void SetNextWindowSize(const ImVec2 &size, ImGuiSetCond cond=0)
static const ImVec4 sensor_bg
IMGUI_API void SetCursorPosX(float x)
calibration_model(rs2::device dev, std::shared_ptr< notifications_model > not_model)
IMGUI_API void PushItemWidth(float item_width)
IMGUI_API void Text(const char *fmt,...) IM_PRINTFARGS(1)
IMGUI_API bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
const char * file_dialog_open(file_dialog_mode flags, const char *filters, const char *default_path, const char *default_name)
IMGUI_API bool DragFloat(const char *label, float *v, float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *display_format="%.3f", float power=1.0f)
IMGUI_API void EndPopup()
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4 &col)
static const ImVec4 black
IMGUI_API bool Combo(const char *label, int *current_item, const char **items, int items_count, int height_in_items=-1, bool show_arrow_down=true)
IMGUI_API void PushFont(ImFont *font)
IMGUI_API void EndChild()
std::vector< uint8_t > _original
void set(const char *key, const char *value)
std::weak_ptr< notifications_model > _not_model
IMGUI_API void PopItemWidth()
bool supports(rs2_camera_info info) const
static const char * enable_writing
void set_hovered_over_input()
GLenum GLenum GLsizei void * table
IMGUI_API bool BeginPopupModal(const char *name, bool *p_open=NULL, ImGuiWindowFlags extra_flags=0)
IMGUI_API bool Checkbox(const char *label, bool *v)
IMGUI_API void SetCursorScreenPos(const ImVec2 &pos)
void update(ux_window &window, std::string &error_message)
T get_or_default(const char *key, T def) const
IMGUI_API void CloseCurrentPopup()
IMGUI_API void OpenPopup(const char *str_id)
IMGUI_API void SetCursorPosY(float y)
#define UPDC32(octet, crc)
static const ImVec4 dark_sensor_bg
IMGUI_API float GetCursorPosY()
IMGUI_API bool IsItemHovered()
IMGUI_API void PopStyleColor(int count=1)
std::string to_string(T value)