Skip to content

Commit 4518d52

Browse files
authored
Merge pull request #15 from viam-labs/allow-other-camera-intrinsics-params
allow user to input distortion parameters
2 parents 8bcc464 + 46b3ad5 commit 4518d52

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

src/models/chessboard.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,15 @@
3333

3434
# required attributes
3535
cam_attr = "camera_name"
36+
camera_intrinsics = "camera_intrinsics"
3637
pattern_attr = "pattern_size"
3738
square_attr = "square_size_mm"
3839

40+
# Camera intrinsics required keys
41+
K_KEYS = ["fx", "fy", "cx", "cy"]
42+
DIST_KEYS = ["k1", "k2", "k3", "p1", "p2"]
43+
44+
3945

4046
class Chessboard(PoseTracker, EasyResource):
4147
# To enable debug-level logging, either run viam-server with the --debug option,
@@ -81,6 +87,21 @@ def validate_config(
8187
raise Exception(f"Missing required {pattern_attr} attribute.")
8288
if attrs.get(square_attr) is None:
8389
raise Exception(f"Missing required {square_attr} attribute.")
90+
if attrs.get(camera_intrinsics) is not None:
91+
# Check to make sure the right keys are available
92+
intrinsics_config = attrs.get(camera_intrinsics)
93+
if intrinsics_config.get("K") is None:
94+
raise Exception(f"Missing required K for camera intrinsics.")
95+
K: dict = intrinsics_config.get("K")
96+
for K_key in K_KEYS:
97+
if K.get(K_key) is None:
98+
raise Exception(f"Missing required key {K_key} for K camera intrinsics.")
99+
if intrinsics_config.get("dist") is None:
100+
raise Exception(f"Missing required dist for camera intrinsics")
101+
dist: dict = intrinsics_config.get("dist")
102+
for dist_key in DIST_KEYS:
103+
if dist.get(dist_key) is None:
104+
raise Exception(f"Missing required key {dist_key} for dist camera intrinsics.")
84105

85106
return [str(cam)], []
86107

@@ -104,14 +125,21 @@ def reconfigure(
104125
self.pattern_size = [int(x) for x in pattern_list]
105126
self.square_size = attrs.get(square_attr)
106127

128+
# Get camera intrinsics provided by user if available
129+
self.camera_intrinsics = attrs.get(camera_intrinsics)
130+
107131
return super().reconfigure(config, dependencies)
108132

109133
async def get_camera_intrinsics(self) -> tuple:
110134
"""Get camera intrinsic parameters"""
111-
camera_params = await self.camera.do_command({"get_camera_params": None})
112-
intrinsics = camera_params["Color"]["intrinsics"]
113-
dist_params = camera_params["Color"]["distortion"]
114-
135+
if self.camera_intrinsics is None:
136+
camera_params = await self.camera.do_command({"get_camera_params": None})
137+
intrinsics = camera_params["Color"]["intrinsics"]
138+
dist_params = camera_params["Color"]["distortion"]
139+
else:
140+
intrinsics = self.camera_intrinsics["K"]
141+
dist_params = self.camera_intrinsics["dist"]
142+
115143
K = np.array([
116144
[intrinsics["fx"], 0, intrinsics["cx"]],
117145
[0, intrinsics["fy"], intrinsics["cy"]],

0 commit comments

Comments
 (0)