Skip to content
This repository was archived by the owner on Oct 4, 2023. It is now read-only.

Commit 0c6e6e3

Browse files
Pyreach sync 20220725
1 parent 27a6eff commit 0c6e6e3

19 files changed

+607
-295
lines changed

pyreach/common/proto_gen/logs_pb2.py

Lines changed: 152 additions & 138 deletions
Large diffs are not rendered by default.

pyreach/common/proto_gen/logs_pb2.pyi

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2580,6 +2580,8 @@ class CameraCalibration(google.protobuf.message.Message):
25802580
DISTORTION_FIELD_NUMBER: builtins.int
25812581
DISTORTION_DEPTH_FIELD_NUMBER: builtins.int
25822582
CAMERA_T_ORIGIN_FIELD_NUMBER: builtins.int
2583+
TOOL_MOUNT_FIELD_NUMBER: builtins.int
2584+
LINK_NAME_FIELD_NUMBER: builtins.int
25832585
@property
25842586
def intrinsics(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
25852587
"""Camera intrinsics values."""
@@ -2617,6 +2619,12 @@ class CameraCalibration(google.protobuf.message.Message):
26172619
def camera_t_origin(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
26182620
"""Camera pose in the origin frame, x, y, z, rx, ry, rz."""
26192621
pass
2622+
tool_mount: typing.Text = ...
2623+
"""ToolMount is the name of the device to which the camera is mounted."""
2624+
2625+
link_name: typing.Text = ...
2626+
"""LinkName is the name of the link to which the camera is attached."""
2627+
26202628
def __init__(self,
26212629
*,
26222630
intrinsics : typing.Optional[typing.Iterable[builtins.float]] = ...,
@@ -2629,9 +2637,11 @@ class CameraCalibration(google.protobuf.message.Message):
26292637
distortion : typing.Optional[typing.Iterable[builtins.float]] = ...,
26302638
distortion_depth : typing.Optional[typing.Iterable[builtins.float]] = ...,
26312639
camera_t_origin : typing.Optional[typing.Iterable[builtins.float]] = ...,
2640+
tool_mount : typing.Optional[typing.Text] = ...,
2641+
link_name : typing.Optional[typing.Text] = ...,
26322642
) -> None: ...
2633-
def HasField(self, field_name: typing_extensions.Literal["calibrated_height",b"calibrated_height","calibrated_width",b"calibrated_width","extrinsics_residual",b"extrinsics_residual","intrinsics_residual",b"intrinsics_residual","lens_model",b"lens_model"]) -> builtins.bool: ...
2634-
def ClearField(self, field_name: typing_extensions.Literal["calibrated_height",b"calibrated_height","calibrated_width",b"calibrated_width","camera_t_origin",b"camera_t_origin","distortion",b"distortion","distortion_depth",b"distortion_depth","extrinsics",b"extrinsics","extrinsics_residual",b"extrinsics_residual","intrinsics",b"intrinsics","intrinsics_residual",b"intrinsics_residual","lens_model",b"lens_model"]) -> None: ...
2643+
def HasField(self, field_name: typing_extensions.Literal["calibrated_height",b"calibrated_height","calibrated_width",b"calibrated_width","extrinsics_residual",b"extrinsics_residual","intrinsics_residual",b"intrinsics_residual","lens_model",b"lens_model","link_name",b"link_name","tool_mount",b"tool_mount"]) -> builtins.bool: ...
2644+
def ClearField(self, field_name: typing_extensions.Literal["calibrated_height",b"calibrated_height","calibrated_width",b"calibrated_width","camera_t_origin",b"camera_t_origin","distortion",b"distortion","distortion_depth",b"distortion_depth","extrinsics",b"extrinsics","extrinsics_residual",b"extrinsics_residual","intrinsics",b"intrinsics","intrinsics_residual",b"intrinsics_residual","lens_model",b"lens_model","link_name",b"link_name","tool_mount",b"tool_mount"]) -> None: ...
26352645
global___CameraCalibration = CameraCalibration
26362646

26372647
class Color(google.protobuf.message.Message):

pyreach/common/proto_gen/robot_info_pb2.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
syntax='proto3',
3636
serialized_options=None,
3737
create_key=_descriptor._internal_create_key,
38-
serialized_pb=b'\n\x10robot_info.proto\x12\x10robotics.logging\x1a\x1bgoogle/protobuf/empty.proto\x1a\x0cjoints.proto\"\x97\x03\n\tRobotInfo\x12\x10\n\x08robot_id\x18\x01 \x01(\t\x12\x12\n\nproject_id\x18\x07 \x01(\t\x12\x1d\n\x15robot_repository_type\x18\x08 \x01(\t\x12\x18\n\x10log_topic_prefix\x18\x0b \x01(\t\x12\x0c\n\x04task\x18\x02 \x01(\t\x12\x15\n\rrobot_version\x18\x03 \x01(\t\x12.\n\x05parts\x18\x06 \x03(\x0b\x32\x1f.robotics.logging.RobotPartInfo\x12:\n\x0eshared_objects\x18\t \x03(\x0b\x32\".robotics.logging.SharedObjectInfo\x12I\n\x14\x63ontroller_execution\x18\n \x01(\x0b\x32+.robotics.logging.ControllerExecutionParams\x12!\n\x18toaster_command_handling\x18\x9a\x05 \x01(\x08J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06R\x10\x63ommand_log_typeR\x0estate_log_type\"\xab\x02\n\rRobotPartInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tthread_id\x18\x07 \x01(\t\x12\x19\n\x11\x63ontrol_frequency\x18\x05 \x01(\x01\x12\x1a\n\x12\x63ontrol_duty_cycle\x18\x08 \x01(\r\x12\x41\n\x0ejoint_metadata\x18\x02 \x01(\x0b\x32).robotics.logging.messages.JointsMetadata\x12<\n\x0f\x63ontrol_modules\x18\x03 \x03(\x0b\x32#.robotics.logging.ControlModuleInfo\x12\x1c\n\x14subordinate_part_ids\x18\t \x03(\tJ\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07R\x07num_dofR\x10gripper_metadata\"\xa8\x02\n\x11\x43ontrolModuleInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x32\n\x10loopback_adapter\x18\n \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x32\n\x10\x66\x61ke_imu_adapter\x18\x0e \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12G\n\x14xarm_gripper_adapter\x18\x1c \x01(\x0b\x32\'.robotics.logging.SharedObjectReferenceH\x00\x12&\n\x04mock\x18\x0c \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x42\x06\n\x04typeJ\x04\x08\x0b\x10\x0cJ\x04\x08\x14\x10\x15R\x0csafety_layerR\x0cxarm_adapter\"N\n\x10SharedObjectInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12&\n\x04mock\x18\n \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x42\x06\n\x04type\"1\n\x15SharedObjectReference\x12\x18\n\x10shared_object_id\x18\x01 \x01(\t\"\x8b\x01\n\x19\x43ontrollerExecutionParams\x12>\n\x04mode\x18\x01 \x01(\x0e\x32\x30.robotics.logging.ControllerExecutionParams.Mode\".\n\x04Mode\x12\r\n\tAUTOMATIC\x10\x00\x12\n\n\x06MANUAL\x10\x01\x12\x0b\n\x07TESTING\x10\x02\x62\x06proto3'
38+
serialized_pb=b'\n\x10robot_info.proto\x12\x10robotics.logging\x1a\x1bgoogle/protobuf/empty.proto\x1a\x0cjoints.proto\"\x97\x03\n\tRobotInfo\x12\x10\n\x08robot_id\x18\x01 \x01(\t\x12\x12\n\nproject_id\x18\x07 \x01(\t\x12\x1d\n\x15robot_repository_type\x18\x08 \x01(\t\x12\x18\n\x10log_topic_prefix\x18\x0b \x01(\t\x12\x0c\n\x04task\x18\x02 \x01(\t\x12\x15\n\rrobot_version\x18\x03 \x01(\t\x12.\n\x05parts\x18\x06 \x03(\x0b\x32\x1f.robotics.logging.RobotPartInfo\x12:\n\x0eshared_objects\x18\t \x03(\x0b\x32\".robotics.logging.SharedObjectInfo\x12I\n\x14\x63ontroller_execution\x18\n \x01(\x0b\x32+.robotics.logging.ControllerExecutionParams\x12!\n\x18toaster_command_handling\x18\x9a\x05 \x01(\x08J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06R\x10\x63ommand_log_typeR\x0estate_log_type\"\xd1\x02\n\rRobotPartInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tthread_id\x18\x07 \x01(\t\x12\x19\n\x11\x63ontrol_frequency\x18\x05 \x01(\x01\x12\x1a\n\x12\x63ontrol_duty_cycle\x18\x08 \x01(\r\x12\x41\n\x0ejoint_metadata\x18\x02 \x01(\x0b\x32).robotics.logging.messages.JointsMetadata\x12<\n\x0f\x63ontrol_modules\x18\x03 \x03(\x0b\x32#.robotics.logging.ControlModuleInfo\x12\x1c\n\x14subordinate_part_ids\x18\t \x03(\t\x12$\n\x1csubordinate_state_signal_ids\x18\n \x03(\tJ\x04\x08\x04\x10\x05J\x04\x08\x06\x10\x07R\x07num_dofR\x10gripper_metadata\"\xa8\x02\n\x11\x43ontrolModuleInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x32\n\x10loopback_adapter\x18\n \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12\x32\n\x10\x66\x61ke_imu_adapter\x18\x0e \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x12G\n\x14xarm_gripper_adapter\x18\x1c \x01(\x0b\x32\'.robotics.logging.SharedObjectReferenceH\x00\x12&\n\x04mock\x18\x0c \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x42\x06\n\x04typeJ\x04\x08\x0b\x10\x0cJ\x04\x08\x14\x10\x15R\x0csafety_layerR\x0cxarm_adapter\"N\n\x10SharedObjectInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12&\n\x04mock\x18\n \x01(\x0b\x32\x16.google.protobuf.EmptyH\x00\x42\x06\n\x04type\"1\n\x15SharedObjectReference\x12\x18\n\x10shared_object_id\x18\x01 \x01(\t\"\x8d\x01\n\x19\x43ontrollerExecutionParams\x12>\n\x04mode\x18\x01 \x01(\x0e\x32\x30.robotics.logging.ControllerExecutionParams.Mode\"0\n\x04Mode\x12\r\n\tAUTOMATIC\x10\x00\x12\n\n\x06MANUAL\x10\x01\x12\r\n\tUNIT_TEST\x10\x02\x62\x06proto3'
3939
,
4040
dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,joints__pb2.DESCRIPTOR,])
4141

@@ -59,15 +59,15 @@
5959
type=None,
6060
create_key=_descriptor._internal_create_key),
6161
_descriptor.EnumValueDescriptor(
62-
name='TESTING', index=2, number=2,
62+
name='UNIT_TEST', index=2, number=2,
6363
serialized_options=None,
6464
type=None,
6565
create_key=_descriptor._internal_create_key),
6666
],
6767
containing_type=None,
6868
serialized_options=None,
69-
serialized_start=1317,
70-
serialized_end=1363,
69+
serialized_start=1355,
70+
serialized_end=1403,
7171
)
7272
_sym_db.RegisterEnumDescriptor(_CONTROLLEREXECUTIONPARAMS_MODE)
7373

@@ -224,6 +224,13 @@
224224
message_type=None, enum_type=None, containing_type=None,
225225
is_extension=False, extension_scope=None,
226226
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
227+
_descriptor.FieldDescriptor(
228+
name='subordinate_state_signal_ids', full_name='robotics.logging.RobotPartInfo.subordinate_state_signal_ids', index=7,
229+
number=10, type=9, cpp_type=9, label=3,
230+
has_default_value=False, default_value=[],
231+
message_type=None, enum_type=None, containing_type=None,
232+
is_extension=False, extension_scope=None,
233+
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
227234
],
228235
extensions=[
229236
],
@@ -237,7 +244,7 @@
237244
oneofs=[
238245
],
239246
serialized_start=492,
240-
serialized_end=791,
247+
serialized_end=829,
241248
)
242249

243250

@@ -301,8 +308,8 @@
301308
create_key=_descriptor._internal_create_key,
302309
fields=[]),
303310
],
304-
serialized_start=794,
305-
serialized_end=1090,
311+
serialized_start=832,
312+
serialized_end=1128,
306313
)
307314

308315

@@ -345,8 +352,8 @@
345352
create_key=_descriptor._internal_create_key,
346353
fields=[]),
347354
],
348-
serialized_start=1092,
349-
serialized_end=1170,
355+
serialized_start=1130,
356+
serialized_end=1208,
350357
)
351358

352359

@@ -377,8 +384,8 @@
377384
extension_ranges=[],
378385
oneofs=[
379386
],
380-
serialized_start=1172,
381-
serialized_end=1221,
387+
serialized_start=1210,
388+
serialized_end=1259,
382389
)
383390

384391

@@ -410,8 +417,8 @@
410417
extension_ranges=[],
411418
oneofs=[
412419
],
413-
serialized_start=1224,
414-
serialized_end=1363,
420+
serialized_start=1262,
421+
serialized_end=1403,
415422
)
416423

417424
_ROBOTINFO.fields_by_name['parts'].message_type = _ROBOTPARTINFO

pyreach/common/proto_gen/robot_info_pb2.pyi

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class RobotPartInfo(google.protobuf.message.Message):
122122
JOINT_METADATA_FIELD_NUMBER: builtins.int
123123
CONTROL_MODULES_FIELD_NUMBER: builtins.int
124124
SUBORDINATE_PART_IDS_FIELD_NUMBER: builtins.int
125+
SUBORDINATE_STATE_SIGNAL_IDS_FIELD_NUMBER: builtins.int
125126
id: typing.Text = ...
126127
"""Identifier for this part; must be unique within a given robot."""
127128

@@ -161,6 +162,14 @@ class RobotPartInfo(google.protobuf.message.Message):
161162
from. Ie, when not empty, this part is a virtual part.
162163
"""
163164
pass
165+
@property
166+
def subordinate_state_signal_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]:
167+
"""State signal ids which should be collected from subordinate parts and
168+
output from a virtual part even if no control modules use them. States do
169+
*not* need to be listed here to be available to control modules in the
170+
virtual part. This has no effect if subordinate_part_ids is empty.
171+
"""
172+
pass
164173
def __init__(self,
165174
*,
166175
id : typing.Text = ...,
@@ -170,9 +179,10 @@ class RobotPartInfo(google.protobuf.message.Message):
170179
joint_metadata : typing.Optional[joints_pb2.JointsMetadata] = ...,
171180
control_modules : typing.Optional[typing.Iterable[global___ControlModuleInfo]] = ...,
172181
subordinate_part_ids : typing.Optional[typing.Iterable[typing.Text]] = ...,
182+
subordinate_state_signal_ids : typing.Optional[typing.Iterable[typing.Text]] = ...,
173183
) -> None: ...
174184
def HasField(self, field_name: typing_extensions.Literal["joint_metadata",b"joint_metadata"]) -> builtins.bool: ...
175-
def ClearField(self, field_name: typing_extensions.Literal["control_duty_cycle",b"control_duty_cycle","control_frequency",b"control_frequency","control_modules",b"control_modules","id",b"id","joint_metadata",b"joint_metadata","subordinate_part_ids",b"subordinate_part_ids","thread_id",b"thread_id"]) -> None: ...
185+
def ClearField(self, field_name: typing_extensions.Literal["control_duty_cycle",b"control_duty_cycle","control_frequency",b"control_frequency","control_modules",b"control_modules","id",b"id","joint_metadata",b"joint_metadata","subordinate_part_ids",b"subordinate_part_ids","subordinate_state_signal_ids",b"subordinate_state_signal_ids","thread_id",b"thread_id"]) -> None: ...
176186
global___RobotPartInfo = RobotPartInfo
177187

178188
class ControlModuleInfo(google.protobuf.message.Message):
@@ -274,9 +284,11 @@ class ControllerExecutionParams(google.protobuf.message.Message):
274284
output state immediately. This mode is primarily used for simulation.
275285
"""
276286

277-
TESTING: ControllerExecutionParams.Mode.ValueType = ... # 2
278-
"""Same as MANUAL, except that the default initial STOP_MOTION command is
279-
not sent, so that test commands do not queue up behind it.
287+
UNIT_TEST: ControllerExecutionParams.Mode.ValueType = ... # 2
288+
"""Mode for running unit tests on control modules, parts, etc. Same as
289+
MANUAL, except that the default initial STOP_MOTION command is not sent,
290+
so that test commands do not queue behind it, and output command types
291+
aren't validated, since unit tests do not use a complete control stack.
280292
"""
281293

282294
class Mode(_Mode, metaclass=_ModeEnumTypeWrapper):
@@ -299,9 +311,11 @@ class ControllerExecutionParams(google.protobuf.message.Message):
299311
output state immediately. This mode is primarily used for simulation.
300312
"""
301313

302-
TESTING: ControllerExecutionParams.Mode.ValueType = ... # 2
303-
"""Same as MANUAL, except that the default initial STOP_MOTION command is
304-
not sent, so that test commands do not queue up behind it.
314+
UNIT_TEST: ControllerExecutionParams.Mode.ValueType = ... # 2
315+
"""Mode for running unit tests on control modules, parts, etc. Same as
316+
MANUAL, except that the default initial STOP_MOTION command is not sent,
317+
so that test commands do not queue behind it, and output command types
318+
aren't validated, since unit tests do not use a complete control stack.
305319
"""
306320

307321

pyreach/common/python/types_gen.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -963,7 +963,13 @@ class CameraCalibration:
963963
# Camera pose in the origin frame, x, y, z, rx, ry, rz.
964964
camera_t_origin: List[float]
965965

966-
def __init__(self, calibrated_height: int = 0, calibrated_width: int = 0, camera_t_origin: Optional[List[float]] = None, distortion: Optional[List[float]] = None, distortion_depth: Optional[List[float]] = None, extrinsics: Optional[List[float]] = None, extrinsics_residual: float = 0.0, intrinsics: Optional[List[float]] = None, intrinsics_residual: float = 0.0, lens_model: str = '') -> None:
966+
# ToolMount is the name of the device to which the camera is mounted.
967+
tool_mount: str
968+
969+
# LinkName is the name of the link to which the camera is attached.
970+
link_name: str
971+
972+
def __init__(self, calibrated_height: int = 0, calibrated_width: int = 0, camera_t_origin: Optional[List[float]] = None, distortion: Optional[List[float]] = None, distortion_depth: Optional[List[float]] = None, extrinsics: Optional[List[float]] = None, extrinsics_residual: float = 0.0, intrinsics: Optional[List[float]] = None, intrinsics_residual: float = 0.0, lens_model: str = '', link_name: str = '', tool_mount: str = '') -> None:
967973
self.calibrated_height = calibrated_height
968974
self.calibrated_width = calibrated_width
969975
if camera_t_origin is None:
@@ -989,6 +995,8 @@ def __init__(self, calibrated_height: int = 0, calibrated_width: int = 0, camera
989995
self.intrinsics = intrinsics
990996
self.intrinsics_residual = intrinsics_residual
991997
self.lens_model = lens_model
998+
self.link_name = link_name
999+
self.tool_mount = tool_mount
9921000

9931001
def to_json(self) -> Dict[str, Any]:
9941002
"""Convert type object to JSON."""
@@ -1034,6 +1042,14 @@ def to_json(self) -> Dict[str, Any]:
10341042
assert isinstance(self.lens_model, str), 'Wrong type for attribute: lens_model. Expected: str. Got: ' + str(type(self.lens_model)) + '.'
10351043
json_data['lensModel'] = self.lens_model
10361044

1045+
if self.link_name:
1046+
assert isinstance(self.link_name, str), 'Wrong type for attribute: link_name. Expected: str. Got: ' + str(type(self.link_name)) + '.'
1047+
json_data['linkName'] = self.link_name
1048+
1049+
if self.tool_mount:
1050+
assert isinstance(self.tool_mount, str), 'Wrong type for attribute: tool_mount. Expected: str. Got: ' + str(type(self.tool_mount)) + '.'
1051+
json_data['toolMount'] = self.tool_mount
1052+
10371053
return json_data
10381054

10391055
def to_proto(self) -> 'logs_pb2.CameraCalibration':
@@ -1054,6 +1070,10 @@ def to_proto(self) -> 'logs_pb2.CameraCalibration':
10541070
proto.distortion.extend(self.distortion)
10551071
proto.distortion_depth.extend(self.distortion_depth)
10561072
proto.camera_t_origin.extend(self.camera_t_origin)
1073+
if self.tool_mount:
1074+
proto.tool_mount = self.tool_mount
1075+
if self.link_name:
1076+
proto.link_name = self.link_name
10571077
return proto
10581078

10591079
@staticmethod
@@ -1117,6 +1137,14 @@ def from_json(json_data: Dict[str, Any]) -> 'CameraCalibration':
11171137
assert isinstance(json_data['lensModel'], str), 'Wrong type for attribute: lensModel. Expected: str. Got: ' + str(type(json_data['lensModel'])) + '.'
11181138
obj.lens_model = json_data['lensModel']
11191139

1140+
if 'linkName' in json_data:
1141+
assert isinstance(json_data['linkName'], str), 'Wrong type for attribute: linkName. Expected: str. Got: ' + str(type(json_data['linkName'])) + '.'
1142+
obj.link_name = json_data['linkName']
1143+
1144+
if 'toolMount' in json_data:
1145+
assert isinstance(json_data['toolMount'], str), 'Wrong type for attribute: toolMount. Expected: str. Got: ' + str(type(json_data['toolMount'])) + '.'
1146+
obj.tool_mount = json_data['toolMount']
1147+
11201148
return obj
11211149

11221150
@staticmethod
@@ -1145,6 +1173,10 @@ def from_proto(proto: logs_pb2.CameraCalibration) -> Optional['CameraCalibration
11451173
obj.distortion_depth.append(obj_distortion_depth)
11461174
for obj_camera_t_origin in proto.camera_t_origin:
11471175
obj.camera_t_origin.append(obj_camera_t_origin)
1176+
if proto.HasField('tool_mount'):
1177+
obj.tool_mount = proto.tool_mount
1178+
if proto.HasField('link_name'):
1179+
obj.link_name = proto.link_name
11481180
return obj
11491181

11501182

pyreach/examples/spacemouse_annotations.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from absl import logging # type: ignore
88

99
from pyreach.common.proto_gen import logs_pb2
10+
from pyreach.arm import IKLibType
1011
from pyreach.factory import LocalTCPHostFactory
1112
from pyreach.tools.lib.spacemouse_mover_lib import SpacemouseMover
1213

@@ -53,7 +54,10 @@ def main(argv: Sequence[str]) -> None:
5354
if len(argv) > 1:
5455
raise app.UsageError("Too many command-line arguments.")
5556
logging.info("Connecting to local reach....")
56-
with LocalTCPHostFactory().connect() as host:
57+
with LocalTCPHostFactory(
58+
enable_streaming=False, arm_default_ik_types={
59+
"": IKLibType.IKPYBULLET
60+
}).connect() as host:
5761
logging.info("Connected")
5862
mover = App(host, flags.FLAGS.task_code)
5963
mover.run()

pyreach/gyms/color_camera_element.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ class ReachColorCamera(reach_element.ReachElement):
4848
This was never actually implemented. Use frame_rate instead.
4949
pose_enable: When True, the camera pose is returned for each image
5050
observation under the `pose` key; otherwise, no camera pose is returned.
51+
stale_image_dectect: When a set to a float, an image timeout is specified
52+
that causes a PyReachError execption to be raised whenever the a image is
53+
older than the specified timeout.
54+
5155
"""
5256
shape: Tuple[int, int]
5357
force_fit: bool = False
@@ -58,3 +62,5 @@ class ReachColorCamera(reach_element.ReachElement):
5862
initial_stream_request_period: float = 1.0 # Deprecated, use frame_rate!
5963
frame_rate: float = -1.0
6064
pose_enable: bool = False
65+
stale_image_dectect: Optional[float] = None
66+

0 commit comments

Comments
 (0)