GithubHelp home page GithubHelp logo

zanazakaryaie / arm-vo Goto Github PK

View Code? Open in Web Editor NEW
240.0 15.0 68.0 83 KB

Efficient monocular visual odometry for ground vehicles on ARM processors

License: MIT License

C++ 98.06% CMake 1.94%
raspberry-pi visual-odometry kitti-dataset arm opencv neon tbb openmp fast klt

arm-vo's People

Contributors

zanazakaryaie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

arm-vo's Issues

LICENSE

Dear contributors,

Congratulations on your work and many thanks for sharing it!
However I couldn't find any information about license in this repo, a repo without license has ambiguous terms and could lead to law suits.....

an error of FAST9_NEON

On line 182 of the FAST_NEON.cpp,according to opencv fast.cpp, should it be m1 = vcgtq_u8(v1, x);?

How to get the relative travel distance without distance information and Ground Truth

We know that due to the scale indefiniteness problem, we cannot estimate the distance traveled by the camera without distance information.
However, we would like to get the relative travel distance.
Can you determine the relative travel distance of the monocular camera under the following conditions?

・Input is video image (or acceleration and gyro sensor values)
・No ground-truth
・No distance information

Segmenation fault after a random perod of time

Im getting a segmenattion fault and then an abrupt exit after a random period of time, looks like this

image

I'm running it with ROS and it is producing some kind of output, but exits too fast to actually check if its sensible.

My setup:
Rpi 4 with ubuntu 16.04
ROS Kinetic
RGB image is from a Realsense d435i
attached to a mobile robot

my param file:

%YAML:1.0

#########################
### Camera Parameters ###
#########################

fx: 611.1327514648438
fy: 611.2852783203125
cx: 326.94580078125
cy: 250.05352783203125

height: 0.3
pitch_angle: -0.03
 

###########################
### Detector Parameters ###
###########################

# Maximum number of FAST features per image
nFeatures: 300

#Kepoints with corner response lower than threshold are ignored (lower it if your images have low contrast)
threshold: 15

# Image is divided to a nRows * nCols grid
nRows: 6
nCols: 12


##########################
### Tracker Parameters ###
##########################

window_size: 13

I am trying to get this visual odometry to work on this mobile robot with a camera stream provided in the following bag file:

https://we.tl/t-cXaIcOLQ5y

subscribing to /camera/color/image_raw

As can be seen from image stream the robot is never purely rotating, there is always a bit of forward motion as well.

Thank you for your work, I love the concept of taking the height and pitch and extracting scale from it!

Could NOT find OpenMP_CXX

Laptop: Macbook Air M2
OS: Ubuntu 20.04 Docker

When I was runing cmake . , I got following error

-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr/local (found version "4.5.0")
-- Found OpenMP_C: -fopenmp (found version "4.5")
CMake Error at /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
  Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.16/Modules/FindOpenMP.cmake:511 (find_package_handle_standard_args)
  CMakeLists.txt:13 (find_package)


-- Configuring incomplete, errors occurred!
See also "/ARM-VO/CMakeFiles/CMakeOutput.log".
See also "/ARM-VO/CMakeFiles/CMakeError.log".

Has anyone experienced this?

Thanks

Segmentation fault (core dumped)

build ARM-VO at Nvidia-NX
Using Kitti dataset data_odometry_color.zip

nvidia@nvidia-desktop:~/work/code/ARM-VO/build$ ./ARM_VO 
Few input arguments!
Usage: ./exe pathToDataFolder paramsFile
Use default Param /home/nvidia/dataset/kitti/00/image_3/  ../params/Seq00-02.yaml
Processing image 000000.png: Initialized
Segmentation fault (core dumped)
nvidia@nvidia-desktop:~/work/code/ARM-VO/build$ gdb ARM_VO 
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "aarch64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ARM_VO...done.
(gdb) r
Starting program: /home/nvidia/work/code/ARM-VO/build/ARM_VO 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
Few input arguments!
Usage: ./exe pathToDataFolder paramsFile
Use default Param /home/nvidia/dataset/kitti/00/image_3/  ../params/Seq00-02.yaml
[New Thread 0x7fb5bb3f00 (LWP 10778)]
[New Thread 0x7fafffef00 (LWP 10779)]
[New Thread 0x7fb57b2f00 (LWP 10780)]
Processing image 000000.png: Initialized

Thread 1 "ARM_VO" received signal SIGSEGV, Segmentation fault.
tracker::calcSharrDeriv (this=this@entry=0x10c00000001, src=..., dst=...) at /home/nvidia/work/code/ARM-VO/src/tracker.cpp:110
110	            int16x8_t q3 = vld1q_s16((const int16_t*)&trow1[x-cn]);
(gdb) bt
#0  0x0000005555573938 in tracker::calcSharrDeriv(cv::Mat const&, cv::Mat&) (this=this@entry=0x10c00000001, src=..., dst=...)
    at /home/nvidia/work/code/ARM-VO/src/tracker.cpp:110
#1  0x000000555557435c in tracker::calc_OpticalFlowPyrLK(cv::_InputArray const&, cv::_InputArray const&, cv::_InputArray const&, cv::_InputOutputArray const&, cv::_OutputArray const&, cv::Size_<int>, int, cv::TermCriteria, int, double) (this=0x10c00000001, 
    this@entry=0x7fffffeda8, _prevImg=..., _nextImg=..., _prevPts=..., _nextPts=..., _status=..., winSize=..., maxLevel=1432072000, 
    maxLevel@entry=3, criteria=..., flags=<optimized out>, minEigThreshold=minEigThreshold@entry=0.001)
    at /home/nvidia/work/code/ARM-VO/src/tracker.cpp:187
#2  0x0000005555574c70 in tracker::track(cv::Mat const&, cv::Mat const&, std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >&, std::vector<cv::Point_<float>, std::allocator<cv::Point_<float> > >&) (this=this@entry=0x7fffffeda8, img_1=..., img_2=..., points1=std::vector of length 268, capacity 268 = {...}, points2=std::vector of length 268, capacity 268 = {...}) at /home/nvidia/work/code/ARM-VO/src/tracker.cpp:23
#3  0x0000005555561630 in ARM_VO::update(cv::Mat const&) (this=0x7fffffebc0, currentFrame=...) at /home/nvidia/work/code/ARM-VO/src/ARM_VO.cpp:77
#4  0x0000005555560654 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/nvidia/work/code/ARM-VO/src/main.cpp:59

Couldn't find executable

When I compile the ROS option and run the command rosrun ARM_VO ARM_VO param_file, the error "[rosrun] Couldn't find executable named ARM_VO below /home/kerwin/workspace/ARM-VO/ROS/src" pops out.

I have to add catkin_package() to the CMakeLists.txt in ROS/src and then compile it again to successfully run the node.
Not sure it is my problem or the CMakeLists'.

Wondering why using quaternion rather than lie group

Hi, thanks for your opening source such an amazing porject.

As the title, i was searching which way to implement BA, then i found that you choose quaternion, is that because a 4 DOF residual is smaller thus faster than a 9 DOF residual for computing?

Or, is it just a casual choise? : )

opencv version?

hi, first of all, great work!
I'm trying to test this code, but I'm getting an error "segmentation fault" on "parallel_for_(Range(0, npoints),..." in function calc_OpticalFlowPyrLK.

This is my configuration:

  1. Raspbian Bionic.
  2. OpenCV 3.4.6 (build with neon and tbb).

any advice appreciates, Thanks in advance.
@zanazakaryaie

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.