• Stars
    star
    117
  • Rank 301,828 (Top 6 %)
  • Language
    C++
  • Created over 11 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Robust Fiducial Markers for Augmented Reality And Robotics

Chilitags 2: Robust Fiducial Markers for Augmented Reality and Robotics

Chilitags are a C++ cross-platform software library for the detection and identification of 2D fiducial markers (a.k.a. tags). Their purpose is to be printed and placed on objects from the real world, to form the basis of Robotics or Augmented Reality (AR) applications. Using a camera, the position of the tagged objects can be acquired by a computer.

Chilitags were developed internally for projects of the CHILI lab (Computer-Human Interaction in Learning and Instruction, formerly CRAFT), such as Metroscope or TapaCarp. There are already many alternatives (e.g. ARToolKit, or reacTIVision, among many others), but we decided to release Chilitags anyway, as there seemed to be a demand for it.

The following videos show real applications of Chilitags for research in tangible learning or paper-based interfaces.

Overview

Features

Chilitags features two main functionalities:

  • Detecting tags on images, i.e. finding their position on an input image.

  • Estimating the pose in 3D, i.e. finding their position and orientation and in the real world.

Additionnally, Chilitags features various utilities to deal with imperfect detection, such as filters to smooth the position of tags/3Dobjects.

The characteristics of Chilitags come from their original use:

  • Illumination tolerance: Chilitags were developed for use in projector/camera systems, which required the detection to be robust to the illumination constraints of the projector.

  • Precision: Chilitags were used in applications to teach geometry, which required the detection to be as precise as possible to match the requirement on the quality of work of the students.

  • Reliability: Chilitags were used for long experiments in ecologically valid conditions, which required to build systems stable even in various, uncontrolled settings.

Chilitags can be recognized even from low resolution images (tags as narrow as 12 pixels are recognized). However, they are very sensitive to occlusions: if a border is occluded, the tag will not be detected.

The Chilitags demonstration video gives a worst case scenario for the sample code running in real time on a single thread of an Intel Core i7-620m, with a camera set for 960x720x30fps, in an unevenly lit, large scene. The detection has been improved since this video was made.

Content

This release of Chilitags consists of five components:

  • platforms, the source code to expose the Chilitags API in various languages,

  • include and src, the library itself,

  • tools, containing a utility to generate tags,

  • samples and samples-android, sample programs illustrating how to use the library,

  • test, a suite of automated tests.

Getting Started

Chilitags have been developed on Linux (Ubuntu 64 bits), and are known to run on Windows, MacOS X and Android.

Dependencies

Chilitags rely on OpenCV 2.4+ and C++11. They have has been recently tested with OpenCV 2.4 and on Ubuntu (64 bits) 13.04, 13.10 and 14.04. The documentation on how to install OpenCV can be found for various platforms and IDE.

On Ubuntu 12.04, you need to manually install a compiler supporting enough of C++11 (for instance, gcc-4.7) and opencv >= 2.4. The .travis.yml file contains commands to do this, in the before_install section

Set up

CMake can be used to generate configuration files of the most popular IDE's of the main platforms. A CMakeLists file is provided in the release. Please refer to online documentation on how to use CMake.

Example

For example on Ubuntu, the software can be compiled via makefile with the following commands:

  • sudo apt-get install libopencv-dev cmake

to install the OpenCV libraries and cmake

  • mkdir build && cd build

to create the build folder where the compilation output will be placed

  • ccmake ..

to configure the build. Activate the WITH_SAMPLES option.

  • make

to build the library, the tag creation tool and the sample programs

  • sudo make install

to install the library system-wide (see CMake options to install in another prefix).

  • ./samples/detect-live

to start the sample program with default parameters for the camera.

Tag Generation

Once the software is up and running, the tags can be generated using the creator executable in tools. We also generated sets of tags with various settings.

The README file accompanying creator gives important guidelines on how to design and print chilitags. It also explains the usage of creator.

The main design principles for tags are summarized below:

Tag design principles

Documentation

The documentation regarding the usage of chilitags is provided under the form of the sample code detect-live. Please refer to its README file and comments in its source code.

Platforms

Specific instructions for building Chilitags for Android can be found under README-ANDROID.md.

Coding style

This repository uses uncrustify, a tool that does automatic code formatting based on a predefined configuration defined in uncrustify.cfg. In order to keep the code formatting consistent, it is useful to uncrustify before committing. You may consider using a git pre-commit hook to remind you of this.

For example, you can add a pre-commit hook that inhibits you from committing if the source files are not formatted correctly. Simply add a file .git/hooks/pre-commit that contains the following

#!/bin/sh

exec uncrustify -c uncrustify.cfg --check src/* include/*

More complex hooks can be built, such as this one that runs uncrustify before every commit and stores the diff in a patch.

Licence

Chilitags is released under the LGPL3.

In short, it means that you can do more or less what you want with Chilitags, as long as you publish the modifications you make to Chilitags under the same terms (but you don't have to share the sources of the rest of your software).

You should also credit the authors.

We especially appreciate a reference in your paper, should you use Chilitags for a research project. Let us make that easy for you:

  • Chilitags: Robust Fiducial Markers for Augmented Reality. Q. Bonnard, S. Lemaignan, G. Zufferey, A. Mazzei, S. Cuendet, N. Li, P. Dillenbourg. CHILI, EPFL, Switzerland. http://chili.epfl.ch/software. 2013.
	@misc{chilitags,
		title = {Chilitags 2: Robust Fiducial Markers for Augmented Reality and Robotics.},
		author={Bonnard, Quentin and Lemaignan, S\'{e}verin and Zufferey, Guillaume and Mazzei, Andrea and Cuendet, S\'{e}bastien and Li, Nan and \"{O}zg\"{u}r, Ayberk and Dillenbourg, Pierre},
		publisher={CHILI, EPFL, Switzerland},
		url={http://chili.epfl.ch/software},
		year={2013}
	}

Should you require a different licence, please contact CHILI.

More Repositories

1

attention-tracker

C++
136
star
2

FROG

Fabricating and running orchestration graphs
JavaScript
82
star
3

qml-cvcamera

QML plugin wrapper for fast OpenCV camera access on desktop & Android
C++
57
star
4

collab-react-components

React components for collaborative editing: text, rich text, and complex forms
JavaScript
49
star
5

qml-ar

Seamless Augmented Reality module for QML using UchiyaMarkers
C++
38
star
6

qtphysics-unofficial

A qml wrapper for the physic engine Bullet
C++
28
star
7

Trend-Detection

Detecting Trends in Job Advertisements
Python
22
star
8

nao_writing

A set of ROS nodes which allow a robot to perform simulated handwriting through motions which are synchronised with an android tablet's display.
Python
19
star
9

paper-poster-presentation-template

A LaTeX template pack for ieeetran, sigchi, acm-sig-alternate, llncs2e, baposter, nccr-poster and beamer
TeX
18
star
10

qml-logger

Plugin for file logging from QML
C++
17
star
11

qml-imu

QML plugin that fuses, filters and exports inertial sensor data
C++
16
star
12

openface_tracker

New version of attention_tracker (https://github.com/chili-epfl/attention-tracker) using OpenFace Project https://github.com/TadasBaltrusaitis/OpenFace
C++
16
star
13

chilitrack

A marker-less tracking library for augmented reality (heavily relying on OpenCV)
C++
15
star
14

qml-tcpsockets

QML wrappers for QTcpServer and QTcpSocket
C++
14
star
15

qml-cache

Persistent app-specific key-value store accessible from QML
C++
13
star
16

altium-libs

PCB footprint and schematic libraries for Altium Designer
13
star
17

ar_benchmark

A set of benchmarks to compare the main 2D marker detection and tracking libraries
C++
12
star
18

paprika

JavaScript framework for paper-based interaction in the browser
JavaScript
11
star
19

qml-ARToolkit

QML wrapper for ARToolkit
C++
7
star
20

ros_markers

ROS wrapper for the EPFL's chilitags library
C++
7
star
21

qml-chilitags

QML plugin wrapper for Chilitags, a fiducial marker tracker, on desktop & Android
C++
7
star
22

qml-bluetooth-extras

QML wrappers for missing Qt Bluetooth objects
C++
6
star
23

orchestration-graphs

Workflow engine for orchestration graphs
JavaScript
6
star
24

cowriter_letter_learning

A collection of ROS nodes which enable children to teach the Nao robot handwriting.
Python
6
star
25

cellulo

Cellulo core repository
5
star
26

easy-performance-analyzer

Real-time C++ performance analyzer/minimal profiler for desktop & Android
C++
5
star
27

libgdx-sample

Sample libgdx project to get familiar with libgdx integration with Chilitags, camera etc.
Java
5
star
28

staTIc

StaticAR: AR for learning statics in a qualitative way
QML
5
star
29

cowriter-trajectory-generator

A Qt app that reads a SVG file and generate a 2D trajcetory suitable for execution on a robot
C++
5
star
30

rosbag-recorder

ROS service to start/stop recording a list of topics to a bag file
CMake
4
star
31

ARUchiya

Fork of http://limu.ait.kyushu-u.ac.jp/~uchiyama/me/code/UCHIYAMARKERS/index.html
C++
4
star
32

qml-ros-recorder

QML plugin for recording selected topics to a ROS bag from android (or desktop)
C++
4
star
33

allograph

Library for learning handwritten letters from user demonstration
Jupyter Notebook
4
star
34

ros4nao

Helpers to compile and distribute ROS for Aldebaran's Nao
Shell
3
star
35

shape_learning

A library for learning shape models from user demonstration
Python
3
star
36

minimalkb

A SQLite-backed minimalistic knowledge based for robotic application. Mostly KB-API conformant.
Python
3
star
37

cscl2015-eyetracking-orchestration

Preprocessing, analysis and visualization scripts for the CSCL2015 paper, "The Burden of Facilitating Collaboration: Towards Estimation of Teacher Orchestration Load using Eye-tracking Measures" by Prieto, Sharma, Wen & Dillenbourg
R
3
star
38

CelluloV2

HTML
2
star
39

abc-writer

QML
2
star
40

qml-extra-data-structures

QML data structures and utilities that are either useful or are missing an official QML API
C++
2
star
41

ASILE

Adaptive and Self-Improving Learning Environments
Jupyter Notebook
2
star
42

hoap3_write

A set of scripts to help HOAP3 to write letters for the CoWriter project. Based on the ROS toolset.
Python
2
star
43

qml-3dmouseinterface

A qml plugin to interact with Qt3d scene using the mouse
C++
2
star
44

hoap3_description

ROS package that contains HOAP3 robot URDF and meshes. Based on EPFL's RobotToolKit models.
2
star
45

videoTracker

A c++ application tracking Chilitags in a .avi video and logging their position at each frame. Used as a post-analysis tool for an eye-tracking experiment.
C++
2
star
46

beacon-locator-app

A small Android application to track the location of a person in a classroom, using bluetooth beacons
HTML
2
star
47

realto-dashboard

R
1
star
48

websocketTracker

A very simple example of a cpp websocket communicating with a web page.
JavaScript
1
star
49

FROG-graphs

1
star
50

qml-svo

Test code: QML wrapper for Semi-direct Visual Odometry
C++
1
star
51

leapfrog-creatrhs-fan-duct

Fan duct design and air flow simulation results for Leapfrog's Creatr HS 3D printer
Gnuplot
1
star
52

qml-rosbag-annotator

Annotate a rosbag while watching its topics
C++
1
star
53

leapfrog-creatrhs-nozzle

Custom nozzle designs for Leapfrog Creatr HS
1
star
54

CelluloV1

C
1
star
55

story_reading_nao

Python
1
star
56

paper-HRI2016-attentionTracker

HRI
TeX
1
star
57

shape_learning_android_nodes

Java
1
star
58

EEG-cognitiveload-analysis

Data analysis for the usage of EEG (and eyetracking) to track cognitive load
R
1
star
59

justhink-dialogue-and-actions-corpus

A dataset containing event logs, test responses and transcripts of children aged 9-12 as they participate in the JUSThink activity
1
star
60

carpenter-material-designer

QML
1
star
61

qml-remoteobjects

QML support for Qt's distributed remote objects module
C++
1
star
62

acroread-deb

Acrobat Reader 9.5.5 deb archive
1
star
63

letter_learning_interaction

Python
1
star
64

emotional-manager

Emotion-action framework for nao. Takes a point in a 2D map (valence and arousal) as input and shows a behaviour according to it
Python
1
star
65

eye-gaze-to-plane

C++
1
star
66

qimchi

Modular QML framework for AR, robotics and tangible interfaces
1
star
67

ros-av-capture

ROS launch files and scripts to capture audio and video with a webcam
CMake
1
star
68

eyetracking-playground

Example code for projecting the gaze position from a video to a template image
C++
1
star
69

creatr-hs-arduino-firmware

CHILI's take on the firmware for Leapfrog Creatr HS hardware board
C++
1
star
70

qml-fileio

Basic file IO for QML
C++
1
star
71

paper-IEEETLT-orchestrationload

Data analyses, manuscript and (links to) datasets for the article on the usage of eyetracking to track orchestration load (submitted to IEEE Trasactions on Learning Technologies)
TeX
1
star
72

qml-ros-publisher

QML plugin to interface with ROS master from android
C++
1
star