diff --git a/CHANGELOG.md b/CHANGELOG.md
index 23b871ea..2391353f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,11 +6,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
-- Unit testing inertia validity and projected rotation inertial to the fully-physical consistent set in https://github.com/Gepetto/example-robot-data/pull/370
-- Installing example-robot-data without hppfcl in https://github.com/Gepetto/example-robot-data/pull/338
+### Added
+
+- Unit testing inertia validity and projected rotation inertial to the fully-physical consistent set ([#370](https://github.com/Gepetto/example-robot-data/pull/370))
+- Installing example-robot-data without hppfcl ([#338](https://github.com/Gepetto/example-robot-data/pull/338))
- ROS: jrl_cmakemodules dependency ([#330](https://github.com/Gepetto/example-robot-data/pull/330))
- Added Centauro ([#346](https://github.com/Gepetto/example-robot-data/pull/346))
+### Changed
+- Use coal instead of hppfcl ([#374](https://github.com/Gepetto/example-robot-data/pull/374))
+
## [4.4.0] - 2025-09-29
- The default git branch is now devel
diff --git a/package.xml b/package.xml
index 0b125ac3..a355d5b0 100644
--- a/package.xml
+++ b/package.xml
@@ -22,6 +22,7 @@
jrl_cmakemodules
python3
python3-numpy
+ coal
pinocchio
pinocchio
diff --git a/python/example_robot_data/panda.py b/python/example_robot_data/panda.py
index 97c0b06e..aac317fd 100644
--- a/python/example_robot_data/panda.py
+++ b/python/example_robot_data/panda.py
@@ -4,9 +4,9 @@
import pinocchio as pin
try:
- import hppfcl as fcl
+ import coal
except ImportError:
- fcl = None
+ coal = None
from .utils import RobotLoader, getModelPath
@@ -30,10 +30,10 @@ def __init__(self, verbose=False):
root = getModelPath(self.path)
self.robot.urdf = join(root, self.path, self.urdf_subpath, self.urdf_filename)
- # If hppfcl is not available, gracefully skip collision edits
- if fcl is None or not getattr(pin, "WITH_HPP_FCL", True):
+ # If coal is not available, gracefully skip collision edits
+ if coal is None or not getattr(pin, "WITH_COLLISION", True):
print(
- "[PandaLoaderCollision] hppfcl not available - skipping collision geometry processing."
+ "[PandaLoaderCollision] coal not available - skipping collision geometry processing."
)
return
@@ -46,14 +46,14 @@ def __init__(self, verbose=False):
base_name = "_".join(geom_object.name.split("_")[:-1])
# Convert cylinders to capsules
- if isinstance(geometry, fcl.Cylinder):
+ if isinstance(geometry, coal.Cylinder):
name = self.generate_capsule_name(base_name, list_names_capsules)
list_names_capsules.append(name)
capsule = pin.GeometryObject(
name=name,
parent_frame=int(geom_object.parentFrame),
parent_joint=int(geom_object.parentJoint),
- collision_geometry=fcl.Capsule(
+ collision_geometry=coal.Capsule(
geometry.radius, geometry.halfLength
),
placement=geom_object.placement,
@@ -63,7 +63,7 @@ def __init__(self, verbose=False):
self.robot.collision_model.removeGeometryObject(geom_object.name)
# Remove spheres associated with links
- elif isinstance(geometry, fcl.Sphere) and "link" in geom_object.name:
+ elif isinstance(geometry, coal.Sphere) and "link" in geom_object.name:
self.robot.collision_model.removeGeometryObject(geom_object.name)
# Recreate collision data since the collision pairs changed
diff --git a/python/example_robot_data/utils.py b/python/example_robot_data/utils.py
index 4f45b43b..2f4b6163 100644
--- a/python/example_robot_data/utils.py
+++ b/python/example_robot_data/utils.py
@@ -130,7 +130,7 @@ def __init__(self, verbose=False):
self.ref_posture,
)
- if pin.WITH_HPP_FCL and pin.WITH_HPP_FCL_BINDINGS:
+ if pin.WITH_COLLISION:
# Add all collision pairs
self.robot.collision_model.addAllCollisionPairs()