@@ -36,6 +36,10 @@ def __init__(self, builder: IComposer) -> None:
3636 """Initialize semantic builder."""
3737 self ._builder = builder
3838
39+ def done (self ) -> IComposer :
40+ """Return to the parent RobotBuilder."""
41+ return self ._builder
42+
3943 def group (
4044 self ,
4145 name : str ,
@@ -45,7 +49,7 @@ def group(
4549 subgroups : list [str ] | None = None ,
4650 base_link : str | None = None ,
4751 tip_link : str | None = None ,
48- ) -> IComposer :
52+ ) -> SemanticBuilder :
4953 """Define a planning group for MoveIt.
5054
5155 Args:
@@ -75,11 +79,11 @@ def group(
7579
7680 semantic = self ._builder .robot .semantic
7781 self ._builder .robot .semantic = replace (semantic , groups = tuple (semantic .groups ) + (group ,))
78- return self . _builder
82+ return self
7983
8084 def group_state (
8185 self , name : str , group : str , values : dict [str , float | tuple [float , ...]]
82- ) -> IComposer :
86+ ) -> SemanticBuilder :
8387 """Define a named state (e.g. 'home') for a planning group.
8488
8589 Args:
@@ -98,11 +102,11 @@ def group_state(
98102 self ._builder .robot .semantic = replace (
99103 semantic , group_states = tuple (semantic .group_states ) + (state ,)
100104 )
101- return self . _builder
105+ return self
102106
103107 def end_effector (
104108 self , name : str , group : str , parent_link : str , parent_group : str | None = None
105- ) -> IComposer :
109+ ) -> SemanticBuilder :
106110 """Define an end effector for MoveIt.
107111
108112 Args:
@@ -119,9 +123,9 @@ def end_effector(
119123 self ._builder .robot .semantic = replace (
120124 semantic , end_effectors = tuple (semantic .end_effectors ) + (ee ,)
121125 )
122- return self . _builder
126+ return self
123127
124- def passive_joint (self , name : str ) -> IComposer :
128+ def passive_joint (self , name : str ) -> SemanticBuilder :
125129 """Mark a joint as passive (not actuated) for MoveIt.
126130
127131 Args:
@@ -135,15 +139,15 @@ def passive_joint(self, name: str) -> IComposer:
135139 self ._builder .robot .semantic = replace (
136140 semantic , passive_joints = tuple (semantic .passive_joints ) + (pj ,)
137141 )
138- return self . _builder
142+ return self
139143
140144 def virtual_joint (
141145 self ,
142146 name : str ,
143147 child_link : str ,
144148 parent_frame : str = "world" ,
145149 joint_type : str = SRDF_VJOIN_FIXED ,
146- ) -> IComposer :
150+ ) -> SemanticBuilder :
147151 """Define a virtual joint connecting the robot to the world frame.
148152
149153 Args:
@@ -162,11 +166,11 @@ def virtual_joint(
162166 self ._builder .robot .semantic = replace (
163167 semantic , virtual_joints = tuple (semantic .virtual_joints ) + (vj ,)
164168 )
165- return self . _builder
169+ return self
166170
167171 def disable_collisions (
168172 self , link1 : str , link2 : str , reason : str = SRDF_REASON_ADJACENT
169- ) -> IComposer :
173+ ) -> SemanticBuilder :
170174 """Instruct MoveIt to ignore collisions between two specific links.
171175
172176 Args:
@@ -181,9 +185,11 @@ def disable_collisions(
181185 self ._builder .robot .semantic = replace (
182186 semantic , disabled_collisions = tuple (semantic .disabled_collisions ) + (dc ,)
183187 )
184- return self . _builder
188+ return self
185189
186- def enable_collisions (self , link1 : str , link2 : str , reason : str | None = None ) -> IComposer :
190+ def enable_collisions (
191+ self , link1 : str , link2 : str , reason : str | None = None
192+ ) -> SemanticBuilder :
187193 """Explicitly re-enable collision checking between two specific links.
188194
189195 Args:
@@ -198,9 +204,9 @@ def enable_collisions(self, link1: str, link2: str, reason: str | None = None) -
198204 self ._builder .robot .semantic = replace (
199205 semantic , enabled_collisions = tuple (semantic .enabled_collisions ) + (ec ,)
200206 )
201- return self . _builder
207+ return self
202208
203- def disable_default_collisions (self , link : str ) -> IComposer :
209+ def disable_default_collisions (self , link : str ) -> SemanticBuilder :
204210 """Disable all default collisions for a specific link.
205211
206212 Args:
@@ -214,9 +220,9 @@ def disable_default_collisions(self, link: str) -> IComposer:
214220 semantic ,
215221 no_default_collision_links = tuple (semantic .no_default_collision_links ) + (link ,),
216222 )
217- return self . _builder
223+ return self
218224
219- def joint_property (self , joint_name : str , property_name : str , value : str ) -> IComposer :
225+ def joint_property (self , joint_name : str , property_name : str , value : str ) -> SemanticBuilder :
220226 """Add a custom property/metadata to a joint.
221227
222228 Args:
@@ -232,9 +238,9 @@ def joint_property(self, joint_name: str, property_name: str, value: str) -> ICo
232238 self ._builder .robot .semantic = replace (
233239 semantic , joint_properties = tuple (semantic .joint_properties ) + (jp ,)
234240 )
235- return self . _builder
241+ return self
236242
237- def approximate_link_collision (self , link : str , spheres : list [SrdfSphere ]) -> IComposer :
243+ def approximate_link_collision (self , link : str , spheres : list [SrdfSphere ]) -> SemanticBuilder :
238244 """Add sphere-based collision approximation for a link.
239245
240246 Args:
@@ -250,4 +256,4 @@ def approximate_link_collision(self, link: str, spheres: list[SrdfSphere]) -> IC
250256 semantic ,
251257 link_sphere_approximations = tuple (semantic .link_sphere_approximations ) + (lsa ,),
252258 )
253- return self . _builder
259+ return self
0 commit comments