Coder Social home page Coder Social logo

ialzugaray / arc_star_ros Goto Github PK

View Code? Open in Web Editor NEW
56.0 3.0 16.0 15 KB

Implentation of the Arc* algorithm, described in "Asynchronous Corner Detection and Tracking for Event Cameras in Real Time", Alzugaray & Chli, RA-L 2018

License: MIT License

CMake 4.70% C++ 95.30%
event-cameras corner-detection ros

arc_star_ros's Introduction

Arc*: Asynchronous Event-based Corner Detection

This code is the reference implementation of the Arc* algorithm described in the paper "Asynchronous Corner Detection and Tracking for Event Cameras in Real Time", Alzugaray & Chli, RA-L 2018. This work was developed at the Vision for Robotics Lab, ETH Zurich.

Event cameras are only able to detect intensity changes in form of asynchronous events. The presented Arc* algorithm is able to detect which of these events were generated from visually salient corners in the scene. The algorithm operates solely on events and processes them individually in an asynchronous fashion. Our approach is able to handle up to several millions of events per second, achieving high-frequency feature detection and real-time performance even in challenging scenarios.

Video

AsynchronousCornerDetector

Publication

If you use this work, please cite the following publication:

Ignacio Alzugaray and Margarita Chli. "Asynchronous Corner Detection and Tracking for Event Cameras in Real Time." IEEE Robotics and Automation Letters (RA-L), 2018.

@ARTICLE{alzugaray18ral
  author={I. Alzugaray and M. Chli},
  journal={IEEE Robotics and Automation Letters},
  title={Asynchronous Corner Detection and Tracking for Event Cameras in Real Time},
  year={2018},
  volume={3},
  number={4},
  pages={3177-3184},
  doi={10.1109/LRA.2018.2849882},
  ISSN={2377-3766},
  month={Oct}}

Disclaimer and License

This code has been tested with ROS Kinetic on Ubuntu 16.04.

This is research code, expect that it changes often and any fitness for a particular purpose is disclaimed.

The source code is released under the MIT License.

Instructions

We provide Arc* algorithm as a stand-alone code with minimal dependencies in the subfolder ./arc_star, intended for high-performance benchmarking. Alternatively, you can also use the provided minimal ROS wrappers, for fast deployment, live operation or qualitative comparison.

Requirements:

  • Eigen 3 sudo apt-get install libeigen3-dev

ROS-related requirements:

Stand-alone implementation

Clone the repository and compile the project:

$ git clone https://github.com/ialzugaray/arc_star_ros.git
$ mkdir -p arc_star_ros/arc_star/build && cd arc_star_ros/arc_star/build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make

We provide a minimal example to process events from a plain text file. You can use the event text files from the the Event Camera Dataset, e.g. here.

$ ./arc_star_app_file my_dataset_folder/events.txt

You can also save the event classification into corners as a plain text file (1 event is a corner, 0 otherwise):

$ ./arc_star_app_file my_dataset_folder/events.txt my_result_folder/classification.txt

ROS implementation

Navigate to your initialized ROS workspace, clone and compile:

$ cd /path/to/catkin_ws/src
$ git clone https://github.com/ialzugaray/arc_star_ros.git
$ cd ..
$ catkin build --cmake-args -DCMAKE_BUILD_TYPE=Release # Assume you have already installed rpg_dvs_ros
$ source /path/to/catkin_ws/devel/setup.bash

Connect your DAVIS camera and launch the following file:

$ roslaunch arc_star_ros arc_star.launch

Alternatively, you can also play a rosbag file. You can use rosbags from the from the the Event Camera Dataset, e.g. here.

$ roslaunch arc_star_ros arc_star.launch rosbag_flag:=1 rosbag_path:=/path/to/my_bag.bag

Notes on the Implementation

The current implementation measures the length of the arc of new elements as the number of elements that have been processed until the arc stops growing, instead of the number of elements in the arc as originally described in the publication. Such subtle difference accounts for a more reliable response on edges of the scene.

Contact

Please, create an issue if you have questions or bug reports. If you come up with any improvements, please create a pull request. Alternatively, you can also contact me at [email protected].

arc_star_ros's People

Contributors

ialzugaray 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

Watchers

 avatar  avatar  avatar

arc_star_ros's Issues

Asynchronous corner tracker

Hi, thank you for sharing the algorithm. I wonder if it would be possible to share the ‘tracker’ described in your paper as well.
Thanks you in advance

[arc_star_ros-3] process has died [pid 94126, exit code -11]

Hi, Alzugaray
This code works perfectly on my laptop with rosbag, but when i follow your instruction to connect my davis346

$ roslaunch arc_star_ros arc_star.launch

terminal shows:

[arc_star_ros-3] process has died [pid 94126, exit code -11, cmd /home/arc_star/devel/lib/arc_star_ros/arc_star_ros events:=/dvs/events corners:=/dvs/corners __name:=arc_star_ros __log:=/home/.ros/log/a7631db4-f4d9-11ee-95c6-1be3e649f346/arc_star_ros-3.log].
log file: /home/.ros/log/a7631db4-f4d9-11ee-95c6-1be3e649f346/arc_star_ros-3*.log

So i try to find the log but the file ''arc_star_ros-3*.log'' under this path doesn't exist. I'm not familiar with C++ so could you tell me what
causes this problem and how to fix it?
Here is part of my roslaunch log with arc_star_ros-3.

[roslaunch][INFO] 2024-04-07 20:23:35,240: process[arc_star_ros-3]: env[{'SHELL': '/bin/bash', 'ROS_VERSION': '1', 'SESSION_MANAGER': 'local/lys:@/tmp/.ICE-unix/2813,unix/lys:/tmp/.ICE-unix/2813', 'QT_ACCESSIBILITY': '1', 'COLORTERM': 'truecolor', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/etc/xdg', 'SSH_AGENT_LAUNCHER': 'gnome-keyring', 'XDG_MENU_PREFIX': 'gnome-', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'GTK_IM_MODULE': 'ibus', 'CONDA_EXE': '/home/leiys/anaconda3/bin/conda', '_CE_M': '', 'TERMINAL_EMULATOR': 'JetBrains-JediTerm', 'PKG_CONFIG_PATH': '/home/leiys/arc_star/devel/lib/pkgconfig:/home/leiys/catkin_ws/devel/lib/pkgconfig:/opt/ros/noetic/lib/pkgconfig', 'ROS_PYTHON_VERSION': '3', 'LANGUAGE': 'zh_CN:en', 'LC_ADDRESS': 'zh_CN.UTF-8', 'GNOME_SHELL_SESSION_MODE': 'ubuntu', 'LC_NAME': 'zh_CN.UTF-8', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'TERM_SESSION_ID': '7afef0e1-af74-4910-95fc-1be0d09860bd', 'XMODIFIERS': '@im=ibus', 'DESKTOP_SESSION': 'ubuntu', 'LC_MONETARY': 'zh_CN.UTF-8', 'ROS_PACKAGE_PATH': '/home/leiys/arc_star/src/catkin_simple:/home/leiys/arc_star/src/rpg_dvs_ros/dvs_calibration_gui:/home/leiys/arc_star/src/rpg_dvs_ros/dvs_msgs:/home/leiys/arc_star/src/arc_star_ros:/home/leiys/arc_star/src/rpg_dvs_ros/davis_ros_driver:/home/leiys/arc_star/src/rpg_dvs_ros/dvs_calibration:/home/leiys/arc_star/src/rpg_dvs_ros/dvs_file_writer:/home/leiys/arc_star/src/rpg_dvs_ros/dvs_renderer:/home/leiys/arc_star/src/rpg_dvs_ros/dvs_ros_driver:/home/leiys/arc_star/src/rpg_dvs_ros/dvxplorer_ros_driver:/home/leiys/catkin_ws/src:/opt/ros/noetic/share', 'GTK_MODULES': 'gail:atk-bridge', 'ROSLISP_PACKAGE_DIRECTORIES': '/home/leiys/arc_star/devel/share/common-lisp:/home/leiys/catkin_ws/devel/share/common-lisp', 'PWD': '/home/leiys/arc_star', 'XDG_SESSION_DESKTOP': 'ubuntu', 'LOGNAME': 'leiys', 'XDG_SESSION_TYPE': 'x11', 'GPG_AGENT_INFO': '/run/user/1000/gnupg/S.gpg-agent:0:1', 'XAUTHORITY': '/run/user/1000/gdm/Xauthority', 'GJS_DEBUG_TOPICS': 'JS ERROR;JS LOG', 'WINDOWPATH': '2', 'HOME': '/home/leiys', 'USERNAME': 'leiys', 'IM_CONFIG_PHASE': '1', 'GAZEBO_PLUGIN_PATH': ':/home/leiys/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic:/home/leiys/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic', 'LANG': 'zh_CN.UTF-8', 'LC_PAPER': 'zh_CN.UTF-8', 'ROS_ETC_DIR': '/opt/ros/noetic/etc/ros', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'XDG_CURRENT_DESKTOP': 'ubuntu:GNOME', 'VTE_VERSION': '6003', 'CMAKE_PREFIX_PATH': '/home/leiys/arc_star/devel:/home/leiys/catkin_ws/devel:/opt/ros/noetic', 'GNOME_TERMINAL_SCREEN': '/org/gnome/Terminal/screen/e7797821_0cd2_46ac_aab4_a7810177503f', 'INVOCATION_ID': 'c8747146100347b3ac455ec525c73885', 'MANAGERPID': '2563', 'GJS_DEBUG_OUTPUT': 'stderr', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'XDG_SESSION_CLASS': 'user', 'PYTHONPATH': '/home/leiys/arc_star/devel/lib/python3/dist-packages:/home/leiys/catkin_ws/devel/lib/python3/dist-packages:/opt/ros/noetic/lib/python3/dist-packages', 'TERM': 'xterm-256color', 'LC_IDENTIFICATION': 'zh_CN.UTF-8', '_CE_CONDA': '', 'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'leiys', 'GNOME_TERMINAL_SERVICE': ':1.522', 'CONDA_SHLVL': '0', 'DISPLAY': ':0', 'SHLVL': '3', 'LC_TELEPHONE': 'zh_CN.UTF-8', 'ROS_MASTER_URI': 'http://localhost:11311', 'QT_IM_MODULE': 'ibus', 'LC_MEASUREMENT': 'zh_CN.UTF-8', 'PAPERSIZE': 'a4', 'CONDA_PYTHON_EXE': '/home/leiys/anaconda3/bin/python', 'LD_LIBRARY_PATH': '/home/leiys/arc_star/devel/lib:/home/leiys/catkin_ws/devel/lib:/opt/ros/noetic/lib:/home/leiys/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic:/home/leiys/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic', 'XDG_RUNTIME_DIR': '/run/user/1000', 'LC_TIME': 'zh_CN.UTF-8', 'GAZEBO_MODEL_PATH': ':/home/leiys/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models:/home/leiys/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models', 'JOURNAL_STREAM': '8:63561', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop', 'PATH': '/home/leiys/catkin_ws/devel/bin:/opt/ros/noetic/bin:/home/leiys/anaconda3/condabin:/home/leiys/.local/bin:/home/leiys/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/leiys/.local/share/JetBrains/Toolbox/scripts', 'GDMSESSION': 'ubuntu', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'ROS_ROOT': '/opt/ros/noetic/share/ros', 'ROS_DISTRO': 'noetic', 'LC_NUMERIC': 'zh_CN.UTF-8', 'OLDPWD': '/home/leiys', '_': '/opt/ros/noetic/bin/roslaunch', 'ROS_LOG_FILENAME': '/home/leiys/.ros/log/a7631db4-f4d9-11ee-95c6-1be3e649f346/roslaunch-lys-94061.log'}]
[roslaunch][INFO] 2024-04-07 20:23:35,242: process[arc_star_ros-3]: args[['/home/leiys/arc_star/devel/lib/arc_star_ros/arc_star_ros', 'events:=/dvs/events', 'corners:=/dvs/corners', '__name:=arc_star_ros']]
[roslaunch][INFO] 2024-04-07 20:23:35,242: ... created process [arc_star_ros-3]
[roslaunch.pmon][INFO] 2024-04-07 20:23:35,242: ProcessMonitor.register[arc_star_ros-3]
[roslaunch.pmon][INFO] 2024-04-07 20:23:35,242: ProcessMonitor.register[arc_star_ros-3] complete
[roslaunch][INFO] 2024-04-07 20:23:35,242: ... registered process [arc_star_ros-3]
[roslaunch][INFO] 2024-04-07 20:23:35,242: process[arc_star_ros-3]: starting os process
[roslaunch][INFO] 2024-04-07 20:23:35,242: process[arc_star_ros-3]: start w/ args [['/home/leiys/arc_star/devel/lib/arc_star_ros/arc_star_ros', 'events:=/dvs/events', 'corners:=/dvs/corners', '__name:=arc_star_ros', '__log:=/home/leiys/.ros/log/a7631db4-f4d9-11ee-95c6-1be3e649f346/arc_star_ros-3.log']]
[roslaunch][INFO] 2024-04-07 20:23:35,242: process[arc_star_ros-3]: cwd will be [/home/leiys/.ros]
[roslaunch][INFO] 2024-04-07 20:23:35,244: process[arc_star_ros-3]: started with pid [94126]
[roslaunch][INFO] 2024-04-07 20:23:35,244: ... successfully launched [arc_star_ros-3]
[roslaunch][INFO] 2024-04-07 20:23:35,244: ... preparing to launch node of type [dvs_renderer/dvs_renderer]
[roslaunch][ERROR] 2024-04-07 20:23:35,770: [arc_star_ros-3] process has died [pid 94126, exit code -11, cmd /home/leiys/arc_star/devel/lib/arc_star_ros/arc_star_ros events:=/dvs/events corners:=/dvs/corners __name:=arc_star_ros __log:=/home/leiys/.ros/log/a7631db4-f4d9-11ee-95c6-1be3e649f346/arc_star_ros-3.log].
log file: /home/leiys/.ros/log/a7631db4-f4d9-11ee-95c6-1be3e649f346/arc_star_ros-3*.log
[roslaunch.pmon][INFO] 2024-04-07 20:23:35,770: ProcessMonitor.unregister[arc_star_ros-3] starting
[roslaunch.pmon][INFO] 2024-04-07 20:23:35,770: ProcessMonitor.unregister[arc_star_ros-3] complete

Ubuntu20.04 noetic
clion 2023.3.04

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.