Skip to content

Commit 1b79b73

Browse files
committed
robot/scene instantiation refactor (#110)
1 parent e91ab36 commit 1b79b73

22 files changed

+493
-319
lines changed

cli/rr_cam_swarm.py

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,20 @@
66
import numpy as np
77
import torch
88

9-
from roboreg import differentiable as rrd
10-
from roboreg.io import URDFParser, find_files, parse_camera_info, parse_mono_data
9+
from roboreg.core import (
10+
NVDiffRastRenderer,
11+
Robot,
12+
RobotScene,
13+
TorchKinematics,
14+
TorchMeshContainer,
15+
VirtualCamera,
16+
)
17+
from roboreg.io import (
18+
find_files,
19+
load_robot_data_from_ros_xacro,
20+
parse_camera_info,
21+
parse_mono_data,
22+
)
1123
from roboreg.losses import soft_dice_loss
1224
from roboreg.optim import LinearParticleSwarm, ParticleSwarmOptimizer
1325
from roboreg.util import (
@@ -295,31 +307,43 @@ def main() -> None:
295307
n_joint_states * args.n_cameras
296308
) # (each camera observes n_joint_states joint states)
297309
camera_name = "camera"
298-
camera = rrd.VirtualCamera(
310+
camera = VirtualCamera(
299311
resolution=(height, width),
300312
intrinsics=intrinsics,
301313
extrinsics=torch.eye(4, device=device).unsqueeze(0).expand(batch_size, -1, -1),
302314
device=device,
303315
)
304316

305-
urdf_parser = URDFParser.from_ros_xacro(
306-
ros_package=args.ros_package, xacro_path=args.xacro_path
307-
)
308-
robot = rrd.Robot.from_urdf_parser(
309-
urdf_parser=urdf_parser,
317+
# instantiate robot
318+
robot_data = load_robot_data_from_ros_xacro(
319+
ros_package=args.ros_package,
320+
xacro_path=args.xacro_path,
310321
root_link_name=args.root_link_name,
311322
end_link_name=args.end_link_name,
312323
collision=args.collision_meshes,
324+
target_reduction=args.target_reduction,
325+
)
326+
mesh_container = TorchMeshContainer(
327+
meshes=robot_data.meshes,
313328
batch_size=batch_size,
314329
device=device,
315-
target_reduction=args.target_reduction, # reduce mesh vertex count for memory reduction
330+
)
331+
kinematics = TorchKinematics(
332+
urdf=robot_data.urdf,
333+
root_link_name=robot_data.root_link_name,
334+
end_link_name=robot_data.end_link_name,
335+
device=device,
336+
)
337+
robot = Robot(
338+
mesh_container=mesh_container,
339+
kinematics=kinematics,
316340
)
317341

318-
renderer = rrd.NVDiffRastRenderer(device=device)
319-
scene = rrd.RobotScene(
342+
# instantiate scene
343+
scene = RobotScene(
320344
cameras={camera_name: camera},
321345
robot=robot,
322-
renderer=renderer,
346+
renderer=NVDiffRastRenderer(device=device),
323347
)
324348

325349
# repeat joint states and masks for each camera

cli/rr_hydra.py

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22
import os
33

44
import numpy as np
5-
import rich
65
import torch
76

8-
from roboreg.differentiable import Robot
7+
from roboreg.core import Robot, TorchKinematics, TorchMeshContainer
98
from roboreg.hydra_icp import hydra_centroid_alignment, hydra_robust_icp
10-
from roboreg.io import URDFParser, find_files, parse_camera_info, parse_hydra_data
9+
from roboreg.io import (
10+
find_files,
11+
load_robot_data_from_ros_xacro,
12+
parse_camera_info,
13+
parse_hydra_data,
14+
)
1115
from roboreg.util import (
1216
RegistrationVisualizer,
1317
clean_xyz,
@@ -161,35 +165,29 @@ def main():
161165
)
162166
height, width, intrinsics = parse_camera_info(args.camera_info_file)
163167

164-
# instantiate kinematics
165-
urdf_parser = URDFParser.from_ros_xacro(
166-
ros_package=args.ros_package, xacro_path=args.xacro_path
167-
)
168-
root_link_name = args.root_link_name
169-
end_link_name = args.end_link_name
170-
if root_link_name == "":
171-
root_link_name = urdf_parser.link_names_with_meshes(
172-
collision=args.collision_meshes
173-
)[0]
174-
rich.print(
175-
f"Root link name not provided. Using the first link with mesh: '{root_link_name}'."
176-
)
177-
if end_link_name == "":
178-
end_link_name = urdf_parser.link_names_with_meshes(
179-
collision=args.collision_meshes
180-
)[-1]
181-
rich.print(
182-
f"End link name not provided. Using the last link with mesh: '{end_link_name}'."
183-
)
184-
185168
# instantiate robot
186169
batch_size = len(joint_states)
187-
robot = Robot.from_urdf_parser(
188-
urdf_parser=urdf_parser,
189-
root_link_name=root_link_name,
190-
end_link_name=end_link_name,
170+
robot_data = load_robot_data_from_ros_xacro(
171+
ros_package=args.ros_package,
172+
xacro_path=args.xacro_path,
173+
root_link_name=args.root_link_name,
174+
end_link_name=args.end_link_name,
191175
collision=args.collision_meshes,
192-
batch_size=batch_size,
176+
)
177+
mesh_container = TorchMeshContainer(
178+
meshes=robot_data.meshes,
179+
batch_size=len(joint_states),
180+
device=device,
181+
)
182+
kinematics = TorchKinematics(
183+
urdf=robot_data.urdf,
184+
root_link_name=robot_data.root_link_name,
185+
end_link_name=robot_data.end_link_name,
186+
device=device,
187+
)
188+
robot = Robot(
189+
mesh_container=mesh_container,
190+
kinematics=kinematics,
193191
)
194192

195193
# perform forward kinematics

cli/rr_mono_dr.py

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,17 @@
1010
import rich.progress
1111
import torch
1212

13-
from roboreg.differentiable import VirtualCamera
14-
from roboreg.io import find_files, parse_mono_data
13+
from roboreg.core import (
14+
NVDiffRastRenderer,
15+
Robot,
16+
RobotScene,
17+
TorchKinematics,
18+
TorchMeshContainer,
19+
VirtualCamera,
20+
)
21+
from roboreg.io import find_files, load_robot_data_from_ros_xacro, parse_mono_data
1522
from roboreg.losses import soft_dice_loss
1623
from roboreg.util import mask_distance_transform, mask_exponential_decay, overlay_mask
17-
from roboreg.util.factories import create_robot_scene
1824

1925

2026
class REGISTRATION_MODE(Enum):
@@ -181,17 +187,36 @@ def main() -> None:
181187
)
182188
}
183189

184-
# instantiate robot scene
185-
scene = create_robot_scene(
186-
batch_size=joint_states.shape[0],
190+
# instantiate robot
191+
robot_data = load_robot_data_from_ros_xacro(
187192
ros_package=args.ros_package,
188193
xacro_path=args.xacro_path,
189194
root_link_name=args.root_link_name,
190195
end_link_name=args.end_link_name,
191196
collision=args.collision_meshes,
192-
cameras=camera,
197+
)
198+
mesh_container = TorchMeshContainer(
199+
meshes=robot_data.meshes,
200+
batch_size=joint_states.shape[0],
201+
device=device,
202+
)
203+
kinematics = TorchKinematics(
204+
urdf=robot_data.urdf,
205+
root_link_name=robot_data.root_link_name,
206+
end_link_name=robot_data.end_link_name,
193207
device=device,
194208
)
209+
robot = Robot(
210+
mesh_container=mesh_container,
211+
kinematics=kinematics,
212+
)
213+
214+
# instantiate scene
215+
scene = RobotScene(
216+
cameras=camera,
217+
robot=robot,
218+
renderer=NVDiffRastRenderer(device=device),
219+
)
195220

196221
# load extrinsics estimate
197222
extrinsics = torch.tensor(

cli/rr_render.py

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,16 @@
88
from rich import progress
99
from torch.utils.data import DataLoader
1010

11-
from roboreg.differentiable import VirtualCamera
12-
from roboreg.io import MonocularDataset
11+
from roboreg.core import (
12+
NVDiffRastRenderer,
13+
Robot,
14+
RobotScene,
15+
TorchKinematics,
16+
TorchMeshContainer,
17+
VirtualCamera,
18+
)
19+
from roboreg.io import MonocularDataset, load_robot_data_from_ros_xacro
1320
from roboreg.util import overlay_mask
14-
from roboreg.util.factories import create_robot_scene
1521

1622

1723
def args_factory() -> argparse.Namespace:
@@ -119,16 +125,33 @@ def main():
119125
device=device,
120126
)
121127
}
122-
scene = create_robot_scene(
123-
batch_size=args.batch_size,
128+
robot_data = load_robot_data_from_ros_xacro(
124129
ros_package=args.ros_package,
125130
xacro_path=args.xacro_path,
126131
root_link_name=args.root_link_name,
127132
end_link_name=args.end_link_name,
128-
cameras=camera,
129-
device=device,
130133
collision=args.collision_meshes,
131134
)
135+
mesh_container = TorchMeshContainer(
136+
meshes=robot_data.meshes,
137+
batch_size=args.batch_size,
138+
device=device,
139+
)
140+
kinematics = TorchKinematics(
141+
urdf=robot_data.urdf,
142+
root_link_name=robot_data.root_link_name,
143+
end_link_name=robot_data.end_link_name,
144+
device=device,
145+
)
146+
robot = Robot(
147+
mesh_container=mesh_container,
148+
kinematics=kinematics,
149+
)
150+
scene = RobotScene(
151+
cameras=camera,
152+
robot=robot,
153+
renderer=NVDiffRastRenderer(device=device),
154+
)
132155
dataset = MonocularDataset(
133156
images_path=args.images_path,
134157
image_pattern=args.image_pattern,

cli/rr_stereo_dr.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,17 @@
1010
import rich.progress
1111
import torch
1212

13-
from roboreg.differentiable import VirtualCamera
14-
from roboreg.io import find_files, parse_stereo_data
13+
from roboreg.core import (
14+
NVDiffRastRenderer,
15+
Robot,
16+
RobotScene,
17+
TorchKinematics,
18+
TorchMeshContainer,
19+
VirtualCamera,
20+
)
21+
from roboreg.io import find_files, load_robot_data_from_ros_xacro, parse_stereo_data
1522
from roboreg.losses import soft_dice_loss
1623
from roboreg.util import mask_distance_transform, mask_exponential_decay, overlay_mask
17-
from roboreg.util.factories import create_robot_scene
1824

1925

2026
class REGISTRATION_MODE(Enum):
@@ -229,17 +235,36 @@ def main() -> None:
229235
),
230236
}
231237

232-
# instantiate robot scene
233-
scene = create_robot_scene(
234-
batch_size=joint_states.shape[0],
238+
# instantiate robot
239+
robot_data = load_robot_data_from_ros_xacro(
235240
ros_package=args.ros_package,
236241
xacro_path=args.xacro_path,
237242
root_link_name=args.root_link_name,
238243
end_link_name=args.end_link_name,
239-
cameras=cameras,
240-
device=device,
241244
collision=args.collision_meshes,
242245
)
246+
mesh_container = TorchMeshContainer(
247+
meshes=robot_data.meshes,
248+
batch_size=joint_states.shape[0],
249+
device=device,
250+
)
251+
kinematics = TorchKinematics(
252+
urdf=robot_data.urdf,
253+
root_link_name=robot_data.root_link_name,
254+
end_link_name=robot_data.end_link_name,
255+
device=device,
256+
)
257+
robot = Robot(
258+
mesh_container=mesh_container,
259+
kinematics=kinematics,
260+
)
261+
262+
# instantiate scene
263+
scene = RobotScene(
264+
cameras=cameras,
265+
robot=robot,
266+
renderer=NVDiffRastRenderer(device=device),
267+
)
243268

244269
# load extrinscis estimate......
245270
left_extrinsics = torch.tensor(

0 commit comments

Comments
 (0)