add landmark type
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<launch>
|
<launch>
|
||||||
|
|
||||||
<!-- node pkg="vio" type="vio" name="vio" clear_params="true" output="screen" / -->
|
<node pkg="vio" type="vio" name="vio" clear_params="true" output="screen" />
|
||||||
|
|
||||||
<!-- Camera topic to subscribe to -->
|
<!-- Camera topic to subscribe to -->
|
||||||
<param name="vio/cam_topic" value="/CoreNode/grey_img" type="str" />
|
<param name="vio/cam_topic" value="/CoreNode/grey_img" type="str" />
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ vio:
|
|||||||
ACC_ekf: 0.2 #acc white noise in continuous in EKF
|
ACC_ekf: 0.2 #acc white noise in continuous in EKF
|
||||||
GYO_ekf: 0.5 #gyro white noise in continuous in EKF
|
GYO_ekf: 0.5 #gyro white noise in continuous in EKF
|
||||||
VO_ekf_translation: 1.0 #VO noise in EKF
|
VO_ekf_translation: 1.0 #VO noise in EKF
|
||||||
VO_ekf_orientation: 0.1 #VO noise in EKF
|
VO_ekf_orientation: 0.5 #VO noise in EKF
|
||||||
CMD_ekf_translation: 0.1 #control vector noise in EKF
|
CMD_ekf_translation: 0.1 #control vector noise in EKF
|
||||||
CMD_ekf_orientation: 0.01 #control vector noise in EKF
|
CMD_ekf_orientation: 0.01 #control vector noise in EKF
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ FrameHandlerBase::UpdateResult FrameHandlerMono::processFrame()
|
|||||||
#endif
|
#endif
|
||||||
double depth_mean=0.0, depth_min=0.0;
|
double depth_mean=0.0, depth_min=0.0;
|
||||||
frame_utils::getSceneDepth(new_frame_, depth_mean, depth_min);
|
frame_utils::getSceneDepth(new_frame_, depth_mean, depth_min);
|
||||||
if(depth_mean>10.0)return RESULT_NO_KEYFRAME;
|
if(depth_mean>20.0)return RESULT_NO_KEYFRAME;
|
||||||
|
|
||||||
optimizeStructure(new_frame_, Config::structureOptimMaxPts(), Config::structureOptimNumIter());
|
optimizeStructure(new_frame_, Config::structureOptimMaxPts(), Config::structureOptimNumIter());
|
||||||
// select keyframe
|
// select keyframe
|
||||||
@@ -215,7 +215,7 @@ FrameHandlerBase::UpdateResult FrameHandlerMono::processFrame()
|
|||||||
// add keyframe to map
|
// add keyframe to map
|
||||||
map_.addKeyframe(new_frame_);
|
map_.addKeyframe(new_frame_);
|
||||||
map_.checkKeyFrames();
|
map_.checkKeyFrames();
|
||||||
//ba_glob_->new_key_frame();
|
ba_glob_->new_key_frame();
|
||||||
return RESULT_IS_KEYFRAME;
|
return RESULT_IS_KEYFRAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ namespace vio {
|
|||||||
for(auto&& it_ftr:(*it_kf)->fts_)
|
for(auto&& it_ftr:(*it_kf)->fts_)
|
||||||
{
|
{
|
||||||
if(it_ftr->point==NULL)continue;
|
if(it_ftr->point==NULL)continue;
|
||||||
|
if(it_ftr->point->type_ != vio::Point::TYPE_GOOD)continue;
|
||||||
// for each keyframe add edges to all observed mapoints
|
// for each keyframe add edges to all observed mapoints
|
||||||
std::shared_ptr<Point> mp = it_ftr->point;
|
std::shared_ptr<Point> mp = it_ftr->point;
|
||||||
if(mp->pos_.hasNaN())continue;
|
if(mp->pos_.hasNaN())continue;
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ InitResult KltHomographyInit::addSecondFrame(FramePtr frame_cur)
|
|||||||
frame_cur->c2f(px_cur_.at(f.index).x,px_cur_.at(f.index).y), f.item->score,f.item->level,f.item->descriptor);
|
frame_cur->c2f(px_cur_.at(f.index).x,px_cur_.at(f.index).y), f.item->score,f.item->level,f.item->descriptor);
|
||||||
frame_cur->addFeature(ftr_cur);
|
frame_cur->addFeature(ftr_cur);
|
||||||
new_point->addFrameRef(ftr_cur);
|
new_point->addFrameRef(ftr_cur);
|
||||||
|
new_point->type_=vio::Point::TYPE_GOOD;
|
||||||
|
|
||||||
std::shared_ptr<Feature> ftr_ref=std::make_shared<Feature>(frame_ref_, new_point, f.item->px, f.item->f, f.item->score,f.item->level,f.item->descriptor);
|
std::shared_ptr<Feature> ftr_ref=std::make_shared<Feature>(frame_ref_, new_point, f.item->px, f.item->f, f.item->score,f.item->level,f.item->descriptor);
|
||||||
frame_ref_->addFeature(ftr_ref);
|
frame_ref_->addFeature(ftr_ref);
|
||||||
|
|||||||
@@ -166,11 +166,11 @@ void Point::optimize(const size_t n_iter)
|
|||||||
for(auto it=obs_.begin(); it!=obs_.end(); ++it) {
|
for(auto it=obs_.begin(); it!=obs_.end(); ++it) {
|
||||||
Vector2d e = vk::project2d((*it)->f) - vk::project2d(Vector3d((*it)->frame->se3() * pos_));
|
Vector2d e = vk::project2d((*it)->f) - vk::project2d(Vector3d((*it)->frame->se3() * pos_));
|
||||||
e /= (1<<(*it)->level);
|
e /= (1<<(*it)->level);
|
||||||
if (e.norm() > 3.0/ (*it)->frame->cam_->errorMultiplier2())
|
if (e.norm() > 4.0/ (*it)->frame->cam_->errorMultiplier2())
|
||||||
n_failed_reproj_++;
|
n_failed_reproj_++;
|
||||||
}
|
}
|
||||||
|
if(n_failed_reproj_<0.75*obs_.size())
|
||||||
|
type_=TYPE_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace vio
|
} // namespace vio
|
||||||
|
|||||||
@@ -48,11 +48,20 @@ void optimizeGaussNewton(
|
|||||||
std::vector<float> errors;
|
std::vector<float> errors;
|
||||||
for(auto it=frame->fts_.begin(); it!=frame->fts_.end(); /*++it*/)
|
for(auto it=frame->fts_.begin(); it!=frame->fts_.end(); /*++it*/)
|
||||||
{
|
{
|
||||||
if((*it)->point == NULL || (*it)->point->pos_.hasNaN() || (*it)->point->pos_.norm()==0.) {
|
if((*it)->point == NULL) {
|
||||||
map.safeDeletePoint((*it)->point);
|
map.safeDeletePoint((*it)->point);
|
||||||
it = frame->fts_.erase(it);
|
it = frame->fts_.erase(it);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if((*it)->point->pos_.hasNaN() || (*it)->point->pos_.norm()==0.){
|
||||||
|
map.safeDeletePoint((*it)->point);
|
||||||
|
it = frame->fts_.erase(it);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if((*it)->point->type_==vio::Point::TYPE_UNKNOWN){
|
||||||
|
it++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
//Reprojection error
|
//Reprojection error
|
||||||
Vector2d e = vk::project2d((*it)->f)
|
Vector2d e = vk::project2d((*it)->f)
|
||||||
- vk::project2d(Vector3d(frame->se3()*(*it)->point->pos_));
|
- vk::project2d(Vector3d(frame->se3()*(*it)->point->pos_));
|
||||||
@@ -86,7 +95,8 @@ void optimizeGaussNewton(
|
|||||||
// compute residual
|
// compute residual
|
||||||
for(auto it=frame->fts_.begin(); it!=frame->fts_.end(); ++it)
|
for(auto it=frame->fts_.begin(); it!=frame->fts_.end(); ++it)
|
||||||
{
|
{
|
||||||
if((*it)->point == NULL || (*it)->point->pos_.hasNaN() || (*it)->point->pos_.norm()==0.)
|
if((*it)->point == NULL)continue;
|
||||||
|
if((*it)->point->pos_.hasNaN() || (*it)->point->pos_.norm()==0. || (*it)->point->type_==vio::Point::TYPE_UNKNOWN)
|
||||||
continue;
|
continue;
|
||||||
Matrix23d J;
|
Matrix23d J;
|
||||||
Vector3d xyz_f(Vector3d(frame->se3()*(*it)->point->pos_));
|
Vector3d xyz_f(Vector3d(frame->se3()*(*it)->point->pos_));
|
||||||
@@ -125,12 +135,17 @@ void optimizeGaussNewton(
|
|||||||
size_t n_deleted_refs = 0;
|
size_t n_deleted_refs = 0;
|
||||||
for(auto it=frame->fts_.begin(); it!=frame->fts_.end(); /*++it*/)
|
for(auto it=frame->fts_.begin(); it!=frame->fts_.end(); /*++it*/)
|
||||||
{
|
{
|
||||||
if((*it)->point == NULL || (*it)->point->pos_.hasNaN() || (*it)->point->pos_.norm()==0.) {
|
if((*it)->point == NULL) {
|
||||||
map.safeDeletePoint((*it)->point);
|
map.safeDeletePoint((*it)->point);
|
||||||
it = frame->fts_.erase(it);
|
it = frame->fts_.erase(it);
|
||||||
++n_deleted_refs;
|
++n_deleted_refs;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if((*it)->point->pos_.hasNaN() || (*it)->point->pos_.norm()==0.){
|
||||||
|
map.safeDeletePoint((*it)->point);
|
||||||
|
it = frame->fts_.erase(it);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
Vector2d e = vk::project2d((*it)->f) - vk::project2d(Vector3d(frame->se3()*(*it)->point->pos_));
|
Vector2d e = vk::project2d((*it)->f) - vk::project2d(Vector3d(frame->se3()*(*it)->point->pos_));
|
||||||
e /= (1<<(*it)->level);
|
e /= (1<<(*it)->level);
|
||||||
chi2_vec_final.push_back(e.norm());
|
chi2_vec_final.push_back(e.norm());
|
||||||
@@ -139,9 +154,11 @@ void optimizeGaussNewton(
|
|||||||
map.safeDeletePoint((*it)->point);
|
map.safeDeletePoint((*it)->point);
|
||||||
it = frame->fts_.erase(it);
|
it = frame->fts_.erase(it);
|
||||||
++n_deleted_refs;
|
++n_deleted_refs;
|
||||||
}
|
}else{
|
||||||
else
|
(*it)->point->type_=vio::Point::TYPE_CANDIDATE;
|
||||||
it++;
|
it++;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
//point_mut_.unlock();
|
//point_mut_.unlock();
|
||||||
num_obs -= n_deleted_refs;
|
num_obs -= n_deleted_refs;
|
||||||
|
|||||||
@@ -152,16 +152,17 @@ namespace vio {
|
|||||||
new_point->addFrameRef(frame->fts_.back());
|
new_point->addFrameRef(frame->fts_.back());
|
||||||
added_keypoints.push_back(match.trainIdx);
|
added_keypoints.push_back(match.trainIdx);
|
||||||
frame->fts_.back()->point->last_frame_overlap_id_=it_frame.item.first->id_;
|
frame->fts_.back()->point->last_frame_overlap_id_=it_frame.item.first->id_;
|
||||||
|
frame->fts_.back()->point->type_=vio::Point::TYPE_UNKNOWN;
|
||||||
grid_.cells.at(k)->push_back(Candidate(frame->fts_.back()->point, px));
|
grid_.cells.at(k)->push_back(Candidate(frame->fts_.back()->point, px));
|
||||||
overlap_kfs.back().second++;
|
overlap_kfs.back().second++;
|
||||||
++points_count;
|
++points_count;
|
||||||
}else{
|
}else{
|
||||||
if(!matcher_.findMatchDirect(*(*it_ref)->point, *frame, px))continue;
|
if(!matcher_.findMatchDirect(*(*it_ref)->point, *frame, px))continue;
|
||||||
|
|
||||||
(*it_ref)->point->last_frame_overlap_id_ = frame->id_;
|
(*it_ref)->point->last_frame_overlap_id_ = frame->id_;
|
||||||
frame->addFeature(std::make_shared<Feature>(frame,
|
frame->addFeature(std::make_shared<Feature>(frame,
|
||||||
(*it_ref)->point,
|
(*it_ref)->point,
|
||||||
px,(*it_cur)->level,(*it_cur)->score,(*it_cur)->descriptor));
|
px,(*it_cur)->level,(*it_cur)->score,(*it_cur)->descriptor));
|
||||||
|
(*it_ref)->point->type_=vio::Point::TYPE_CANDIDATE;
|
||||||
added_keypoints.push_back(match.trainIdx);
|
added_keypoints.push_back(match.trainIdx);
|
||||||
grid_.cells.at(k)->push_back(Candidate(frame->fts_.back()->point, px));
|
grid_.cells.at(k)->push_back(Candidate(frame->fts_.back()->point, px));
|
||||||
overlap_kfs.back().second++;
|
overlap_kfs.back().second++;
|
||||||
|
|||||||
Reference in New Issue
Block a user