Giter Club home page Giter Club logo

cocomr / coco Goto Github PK

View Code? Open in Web Editor NEW
6.0 3.0 3.0 7.46 MB

Compact Components is a framework for the development of resource intensive applications with a focus on Mixed Reality applications and Robotics. This repository provides the core technology over which CoCo Mixed Reality is based

Home Page: http://coco.readthedocs.io/

License: MIT License

CMake 5.82% CSS 0.19% JavaScript 2.70% HTML 1.30% C++ 86.66% C 0.73% Python 2.58% Shell 0.02% Batchfile 0.01%
mixed-reality virtual-reality haptics

coco's Introduction

Build Status

Compact Component Library: CoCo#

A C++ framework for high-performance multi-thread shared memory applications. Split your application in component that can run in parallel to each other or be encapsulated one in the other. Components can run periodically or be triggered by events. CoCo provides also a port system allowing the components to communicate with very low overhead without worrying of concurrency issues.

It has been widely used in robotics applications, ranging from Augmented Reality for teleoperation to haptic-rendering for virtual training.

It is also compatible with ROS allowing it to be used in any kind of high-level control applications.

Platforms

CoCo is a cross-platform framework based on C++11 that builds on Linux, OSX and Windows MingW64. The platform maintainers are:

  • Linux: Brizzi, with automated Builds on Travis
  • OSX, Windows: Ruffaldi

The Mixed Reality framework (not yet Open Source) based on CoCo is still cross-platform and it relies on two elements:

Usage

The documentation for installing and using CoCo can be found on readthedocs

Use in Scientific Work

In case you are going to use this work in a scientific publication please cite the following paper

Ruffaldi E. & Brizzi F. (2016). CoCo - A framework for multicore visuo-haptics in mixed reality. In SALENTO AVR, 3rd International Conference on Augmented Reality, Virtual Reality and Computer Graphics (pp. 339-357). Springer. doi:10.1007/978-3-319-40621-3_24 isbn:978-3-319-40620-6

Note that CoCo has been used in a number of other pubblications listed in References at the end of this README.md

Contribution

We are always open to people willing to help! If you found any bug or want to propose some new feature or improvement use the github issue system or documentation issues, write on github issue tracking or directly at filippobrizzi at gmail.com / emanuelerffaldi @gmail.com.

Related Systems

CoCo can be compare to some frameworks such as OpenFrameworks, Cinder although with different goals and functionalities.

Authors

This framework has been developed in the PERCRO Laboratory of the Scuola Superiore Sant'Anna, Pisa by Filippo Brizzi and Emanuele Ruffaldi A special thanks to Nicola Giordani for the web viewer and the review of the code.

References

  • (CoCo) Ruffaldi E. & Brizzi F. (2016). CoCo - A framework for multicore visuo-haptics in mixed reality. In SALENTO AVR, 3rd International Conference on Augmented Reality, Virtual Reality and Computer Graphics (pp. 339-357). Springer. doi:10.1007/978-3-319-40621-3_24 isbn:978-3-319-40620-6 - Slides PDF

  • (AR with Baxter) Ruffaldi E., Brizzi F., Bacinelli S. & Tecchia F. (2016). Third point of view Augmented Reality for robot intentions visualization. In SALENTO AVR, 3rd International Conference on Augmented Reality, Virtual Reality and Computer Graphics (pp. 471-478). Springer. doi:10.1007/978-3-319-40621-3_35 isbn:978-3-319-40620-6

  • (AR Teleop with Baxter) Peppoloni L., Brizzi F., Ruffaldi E. & Avizzano C.A. (2015). Augmented Reality-aided Tele-presence System for Robot Manipulation in Industrial Manufacturing. In Proceedings of the 21st ACM Symposium on Virtual Reality Software and Technology (VRST) (pp. 237-240). ACM. doi:10.1145/2821592.2821620 isbn:978-1-4503-3990-2

  • (AR Encountered Haptics V2) Filippeschi A., Brizzi F., Ruffaldi E., Jacinto J.M. & Avizzano C.A. (2015). Encountered-type haptic interface for virtual interaction with real objects based on implicit surface haptic rendering for remote palpation. In IEEE IROS Proceedings (pp. 5904-5909). . doi:10.1109/IROS.2015.7354216

  • (Co-Located Haptics) Ruffaldi E., Brizzi F., Filippeschi A. & Avizzano C.A. (2015). Co-Located haptic interaction for Virtual USG exploration. In Proceedings of IEEE EMBC (pp. 1548-1551). . doi:10.1109/EMBC.2015.7318667

  • (AR Teleop with Youbot) Peppoloni L., Brizzi F., Avizzano C.A. & Ruffaldi E., Immersive ROS-integrated framework for robot teleoperatio, Proceedings of IEEE 3DUI (pp. 177-178). ,2015 doi:10.1109/3DUI.2015.7131758 - Video mp4

  • (AR Encountered Haptivs V1) Ruffaldi Emanuele, Filippeschi Alessandro, Jacinto Juan Manuel, Brizzi Filippo & Avizzano Carlo Alberto, Encountered haptic Augmented Reality interface for remote examination. Proceedings of IEEE 3DUI (pp. 179-180) ,2015 doi:10.1109/3DUI.2015.7131759 - Video mp4.

coco's People

Contributors

eruffaldi avatar filippobrizzi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

coco's Issues

Using C++ for type-safe, intellisense enabled XML generation

  1. extract Component signatures
  2. generate stub code
  3. include code into program that binds components (intellisense enabled)
  4. compile and run emitting XML or directly launching CoCo

We implement it in C++ but could be implemented with any typed language

Pros: faster editing, support for arguments
Cons: little slower

We could limit the Cons as follows:

  1. let launcher support this file at command line with -x automatically compiling and executing and passing the correct includes
  2. perform step 1 with some form of caching

Distributed Pipeline, Recursive Services Tree, Mobile (iOS/Android)

Hi,

Hope you are all well !

I found your interesting repos as I am searching some project helping to build up an augmented/mixed reality pipeline POC using any web camera input (iOS,Android or Desktop) and to distribute requests

I wanted to create some kind of flow orchestration where u can pre-process x pictures per seconds (eg every 5 frames) and check if the picture is blurry or dark, and prevent them to be sent either to a local processes or remote micro-services for face detection, markerless tracking, wikipedia-search.

The key idea is to define some input validity checks fro the input, before doing some distributed requests. And to use a shared/efficient strategy for sharing the input with several respondents.

I think that creating such recursive tree of services, tagged by specific topologies of services/processes, would help to complete the visual semantic extraction.

eg: face detected: facial landmarks , eye detection, openface, face reconstruction checked in paralel every x frames or once for some processes

or

eg: planar marker detected: markerless tracking,  instance matching service, wikipedia search about the author checked in paralel every x frames or once 

** Distributed Detections on mobile devices:**

Goals:

  • adds a visual discovery feature to wikipedia based on category or instance matching
  • save energy on mobile devices, allow smart service requests by a cascade or pre-processing with a small memory-footprint/cost.

Have a good week !

Cheers,
Richard

Sending content to Components in XML or extending components

This is a feature that is useful for SRG

  1. the content of the tag is sent to the component via an operator (content) passing the name and the value in the XML tag.

  2. allows to extend a previously defined component with content tags. Decide if we can replace attributes, probably yes

Multiple -x per launcher

coco_launcher should support multiple -x occurrences and compose the resulting structure. This is in-line with the addition of .

REST API for controlling CoCo

This would allow a Python/any command line editing of the system:

  • new instance
  • new activity
  • new connection
  • execute operations
  • get/set attrib
  1. define API
  2. implement in web_server
  3. make Python command line tool

Lightweight Mutex

CoCo and SRGViz use extensively mutexes and in particular we employ boost::shared_mutex (now in C++17) for supporting in particular lock upgrades. Unfortunately these mutexes are quite heavyweight as shown from tests online (https://www.arangodb.com/2015/02/comparing-atomic-mutex-rwlocks/).

We should evaluate to introduce the use of RWLocks, available in pthread and also in modern Windows, to speed-up lock acquisition in core CoCo/SRGViz structures.

  1. Find spots for improvements
  2. Pick library providing lightweight mutexes
  3. Replace!
  4. Profile

Memory Pool optimizations

1 - align to next pow2: useful for the little variable blocks of x264 compressors. Hint from user
2 - skip for smaller then size K: probably makes not necessary previous one
3 - per-task memory pool with lightweight deleter: the concept is that we want to reduce the cost of multithreaded allocation so we employ:
3.1 - per-task or per-activity pool (reasonable given the usage patterns)
3.2 - deletion can be lock-less

Python tool for generating CoCo xml files

Simplify the generation of CoCo XML files using more default, more semantic structure and easy launch from Python:

  • Compositing Scenes
  • Classes wrapping CoCoMR blocks
  • Virtual Pub/Sub, while waiting for Pub/Sub
  • Launch CoCo or ROS CoCo

We'll recreate the demos

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.