{"id":13528605,"url":"https://github.com/JuanTarrio/rebvo","last_synced_at":"2025-04-01T14:32:39.404Z","repository":{"id":215966889,"uuid":"51785337","full_name":"JuanTarrio/rebvo","owner":"JuanTarrio","description":"Realtime Edge Based Visual Odometry for a Monocular Camera","archived":false,"fork":false,"pushed_at":"2020-10-16T20:55:34.000Z","size":51342,"stargazers_count":266,"open_issues_count":11,"forks_count":99,"subscribers_count":20,"default_branch":"master","last_synced_at":"2024-11-02T15:35:35.205Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":" http://juantarrio.github.io/rebvo","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuanTarrio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2016-02-15T21:01:41.000Z","updated_at":"2024-10-11T20:31:56.000Z","dependencies_parsed_at":null,"dependency_job_id":"d198c05a-95d4-411f-81ed-ae1b1e00cec8","html_url":"https://github.com/JuanTarrio/rebvo","commit_stats":null,"previous_names":["juantarrio/rebvo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuanTarrio%2Frebvo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuanTarrio%2Frebvo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuanTarrio%2Frebvo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuanTarrio%2Frebvo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuanTarrio","download_url":"https://codeload.github.com/JuanTarrio/rebvo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246655189,"owners_count":20812595,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T07:00:21.721Z","updated_at":"2025-04-01T14:32:38.965Z","avatar_url":"https://github.com/JuanTarrio.png","language":"Objective-C","funding_links":[],"categories":["OpenSource-SLAM","3. Visual Inertial SLAM","四 视觉SLAM从入门到进阶","视觉SLAM","OpenSource SLAM (Simultaneous Localization And Mapping)"],"sub_categories":["3.2 Monocular","Code","UAV Trajectory Optimization for model completeness"],"readme":"\n# REBiVO\n## Realtime Edge Based Inertial Visual Odometry for a Monocular Camera\n\nTarrio, J. J., \u0026 Pedre, S. (2015). Realtime Edge-Based Visual Odometry\nfor a Monocular Camera. In Proceedings of the IEEE International Conference\non Computer Vision (pp. 702-710).\n\nTarrio, J. J., \u0026 Pedre, S. (2017). Realtime edge based visual inertial odometry for MAV teleoperation in indoor environments. Journal of Intelligent and Robotic Systems.\n\nREBiVO tracks a camera in Realtime using edges and inertial data, is a slim system targeted for MAV operation. The system is split in 4 components.\nA library containing the core (rebvolib/librebvolib.a)\nAn on-board app (app/rebvorun) to launch the library to do all the processing and send data over UDP\nAn an OpenGL visualizer (app/visualizer) to show the newwork transmitted data.\nA ROS wrapper (under development)\n\nIntroductory video: https://youtu.be/7pn29iGklgI\n\n\n### System requirements\n\nIn ubuntu and most linux dist this libraries can be downloaded directly from the\n repos, except for TooN.\n\n-- C++11\n\n-- Linux, X11, v4l2\n\n-- OpenGL development libraries (GL,GLU,glut)\n\n-- TooN 2.2 mathematical library (http://www.edwardrosten.com/cvd/toon.html - ZIP provided in the repo)\n\n-- Lapack (for advanced TooN functions)\n\n-- LibAV (Video Codecs)\n\n-- LibGD (Image managment)\n\n-- Optionally NE10 for ARM Neon optimizations\n\n### Compiling\n\nREBVO has been developed using QT creator, so a project file is provided in the main folder. Also a makefile is provided on the main directory for 64bit machines.\n\nFor x86 compile using (on the root directory):\n\nmake\n\nFor 64bit desktop use:\n\nmake REBVOFLAGS=-m64\n\nfor ARM:\n\nmake REBVOFLAGS='-mtune=cortex-a15 -mfpu=neon'\n\n\nfor ARM using NE10\n\nmake REBVOFLAGS='-mtune=cortex-a15 -mfpu=neon -DUSE_NE10 -lNE10'\n\n#### Output\n\nLibrary: rebvolib/librebvolib.a\nRebvo Launcher: app/rebvorun/rebvorun\nVisualizer: app/visualizer/visualizer\n\n### Imu Integration\n\nIMU measurements are integrated trough the ImuGrabber class, that implements a circular buffer, timestamp search utilities and inter-frame integration.\n\nFor IMU data in a csv dataset style the ImuGraber supports a file loadding function (Config IMUMode=2).\nFor a custom IMU, timestamped data can be pushed using REBVO::pushIMU() function.\n\n#### Imu Fusion\n\nIMU fusion is done using a two stage Bayesian filter. Sensor noise covariances should be set for optimal performance.\n\nAn initial guess for Giro Bias should be provided for highly biased sensors, an initial automatic guess could be used if the system is started still.\n\n### Camera Drivers\n\nThree classes are provided for camera management:\n\n-- v4lCam is a wrapper to the C functions provided in video_io for interacting with\n   the v4l2 lib.\n\n-- SimCamera is a simple class designed to load uncompressed video from a file. For compressed video\n   formats check the Video2SimCam section.\n\n-- DataSetCam is used to load the images from the TUM datasets used to benchmark the\n   paper (add the dataset directory and image file list to the config file).\n\n-- Custom cam, a class for external loading of images\n\nAll three classes inherit from VideoCam class, this class is able to generate the\nvideo files used by simcam.\n\n\n#### Using the custom camera\n\nIf the custom camera is selected, images has to be loaded to the rebvo object. Use the REBVO:requestCustomCamBuffer()\nfunction to request an Image buffer, save your image to that buffer and call REBVO::releaseCustomCamBuffer to release.\nThis can be done in the aplication thread, images are passed transparently using a pipe circular buffer.\n\n#### Video2SimCam Utility\n\nCurrently rebvo canot load compressed video directly (a feature that is gonna be added soon), so\na simple utility is provided in the Video2SimCam folder that uses OpenCV VideoCapture to uncompress\nthe video in the SimCam format (can take a lot of disk space!).\n\n### Customizing the Output\n\nA callback function can be configured using the library function  REBVO::setOutputCallback(). This a callback is called on the third thread with a reference\nto a struct containing all the algorithm's output.\n\nThe funtion REBVO::getNav() can also bue used to extract navigation parameters\n\n### Ros Support\n\nThe folder ros/src/rebvo_ros contains an ROS-indigo wrapper that is under development. 2 launchers and configuration files are provided, one for monocular camera\nand the second for trying on the EuRoMav Dataset using ros bag files. The nodelet is algo a good example of how to use the library.\n\n### Configuring the system\n\nA GlobalConfig text file can be found in each of the folders. This should be tuned to\nyour camera and network configuration. All the configuration options has to be present on the files\nin order for the system to start. The structure of the file is self explanatory.\n\nTwo files are provided as an example, GlobalConfig (and standart config to run onboard Quad) and GlobalConfig_EuRoC (for testing the EuRoC dataset).\n\n#### Basic configs in rebvo GlobalConfig\n\nThe things you have to configure in order for the system to work.\n\n-- CameraDevice: the v4l2 camera device or dataset camera file and directory\n\n-- ZfX,Y: Camera focal length\n\n-- PPx,y: Camera principal point\n\n-- ImageWidth,Height: size to use\n\n-- Distortion parameters (if enabled)\n\n-- FPS: Frames per Seconds\n\n-- VideoNetHost,Port: IP,Port of the host to send data to\n\n-- SetAffinity flag,CamaraTn: if the flag is set to 1, the system will use the pthread_setaffinity_np() call\n\t\tto distribute the threads according to the CamaraT1..3 configuration.\n\t\tThis numbers have to point to existing processors or the call wil fail,\n\t\tand this setting usually require superuser privileges.\n\t\tSetting affinity and distributing the threads can increase speed.\n\n-- DetectorThresh: This is a fixed threshold to the edge detector only used\n\t \t   if autothresh is off (DetectorAutoGain = 0)\n\t\t   Is a camera dependent parameter so it should be tunned for\n\t\t   best performance. \n\n-- ReferencePoints: If auto thresh is on (DetectorAutoGain\u003e0), number of KL\n\t\t   points to use. Ussual values are 5000 for 320x240 and \n\t\t   15000 for 640x480 \n\n-- DetectorMax,MinThresh: Limits on threshold tunning, to prevent excessive \n\t\t   noise on images with no edges. Similar to DetectorThresh,\n\t\t   camera dependant parameters.\n\n-- Imu Mode: 1 for custom IMU, 2 for dataset IMU (EuRoC MAV format)\n\n-- Imu-Camera RotoTraslation file\n\n-- IMU Noise parameters\n\n#### Basic configs in visualizer GlobalConfig\n\nImageSize, Focal Length and Principal Point should match the config in rebvo.\n\n### System Usage\n\nJust run the two programs on the same o network connected computers and move\nthe camera trying to maximize translation.\n\nREBVORUN component accept the following command line commands:\n\nq: Quit\n\nr: System full reset\n\ns: Saves in SimVideoFile (rebvo GlobalConfig) SimVideoNFrames frames of\n   uncompressed video for further replay. It does a direct write to disk,\n   so it can loose frames depending on the system. The format is described\n   in videocam.h\n\np: Takes Snapshot of the current image\n\n\nThe visualizer opens 2 kinds of windows, XLib windows (front and top) \ndisplays the image and the edge detection, OpenGL windows display \nthe edgemap and the image in a 3D fashion.\n\n#### Commands in the XLib windows\n\nq: Quit\n\nb: Clear trajectory\n\ni: Toggle show image\n\nt: Show frame to frame matching\n\nz,x: Increase/Decease maximum depth in top view\n\n#### Commands in the OpenGL windows\n\nw,s,a,d: Walk the view in a DukeNukem style\narrows: Rotate the view\n\nf,r: flight\n\n1..9: Load i view\n\nShift+1..9: Save i view\n\nEscape: Reset View\n\nm: Toggle image rendering\n\nn: Toggle edgemap rendering\n\nc: Toggle camera rendering\n\nt,g: Increase/decrease max distance for color scale\n\ny,h: Same for min distance \n\ni: Render edgemap depth uncertainty\n\nv: Render Trajectory\n\nb: Clear trajectory\n\n,: Fix the view to world coordinates\n\nEnd: Quit\n\n### Output files\n\nIf the savelog option is enabled the system outputs 2 files, a .m log file and a\ntrajectory file (timestamp tx ty tz qx qy qz qw) that can be used to benchmark\nthe algorithm.\n\n### FAQ\n\n\n-- Why rebvo doesn't use OpenCV?\n\nOpenCV is great, the system originally used OpenCV for image acquisition \nand preprocessing. \nThen at some point we figure that it was a waste having to install\nthe whole library just for image acquisition, so I write small a wrapper \nto the V4L2 library trying to make the system easier to install and \nless dependent on third party libraries.\n\n\n### Contact\n\nJuan Jose Tarrio\n\njuan.tarrio@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJuanTarrio%2Frebvo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJuanTarrio%2Frebvo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJuanTarrio%2Frebvo/lists"}