gui: add SLAM Stereo option to calibrate gui

This commit is contained in:
Moses Turner 2022-01-03 16:16:51 -06:00 committed by Jakob Bornecrantz
parent 17034f0283
commit 683dc4ea56
5 changed files with 50 additions and 7 deletions

View file

@ -427,6 +427,7 @@ u_config_json_save_calibration(struct u_config_json *json, struct xrt_settings_t
switch (settings->camera_type) {
case XRT_SETTINGS_CAMERA_TYPE_REGULAR_MONO: cJSON_AddStringToObject(t, "camera_type", "regular_mono"); break;
case XRT_SETTINGS_CAMERA_TYPE_REGULAR_SBS: cJSON_AddStringToObject(t, "camera_type", "regular_sbs"); break;
case XRT_SETTINGS_CAMERA_TYPE_SLAM: cJSON_AddStringToObject(t, "camera_type", "slam_sbs"); break;
case XRT_SETTINGS_CAMERA_TYPE_PS4: cJSON_AddStringToObject(t, "camera_type", "ps4"); break;
case XRT_SETTINGS_CAMERA_TYPE_LEAP_MOTION: cJSON_AddStringToObject(t, "camera_type", "leap_motion"); break;
}

View file

@ -32,8 +32,9 @@ enum xrt_settings_camera_type
{
XRT_SETTINGS_CAMERA_TYPE_REGULAR_MONO = 0,
XRT_SETTINGS_CAMERA_TYPE_REGULAR_SBS = 1, // side-by-side
XRT_SETTINGS_CAMERA_TYPE_PS4 = 2,
XRT_SETTINGS_CAMERA_TYPE_LEAP_MOTION = 3,
XRT_SETTINGS_CAMERA_TYPE_SLAM = 2,
XRT_SETTINGS_CAMERA_TYPE_PS4 = 3,
XRT_SETTINGS_CAMERA_TYPE_LEAP_MOTION = 4,
};
#define XRT_SETTINGS_CAMERA_NAME_LENGTH 256

View file

@ -232,7 +232,7 @@ scene_render_select(struct gui_scene *scene, struct gui_program *p)
igBegin("Params", NULL, 0);
igComboStr("Type", (int *)&cs->settings->camera_type,
"Regular Mono\0Regular Stereo (Side-by-Side)\0PS4\0Leap Motion Controller\0\0", -1);
"Regular Mono\0Regular Stereo (Side-by-Side)\0SLAM Stereo\0PS4\0Leap Motion Controller\0\0", -1);
switch (cs->settings->camera_type) {
case XRT_SETTINGS_CAMERA_TYPE_REGULAR_MONO:
@ -243,6 +243,10 @@ scene_render_select(struct gui_scene *scene, struct gui_program *p)
igCheckbox("Fisheye Camera", &cs->params.use_fisheye);
cs->params.stereo_sbs = true;
break;
case XRT_SETTINGS_CAMERA_TYPE_SLAM:
igCheckbox("Fisheye Camera", &cs->params.use_fisheye);
cs->params.stereo_sbs = true;
break;
case XRT_SETTINGS_CAMERA_TYPE_PS4:
cs->params.use_fisheye = false;
cs->params.stereo_sbs = true;
@ -337,7 +341,17 @@ scene_render_select(struct gui_scene *scene, struct gui_program *p)
u_sink_quirk_create(cs->xfctx, cali, &qp, &cali);
// Now that we have setup a node graph, start it.
xrt_fs_stream_start(cs->xfs, cali, XRT_FS_CAPTURE_TYPE_CALIBRATION, cs->settings->camera_mode);
if (cs->settings->camera_type == XRT_SETTINGS_CAMERA_TYPE_SLAM) {
struct xrt_frame_sink *tmp = cali;
struct xrt_slam_sinks sinks;
u_sink_combiner_create(cs->xfctx, tmp, &sinks.left, &sinks.right);
xrt_fs_slam_stream_start(cs->xfs, &sinks);
} else {
xrt_fs_stream_start(cs->xfs, cali, XRT_FS_CAPTURE_TYPE_CALIBRATION, cs->settings->camera_mode);
}
#else
gui_scene_delete_me(p, &cs->base);
#endif
@ -426,6 +440,7 @@ gui_scene_calibrate(struct gui_program *p,
cs->params.stereo_sbs = true;
cs->settings->camera_type = XRT_SETTINGS_CAMERA_TYPE_REGULAR_SBS;
}
#endif
gui_scene_push_front(p, &cs->base);
}

View file

@ -52,7 +52,7 @@ static ImVec2 button_dims = {256 + 64, 0};
#ifdef XRT_BUILD_DRIVER_DEPTHAI
static void
create_depthai(struct video_select *vs)
create_depthai_monocular(struct video_select *vs)
{
vs->xfctx = U_TYPED_CALLOC(struct xrt_frame_context);
@ -64,6 +64,24 @@ create_depthai(struct video_select *vs)
return;
}
xrt_fs_enumerate_modes(vs->xfs, &vs->modes, &vs->num_modes);
}
static void
create_depthai_stereo(struct video_select *vs)
{
vs->xfctx = U_TYPED_CALLOC(struct xrt_frame_context);
vs->xfs = depthai_fs_stereo_grayscale(vs->xfctx);
if (vs->xfs == NULL) {
U_LOG_E("Failed to open DepthAI camera!");
free(vs->xfctx);
vs->xfctx = NULL;
return;
}
vs->settings->camera_type = XRT_SETTINGS_CAMERA_TYPE_SLAM;
xrt_fs_enumerate_modes(vs->xfs, &vs->modes, &vs->num_modes);
}
#endif /* XRT_BUILD_DRIVER_DEPTHAI */
@ -128,8 +146,11 @@ scene_render(struct gui_scene *scene, struct gui_program *p)
#ifdef XRT_BUILD_DRIVER_DEPTHAI
igSeparator();
if (igButton("DepthAI", button_dims)) {
create_depthai(vs);
if (igButton("DepthAI (Monocular)", button_dims)) {
create_depthai_monocular(vs);
}
if (igButton("DepthAI (Stereo)", button_dims)) {
create_depthai_stereo(vs);
}
#endif
} else if (vs->num_modes == 0) {

View file

@ -214,6 +214,11 @@ p_factory_ensure_frameserver(struct p_factory *fact)
qp.ps4_cam = false;
qp.leap_motion = false;
break;
case XRT_SETTINGS_CAMERA_TYPE_SLAM:
qp.stereo_sbs = true;
qp.ps4_cam = false;
qp.leap_motion = false;
break;
case XRT_SETTINGS_CAMERA_TYPE_PS4:
qp.stereo_sbs = true;
qp.ps4_cam = true;