From d9899227c234a18c4c491552440880709d4d2f69 Mon Sep 17 00:00:00 2001 From: g-spacewhale Date: Fri, 24 May 2019 15:00:18 +0200 Subject: [PATCH] added scaling changes to dI/dh for pixel size --- GPATH | Bin 0 -> 16384 bytes GRTAGS | Bin 0 -> 32768 bytes GSYMS | Bin 0 -> 131072 bytes GTAGS | Bin 0 -> 32768 bytes include/msckf_vio/feature.hpp | 39 +++++++++++++++++++++++ launch/msckf_vio_tum.launch | 6 ++-- src/msckf_vio.cpp | 56 ++++++++++++++++++++++------------ 7 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 GPATH create mode 100644 GRTAGS create mode 100644 GSYMS create mode 100644 GTAGS diff --git a/GPATH b/GPATH new file mode 100644 index 0000000000000000000000000000000000000000..de480554594697feb169435fc2d511232be50b29 GIT binary patch literal 16384 zcmeHNJ#5=X6uzbn&_SpyOO|BIw$xVX4;oXU$fOC7rAQSZXp$PSQKUcsmZ4~ijYtY2 zWjKL{3>h+H?9eeo#ta!UX2{SnqlXL`GiKeqG+pQffGQR=6&yb@4mb5 z?kM=SdXjz2;M2e#{L>iU$lp={sen{KDj*e*3P=T{0#X5~fK)&#AQg}bNCl(=kP7@S6!=J}@&w$!X1RPW|E9j3f0}<#-z>kZKQ5LQ z9xhxhyjys@e82iv<+sZDF)UszzFB;QUR%eR6r^q6_5%@1*8H}0jYpgAfZ4G z{^I`&Zy3t;&du$gI=?dg0zLZzk@|V2w3NNT^1F7+GOWSC7!3V^Jq#T?P<{`5kNE&= zz;zO?W5K|Oc+9zic>Q}JB(THK@pc8?DnO=qlOTv6^J&C)4)`qJ+i`YVmg!nO)A2SO zcLetv_Gsu^8=i0PheO8;94k=nnr6`QOPr$ks@h?#QZQvi6)*W-#R`zKS zK8tG=8}xP*SE4u-;)0>oas%tmjw0;ap<+nJC_IA+ymly>8zg z5(l;m9BBZ=Vmp1&qFtD-!|=c&eLEyB#0XrIViO?XKn(dnL!V*4cv|q7We0)JE8`e} zZx#p`cuw-IhQ6A?mneWS#Afp*z`)3{G=3WT4EaZ)(+{Z6_*~$M8vu*X8*nj={Nb8+ z?AB$+>u!yl(B2xD!@yQ7dnKG5FhC}SAf>$_!{LwzfhQKhCPD@Mc_t^$UO_B!QzORW#U8sxWR5~dkE%*#rlf3 z<16rhWMdV;L>kWoX=gYN`DonQ=p%$)GF^LUUbD>r#BgmdoRFfI1kTw&;2Dow9qVkP zpOE)5mv;v7T9P*d2t?8PPV>HvzPftlQs??sM+x^sXcX2hu>p{LettvspkEx%>W^R_ zoh%3O-Nb4=hWKbq<_l;G{%WJYjtEnFo2Rqur~NqX}+o95oRTi%gm7-2$=+ZRP<#! zFC5Q|AT&e!xcMmpfeY(tz{OPbWttaGe)I8)K;Vjb(YJ%Z9(8>>0>`%oxfnbytp9PV z5EB7aJSZaXcT_L>bT&L8C9JRz#=eD^Xbqe*NTmZK<||M>^lx-R38DiRJkQ6xiAI%g zgH-S56py~_nPG?$d}DrE=T-D+#Ge>Qe`q8Eed>2I$B_ZR z?6VV47wLue%}9eMZr;Q-M!i0PYpw{sjZ&Tl#-LqOawP`@=YNuavcHK#NBbz&Pv;-B zYexOklj>B8e_AIog1--9o)%mT?VGBfpW+fPf`VWhseEyNvLop=kaVN>477KYcWA>a zt1u$v6n_FizMYIS+BQR{nLuQ&u9G3B8rV$xD6S$QCtJQ T&-kTtW9!P#*O_qNfW7)(V%EU{ literal 0 HcmV?d00001 diff --git a/GRTAGS b/GRTAGS new file mode 100644 index 0000000000000000000000000000000000000000..689414259375a076957e3fe64c5d2d8de58e59a4 GIT binary patch literal 32768 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%0A*hOF`d5rTk5^O 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 SVN8-P_Ko+clVyoz_WuP?r(n_m literal 0 HcmV?d00001 diff --git a/GTAGS b/GTAGS new file mode 100644 index 0000000000000000000000000000000000000000..d31c9ce87344d789e39f8fceed7d58d5d5c83a54 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/include/msckf_vio/feature.hpp b/include/msckf_vio/feature.hpp index ce090ae..fff17b8 100644 --- a/include/msckf_vio/feature.hpp +++ b/include/msckf_vio/feature.hpp @@ -148,6 +148,14 @@ struct Feature { inline bool initializePosition( const CamStateServer& cam_states); + cv::Point2f pixelDistanceAt( + const CAMState& cam_state, + const StateIDType& cam_state_id, + const CameraCalibration& cam, + Eigen::Vector3d& in_p) const; + + + /* * @brief project PositionToCamera Takes a 3d position in a world frame * and projects it into the passed camera frame using pinhole projection @@ -737,6 +745,37 @@ float Feature::PixelIrradiance(cv::Point2f pose, cv::Mat image) const return ((float)image.at(pose.y, pose.x))/255; } +cv::Point2f Feature::pixelDistanceAt( + const CAMState& cam_state, + const StateIDType& cam_state_id, + const CameraCalibration& cam, + Eigen::Vector3d& in_p) const +{ + + cv::Point2f cam_p = projectPositionToCamera(cam_state, cam_state_id, cam, in_p); + + // create vector of patch in pixel plane + std::vector surroundingPoints; + surroundingPoints.push_back(cv::Point2f(cam_p.x+1, cam_p.y)); + surroundingPoints.push_back(cv::Point2f(cam_p.x-1, cam_p.y)); + surroundingPoints.push_back(cv::Point2f(cam_p.x, cam_p.y+1)); + surroundingPoints.push_back(cv::Point2f(cam_p.x, cam_p.y-1)); + + std::vector pure; + image_handler::undistortPoints(surroundingPoints, + cam.intrinsics, + cam.distortion_model, + cam.distortion_coeffs, + pure); + + // returns the absolute pixel distance at pixels one metres away + cv::Point2f distance(fabs(pure[0].x - pure[1].x), fabs(pure[2].y - pure[3].y)); + + return distance; +} + + + cv::Point2f Feature::projectPositionToCamera( const CAMState& cam_state, const StateIDType& cam_state_id, diff --git a/launch/msckf_vio_tum.launch b/launch/msckf_vio_tum.launch index 9e103b7..1d458d2 100644 --- a/launch/msckf_vio_tum.launch +++ b/launch/msckf_vio_tum.launch @@ -18,13 +18,13 @@ output="screen"> - + - + - + diff --git a/src/msckf_vio.cpp b/src/msckf_vio.cpp index b233848..d56d1a9 100644 --- a/src/msckf_vio.cpp +++ b/src/msckf_vio.cpp @@ -1225,6 +1225,9 @@ void MsckfVio::PhotometricMeasurementJacobian( const CAMState& cam_state = state_server.cam_states[cam_state_id]; const Feature& feature = map_server[feature_id]; + const StateIDType anchor_state_id = feature.observations.begin()->first; + const CAMState anchor_state = state_server.cam_states[anchor_state_id]; + // Cam0 pose. Matrix3d R_w_c0 = quaternionToRotation(cam_state.orientation); const Vector3d& t_c0_w = cam_state.position; @@ -1263,7 +1266,7 @@ void MsckfVio::PhotometricMeasurementJacobian( Eigen::MatrixXd H_pA(N*N, 6); auto frame = cam0.moving_window.find(cam_state_id)->second.image; - + auto anchor_frame = cam0.moving_window.find(anchor_state_id)->second.image; //observation const Vector4d& z = feature.observations.find(cam_state_id)->second; @@ -1291,8 +1294,10 @@ void MsckfVio::PhotometricMeasurementJacobian( for (auto point : feature.anchorPatch_3d) { + //cout << "____feature-measurement_____\n" << endl; Eigen::Vector3d p_c0 = R_w_c0 * (point-t_c0_w); cv::Point2f p_in_c0 = feature.projectPositionToCamera(cam_state, cam_state_id, cam0, point); + cv::Point2f p_in_anchor = feature.projectPositionToCamera(anchor_state, anchor_state_id, cam0, point); //add observation photo_z.push_back(feature.PixelIrradiance(p_in_c0, frame)); @@ -1300,13 +1305,17 @@ void MsckfVio::PhotometricMeasurementJacobian( //calculate photom. residual photo_r.push_back(photo_z[count] - estimate_photo_z[count]); - // add jacobians + //cout << "residual: " << photo_r.back() << endl; + // add jacobians + cv::Point2f pixelDistance = feature.pixelDistanceAt(anchor_state, anchor_state_id, cam0, point); + + // calculate derivation for anchor frame, use position for derivation calculation // frame derivative calculated convoluting with kernel [-1, 0, 1] - dx = feature.PixelIrradiance(cv::Point2f(p_in_c0.x+1, p_in_c0.y), frame) - feature.PixelIrradiance(cv::Point2f(p_in_c0.x-1, p_in_c0.y), frame); - dy = feature.PixelIrradiance(cv::Point2f(p_in_c0.x, p_in_c0.y+1), frame) - feature.PixelIrradiance(cv::Point2f(p_in_c0.x, p_in_c0.y-1), frame); - dI_dhj(0, 0) = dx; - dI_dhj(0, 1) = dy; + dx = feature.PixelIrradiance(cv::Point2f(p_in_anchor.x+1, p_in_anchor.y), anchor_frame) - feature.PixelIrradiance(cv::Point2f(p_in_anchor.x-1, p_in_anchor.y), anchor_frame); + dy = feature.PixelIrradiance(cv::Point2f(p_in_anchor.x, p_in_anchor.y+1), anchor_frame) - feature.PixelIrradiance(cv::Point2f(p_in_anchor.x, p_in_anchor.y-1), anchor_frame); + dI_dhj(0, 0) = dx/pixelDistance.x; + dI_dhj(0, 1) = dy/pixelDistance.y; gradientVector.x += dx; gradientVector.y += dy; @@ -1332,8 +1341,9 @@ void MsckfVio::PhotometricMeasurementJacobian( dh_dXplj.block<2, 3>(0, 0) = dh_dCpij * dCpij_dCGtheta; dh_dXplj.block<2, 3>(0, 3) = dh_dCpij * dCpij_dGpC; - //d{}^Gp_P{ij} / \rho_i + // d{}^Gp_P{ij} / \rho_i double rho = feature.anchor_rho; + // Isometry T_anchor_w takes a vector in anchor frame to world frame dGpj_drhoj = -feature.T_anchor_w.linear() * Eigen::Vector3d(feature.anchorPatch_ideal[count].x/(rho*rho), feature.anchorPatch_ideal[count].y/(rho*rho), 1/(rho*rho)); @@ -1345,13 +1355,18 @@ void MsckfVio::PhotometricMeasurementJacobian( // Intermediate Jakobians H_rhoj = dI_dhj * dh_dGpij * dGpj_drhoj; // 1 x 1 - H_plj = dI_dhj * dh_dXplj; // 1 x 6 - H_pAj = dI_dhj * dh_dGpij * dGpj_XpAj; // 1 x 6 + H_plj = dI_dhj * dh_dXplj; // 1 x 6 + H_pAj = dI_dhj * dh_dGpij * dGpj_XpAj; // 1 x 6 H_rho.block<1, 1>(count, 0) = H_rhoj; H_pl.block<1, 6>(count, 0) = H_plj; H_pA.block<1, 6>(count, 0) = H_pAj; + //cout << "H_pl\n" << H_plj << endl; + + //cout << "H_pA\n" << H_pAj << endl; + + //cout << "H_rho\n" << H_rhoj << endl; count++; } @@ -1491,15 +1506,18 @@ void MsckfVio::PhotometricFeatureJacobian( MatrixXd A = svd_helper.matrixU().rightCols(jacobian_row_size - singularValues.size()); */ + H_x = A_null_space.transpose() * H_xi; r = A_null_space.transpose() * r_i; -/* - ofstream myfile; - myfile.open ("/home/raphael/dev/MSCKF_ws/log.txt"); - myfile << "Hx\n" << H_x << "r\n" << r << "from residual estimated error state: " << H_x. * r << endl; - myfile.close(); - cout << "---------- LOGGED -------- " << endl; -*/ + + if(PRINTIMAGES) + { + ofstream myfile; + myfile.open ("/home/raphael/dev/MSCKF_ws/log.txt"); + myfile << "Hx\n" << H_x << "r\n" << r << "from residual estimated error state: " << H_x.colPivHouseholderQr().solve(r) << endl; + myfile.close(); + cout << "---------- LOGGED -------- " << endl; + } if(PRINTIMAGES) { std::cout << "resume playback" << std::endl; @@ -1642,7 +1660,7 @@ void MsckfVio::featureJacobian( ofstream myfile; myfile.open ("/home/raphael/dev/MSCKF_ws/log.txt"); - myfile << "Hx\n" << H_x << "r\n" << r << "from residual estimated error state: " << H_x.ldlt().solve(r) << endl; + myfile << "Hx\n" << H_x << "r\n" << r << "from residual estimated error state: " << H_x.colPivHouseholderQr().solve(r) << endl; myfile.close(); cout << "---------- LOGGED -------- " << endl; return; @@ -1866,7 +1884,7 @@ void MsckfVio::removeLostFeatures() { else featureJacobian(feature.id, cam_state_ids, H_xj, r_j); - if (gatingTest(H_xj, r_j, cam_state_ids.size()-1)) { + if (gatingTest(H_xj, r_j, r_j.size())) { //, cam_state_ids.size()-1)) { H_x.block(stack_cntr, 0, H_xj.rows(), H_xj.cols()) = H_xj; r.segment(stack_cntr, r_j.rows()) = r_j; stack_cntr += H_xj.rows(); @@ -2028,7 +2046,7 @@ void MsckfVio::pruneCamStateBuffer() { else featureJacobian(feature.id, involved_cam_state_ids, H_xj, r_j); - if (gatingTest(H_xj, r_j, involved_cam_state_ids.size())) { + if (gatingTest(H_xj, r_j, r_j.size())) {// involved_cam_state_ids.size())) { H_x.block(stack_cntr, 0, H_xj.rows(), H_xj.cols()) = H_xj; r.segment(stack_cntr, r_j.rows()) = r_j; stack_cntr += H_xj.rows();