Skip to content

Commit 87235ed

Browse files
authored
Merge pull request #115 from lbr-stack/feature/roboreg-110/remove_ros_registry
remove ROS package registry from CLI 110
2 parents c8b8a86 + 6301e69 commit 87235ed

File tree

165 files changed

+1007
-539
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+1007
-539
lines changed

README.md

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,20 @@ Next:
128128
```
129129

130130
## Command Line Interface
131-
> [!NOTE]
132-
> In these examples, the [lbr_fri_ros2_stack](https://github.com/lbr-stack/lbr_fri_ros2_stack/) is used. Make sure to follow [Quick Start](https://github.com/lbr-stack/lbr_fri_ros2_stack/#quick-start) first. However, you can also use your own robot description files.
131+
> [!TIP]
132+
> Examples use sample data under [test/assets/lbr_med7_r800](test/assets/lbr_med7_r800). Data is stored via Git Large File Storage (LFS). Data is cloned automatically when `git-lfs` is installed. To clone in retrospect:
133+
> ```shell
134+
> sudo apt install git-lfs
135+
> git lfs fetch --all
136+
> git lfs checkout
137+
> ```
133138

134139
### Segment
135140
This is a required step to generate robot masks.
136141

137142
```shell
138143
rr-sam2 \
139-
--path test/assets/lbr_med7/zed2i \
144+
--path test/assets/lbr_med7_r800/samples \
140145
--pattern "left_image_*.png" \
141146
--n-positive-samples 5 \
142147
--n-negative-samples 5 \
@@ -148,13 +153,12 @@ The Hydra robust ICP implements a point-to-plane ICP registration on a Lie algeb
148153

149154
```shell
150155
rr-hydra \
151-
--camera-info-file test/assets/lbr_med7/zed2i/left_camera_info.yaml \
152-
--path test/assets/lbr_med7/zed2i \
156+
--camera-info-file test/assets/lbr_med7_r800/samples/left_camera_info.yaml \
157+
--path test/assets/lbr_med7_r800/samples \
153158
--mask-pattern mask_sam2_left_image_*.png \
154159
--depth-pattern depth_*.npy \
155160
--joint-states-pattern joint_states_*.npy \
156-
--ros-package lbr_description \
157-
--xacro-path urdf/med7/med7.xacro \
161+
--urdf-path test/assets/lbr_med7_r800/description/lbr_med7_r800.urdf \
158162
--root-link-name lbr_link_0 \
159163
--end-link-name lbr_link_7 \
160164
--number-of-points 5000 \
@@ -181,15 +185,14 @@ rr-cam-swarm \
181185
--c2 1.5 \
182186
--max-iterations 100 \
183187
--display-progress \
184-
--ros-package lbr_description \
185-
--xacro-path urdf/med7/med7.xacro \
188+
--urdf-path test/assets/lbr_med7_r800/description/lbr_med7_r800.urdf \
186189
--root-link-name lbr_link_0 \
187190
--end-link-name lbr_link_7 \
188191
--target-reduction 0.8 \
189192
--scale 0.1 \
190193
--n-samples 1 \
191-
--camera-info-file test/assets/lbr_med7/zed2i/left_camera_info.yaml \
192-
--path test/assets/lbr_med7/zed2i \
194+
--camera-info-file test/assets/lbr_med7_r800/samples/left_camera_info.yaml \
195+
--path test/assets/lbr_med7_r800/samples \
193196
--image-pattern left_image_*.png \
194197
--joint-states-pattern joint_states_*.npy \
195198
--mask-pattern mask_sam2_left_image_*.png \
@@ -210,13 +213,12 @@ rr-mono-dr \
210213
--lr 0.01 \
211214
--max-iterations 100 \
212215
--display-progress \
213-
--ros-package lbr_description \
214-
--xacro-path urdf/med7/med7.xacro \
216+
--urdf-path test/assets/lbr_med7_r800/description/lbr_med7_r800.urdf \
215217
--root-link-name lbr_link_0 \
216218
--end-link-name lbr_link_7 \
217-
--camera-info-file test/assets/lbr_med7/zed2i/left_camera_info.yaml \
218-
--extrinsics-file test/assets/lbr_med7/zed2i/HT_hydra_robust.npy \
219-
--path test/assets/lbr_med7/zed2i \
219+
--camera-info-file test/assets/lbr_med7_r800/samples/left_camera_info.yaml \
220+
--extrinsics-file test/assets/lbr_med7_r800/samples/HT_hydra_robust.npy \
221+
--path test/assets/lbr_med7_r800/samples \
220222
--image-pattern left_image_*.png \
221223
--joint-states-pattern joint_states_*.npy \
222224
--mask-pattern mask_sam2_left_image_*.png \
@@ -237,15 +239,14 @@ rr-stereo-dr \
237239
--lr 0.01 \
238240
--max-iterations 100 \
239241
--display-progress \
240-
--ros-package lbr_description \
241-
--xacro-path urdf/med7/med7.xacro \
242+
--urdf-path test/assets/lbr_med7_r800/description/lbr_med7_r800.urdf \
242243
--root-link-name lbr_link_0 \
243244
--end-link-name lbr_link_7 \
244-
--left-camera-info-file test/assets/lbr_med7/zed2i/left_camera_info.yaml \
245-
--right-camera-info-file test/assets/lbr_med7/zed2i/right_camera_info.yaml \
246-
--left-extrinsics-file test/assets/lbr_med7/zed2i/HT_hydra_robust.npy \
247-
--right-extrinsics-file test/assets/lbr_med7/zed2i/HT_right_to_left.npy \
248-
--path test/assets/lbr_med7/zed2i \
245+
--left-camera-info-file test/assets/lbr_med7_r800/samples/left_camera_info.yaml \
246+
--right-camera-info-file test/assets/lbr_med7_r800/samples/right_camera_info.yaml \
247+
--left-extrinsics-file test/assets/lbr_med7_r800/samples/HT_hydra_robust.npy \
248+
--right-extrinsics-file test/assets/lbr_med7_r800/samples/HT_right_to_left.npy \
249+
--path test/assets/lbr_med7_r800/samples \
249250
--left-image-pattern left_image_*.png \
250251
--right-image-pattern right_image_*.png \
251252
--joint-states-pattern joint_states_*.npy \
@@ -267,17 +268,16 @@ Generate renders using the obtained extrinsics:
267268
rr-render \
268269
--batch-size 1 \
269270
--num-workers 0 \
270-
--ros-package lbr_description \
271-
--xacro-path urdf/med7/med7.xacro \
271+
--urdf-path test/assets/lbr_med7_r800/description/lbr_med7_r800.urdf \
272272
--root-link-name lbr_link_0 \
273273
--end-link-name lbr_link_7 \
274-
--camera-info-file test/assets/lbr_med7/zed2i/left_camera_info.yaml \
275-
--extrinsics-file test/assets/lbr_med7/zed2i/HT_left_dr.npy \
276-
--images-path test/assets/lbr_med7/zed2i \
277-
--joint-states-path test/assets/lbr_med7/zed2i \
274+
--camera-info-file test/assets/lbr_med7_r800/samples/left_camera_info.yaml \
275+
--extrinsics-file test/assets/lbr_med7_r800/samples/HT_left_dr.npy \
276+
--images-path test/assets/lbr_med7_r800/samples \
277+
--joint-states-path test/assets/lbr_med7_r800/samples \
278278
--image-pattern left_image_*.png \
279279
--joint-states-pattern joint_states_*.npy \
280-
--output-path test/assets/lbr_med7/zed2i
280+
--output-path /tmp/renders/lbr_med7_r800
281281
```
282282

283283
## Testing
@@ -288,13 +288,12 @@ To run Hydra robust ICP on provided `xarm` and `realsense` data, run
288288

289289
```shell
290290
rr-hydra \
291-
--camera-info-file test/assets/xarm/realsense/camera_info.yaml \
292-
--path test/assets/xarm/realsense \
291+
--camera-info-file test/assets/xarm_7/samples/camera_info.yaml \
292+
--path test/assets/xarm_7/samples \
293293
--mask-pattern mask_*.png \
294294
--depth-pattern depth_*.npy \
295295
--joint-states-pattern joint_state_*.npy \
296-
--ros-package xarm_description \
297-
--xacro-path urdf/xarm_device.urdf.xacro \
296+
--urdf-path test/assets/xarm_7/description/xarm_7.urdf \
298297
--root-link-name link_base \
299298
--end-link-name link7 \
300299
--number-of-points 5000 \
@@ -308,17 +307,16 @@ Generate renders using the obtained extrinsics:
308307
rr-render \
309308
--batch-size 1 \
310309
--num-workers 0 \
311-
--ros-package xarm_description \
312-
--xacro-path urdf/xarm_device.urdf.xacro \
310+
--urdf-path test/assets/xarm_7/description/xarm_7.urdf \
313311
--root-link-name link_base \
314312
--end-link-name link7 \
315-
--camera-info-file test/assets/xarm/realsense/camera_info.yaml \
316-
--extrinsics-file test/assets/xarm/realsense/HT_hydra_robust.npy \
317-
--images-path test/assets/xarm/realsense \
318-
--joint-states-path test/assets/xarm/realsense \
313+
--camera-info-file test/assets/xarm_7/samples/camera_info.yaml \
314+
--extrinsics-file test/assets/xarm_7/samples/HT_hydra_robust.npy \
315+
--images-path test/assets/xarm_7/samples \
316+
--joint-states-path test/assets/xarm_7/samples \
319317
--image-pattern img_*.png \
320318
--joint-states-pattern joint_state_*.npy \
321-
--output-path test/assets/xarm/realsense
319+
--output-path /tmp/renders/xarm_7
322320
```
323321

324322
## Acknowledgements

cli/rr_cam_swarm.py

Lines changed: 65 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,21 @@
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+
load_robot_data_from_urdf_file,
21+
parse_camera_info,
22+
parse_mono_data,
23+
)
1124
from roboreg.losses import soft_dice_loss
1225
from roboreg.optim import LinearParticleSwarm, ParticleSwarmOptimizer
1326
from roboreg.util import (
@@ -17,6 +30,8 @@
1730
random_fov_eye_space_coordinates,
1831
)
1932

33+
from .util.validate import validate_urdf_source
34+
2035

2136
def args_factory() -> argparse.Namespace:
2237
parser = argparse.ArgumentParser(
@@ -84,17 +99,26 @@ def args_factory() -> argparse.Namespace:
8499
action="store_true",
85100
help="Display optimization progress.",
86101
)
102+
parser.add_argument(
103+
"--urdf-path",
104+
type=str,
105+
default="test/assets/lbr_med7_r800/description/lbr_med7_r800.urdf",
106+
help="Path to URDF file. Meshes resolved relative to this file. "
107+
"Mutually exclusive with --ros-package/--xacro-path.",
108+
)
87109
parser.add_argument(
88110
"--ros-package",
89111
type=str,
90-
default="lbr_description",
91-
help="Package where the URDF is located.",
112+
default=None,
113+
help="ROS package containing robot description. "
114+
"Requires --xacro-path. Mutually exclusive with --urdf-path.",
92115
)
93116
parser.add_argument(
94117
"--xacro-path",
95118
type=str,
96-
default="urdf/med7/med7.xacro",
97-
help="Path to the xacro file, relative to --ros-package.",
119+
default=None,
120+
help="Path to xacro file relative to --ros-package. "
121+
"Requires --ros-package. Mutually exclusive with --urdf-path.",
98122
)
99123
parser.add_argument(
100124
"--root-link-name",
@@ -168,6 +192,7 @@ def args_factory() -> argparse.Namespace:
168192
default=2,
169193
help="Number of concurrent compilation jobs for nvdiffrast. Only relevant on first run.",
170194
)
195+
validate_urdf_source(parser, parser.parse_args())
171196
return parser.parse_args()
172197

173198

@@ -295,31 +320,52 @@ def main() -> None:
295320
n_joint_states * args.n_cameras
296321
) # (each camera observes n_joint_states joint states)
297322
camera_name = "camera"
298-
camera = rrd.VirtualCamera(
323+
camera = VirtualCamera(
299324
resolution=(height, width),
300325
intrinsics=intrinsics,
301326
extrinsics=torch.eye(4, device=device).unsqueeze(0).expand(batch_size, -1, -1),
302327
device=device,
303328
)
304329

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,
310-
root_link_name=args.root_link_name,
311-
end_link_name=args.end_link_name,
312-
collision=args.collision_meshes,
330+
# instantiate robot
331+
if args.urdf_path is not None:
332+
robot_data = load_robot_data_from_urdf_file(
333+
urdf_path=args.urdf_path,
334+
root_link_name=args.root_link_name,
335+
end_link_name=args.end_link_name,
336+
collision=args.collision_meshes,
337+
target_reduction=args.target_reduction,
338+
)
339+
else:
340+
robot_data = load_robot_data_from_ros_xacro(
341+
ros_package=args.ros_package,
342+
xacro_path=args.xacro_path,
343+
root_link_name=args.root_link_name,
344+
end_link_name=args.end_link_name,
345+
collision=args.collision_meshes,
346+
target_reduction=args.target_reduction,
347+
)
348+
mesh_container = TorchMeshContainer(
349+
meshes=robot_data.meshes,
313350
batch_size=batch_size,
314351
device=device,
315-
target_reduction=args.target_reduction, # reduce mesh vertex count for memory reduction
352+
)
353+
kinematics = TorchKinematics(
354+
urdf=robot_data.urdf,
355+
root_link_name=robot_data.root_link_name,
356+
end_link_name=robot_data.end_link_name,
357+
device=device,
358+
)
359+
robot = Robot(
360+
mesh_container=mesh_container,
361+
kinematics=kinematics,
316362
)
317363

318-
renderer = rrd.NVDiffRastRenderer(device=device)
319-
scene = rrd.RobotScene(
364+
# instantiate scene
365+
scene = RobotScene(
320366
cameras={camera_name: camera},
321367
robot=robot,
322-
renderer=renderer,
368+
renderer=NVDiffRastRenderer(device=device),
323369
)
324370

325371
# repeat joint states and masks for each camera

0 commit comments

Comments
 (0)