jaxsim 0.2.1.dev62__tar.gz → 0.2.1.dev69__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/PKG-INFO +1 -1
  2. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/_version.py +2 -2
  3. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/descriptions/model.py +49 -54
  4. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/kinematic_graph.py +288 -156
  5. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/rod/parser.py +2 -42
  6. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim.egg-info/PKG-INFO +1 -1
  7. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.devcontainer/Dockerfile +0 -0
  8. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.devcontainer/devcontainer.json +0 -0
  9. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.gitattributes +0 -0
  10. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.github/CODEOWNERS +0 -0
  11. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.github/workflows/ci_cd.yml +0 -0
  12. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.github/workflows/read_the_docs.yml +0 -0
  13. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.github/workflows/style.yml +0 -0
  14. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.gitignore +0 -0
  15. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.pre-commit-config.yaml +0 -0
  16. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/.readthedocs.yaml +0 -0
  17. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/CONTRIBUTING.md +0 -0
  18. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/LICENSE +0 -0
  19. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/README.md +0 -0
  20. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/Makefile +0 -0
  21. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/conf.py +0 -0
  22. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/guide/install.rst +0 -0
  23. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/index.rst +0 -0
  24. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/make.bat +0 -0
  25. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/api.rst +0 -0
  26. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/index.rst +0 -0
  27. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/integrators.rst +0 -0
  28. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/math.rst +0 -0
  29. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/mujoco.rst +0 -0
  30. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/parsers.rst +0 -0
  31. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/rbda.rst +0 -0
  32. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/typing.rst +0 -0
  33. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/docs/modules/utils.rst +0 -0
  34. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/environment.yml +0 -0
  35. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/examples/.gitattributes +0 -0
  36. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/examples/.gitignore +0 -0
  37. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/examples/PD_controller.ipynb +0 -0
  38. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/examples/Parallel_computing.ipynb +0 -0
  39. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/examples/README.md +0 -0
  40. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/examples/assets/cartpole.urdf +0 -0
  41. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/pixi.lock +0 -0
  42. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/pyproject.toml +0 -0
  43. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/setup.cfg +0 -0
  44. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/setup.py +0 -0
  45. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/__init__.py +0 -0
  46. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/__init__.py +0 -0
  47. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/com.py +0 -0
  48. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/common.py +0 -0
  49. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/contact.py +0 -0
  50. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/data.py +0 -0
  51. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/joint.py +0 -0
  52. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  53. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/link.py +0 -0
  54. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/model.py +0 -0
  55. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/ode.py +0 -0
  56. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/ode_data.py +0 -0
  57. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/api/references.py +0 -0
  58. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/integrators/__init__.py +0 -0
  59. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/integrators/common.py +0 -0
  60. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/integrators/fixed_step.py +0 -0
  61. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/integrators/variable_step.py +0 -0
  62. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/logging.py +0 -0
  63. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/__init__.py +0 -0
  64. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/adjoint.py +0 -0
  65. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/cross.py +0 -0
  66. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/inertia.py +0 -0
  67. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/joint_model.py +0 -0
  68. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/quaternion.py +0 -0
  69. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/rotation.py +0 -0
  70. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/skew.py +0 -0
  71. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/math/transform.py +0 -0
  72. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/mujoco/__init__.py +0 -0
  73. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/mujoco/__main__.py +0 -0
  74. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/mujoco/loaders.py +0 -0
  75. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/mujoco/model.py +0 -0
  76. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/mujoco/visualizer.py +0 -0
  77. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/__init__.py +0 -0
  78. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  79. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  80. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  81. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/descriptions/link.py +0 -0
  82. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/rod/__init__.py +0 -0
  83. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/parsers/rod/utils.py +0 -0
  84. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/__init__.py +0 -0
  85. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/aba.py +0 -0
  86. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/collidable_points.py +0 -0
  87. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/crba.py +0 -0
  88. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  89. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/jacobian.py +0 -0
  90. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/rnea.py +0 -0
  91. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/soft_contacts.py +0 -0
  92. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/rbda/utils.py +0 -0
  93. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/terrain/__init__.py +0 -0
  94. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/terrain/terrain.py +0 -0
  95. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/typing.py +0 -0
  96. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/utils/__init__.py +0 -0
  97. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/utils/hashless.py +0 -0
  98. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  99. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim/utils/tracing.py +0 -0
  100. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  101. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  102. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim.egg-info/not-zip-safe +0 -0
  103. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim.egg-info/requires.txt +0 -0
  104. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/src/jaxsim.egg-info/top_level.txt +0 -0
  105. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/__init__.py +0 -0
  106. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/conftest.py +0 -0
  107. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_api_com.py +0 -0
  108. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_api_data.py +0 -0
  109. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_api_joint.py +0 -0
  110. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_api_link.py +0 -0
  111. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_api_model.py +0 -0
  112. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_automatic_differentiation.py +0 -0
  113. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_pytree.py +0 -0
  114. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/test_simulations.py +0 -0
  115. {jaxsim-0.2.1.dev62 → jaxsim-0.2.1.dev69}/tests/utils_idyntree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaxsim
3
- Version: 0.2.1.dev62
3
+ Version: 0.2.1.dev69
4
4
  Home-page: https://github.com/ami-iit/jaxsim
5
5
  Author: Diego Ferigo
6
6
  Author-email: diego.ferigo@iit.it
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.2.1.dev62'
16
- __version_tuple__ = version_tuple = (0, 2, 1, 'dev62')
15
+ __version__ = version = '0.2.1.dev69'
16
+ __version_tuple__ = version_tuple = (0, 2, 1, 'dev69')
@@ -1,6 +1,8 @@
1
+ from __future__ import annotations
2
+
1
3
  import dataclasses
2
4
  import itertools
3
- from typing import List
5
+ from typing import Sequence
4
6
 
5
7
  from jaxsim import logging
6
8
 
@@ -13,63 +15,62 @@ from .link import LinkDescription
13
15
  @dataclasses.dataclass(frozen=True)
14
16
  class ModelDescription(KinematicGraph):
15
17
  """
16
- Description of a robotic model including links, joints, and collision shapes.
17
-
18
- Args:
19
- name (str): The name of the model.
20
- fixed_base (bool): Indicates whether the model has a fixed base.
21
- collision_shapes (List[CollisionShape]): List of collision shapes associated with the model.
18
+ Intermediate representation representing the kinematic graph of a robot model.
22
19
 
23
20
  Attributes:
24
- name (str): The name of the model.
25
- fixed_base (bool): Indicates whether the model has a fixed base.
26
- collision_shapes (List[CollisionShape]): List of collision shapes associated with the model.
21
+ name: The name of the model.
22
+ fixed_base: Whether the model is either fixed-base or floating-base.
23
+ collision_shapes: List of collision shapes associated with the model.
27
24
  """
28
25
 
29
26
  name: str = None
27
+
30
28
  fixed_base: bool = True
31
- collision_shapes: List[CollisionShape] = dataclasses.field(default_factory=list)
29
+
30
+ collision_shapes: list[CollisionShape] = dataclasses.field(
31
+ default_factory=list, repr=False, hash=False
32
+ )
32
33
 
33
34
  @staticmethod
34
35
  def build_model_from(
35
36
  name: str,
36
- links: List[LinkDescription],
37
- joints: List[JointDescription],
38
- collisions: List[CollisionShape] = (),
37
+ links: list[LinkDescription],
38
+ joints: list[JointDescription],
39
+ frames: list[LinkDescription] | None = None,
40
+ collisions: list[CollisionShape] = (),
39
41
  fixed_base: bool = False,
40
42
  base_link_name: str | None = None,
41
- considered_joints: List[str] | None = None,
43
+ considered_joints: Sequence[str] | None = None,
42
44
  model_pose: RootPose = RootPose(),
43
- ) -> "ModelDescription":
45
+ ) -> ModelDescription:
44
46
  """
45
47
  Build a model description from provided components.
46
48
 
47
49
  Args:
48
- name (str): The name of the model.
49
- links (List[LinkDescription]): List of link descriptions.
50
- joints (List[JointDescription]): List of joint descriptions.
51
- collisions (List[CollisionShape]): List of collision shapes associated with the model.
52
- fixed_base (bool): Indicates whether the model has a fixed base.
53
- base_link_name (str): Name of the base link.
54
- considered_joints (List[str]): List of joint names to consider.
55
- model_pose (RootPose): Pose of the model's root.
50
+ name: The name of the model.
51
+ links: List of link descriptions.
52
+ joints: List of joint descriptions.
53
+ frames: List of frame descriptions.
54
+ collisions: List of collision shapes associated with the model.
55
+ fixed_base: Indicates whether the model has a fixed base.
56
+ base_link_name: Name of the base link (i.e. the root of the kinematic tree).
57
+ considered_joints: List of joint names to consider (by default all joints).
58
+ model_pose: Pose of the model's root (by default an identity transform).
56
59
 
57
60
  Returns:
58
- ModelDescription: A ModelDescription instance representing the model.
59
-
60
- Raises:
61
- ValueError: If invalid or missing input data.
61
+ A ModelDescription instance representing the model.
62
62
  """
63
63
 
64
- # Create the full kinematic graph
64
+ # Create the full kinematic graph.
65
65
  kinematic_graph = KinematicGraph.build_from(
66
66
  links=links,
67
67
  joints=joints,
68
+ frames=frames,
68
69
  root_link_name=base_link_name,
69
70
  root_pose=model_pose,
70
71
  )
71
72
 
72
- # Reduce the graph if needed
73
+ # Reduce the graph if needed.
73
74
  if considered_joints is not None:
74
75
  kinematic_graph = kinematic_graph.reduce(
75
76
  considered_joints=considered_joints
@@ -78,11 +79,13 @@ class ModelDescription(KinematicGraph):
78
79
  # Create the object to compute forward kinematics.
79
80
  fk = KinematicGraphTransforms(graph=kinematic_graph)
80
81
 
81
- # Store here the final model collisions
82
- final_collisions: List[CollisionShape] = []
82
+ # Container of the final model's collision shapes.
83
+ final_collisions: list[CollisionShape] = []
83
84
 
84
- # Move and express the collision shapes of the removed link to the lumped link
85
+ # Move and express the collision shapes of removed links to the resulting
86
+ # lumped link that replace the combination of the removed link and its parent.
85
87
  for collision_shape in collisions:
88
+
86
89
  # Get all the collidable points of the shape
87
90
  coll_points = list(collision_shape.collidable_points)
88
91
 
@@ -112,7 +115,7 @@ class ModelDescription(KinematicGraph):
112
115
  final_collisions.append(new_collision_shape)
113
116
 
114
117
  # If the frame was found, update the collidable points' pose and add them
115
- # to the new collision shape
118
+ # to the new collision shape.
116
119
  for cp in collision_shape.collidable_points:
117
120
  # Find the link that is part of the (reduced) model in which the
118
121
  # collision shape's parent was lumped into
@@ -145,22 +148,20 @@ class ModelDescription(KinematicGraph):
145
148
  _joints_removed=kinematic_graph._joints_removed,
146
149
  )
147
150
 
151
+ # Check that the root link of kinematic graph is the desired base link.
148
152
  assert kinematic_graph.root.name == base_link_name, kinematic_graph.root.name
149
153
 
150
154
  return model
151
155
 
152
- def reduce(self, considered_joints: List[str]) -> "ModelDescription":
156
+ def reduce(self, considered_joints: Sequence[str]) -> ModelDescription:
153
157
  """
154
158
  Reduce the model by removing specified joints.
155
159
 
156
160
  Args:
157
- considered_joints (List[str]): List of joint names to consider.
161
+ The joint names to consider.
158
162
 
159
163
  Returns:
160
- ModelDescription: A reduced ModelDescription instance.
161
-
162
- Raises:
163
- ValueError: If the specified joints are not part of the model.
164
+ A `ModelDescription` instance that only includes the considered joints.
164
165
  """
165
166
 
166
167
  if len(set(considered_joints) - set(self.joint_names())) != 0:
@@ -172,6 +173,7 @@ class ModelDescription(KinematicGraph):
172
173
  name=self.name,
173
174
  links=list(self.links_dict.values()),
174
175
  joints=self.joints,
176
+ frames=self.frames,
175
177
  collisions=self.collision_shapes,
176
178
  fixed_base=self.fixed_base,
177
179
  base_link_name=list(iter(self))[0].name,
@@ -190,12 +192,8 @@ class ModelDescription(KinematicGraph):
190
192
  Enable or disable collision shapes associated with a link.
191
193
 
192
194
  Args:
193
- link_name (str): Name of the link.
194
- enabled (bool): Enable or disable collision shapes associated with the link.
195
-
196
- Raises:
197
- ValueError: If the link name is not found in the model.
198
-
195
+ link_name: The name of the link.
196
+ enabled: Enable or disable collision shapes associated with the link.
199
197
  """
200
198
 
201
199
  if link_name not in self.link_names():
@@ -211,14 +209,10 @@ class ModelDescription(KinematicGraph):
211
209
  Get the collision shape associated with a specific link.
212
210
 
213
211
  Args:
214
- link_name (str): Name of the link.
212
+ link_name: The name of the link.
215
213
 
216
214
  Returns:
217
- CollisionShape: The collision shape associated with the link.
218
-
219
- Raises:
220
- ValueError: If the link name is not found in the model.
221
-
215
+ The collision shape associated with the link.
222
216
  """
223
217
 
224
218
  if link_name not in self.link_names():
@@ -233,14 +227,15 @@ class ModelDescription(KinematicGraph):
233
227
  ]
234
228
  )
235
229
 
236
- def all_enabled_collidable_points(self) -> List[CollidablePoint]:
230
+ def all_enabled_collidable_points(self) -> list[CollidablePoint]:
237
231
  """
238
232
  Get all enabled collidable points in the model.
239
233
 
240
234
  Returns:
241
- List[CollidablePoint]: A list of all enabled collidable points.
235
+ The list of all enabled collidable points.
242
236
 
243
237
  """
238
+
244
239
  # Get iterator of all collidable points
245
240
  all_collidable_points = itertools.chain.from_iterable(
246
241
  [shape.collidable_points for shape in self.collision_shapes]