Visual Servoing Platform  version 3.6.1 under development (2024-04-16)
ViSP 3.6.1 main page

Introduction

ViSP [33] is a modular C++ library that allows fast development of visual servoing and visual tracking applications. ViSP is developed and maintained by the Inria Rainbow (former Lagadic) team located at Inria Rennes.

ViSP official site is https://visp.inria.fr

ViSP wiki is available here https://github.com/lagadic/visp/wiki

ViSP source code is available on GitHub https://github.com/lagadic/visp/

ViSP daily updated C++ documentation is available here https://visp-doc.inria.fr/doxygen/visp-daily

It is also possible to use the version under development in Python by compiling the Python bindings. See ViSP for Python. Daily updated documentation specific to Python bindings is available here https://visp-doc.inria.fr/doxygen/visp-python-daily/.

If you have any problems or find any bugs, please report them in the bug tracker. If you may need help, please use the available discussion forum.

It is also possible to contact ViSP main developers using: visp@inria.fr

Description

Since 2005, we develop and release ViSP [33], an open source library. ViSP standing for Visual Servoing Platform allows prototyping and developing applications using visual tracking and visual servoing techniques at the heart of the Rainbow research. ViSP was designed to be independent from the hardware, to be simple to use, expandable and cross-platform. ViSP allows designing vision-based tasks for eye-in-hand and eye-to-hand systems from the most classical visual features that are used in practice. It involves a large set of elementary positioning tasks with respect to various visual features (points, segments, straight lines, circles, spheres, cylinders, image moments, pose...) that can be combined together, and image processing algorithms that allow tracking of visual cues (dots, segments, ellipses...), or 3D model-based tracking of known objects or template tracking. Simulation capabilities are also available.

We have extended ViSP with a new open-source dynamical simulator named FrankaSim based on CoppeliaSim and ROS for the popular Franka Emika Robot [37]. The simulator fully integrated in the ViSP ecosystem features a dynamic model that has been accurately identified from a real robot, leading to more realistic simulations. Conceived as a multipurpose research simulation platform, it is well suited for visual servoing applications as well as, in general, for any pedagogical purpose in robotics. All the software, models and CoppeliaSim scenes presented in this work are publicly available under free GPL-2.0 license.

We have also recently introduced a module dedicated to deep neural networks (DNN) to facilitate image classification and object detection. This module is used to infer the convolutional networks Faster-RCNN, SSD-MobileNet, ResNet 10, Yolo v3, Yolo v4, Yolo v5, Yolo v7 and Yolo v8, which simultaneously predict object boundaries and prediction scores at each position.

From a software point of view, ViSP provides simple ways to integrate and validate new algorithms with already existing tools. It follows a module-based software engineering design where data types, algorithms, sensors, viewers and user interaction are made available. Written in C++, ViSP is based on open-source cross-platform libraries (such as OpenCV) and builds with CMake. Several platforms are supported, including OSX, iOS, Windows and Linux. ViSP online documentation allows to ease learning. More than 307 fully documented classes organized in 18 different modules, with more than 475 examples and 114 tutorials are proposed to the user. ViSP is released under a dual licensing model. It is open-source with a GNU GPLv2 or GPLv3 license. A professional edition license that replaces GNU GPL is also available.

ViSP is interfaced with various robots, haptic devices, force-torque sensors, laser range finders, depth cameras, RGB cameras, and motion capture system that you can use for learning visual-servoing or building robotics applications on top of them based on ViSP. See Supported Hardware section.

To not reinvent the wheel, ViSP is interfaced with various third parties like OpenCV, MavSDK, libur_rtde... See the complete list of Supported Third-Party Libraries.

Software architecture

Since ViSP 3.0.0, we design a new modular software architecture where ViSP capabilities are grouped in several modules (core, io, gui, vision, …). In ViSP 3.1.0 we introduced a new module called imgproc. As a result, the user will find several shared or static libraries, one for each module. The following figure highlights the module dependencies and the third-party libraries that may be used by each module. The central module is the core module. All other modules depend on core.

ViSP modules and their optional dependencies

Download

From https://visp.inria.fr/download/ page you can either download the latest stable release, a daily snapshot or the current development distribution using git

$ git clone https://github.com/lagadic/visp

Installation

Because ViSP is a multi platform library that works under Linux, OSX and Windows, to install ViSP from source you need the CMake configuration tool available from http://www.cmake.org/. Furthermore, depending on your operation system and the capabilities (framegrabber, display, simulation, ...) you need, prior to install ViSP, install Supported Third-Party Libraries. There is also this page https://visp.inria.fr/software-architecture/ that gives an overview of the third-parties used by each ViSP module.

ViSP full installation procedure explaining how to install CMake and third-parties is detailed in the Installation page. Getting started and documents in pdf are also available from https://visp.inria.fr/publications/.

Tutorials

To learn ViSP, we propose a lot of tutorials that show the basic use of ViSP classes in Tutorials.

ViSP C++ classes are organized in modules that may help the user during his project implementation.

From the example page, you will also find examples showing how to use ViSP to acquire and display an image, compute a camera pose, estimate an homography, servo a real robot or a simulated one using a 2D, 2D half or 3D visual servoing scheme, ...

Citing ViSP

Please cite ViSP in your publications if it helps your research:

@article{Marchand05b,
Author = {Marchand, E. and Spindler, F. and Chaumette, F.},
Title = {ViSP for visual servoing: a generic software platform with a wide class of robot control skills},
Journal = {IEEE Robotics and Automation Magazine},
Volume = {12},
Number = {4},
Pages = {40--52},
Publisher = {IEEE},
Month = {December},
Year = {2005}
}

To cite the generic model-based tracker:

@InProceedings{Trinh18a,
Author = {Trinh, S. and Spindler, F. and Marchand, E. and Chaumette, F.},
Title = {A modular framework for model-based visual tracking using edge, texture and depth features},
BookTitle = {{IEEE/RSJ Int. Conf. on Intelligent Robots and Systems, IROS'18}},
Address = {Madrid, Spain},
Month = {October},
Year = {2018}
}

To cite pose estimation algorithms and hands-on survey illustrated with ViSP examples:

@article{Marchand16a,
Author = {Marchand, E. and Uchiyama, H. and Spindler, F.},
Title = {Pose estimation for augmented reality: a hands-on survey},
Journal = {IEEE Trans. on Visualization and Computer Graphics},
Volume = {22},
Number = {12},
Pages = {2633--2651},
Month = {December},
Year = {2016}
}

How to help ?

ViSP library is an open source C++ library which is developed at Inria by Rainbow team. If you enjoy using ViSP, you may contribute to the project in different ways. This will motivate us to continue the efforts.

  • You can submit a bug report using the tracker.
  • You can submit patches or new functionalities using GitHub Pull Request mechanism.
  • You can write new tutorials, new documentations or simply improve the existing documentation.
  • If you just want to say you've been happy with the library, you can send us a postcard from your place, to the following address: Inria Rennes Bretagne Atlantique, Lagadic team, Campus de Beaulieu, 35042 Rennes Cedex, FRANCE.

You can also ask for help using GitHub discussions.