Efficient implementation of GJK algorithm for proximity queries (collision detection, distance computations, penetration depths and witness points) between convex shapes.
The library can be extended to any convex shape for which we can compute the support function, but it already supports polyhedrons, boxes, spheres and ellipsoids, and it is particularly optimized for strictly convex hulls (SCH/STP-BV).
The implementation is detailed in:
@INPROCEEDINGS{benallegue:icra:2009,
author={Benallegue, M. and Escande, A. and Miossec, S. and Kheddar, A.},
booktitle={Robotics and Automation, 2009. ICRA '09. IEEE International Conference on},
title={Fast C1 proximity queries using support mapping of sphere-torus-patches bounding volumes},
year={2009},
month={May},
pages={483-488},
keywords={Application software;Assembly;Clouds;Computer graphics;Robotics and automation;Robots;Shape;Target tracking;Testing;Trajectory},
doi={10.1109/ROBOT.2009.5152722},
ISSN={1050-4729},
}
And a description of strictly convext hulls is detailed in:
@article{escande:itro:2014,
author = {Adrien Escande and Sylvain Miossec and Mehdi Benallegue and Abderrahmane Kheddar},
title = {A Strictly Convex Hull for Computing Proximity Distances with Continuous Gradients},
journal={Robotics, IEEE Transactions on},
year = {2014}
month={June},
volume={30},
number={3},
pages={666-678},
keywords={Collision avoidance;Convergence;Optimization;Planning;Robots;Shape;Vectors;Bounding volume;continuous gradients of proximity distances;smooth and nonsmooth optimization;sphere-torus patches;strictly convex hulls},
doi={10.1109/TRO.2013.2296332},
ISSN={1552-3098},
url = {https://sites.google.com/site/adrienescandehomepage/publications/2014_ITRO_Escande.pdf}
}
This library is provided under two licenses:
- The GPL-v2 version is the most complete, it includes inter-penetration depth computation based on the SOLID code;
- The BSD-2-Clause version does not include this algorithm;
Note: the two versions have the same API and ABI.
Note: the packaged version is the BSD-2-Clause library, if you require inter-penetration depth computation, you should build the library yourself.
You must first setup our package mirror:
curl -1sLf \
'https://dl.cloudsmith.io/public/mc-rtc/stable/setup.deb.sh' \
| sudo -E bash
You can also choose the head mirror which will have the latest version of this package:
curl -1sLf \
'https://dl.cloudsmith.io/public/mc-rtc/stable/setup.deb.sh' \
| sudo -E bash
You can then install the package:
sudo apt install libsch-core-dev
Install the latest version using conan
conan remote add multi-contact https://api.bintray.com/conan/gergondet/multi-contact
# Install the latest release
conan install sch-core/latest@multi-contact/stable
# Or install the latest development version
# conan install sch-core/latest@multi-contact/dev
Building using cmake:
git clone https://github.com/jrl-umi3218/sch-core.git --recursive
mkdir -p sch-core/build
cd sch-core/build
cmake .. # you probably want to define `CMAKE_INSTALL_PREFIX`
make
sudo make install
SCH_BUILD_BSD
: If ON, build the library without its GPL components (Default: OFF)
astyle --style=allman --lineend=linux --indent=spaces=2 --indent-namespaces