ov2slam / ov2slam

OV²SLAM is a Fully Online and Versatile Visual SLAM for Real-Time Applications
GNU General Public License v3.0
578 stars 128 forks source link

can't compute descriptors #62

Closed TaozheLi closed 10 months ago

TaozheLi commented 10 months ago

How to run it ? I run this ov2slam as following sequences after compiled:

  1. new terminal: roscore
  2. new terminal: rosrun ov2slam ov2slam_node specifically_yaml_file(And I can see it tells me starting measurements reader thread)
  3. new terminal: rosbag play kitti_data_odometry_color_sequence_00.bag
  4. new terminal: rviz -d ov2slam_visualization.rviz But I can't see any images, and rosnode seems like not read image, it still stuck in xxxxx reader thread
aeudes commented 10 months ago

Process seems legit... Could you check that the camera topic in our bag and in the parameter file match and are in same namespace :

rosbag info kitti_data_odometry_color_sequence_00.bag
cat specifically_yaml_file | grep topic

Another point, when replaying bag it is usually recommended to use simulated time. you should run rosparam set /use_sim_time true before starting ov2slam. and start rosbag with simulated clock:

rosbag play --clock kitti_data_odometry_color_sequence_00.bag
TaozheLi commented 10 months ago

Thank you for your reply. I figured out topic thing this morning actually. But right now new problems came out.It is

Starting the measurements reader thread!
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.2.0) ../modules/core/src/matrix.cpp:406: error: (-215:Assertion failed) m.dims >= 2 in function 'Mat'

Stack trace (most recent call last) in thread 525310:
#17   Object "[0xffffffffffffffff]", at 0xffffffffffffffff, in 
#16   Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f6f32df5132, in clone
#15   Object "/lib/x86_64-linux-gnu/libpthread.so.0", at 0x7f6f332e7608, in 
#14   Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7f6f32fb9df3, in 
#13   Object "/home/rushmian/catkin_ws/devel/lib/libov2slam.so", at 0x7f6f3383dda0, in SlamManager::run()
#12   Object "/home/rushmian/catkin_ws/devel/lib/libov2slam.so", at 0x7f6f33859088, in VisualFrontEnd::visualTracking(cv::Mat&, double)
#11   Object "/home/rushmian/catkin_ws/devel/lib/libov2slam.so", at 0x7f6f33889775, in MapManager::createKeyframe(cv::Mat const&, cv::Mat const&)
#10   Object "/home/rushmian/catkin_ws/devel/lib/libov2slam.so", at 0x7f6f338892d4, in MapManager::extractKeypoints(cv::Mat const&, cv::Mat const&)
#9    Object "/home/rushmian/catkin_ws/devel/lib/libov2slam.so", at 0x7f6f338792fc, in FeatureExtractor::describeBRIEF(cv::Mat const&, std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > > const&) const
#8    Object "/usr/lib/x86_64-linux-gnu/libopencv_core.so.4.2", at 0x7f6f33474f53, in cv::Mat::Mat(cv::Mat const&, cv::Range const&, cv::Range const&)
#7    Object "/usr/lib/x86_64-linux-gnu/libopencv_core.so.4.2", at 0x7f6f33553dd3, in cv::error(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, char const*, int)
#6    Object "/usr/lib/x86_64-linux-gnu/libopencv_core.so.4.2", at 0x7f6f33360c1f, in 
#5    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7f6f32f8d698, in __cxa_throw
#4    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7f6f32f8d3e6, in std::terminate()
#3    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7f6f32f8d37b, in 
#2    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x7f6f32f818d0, in 
#1    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f6f32cf8858, in abort
#0    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x7f6f32d1900b, in gsignal
Aborted (Signal sent by tkill() 525293 1000)
Aborted (core dumped)
TaozheLi commented 10 months ago

Problems happened in file feature_extractor.cpp function FeatureExtractor::describeBRIEF(const cv::Mat &im, const std::vector<cv::Point2f> &vpts)line 258

pbrief_->compute(im, vkps, descs);

It can't compute descriptors, I try to printf descs, it's []. However, detected feature which saved in vkps is not null, evidence is that I plotted key-points which saved in vkps on input_image.

aeudes commented 10 months ago

Hum. Could you clarify the following points:

Most of the opencv error comes from the opencv version in ros that did not match the opencv version used to build ov2slam. It's very strange to have keypoint but be unable to extract at least one descriptor, is the image im is correct in the call ? if you build with OPENCV_CONTRIB you can try to deactive it.

TaozheLi commented 10 months ago

Thanks. I've been busy last few days. I followed your advice and reinstall opencv 3.4 version, it works