kinfer 0.3.1__cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
kinfer/__init__.py ADDED
@@ -0,0 +1,6 @@
1
+ """Defines the kinfer API."""
2
+
3
+ from . import export, inference
4
+ from .rust_bindings import get_version
5
+
6
+ __version__ = get_version()
@@ -0,0 +1 @@
1
+ from .pytorch import *
@@ -0,0 +1,128 @@
1
+ """PyTorch model export utilities."""
2
+
3
+ import base64
4
+ import inspect
5
+ from io import BytesIO
6
+ from typing import Sequence
7
+
8
+ import onnx
9
+ import onnxruntime as ort
10
+ import torch
11
+ from torch import Tensor
12
+
13
+ from kinfer import proto as P
14
+ from kinfer.serialize.pytorch import PyTorchMultiSerializer
15
+ from kinfer.serialize.schema import get_dummy_io
16
+ from kinfer.serialize.utils import check_names_match
17
+
18
+ KINFER_METADATA_KEY = "kinfer_metadata"
19
+
20
+
21
+ def _add_metadata_to_onnx(model_proto: onnx.ModelProto, schema: P.ModelSchema) -> onnx.ModelProto:
22
+ """Add metadata to ONNX model.
23
+
24
+ Args:
25
+ model_proto: ONNX model prototype
26
+ schema: Model schema to use for model export.
27
+
28
+ Returns:
29
+ ONNX model with added metadata
30
+ """
31
+ schema_bytes = schema.SerializeToString()
32
+
33
+ meta = model_proto.metadata_props.add()
34
+ meta.key = KINFER_METADATA_KEY
35
+ meta.value = base64.b64encode(schema_bytes).decode("utf-8")
36
+
37
+ return model_proto
38
+
39
+
40
+ def export_model(model: torch.jit.ScriptModule, schema: P.ModelSchema) -> onnx.ModelProto:
41
+ """Export PyTorch model to ONNX format with metadata.
42
+
43
+ Args:
44
+ model: PyTorch model to export.
45
+ schema: Model schema to use for model export.
46
+
47
+ Returns:
48
+ ONNX inference session
49
+ """
50
+ # Matches each input name to the input values.
51
+ signature = inspect.signature(model.forward)
52
+ model_input_names = [
53
+ p.name for p in signature.parameters.values() if p.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
54
+ ]
55
+ if len(model_input_names) != len(schema.input_schema.values):
56
+ raise ValueError(f"Expected {len(model_input_names)} inputs, but schema has {len(schema.input_schema.values)}")
57
+ input_schema_names = [i.value_name for i in schema.input_schema.values]
58
+ output_schema_names = [o.value_name for o in schema.output_schema.values]
59
+
60
+ if model_input_names != input_schema_names:
61
+ raise ValueError(f"Expected input names {model_input_names} to match schema names {input_schema_names}")
62
+
63
+ input_serializer = PyTorchMultiSerializer(schema.input_schema)
64
+ output_serializer = PyTorchMultiSerializer(schema.output_schema)
65
+
66
+ input_dummy_values = get_dummy_io(schema.input_schema)
67
+ input_tensors = input_serializer.serialize_io(input_dummy_values, as_dict=True)
68
+
69
+ check_names_match("model_input_names", model_input_names, "input_schema", list(input_tensors.keys()))
70
+ input_tensor_list = [input_tensors[name] for name in model_input_names]
71
+
72
+ # Attempts to run the model with the dummy inputs.
73
+ try:
74
+ pred_output_tensors = model(*input_tensor_list)
75
+ except Exception as e:
76
+ signature = inspect.signature(model.forward)
77
+ model_input_names = [
78
+ p.name for p in signature.parameters.values() if p.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
79
+ ]
80
+
81
+ raise ValueError(
82
+ f"Failed to run model with dummy inputs; input names are {model_input_names} while "
83
+ f"input schema is {schema.input_schema}"
84
+ ) from e
85
+
86
+ # Attempts to parse the output tensors using the output schema.
87
+ if isinstance(pred_output_tensors, Tensor):
88
+ pred_output_tensors = (pred_output_tensors,)
89
+ if isinstance(pred_output_tensors, Sequence):
90
+ pred_output_tensors = output_serializer.assign_names(pred_output_tensors)
91
+ if not isinstance(pred_output_tensors, dict):
92
+ raise ValueError("Output tensors could not be converted to dictionary")
93
+ try:
94
+ pred_output_tensors = output_serializer.deserialize_io(pred_output_tensors)
95
+ except Exception as e:
96
+ raise ValueError("Failed to parse output tensors using output schema; are you sure it is correct?") from e
97
+
98
+ # Export model to buffer
99
+ buffer = BytesIO()
100
+ torch.onnx.export(
101
+ model=model,
102
+ f=buffer, # type: ignore[arg-type]
103
+ kwargs=input_tensors,
104
+ input_names=input_schema_names,
105
+ output_names=output_schema_names,
106
+ )
107
+ buffer.seek(0)
108
+
109
+ # Loads the model from the buffer and adds metadata.
110
+ model_proto = onnx.load_model(buffer)
111
+ model_proto = _add_metadata_to_onnx(model_proto, schema)
112
+
113
+ return model_proto
114
+
115
+
116
+ def get_model(model_proto: onnx.ModelProto) -> ort.InferenceSession:
117
+ """Converts a model proto to an inference session.
118
+
119
+ Args:
120
+ model_proto: ONNX model proto to convert to inference session.
121
+
122
+ Returns:
123
+ ONNX inference session
124
+ """
125
+ buffer = BytesIO()
126
+ onnx.save_model(model_proto, buffer)
127
+ buffer.seek(0)
128
+ return ort.InferenceSession(buffer.read())
@@ -0,0 +1 @@
1
+ from .python import *
@@ -0,0 +1,92 @@
1
+ """ONNX model inference utilities for Python."""
2
+
3
+ import base64
4
+ from pathlib import Path
5
+
6
+ import onnx
7
+ import onnxruntime as ort
8
+
9
+ from kinfer import proto as P
10
+ from kinfer.export.pytorch import KINFER_METADATA_KEY
11
+ from kinfer.serialize.numpy import NumpyMultiSerializer
12
+
13
+
14
+ def _read_schema(model: onnx.ModelProto) -> P.ModelSchema:
15
+ for prop in model.metadata_props:
16
+ if prop.key == KINFER_METADATA_KEY:
17
+ try:
18
+ schema_bytes = base64.b64decode(prop.value)
19
+ schema = P.ModelSchema()
20
+ schema.ParseFromString(schema_bytes)
21
+ return schema
22
+ except Exception as e:
23
+ raise ValueError("Failed to parse kinfer_metadata value") from e
24
+ else:
25
+ raise ValueError(f"Found arbitrary metadata key {prop.key}")
26
+
27
+ raise ValueError(f"{KINFER_METADATA_KEY} not found in model metadata")
28
+
29
+
30
+ class ONNXModel:
31
+ """Wrapper for ONNX model inference."""
32
+
33
+ def __init__(self: "ONNXModel", model_path: str | Path) -> None:
34
+ """Initialize ONNX model.
35
+
36
+ Args:
37
+ model_path: Path to ONNX model file
38
+ """
39
+ self.model_path = model_path
40
+
41
+ # Load model and create inference session
42
+ self.model = onnx.load(model_path)
43
+ self.session = ort.InferenceSession(model_path)
44
+ self._schema = _read_schema(self.model)
45
+
46
+ # Create serializers for input and output.
47
+ self._input_serializer = NumpyMultiSerializer(self._schema.input_schema)
48
+ self._output_serializer = NumpyMultiSerializer(self._schema.output_schema)
49
+
50
+ def __call__(self: "ONNXModel", inputs: P.IO) -> P.IO:
51
+ """Run inference on input data.
52
+
53
+ Args:
54
+ inputs: Input data, matching the input schema.
55
+
56
+ Returns:
57
+ Model outputs, matching the output schema.
58
+ """
59
+ inputs_np = self._input_serializer.serialize_io(inputs, as_dict=True)
60
+ outputs_np = self.session.run(None, inputs_np)
61
+ outputs = self._output_serializer.deserialize_io(outputs_np)
62
+ return outputs
63
+
64
+ @property
65
+ def input_schema(self: "ONNXModel") -> P.IOSchema:
66
+ """Get the input schema."""
67
+ return self._schema.input_schema
68
+
69
+ @property
70
+ def output_schema(self: "ONNXModel") -> P.IOSchema:
71
+ """Get the output schema."""
72
+ return self._schema.output_schema
73
+
74
+ @property
75
+ def schema_input_keys(self: "ONNXModel") -> list[str]:
76
+ """Get all value names from input schemas.
77
+
78
+ Returns:
79
+ List of value names from input schema.
80
+ """
81
+ input_names = [value.value_name for value in self._schema.input_schema.values]
82
+ return input_names
83
+
84
+ @property
85
+ def schema_output_keys(self: "ONNXModel") -> list[str]:
86
+ """Get all value names from output schemas.
87
+
88
+ Returns:
89
+ List of value names from output schema.
90
+ """
91
+ output_names = [value.value_name for value in self._schema.output_schema.values]
92
+ return output_names
@@ -0,0 +1,40 @@
1
+ """Defines helper types for the protocol buffers."""
2
+
3
+ from .kinfer_pb2 import (
4
+ IO,
5
+ AudioFrameSchema,
6
+ AudioFrameValue,
7
+ CameraFrameSchema,
8
+ CameraFrameValue,
9
+ DType,
10
+ ImuAccelerometerValue,
11
+ ImuGyroscopeValue,
12
+ ImuMagnetometerValue,
13
+ ImuSchema,
14
+ ImuValue,
15
+ IOSchema,
16
+ JointCommandsSchema,
17
+ JointCommandsValue,
18
+ JointCommandValue,
19
+ JointPositionsSchema,
20
+ JointPositionsValue,
21
+ JointPositionUnit,
22
+ JointPositionValue,
23
+ JointTorquesSchema,
24
+ JointTorquesValue,
25
+ JointTorqueUnit,
26
+ JointTorqueValue,
27
+ JointVelocitiesSchema,
28
+ JointVelocitiesValue,
29
+ JointVelocityUnit,
30
+ JointVelocityValue,
31
+ ModelSchema,
32
+ StateTensorSchema,
33
+ StateTensorValue,
34
+ TimestampSchema,
35
+ TimestampValue,
36
+ Value,
37
+ ValueSchema,
38
+ VectorCommandSchema,
39
+ VectorCommandValue,
40
+ )
@@ -0,0 +1,103 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: kinfer/proto/kinfer.proto
5
+ # Protobuf Python Version: 5.29.1
6
+ """Generated protocol buffer code."""
7
+
8
+ from google.protobuf import descriptor as _descriptor
9
+ from google.protobuf import descriptor_pool as _descriptor_pool
10
+ from google.protobuf import runtime_version as _runtime_version
11
+ from google.protobuf import symbol_database as _symbol_database
12
+ from google.protobuf.internal import builder as _builder
13
+
14
+ _runtime_version.ValidateProtobufRuntimeVersion(
15
+ _runtime_version.Domain.PUBLIC, 5, 29, 1, "", "kinfer/proto/kinfer.proto"
16
+ )
17
+ # @@protoc_insertion_point(imports)
18
+
19
+ _sym_db = _symbol_database.Default()
20
+
21
+
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
23
+ b'\n\x19kinfer/proto/kinfer.proto\x12\x0ckinfer.proto"f\n\x12JointPositionValue\x12\x12\n\njoint_name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02\x12-\n\x04unit\x18\x03 \x01(\x0e\x32\x1f.kinfer.proto.JointPositionUnit"Z\n\x14JointPositionsSchema\x12-\n\x04unit\x18\x01 \x01(\x0e\x32\x1f.kinfer.proto.JointPositionUnit\x12\x13\n\x0bjoint_names\x18\x02 \x03(\t"G\n\x13JointPositionsValue\x12\x30\n\x06values\x18\x01 \x03(\x0b\x32 .kinfer.proto.JointPositionValue"f\n\x12JointVelocityValue\x12\x12\n\njoint_name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02\x12-\n\x04unit\x18\x03 \x01(\x0e\x32\x1f.kinfer.proto.JointVelocityUnit"[\n\x15JointVelocitiesSchema\x12-\n\x04unit\x18\x01 \x01(\x0e\x32\x1f.kinfer.proto.JointVelocityUnit\x12\x13\n\x0bjoint_names\x18\x02 \x03(\t"H\n\x14JointVelocitiesValue\x12\x30\n\x06values\x18\x01 \x03(\x0b\x32 .kinfer.proto.JointVelocityValue"b\n\x10JointTorqueValue\x12\x12\n\njoint_name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x02\x12+\n\x04unit\x18\x03 \x01(\x0e\x32\x1d.kinfer.proto.JointTorqueUnit"V\n\x12JointTorquesSchema\x12+\n\x04unit\x18\x01 \x01(\x0e\x32\x1d.kinfer.proto.JointTorqueUnit\x12\x13\n\x0bjoint_names\x18\x02 \x03(\t"C\n\x11JointTorquesValue\x12.\n\x06values\x18\x01 \x03(\x0b\x32\x1e.kinfer.proto.JointTorqueValue"\xce\x01\n\x13JointCommandsSchema\x12\x13\n\x0bjoint_names\x18\x01 \x03(\t\x12\x32\n\x0btorque_unit\x18\x02 \x01(\x0e\x32\x1d.kinfer.proto.JointTorqueUnit\x12\x36\n\rvelocity_unit\x18\x03 \x01(\x0e\x32\x1f.kinfer.proto.JointVelocityUnit\x12\x36\n\rposition_unit\x18\x04 \x01(\x0e\x32\x1f.kinfer.proto.JointPositionUnit"\x97\x02\n\x11JointCommandValue\x12\x12\n\njoint_name\x18\x01 \x01(\t\x12\x0e\n\x06torque\x18\x02 \x01(\x02\x12\x10\n\x08velocity\x18\x03 \x01(\x02\x12\x10\n\x08position\x18\x04 \x01(\x02\x12\n\n\x02kp\x18\x05 \x01(\x02\x12\n\n\x02kd\x18\x06 \x01(\x02\x12\x32\n\x0btorque_unit\x18\x07 \x01(\x0e\x32\x1d.kinfer.proto.JointTorqueUnit\x12\x36\n\rvelocity_unit\x18\x08 \x01(\x0e\x32\x1f.kinfer.proto.JointVelocityUnit\x12\x36\n\rposition_unit\x18\t \x01(\x0e\x32\x1f.kinfer.proto.JointPositionUnit"E\n\x12JointCommandsValue\x12/\n\x06values\x18\x01 \x03(\x0b\x32\x1f.kinfer.proto.JointCommandValue"D\n\x11\x43\x61meraFrameSchema\x12\r\n\x05width\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x05\x12\x10\n\x08\x63hannels\x18\x03 \x01(\x05" \n\x10\x43\x61meraFrameValue\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c"]\n\x10\x41udioFrameSchema\x12\x10\n\x08\x63hannels\x18\x01 \x01(\x05\x12\x13\n\x0bsample_rate\x18\x02 \x01(\x05\x12"\n\x05\x64type\x18\x03 \x01(\x0e\x32\x13.kinfer.proto.DType"\x1f\n\x0f\x41udioFrameValue\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c"8\n\x15ImuAccelerometerValue\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02"4\n\x11ImuGyroscopeValue\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02"7\n\x14ImuMagnetometerValue\x12\t\n\x01x\x18\x01 \x01(\x02\x12\t\n\x01y\x18\x02 \x01(\x02\x12\t\n\x01z\x18\x03 \x01(\x02"W\n\tImuSchema\x12\x19\n\x11use_accelerometer\x18\x01 \x01(\x08\x12\x15\n\ruse_gyroscope\x18\x02 \x01(\x08\x12\x18\n\x10use_magnetometer\x18\x03 \x01(\x08"\xc3\x01\n\x08ImuValue\x12@\n\x13linear_acceleration\x18\x01 \x01(\x0b\x32#.kinfer.proto.ImuAccelerometerValue\x12\x39\n\x10\x61ngular_velocity\x18\x02 \x01(\x0b\x32\x1f.kinfer.proto.ImuGyroscopeValue\x12:\n\x0emagnetic_field\x18\x03 \x01(\x0b\x32".kinfer.proto.ImuMagnetometerValue"=\n\x0fTimestampSchema\x12\x15\n\rstart_seconds\x18\x01 \x01(\x03\x12\x13\n\x0bstart_nanos\x18\x02 \x01(\x05"0\n\x0eTimestampValue\x12\x0f\n\x07seconds\x18\x01 \x01(\x03\x12\r\n\x05nanos\x18\x02 \x01(\x05")\n\x13VectorCommandSchema\x12\x12\n\ndimensions\x18\x01 \x01(\x05"$\n\x12VectorCommandValue\x12\x0e\n\x06values\x18\x01 \x03(\x02"F\n\x11StateTensorSchema\x12\r\n\x05shape\x18\x01 \x03(\x05\x12"\n\x05\x64type\x18\x02 \x01(\x0e\x32\x13.kinfer.proto.DType" \n\x10StateTensorValue\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c"\xd4\x04\n\x05Value\x12\x12\n\nvalue_name\x18\x01 \x01(\t\x12<\n\x0fjoint_positions\x18\x02 \x01(\x0b\x32!.kinfer.proto.JointPositionsValueH\x00\x12>\n\x10joint_velocities\x18\x03 \x01(\x0b\x32".kinfer.proto.JointVelocitiesValueH\x00\x12\x38\n\rjoint_torques\x18\x04 \x01(\x0b\x32\x1f.kinfer.proto.JointTorquesValueH\x00\x12:\n\x0ejoint_commands\x18\x05 \x01(\x0b\x32 .kinfer.proto.JointCommandsValueH\x00\x12\x36\n\x0c\x63\x61mera_frame\x18\x06 \x01(\x0b\x32\x1e.kinfer.proto.CameraFrameValueH\x00\x12\x34\n\x0b\x61udio_frame\x18\x07 \x01(\x0b\x32\x1d.kinfer.proto.AudioFrameValueH\x00\x12%\n\x03imu\x18\x08 \x01(\x0b\x32\x16.kinfer.proto.ImuValueH\x00\x12\x31\n\ttimestamp\x18\t \x01(\x0b\x32\x1c.kinfer.proto.TimestampValueH\x00\x12:\n\x0evector_command\x18\n \x01(\x0b\x32 .kinfer.proto.VectorCommandValueH\x00\x12\x36\n\x0cstate_tensor\x18\x0b \x01(\x0b\x32\x1e.kinfer.proto.StateTensorValueH\x00\x42\x07\n\x05value"\xe9\x04\n\x0bValueSchema\x12\x12\n\nvalue_name\x18\x01 \x01(\t\x12=\n\x0fjoint_positions\x18\x02 \x01(\x0b\x32".kinfer.proto.JointPositionsSchemaH\x00\x12?\n\x10joint_velocities\x18\x03 \x01(\x0b\x32#.kinfer.proto.JointVelocitiesSchemaH\x00\x12\x39\n\rjoint_torques\x18\x04 \x01(\x0b\x32 .kinfer.proto.JointTorquesSchemaH\x00\x12;\n\x0ejoint_commands\x18\x05 \x01(\x0b\x32!.kinfer.proto.JointCommandsSchemaH\x00\x12\x37\n\x0c\x63\x61mera_frame\x18\x06 \x01(\x0b\x32\x1f.kinfer.proto.CameraFrameSchemaH\x00\x12\x35\n\x0b\x61udio_frame\x18\x07 \x01(\x0b\x32\x1e.kinfer.proto.AudioFrameSchemaH\x00\x12&\n\x03imu\x18\x08 \x01(\x0b\x32\x17.kinfer.proto.ImuSchemaH\x00\x12\x32\n\ttimestamp\x18\t \x01(\x0b\x32\x1d.kinfer.proto.TimestampSchemaH\x00\x12;\n\x0evector_command\x18\n \x01(\x0b\x32!.kinfer.proto.VectorCommandSchemaH\x00\x12\x37\n\x0cstate_tensor\x18\x0b \x01(\x0b\x32\x1f.kinfer.proto.StateTensorSchemaH\x00\x42\x0c\n\nvalue_type"5\n\x08IOSchema\x12)\n\x06values\x18\x01 \x03(\x0b\x32\x19.kinfer.proto.ValueSchema")\n\x02IO\x12#\n\x06values\x18\x01 \x03(\x0b\x32\x13.kinfer.proto.Value"j\n\x0bModelSchema\x12,\n\x0cinput_schema\x18\x01 \x01(\x0b\x32\x16.kinfer.proto.IOSchema\x12-\n\routput_schema\x18\x02 \x01(\x0b\x32\x16.kinfer.proto.IOSchema*\x88\x01\n\x05\x44Type\x12\x07\n\x03\x46P8\x10\x00\x12\x08\n\x04\x46P16\x10\x01\x12\x08\n\x04\x46P32\x10\x02\x12\x08\n\x04\x46P64\x10\x03\x12\x08\n\x04INT8\x10\x04\x12\t\n\x05INT16\x10\x05\x12\t\n\x05INT32\x10\x06\x12\t\n\x05INT64\x10\x07\x12\t\n\x05UINT8\x10\x08\x12\n\n\x06UINT16\x10\t\x12\n\n\x06UINT32\x10\n\x12\n\n\x06UINT64\x10\x0b*-\n\x11JointPositionUnit\x12\x0b\n\x07\x44\x45GREES\x10\x00\x12\x0b\n\x07RADIANS\x10\x01*C\n\x11JointVelocityUnit\x12\x16\n\x12\x44\x45GREES_PER_SECOND\x10\x00\x12\x16\n\x12RADIANS_PER_SECOND\x10\x01*$\n\x0fJointTorqueUnit\x12\x11\n\rNEWTON_METERS\x10\x00\x62\x06proto3'
24
+ )
25
+
26
+ _globals = globals()
27
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
28
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "kinfer.proto.kinfer_pb2", _globals)
29
+ if not _descriptor._USE_C_DESCRIPTORS:
30
+ DESCRIPTOR._loaded_options = None
31
+ _globals["_DTYPE"]._serialized_start = 3816
32
+ _globals["_DTYPE"]._serialized_end = 3952
33
+ _globals["_JOINTPOSITIONUNIT"]._serialized_start = 3954
34
+ _globals["_JOINTPOSITIONUNIT"]._serialized_end = 3999
35
+ _globals["_JOINTVELOCITYUNIT"]._serialized_start = 4001
36
+ _globals["_JOINTVELOCITYUNIT"]._serialized_end = 4068
37
+ _globals["_JOINTTORQUEUNIT"]._serialized_start = 4070
38
+ _globals["_JOINTTORQUEUNIT"]._serialized_end = 4106
39
+ _globals["_JOINTPOSITIONVALUE"]._serialized_start = 43
40
+ _globals["_JOINTPOSITIONVALUE"]._serialized_end = 145
41
+ _globals["_JOINTPOSITIONSSCHEMA"]._serialized_start = 147
42
+ _globals["_JOINTPOSITIONSSCHEMA"]._serialized_end = 237
43
+ _globals["_JOINTPOSITIONSVALUE"]._serialized_start = 239
44
+ _globals["_JOINTPOSITIONSVALUE"]._serialized_end = 310
45
+ _globals["_JOINTVELOCITYVALUE"]._serialized_start = 312
46
+ _globals["_JOINTVELOCITYVALUE"]._serialized_end = 414
47
+ _globals["_JOINTVELOCITIESSCHEMA"]._serialized_start = 416
48
+ _globals["_JOINTVELOCITIESSCHEMA"]._serialized_end = 507
49
+ _globals["_JOINTVELOCITIESVALUE"]._serialized_start = 509
50
+ _globals["_JOINTVELOCITIESVALUE"]._serialized_end = 581
51
+ _globals["_JOINTTORQUEVALUE"]._serialized_start = 583
52
+ _globals["_JOINTTORQUEVALUE"]._serialized_end = 681
53
+ _globals["_JOINTTORQUESSCHEMA"]._serialized_start = 683
54
+ _globals["_JOINTTORQUESSCHEMA"]._serialized_end = 769
55
+ _globals["_JOINTTORQUESVALUE"]._serialized_start = 771
56
+ _globals["_JOINTTORQUESVALUE"]._serialized_end = 838
57
+ _globals["_JOINTCOMMANDSSCHEMA"]._serialized_start = 841
58
+ _globals["_JOINTCOMMANDSSCHEMA"]._serialized_end = 1047
59
+ _globals["_JOINTCOMMANDVALUE"]._serialized_start = 1050
60
+ _globals["_JOINTCOMMANDVALUE"]._serialized_end = 1329
61
+ _globals["_JOINTCOMMANDSVALUE"]._serialized_start = 1331
62
+ _globals["_JOINTCOMMANDSVALUE"]._serialized_end = 1400
63
+ _globals["_CAMERAFRAMESCHEMA"]._serialized_start = 1402
64
+ _globals["_CAMERAFRAMESCHEMA"]._serialized_end = 1470
65
+ _globals["_CAMERAFRAMEVALUE"]._serialized_start = 1472
66
+ _globals["_CAMERAFRAMEVALUE"]._serialized_end = 1504
67
+ _globals["_AUDIOFRAMESCHEMA"]._serialized_start = 1506
68
+ _globals["_AUDIOFRAMESCHEMA"]._serialized_end = 1599
69
+ _globals["_AUDIOFRAMEVALUE"]._serialized_start = 1601
70
+ _globals["_AUDIOFRAMEVALUE"]._serialized_end = 1632
71
+ _globals["_IMUACCELEROMETERVALUE"]._serialized_start = 1634
72
+ _globals["_IMUACCELEROMETERVALUE"]._serialized_end = 1690
73
+ _globals["_IMUGYROSCOPEVALUE"]._serialized_start = 1692
74
+ _globals["_IMUGYROSCOPEVALUE"]._serialized_end = 1744
75
+ _globals["_IMUMAGNETOMETERVALUE"]._serialized_start = 1746
76
+ _globals["_IMUMAGNETOMETERVALUE"]._serialized_end = 1801
77
+ _globals["_IMUSCHEMA"]._serialized_start = 1803
78
+ _globals["_IMUSCHEMA"]._serialized_end = 1890
79
+ _globals["_IMUVALUE"]._serialized_start = 1893
80
+ _globals["_IMUVALUE"]._serialized_end = 2088
81
+ _globals["_TIMESTAMPSCHEMA"]._serialized_start = 2090
82
+ _globals["_TIMESTAMPSCHEMA"]._serialized_end = 2151
83
+ _globals["_TIMESTAMPVALUE"]._serialized_start = 2153
84
+ _globals["_TIMESTAMPVALUE"]._serialized_end = 2201
85
+ _globals["_VECTORCOMMANDSCHEMA"]._serialized_start = 2203
86
+ _globals["_VECTORCOMMANDSCHEMA"]._serialized_end = 2244
87
+ _globals["_VECTORCOMMANDVALUE"]._serialized_start = 2246
88
+ _globals["_VECTORCOMMANDVALUE"]._serialized_end = 2282
89
+ _globals["_STATETENSORSCHEMA"]._serialized_start = 2284
90
+ _globals["_STATETENSORSCHEMA"]._serialized_end = 2354
91
+ _globals["_STATETENSORVALUE"]._serialized_start = 2356
92
+ _globals["_STATETENSORVALUE"]._serialized_end = 2388
93
+ _globals["_VALUE"]._serialized_start = 2391
94
+ _globals["_VALUE"]._serialized_end = 2987
95
+ _globals["_VALUESCHEMA"]._serialized_start = 2990
96
+ _globals["_VALUESCHEMA"]._serialized_end = 3607
97
+ _globals["_IOSCHEMA"]._serialized_start = 3609
98
+ _globals["_IOSCHEMA"]._serialized_end = 3662
99
+ _globals["_IO"]._serialized_start = 3664
100
+ _globals["_IO"]._serialized_end = 3705
101
+ _globals["_MODELSCHEMA"]._serialized_start = 3707
102
+ _globals["_MODELSCHEMA"]._serialized_end = 3813
103
+ # @@protoc_insertion_point(module_scope)