diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e7016708cb4b4fda69d2ab52475234034d970dad --- /dev/null +++ b/.gitignore @@ -0,0 +1,141 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# vscode +.vscode/settings.json diff --git a/README.md b/README.md index 8dd1d3c33f4d6c075298637fd8a6166caa4a166f..20d02101648073c00e3820ae9ef16be972f3b101 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # ABB EGM examples +```bash +conda env create -f environment.yml +conda activate abb_egm_examples +``` diff --git a/abb_egm_client/__init__.py b/abb_egm_client/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8776898633a8a701addb9fb0df417872d5f424c1 --- /dev/null +++ b/abb_egm_client/__init__.py @@ -0,0 +1 @@ +from .egm_client import EGMClient # noqa: F401,F403 diff --git a/abb_egm_client/egm_client.py b/abb_egm_client/egm_client.py new file mode 100644 index 0000000000000000000000000000000000000000..aba35977295568d636952b1ee0e7d883f5898ab8 --- /dev/null +++ b/abb_egm_client/egm_client.py @@ -0,0 +1,123 @@ +import socket +import select +from errno import EINTR + +try: + from egm_pb2 import EgmRobot +except ModuleNotFoundError: + from .egm_pb2 import EgmRobot + + +class EGMClient: + def __init__(self, port=6510): + self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.socket.bind("", port) + + def receive_from_robot(self, timeout=0): + + try: + result = select.select([self.socket], [], [self.socket], timeout=timeout) + except select.error as err: + if err.args[0] == EINTR: + return False, None + else: + raise + + if len(res[0]) == 0 and len(res[2]) == 0: + return False, None + # try: + buf, addr = self.socket.recvfrom(65536) + # except: + # self.egm_addr=None + # return False, None + + # self.egm_addr=addr + + msg = egm_pb2.EgmRobot() + msg.ParseFromString(buf) + + Robot_pos = None + joint_angles = None + rapid_running = False + motors_on = False + global Robot_Position_Flag + + if robot_message.HasField("feedBack"): + if Robot_Position_Flag == False: + Robot_pos = robot_message.feedBack.cartesian.pos + Robot_Position_Flag = True + Joints = robot_message.feedBack.joints.joints + print(robot_message.feedBack.joints.joints) + if robot_message.HasField("rapidExecState"): + rapid_running = ( + robot_message.rapidExecState.state + == robot_message.rapidExecState.RAPID_RUNNING + ) + if robot_message.HasField("motorState"): + motors_on = ( + robot_message.motorState.state == robot_message.motorState.MOTORS_ON + ) + + return True, Robot_pos, Joints + + def send_to_robot_joints(self, joint_angles): + + if not self.egm_addr: + return False + + self.send_sequence_number += 1 + + sensorMessage = egm_pb2.EgmSensor() + + header = sensorMessage.header + header.mtype = egm_pb2.EgmHeader.MessageType.Value("MSGTYPE_CORRECTION") + header.seqno = self.send_sequence_number + self.send_sequence_number += 1 + + planned = sensorMessage.planned + + if joint_angles is not None: + joint_angles2 = list(np.rad2deg(cartesian)) + print(joint_angles2) + print(planned.joints.joints) + buf2 = sensorMessage.SerializeToString() + + try: + self.socket.sendto(buf2, self.egm_addr) + except: + return False + + return True + + def send_to_robot_cartesian(self, Position, Rob_pos): + + if not self.egm_addr: + return False + + self.send_sequence_number += 1 + + sensorMessage = egm_pb2.EgmSensor() + + header = sensorMessage.header + header.mtype = egm_pb2.EgmHeader.MessageType.Value("MSGTYPE_CORRECTION") + header.seqno = self.send_sequence_number + self.send_sequence_number += 1 + + planned = sensorMessage.planned + + if Position is not None: + planned.cartesian.pos.x = Rob_pos.x + Position[2] + planned.cartesian.pos.y = Rob_pos.y + Position[0] + planned.cartesian.pos.z = Rob_pos.z + Position[1] + planned.cartesian.euler.x = -90 + planned.cartesian.euler.y = 180 + planned.cartesian.euler.z = 0 + print(planned.cartesian.pos) + buf2 = sensorMessage.SerializeToString() + + try: + self.socket.sendto(buf2, self.egm_addr) + except: + return False + + return True diff --git a/abb_egm_client/egm_pb2.py b/abb_egm_client/egm_pb2.py new file mode 100644 index 0000000000000000000000000000000000000000..07ec37a0ae041d40fc80da8eb0595ec2e04c3604 --- /dev/null +++ b/abb_egm_client/egm_pb2.py @@ -0,0 +1,1158 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: egm.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='egm.proto', + package='abb.egm', + syntax='proto2', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\tegm.proto\x12\x07\x61\x62\x62.egm\"\xeb\x01\n\tEgmHeader\x12\r\n\x05seqno\x18\x01 \x01(\r\x12\n\n\x02tm\x18\x02 \x01(\r\x12@\n\x05mtype\x18\x03 \x01(\x0e\x32\x1e.abb.egm.EgmHeader.MessageType:\x11MSGTYPE_UNDEFINED\"\x80\x01\n\x0bMessageType\x12\x15\n\x11MSGTYPE_UNDEFINED\x10\x00\x12\x13\n\x0fMSGTYPE_COMMAND\x10\x01\x12\x10\n\x0cMSGTYPE_DATA\x10\x02\x12\x16\n\x12MSGTYPE_CORRECTION\x10\x03\x12\x1b\n\x17MSGTYPE_PATH_CORRECTION\x10\x04\"/\n\x0c\x45gmCartesian\x12\t\n\x01x\x18\x01 \x02(\x01\x12\t\n\x01y\x18\x02 \x02(\x01\x12\t\n\x01z\x18\x03 \x02(\x01\"?\n\rEgmQuaternion\x12\n\n\x02u0\x18\x01 \x02(\x01\x12\n\n\x02u1\x18\x02 \x02(\x01\x12\n\n\x02u2\x18\x03 \x02(\x01\x12\n\n\x02u3\x18\x04 \x02(\x01\"+\n\x08\x45gmEuler\x12\t\n\x01x\x18\x01 \x02(\x01\x12\t\n\x01y\x18\x02 \x02(\x01\x12\t\n\x01z\x18\x03 \x02(\x01\"w\n\x07\x45gmPose\x12\"\n\x03pos\x18\x01 \x01(\x0b\x32\x15.abb.egm.EgmCartesian\x12&\n\x06orient\x18\x02 \x01(\x0b\x32\x16.abb.egm.EgmQuaternion\x12 \n\x05\x65uler\x18\x03 \x01(\x0b\x32\x11.abb.egm.EgmEuler\"\"\n\x11\x45gmCartesianSpeed\x12\r\n\x05value\x18\x01 \x03(\x01\"\x1b\n\tEgmJoints\x12\x0e\n\x06joints\x18\x01 \x03(\x01\"#\n\x11\x45gmExternalJoints\x12\x0e\n\x06joints\x18\x01 \x03(\x01\"\x81\x01\n\nEgmPlanned\x12\"\n\x06joints\x18\x01 \x01(\x0b\x32\x12.abb.egm.EgmJoints\x12#\n\tcartesian\x18\x02 \x01(\x0b\x32\x10.abb.egm.EgmPose\x12*\n\x0e\x65xternalJoints\x18\x03 \x01(\x0b\x32\x12.abb.egm.EgmJoints\"\x8d\x01\n\x0b\x45gmSpeedRef\x12\"\n\x06joints\x18\x01 \x01(\x0b\x32\x12.abb.egm.EgmJoints\x12.\n\ncartesians\x18\x02 \x01(\x0b\x32\x1a.abb.egm.EgmCartesianSpeed\x12*\n\x0e\x65xternalJoints\x18\x03 \x01(\x0b\x32\x12.abb.egm.EgmJoints\">\n\x0b\x45gmPathCorr\x12\"\n\x03pos\x18\x01 \x02(\x0b\x32\x15.abb.egm.EgmCartesian\x12\x0b\n\x03\x61ge\x18\x02 \x02(\r\"\x82\x01\n\x0b\x45gmFeedBack\x12\"\n\x06joints\x18\x01 \x01(\x0b\x32\x12.abb.egm.EgmJoints\x12#\n\tcartesian\x18\x02 \x01(\x0b\x32\x10.abb.egm.EgmPose\x12*\n\x0e\x65xternalJoints\x18\x03 \x01(\x0b\x32\x12.abb.egm.EgmJoints\"\x8c\x01\n\rEgmMotorState\x12\x34\n\x05state\x18\x01 \x02(\x0e\x32%.abb.egm.EgmMotorState.MotorStateType\"E\n\x0eMotorStateType\x12\x14\n\x10MOTORS_UNDEFINED\x10\x00\x12\r\n\tMOTORS_ON\x10\x01\x12\x0e\n\nMOTORS_OFF\x10\x02\"\xa2\x01\n\x0b\x45gmMCIState\x12?\n\x05state\x18\x01 \x02(\x0e\x32!.abb.egm.EgmMCIState.MCIStateType:\rMCI_UNDEFINED\"R\n\x0cMCIStateType\x12\x11\n\rMCI_UNDEFINED\x10\x00\x12\r\n\tMCI_ERROR\x10\x01\x12\x0f\n\x0bMCI_STOPPED\x10\x02\x12\x0f\n\x0bMCI_RUNNING\x10\x03\"\xc3\x01\n\x15\x45gmRapidCtrlExecState\x12U\n\x05state\x18\x01 \x02(\x0e\x32\x35.abb.egm.EgmRapidCtrlExecState.RapidCtrlExecStateType:\x0fRAPID_UNDEFINED\"S\n\x16RapidCtrlExecStateType\x12\x13\n\x0fRAPID_UNDEFINED\x10\x00\x12\x11\n\rRAPID_STOPPED\x10\x01\x12\x11\n\rRAPID_RUNNING\x10\x02\"!\n\x0e\x45gmTestSignals\x12\x0f\n\x07signals\x18\x01 \x03(\x01\"\xd1\x02\n\x08\x45gmRobot\x12\"\n\x06header\x18\x01 \x01(\x0b\x32\x12.abb.egm.EgmHeader\x12&\n\x08\x66\x65\x65\x64\x42\x61\x63k\x18\x02 \x01(\x0b\x32\x14.abb.egm.EgmFeedBack\x12$\n\x07planned\x18\x03 \x01(\x0b\x32\x13.abb.egm.EgmPlanned\x12*\n\nmotorState\x18\x04 \x01(\x0b\x32\x16.abb.egm.EgmMotorState\x12&\n\x08mciState\x18\x05 \x01(\x0b\x32\x14.abb.egm.EgmMCIState\x12\x19\n\x11mciConvergenceMet\x18\x06 \x01(\x08\x12,\n\x0btestSignals\x18\x07 \x01(\x0b\x32\x17.abb.egm.EgmTestSignals\x12\x36\n\x0erapidExecState\x18\x08 \x01(\x0b\x32\x1e.abb.egm.EgmRapidCtrlExecState\"}\n\tEgmSensor\x12\"\n\x06header\x18\x01 \x01(\x0b\x32\x12.abb.egm.EgmHeader\x12$\n\x07planned\x18\x02 \x01(\x0b\x32\x13.abb.egm.EgmPlanned\x12&\n\x08speedRef\x18\x03 \x01(\x0b\x32\x14.abb.egm.EgmSpeedRef\"_\n\x11\x45gmSensorPathCorr\x12\"\n\x06header\x18\x01 \x01(\x0b\x32\x12.abb.egm.EgmHeader\x12&\n\x08pathCorr\x18\x02 \x01(\x0b\x32\x14.abb.egm.EgmPathCorr' +) + + + +_EGMHEADER_MESSAGETYPE = _descriptor.EnumDescriptor( + name='MessageType', + full_name='abb.egm.EgmHeader.MessageType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='MSGTYPE_UNDEFINED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MSGTYPE_COMMAND', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MSGTYPE_DATA', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MSGTYPE_CORRECTION', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MSGTYPE_PATH_CORRECTION', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=130, + serialized_end=258, +) +_sym_db.RegisterEnumDescriptor(_EGMHEADER_MESSAGETYPE) + +_EGMMOTORSTATE_MOTORSTATETYPE = _descriptor.EnumDescriptor( + name='MotorStateType', + full_name='abb.egm.EgmMotorState.MotorStateType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='MOTORS_UNDEFINED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MOTORS_ON', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MOTORS_OFF', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=1187, + serialized_end=1256, +) +_sym_db.RegisterEnumDescriptor(_EGMMOTORSTATE_MOTORSTATETYPE) + +_EGMMCISTATE_MCISTATETYPE = _descriptor.EnumDescriptor( + name='MCIStateType', + full_name='abb.egm.EgmMCIState.MCIStateType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='MCI_UNDEFINED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MCI_ERROR', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MCI_STOPPED', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MCI_RUNNING', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=1339, + serialized_end=1421, +) +_sym_db.RegisterEnumDescriptor(_EGMMCISTATE_MCISTATETYPE) + +_EGMRAPIDCTRLEXECSTATE_RAPIDCTRLEXECSTATETYPE = _descriptor.EnumDescriptor( + name='RapidCtrlExecStateType', + full_name='abb.egm.EgmRapidCtrlExecState.RapidCtrlExecStateType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='RAPID_UNDEFINED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RAPID_STOPPED', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RAPID_RUNNING', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=1536, + serialized_end=1619, +) +_sym_db.RegisterEnumDescriptor(_EGMRAPIDCTRLEXECSTATE_RAPIDCTRLEXECSTATETYPE) + + +_EGMHEADER = _descriptor.Descriptor( + name='EgmHeader', + full_name='abb.egm.EgmHeader', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='seqno', full_name='abb.egm.EgmHeader.seqno', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='tm', full_name='abb.egm.EgmHeader.tm', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mtype', full_name='abb.egm.EgmHeader.mtype', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _EGMHEADER_MESSAGETYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=23, + serialized_end=258, +) + + +_EGMCARTESIAN = _descriptor.Descriptor( + name='EgmCartesian', + full_name='abb.egm.EgmCartesian', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='abb.egm.EgmCartesian.x', index=0, + number=1, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='abb.egm.EgmCartesian.y', index=1, + number=2, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='abb.egm.EgmCartesian.z', index=2, + number=3, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=260, + serialized_end=307, +) + + +_EGMQUATERNION = _descriptor.Descriptor( + name='EgmQuaternion', + full_name='abb.egm.EgmQuaternion', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='u0', full_name='abb.egm.EgmQuaternion.u0', index=0, + number=1, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='u1', full_name='abb.egm.EgmQuaternion.u1', index=1, + number=2, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='u2', full_name='abb.egm.EgmQuaternion.u2', index=2, + number=3, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='u3', full_name='abb.egm.EgmQuaternion.u3', index=3, + number=4, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=309, + serialized_end=372, +) + + +_EGMEULER = _descriptor.Descriptor( + name='EgmEuler', + full_name='abb.egm.EgmEuler', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='x', full_name='abb.egm.EgmEuler.x', index=0, + number=1, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='y', full_name='abb.egm.EgmEuler.y', index=1, + number=2, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='z', full_name='abb.egm.EgmEuler.z', index=2, + number=3, type=1, cpp_type=5, label=2, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=374, + serialized_end=417, +) + + +_EGMPOSE = _descriptor.Descriptor( + name='EgmPose', + full_name='abb.egm.EgmPose', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='pos', full_name='abb.egm.EgmPose.pos', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='orient', full_name='abb.egm.EgmPose.orient', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='euler', full_name='abb.egm.EgmPose.euler', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=419, + serialized_end=538, +) + + +_EGMCARTESIANSPEED = _descriptor.Descriptor( + name='EgmCartesianSpeed', + full_name='abb.egm.EgmCartesianSpeed', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='abb.egm.EgmCartesianSpeed.value', index=0, + number=1, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=540, + serialized_end=574, +) + + +_EGMJOINTS = _descriptor.Descriptor( + name='EgmJoints', + full_name='abb.egm.EgmJoints', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='joints', full_name='abb.egm.EgmJoints.joints', index=0, + number=1, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=576, + serialized_end=603, +) + + +_EGMEXTERNALJOINTS = _descriptor.Descriptor( + name='EgmExternalJoints', + full_name='abb.egm.EgmExternalJoints', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='joints', full_name='abb.egm.EgmExternalJoints.joints', index=0, + number=1, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=605, + serialized_end=640, +) + + +_EGMPLANNED = _descriptor.Descriptor( + name='EgmPlanned', + full_name='abb.egm.EgmPlanned', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='joints', full_name='abb.egm.EgmPlanned.joints', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='cartesian', full_name='abb.egm.EgmPlanned.cartesian', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='externalJoints', full_name='abb.egm.EgmPlanned.externalJoints', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=643, + serialized_end=772, +) + + +_EGMSPEEDREF = _descriptor.Descriptor( + name='EgmSpeedRef', + full_name='abb.egm.EgmSpeedRef', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='joints', full_name='abb.egm.EgmSpeedRef.joints', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='cartesians', full_name='abb.egm.EgmSpeedRef.cartesians', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='externalJoints', full_name='abb.egm.EgmSpeedRef.externalJoints', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=775, + serialized_end=916, +) + + +_EGMPATHCORR = _descriptor.Descriptor( + name='EgmPathCorr', + full_name='abb.egm.EgmPathCorr', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='pos', full_name='abb.egm.EgmPathCorr.pos', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='age', full_name='abb.egm.EgmPathCorr.age', index=1, + number=2, type=13, cpp_type=3, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=918, + serialized_end=980, +) + + +_EGMFEEDBACK = _descriptor.Descriptor( + name='EgmFeedBack', + full_name='abb.egm.EgmFeedBack', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='joints', full_name='abb.egm.EgmFeedBack.joints', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='cartesian', full_name='abb.egm.EgmFeedBack.cartesian', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='externalJoints', full_name='abb.egm.EgmFeedBack.externalJoints', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=983, + serialized_end=1113, +) + + +_EGMMOTORSTATE = _descriptor.Descriptor( + name='EgmMotorState', + full_name='abb.egm.EgmMotorState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='state', full_name='abb.egm.EgmMotorState.state', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _EGMMOTORSTATE_MOTORSTATETYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1116, + serialized_end=1256, +) + + +_EGMMCISTATE = _descriptor.Descriptor( + name='EgmMCIState', + full_name='abb.egm.EgmMCIState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='state', full_name='abb.egm.EgmMCIState.state', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _EGMMCISTATE_MCISTATETYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1259, + serialized_end=1421, +) + + +_EGMRAPIDCTRLEXECSTATE = _descriptor.Descriptor( + name='EgmRapidCtrlExecState', + full_name='abb.egm.EgmRapidCtrlExecState', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='state', full_name='abb.egm.EgmRapidCtrlExecState.state', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _EGMRAPIDCTRLEXECSTATE_RAPIDCTRLEXECSTATETYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1424, + serialized_end=1619, +) + + +_EGMTESTSIGNALS = _descriptor.Descriptor( + name='EgmTestSignals', + full_name='abb.egm.EgmTestSignals', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='signals', full_name='abb.egm.EgmTestSignals.signals', index=0, + number=1, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1621, + serialized_end=1654, +) + + +_EGMROBOT = _descriptor.Descriptor( + name='EgmRobot', + full_name='abb.egm.EgmRobot', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='abb.egm.EgmRobot.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='feedBack', full_name='abb.egm.EgmRobot.feedBack', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='planned', full_name='abb.egm.EgmRobot.planned', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='motorState', full_name='abb.egm.EgmRobot.motorState', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mciState', full_name='abb.egm.EgmRobot.mciState', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mciConvergenceMet', full_name='abb.egm.EgmRobot.mciConvergenceMet', index=5, + number=6, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='testSignals', full_name='abb.egm.EgmRobot.testSignals', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='rapidExecState', full_name='abb.egm.EgmRobot.rapidExecState', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1657, + serialized_end=1994, +) + + +_EGMSENSOR = _descriptor.Descriptor( + name='EgmSensor', + full_name='abb.egm.EgmSensor', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='abb.egm.EgmSensor.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='planned', full_name='abb.egm.EgmSensor.planned', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='speedRef', full_name='abb.egm.EgmSensor.speedRef', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1996, + serialized_end=2121, +) + + +_EGMSENSORPATHCORR = _descriptor.Descriptor( + name='EgmSensorPathCorr', + full_name='abb.egm.EgmSensorPathCorr', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='abb.egm.EgmSensorPathCorr.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='pathCorr', full_name='abb.egm.EgmSensorPathCorr.pathCorr', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2123, + serialized_end=2218, +) + +_EGMHEADER.fields_by_name['mtype'].enum_type = _EGMHEADER_MESSAGETYPE +_EGMHEADER_MESSAGETYPE.containing_type = _EGMHEADER +_EGMPOSE.fields_by_name['pos'].message_type = _EGMCARTESIAN +_EGMPOSE.fields_by_name['orient'].message_type = _EGMQUATERNION +_EGMPOSE.fields_by_name['euler'].message_type = _EGMEULER +_EGMPLANNED.fields_by_name['joints'].message_type = _EGMJOINTS +_EGMPLANNED.fields_by_name['cartesian'].message_type = _EGMPOSE +_EGMPLANNED.fields_by_name['externalJoints'].message_type = _EGMJOINTS +_EGMSPEEDREF.fields_by_name['joints'].message_type = _EGMJOINTS +_EGMSPEEDREF.fields_by_name['cartesians'].message_type = _EGMCARTESIANSPEED +_EGMSPEEDREF.fields_by_name['externalJoints'].message_type = _EGMJOINTS +_EGMPATHCORR.fields_by_name['pos'].message_type = _EGMCARTESIAN +_EGMFEEDBACK.fields_by_name['joints'].message_type = _EGMJOINTS +_EGMFEEDBACK.fields_by_name['cartesian'].message_type = _EGMPOSE +_EGMFEEDBACK.fields_by_name['externalJoints'].message_type = _EGMJOINTS +_EGMMOTORSTATE.fields_by_name['state'].enum_type = _EGMMOTORSTATE_MOTORSTATETYPE +_EGMMOTORSTATE_MOTORSTATETYPE.containing_type = _EGMMOTORSTATE +_EGMMCISTATE.fields_by_name['state'].enum_type = _EGMMCISTATE_MCISTATETYPE +_EGMMCISTATE_MCISTATETYPE.containing_type = _EGMMCISTATE +_EGMRAPIDCTRLEXECSTATE.fields_by_name['state'].enum_type = _EGMRAPIDCTRLEXECSTATE_RAPIDCTRLEXECSTATETYPE +_EGMRAPIDCTRLEXECSTATE_RAPIDCTRLEXECSTATETYPE.containing_type = _EGMRAPIDCTRLEXECSTATE +_EGMROBOT.fields_by_name['header'].message_type = _EGMHEADER +_EGMROBOT.fields_by_name['feedBack'].message_type = _EGMFEEDBACK +_EGMROBOT.fields_by_name['planned'].message_type = _EGMPLANNED +_EGMROBOT.fields_by_name['motorState'].message_type = _EGMMOTORSTATE +_EGMROBOT.fields_by_name['mciState'].message_type = _EGMMCISTATE +_EGMROBOT.fields_by_name['testSignals'].message_type = _EGMTESTSIGNALS +_EGMROBOT.fields_by_name['rapidExecState'].message_type = _EGMRAPIDCTRLEXECSTATE +_EGMSENSOR.fields_by_name['header'].message_type = _EGMHEADER +_EGMSENSOR.fields_by_name['planned'].message_type = _EGMPLANNED +_EGMSENSOR.fields_by_name['speedRef'].message_type = _EGMSPEEDREF +_EGMSENSORPATHCORR.fields_by_name['header'].message_type = _EGMHEADER +_EGMSENSORPATHCORR.fields_by_name['pathCorr'].message_type = _EGMPATHCORR +DESCRIPTOR.message_types_by_name['EgmHeader'] = _EGMHEADER +DESCRIPTOR.message_types_by_name['EgmCartesian'] = _EGMCARTESIAN +DESCRIPTOR.message_types_by_name['EgmQuaternion'] = _EGMQUATERNION +DESCRIPTOR.message_types_by_name['EgmEuler'] = _EGMEULER +DESCRIPTOR.message_types_by_name['EgmPose'] = _EGMPOSE +DESCRIPTOR.message_types_by_name['EgmCartesianSpeed'] = _EGMCARTESIANSPEED +DESCRIPTOR.message_types_by_name['EgmJoints'] = _EGMJOINTS +DESCRIPTOR.message_types_by_name['EgmExternalJoints'] = _EGMEXTERNALJOINTS +DESCRIPTOR.message_types_by_name['EgmPlanned'] = _EGMPLANNED +DESCRIPTOR.message_types_by_name['EgmSpeedRef'] = _EGMSPEEDREF +DESCRIPTOR.message_types_by_name['EgmPathCorr'] = _EGMPATHCORR +DESCRIPTOR.message_types_by_name['EgmFeedBack'] = _EGMFEEDBACK +DESCRIPTOR.message_types_by_name['EgmMotorState'] = _EGMMOTORSTATE +DESCRIPTOR.message_types_by_name['EgmMCIState'] = _EGMMCISTATE +DESCRIPTOR.message_types_by_name['EgmRapidCtrlExecState'] = _EGMRAPIDCTRLEXECSTATE +DESCRIPTOR.message_types_by_name['EgmTestSignals'] = _EGMTESTSIGNALS +DESCRIPTOR.message_types_by_name['EgmRobot'] = _EGMROBOT +DESCRIPTOR.message_types_by_name['EgmSensor'] = _EGMSENSOR +DESCRIPTOR.message_types_by_name['EgmSensorPathCorr'] = _EGMSENSORPATHCORR +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +EgmHeader = _reflection.GeneratedProtocolMessageType('EgmHeader', (_message.Message,), { + 'DESCRIPTOR' : _EGMHEADER, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmHeader) + }) +_sym_db.RegisterMessage(EgmHeader) + +EgmCartesian = _reflection.GeneratedProtocolMessageType('EgmCartesian', (_message.Message,), { + 'DESCRIPTOR' : _EGMCARTESIAN, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmCartesian) + }) +_sym_db.RegisterMessage(EgmCartesian) + +EgmQuaternion = _reflection.GeneratedProtocolMessageType('EgmQuaternion', (_message.Message,), { + 'DESCRIPTOR' : _EGMQUATERNION, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmQuaternion) + }) +_sym_db.RegisterMessage(EgmQuaternion) + +EgmEuler = _reflection.GeneratedProtocolMessageType('EgmEuler', (_message.Message,), { + 'DESCRIPTOR' : _EGMEULER, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmEuler) + }) +_sym_db.RegisterMessage(EgmEuler) + +EgmPose = _reflection.GeneratedProtocolMessageType('EgmPose', (_message.Message,), { + 'DESCRIPTOR' : _EGMPOSE, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmPose) + }) +_sym_db.RegisterMessage(EgmPose) + +EgmCartesianSpeed = _reflection.GeneratedProtocolMessageType('EgmCartesianSpeed', (_message.Message,), { + 'DESCRIPTOR' : _EGMCARTESIANSPEED, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmCartesianSpeed) + }) +_sym_db.RegisterMessage(EgmCartesianSpeed) + +EgmJoints = _reflection.GeneratedProtocolMessageType('EgmJoints', (_message.Message,), { + 'DESCRIPTOR' : _EGMJOINTS, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmJoints) + }) +_sym_db.RegisterMessage(EgmJoints) + +EgmExternalJoints = _reflection.GeneratedProtocolMessageType('EgmExternalJoints', (_message.Message,), { + 'DESCRIPTOR' : _EGMEXTERNALJOINTS, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmExternalJoints) + }) +_sym_db.RegisterMessage(EgmExternalJoints) + +EgmPlanned = _reflection.GeneratedProtocolMessageType('EgmPlanned', (_message.Message,), { + 'DESCRIPTOR' : _EGMPLANNED, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmPlanned) + }) +_sym_db.RegisterMessage(EgmPlanned) + +EgmSpeedRef = _reflection.GeneratedProtocolMessageType('EgmSpeedRef', (_message.Message,), { + 'DESCRIPTOR' : _EGMSPEEDREF, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmSpeedRef) + }) +_sym_db.RegisterMessage(EgmSpeedRef) + +EgmPathCorr = _reflection.GeneratedProtocolMessageType('EgmPathCorr', (_message.Message,), { + 'DESCRIPTOR' : _EGMPATHCORR, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmPathCorr) + }) +_sym_db.RegisterMessage(EgmPathCorr) + +EgmFeedBack = _reflection.GeneratedProtocolMessageType('EgmFeedBack', (_message.Message,), { + 'DESCRIPTOR' : _EGMFEEDBACK, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmFeedBack) + }) +_sym_db.RegisterMessage(EgmFeedBack) + +EgmMotorState = _reflection.GeneratedProtocolMessageType('EgmMotorState', (_message.Message,), { + 'DESCRIPTOR' : _EGMMOTORSTATE, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmMotorState) + }) +_sym_db.RegisterMessage(EgmMotorState) + +EgmMCIState = _reflection.GeneratedProtocolMessageType('EgmMCIState', (_message.Message,), { + 'DESCRIPTOR' : _EGMMCISTATE, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmMCIState) + }) +_sym_db.RegisterMessage(EgmMCIState) + +EgmRapidCtrlExecState = _reflection.GeneratedProtocolMessageType('EgmRapidCtrlExecState', (_message.Message,), { + 'DESCRIPTOR' : _EGMRAPIDCTRLEXECSTATE, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmRapidCtrlExecState) + }) +_sym_db.RegisterMessage(EgmRapidCtrlExecState) + +EgmTestSignals = _reflection.GeneratedProtocolMessageType('EgmTestSignals', (_message.Message,), { + 'DESCRIPTOR' : _EGMTESTSIGNALS, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmTestSignals) + }) +_sym_db.RegisterMessage(EgmTestSignals) + +EgmRobot = _reflection.GeneratedProtocolMessageType('EgmRobot', (_message.Message,), { + 'DESCRIPTOR' : _EGMROBOT, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmRobot) + }) +_sym_db.RegisterMessage(EgmRobot) + +EgmSensor = _reflection.GeneratedProtocolMessageType('EgmSensor', (_message.Message,), { + 'DESCRIPTOR' : _EGMSENSOR, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmSensor) + }) +_sym_db.RegisterMessage(EgmSensor) + +EgmSensorPathCorr = _reflection.GeneratedProtocolMessageType('EgmSensorPathCorr', (_message.Message,), { + 'DESCRIPTOR' : _EGMSENSORPATHCORR, + '__module__' : 'egm_pb2' + # @@protoc_insertion_point(class_scope:abb.egm.EgmSensorPathCorr) + }) +_sym_db.RegisterMessage(EgmSensorPathCorr) + + +# @@protoc_insertion_point(module_scope) diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000000000000000000000000000000000000..df4382de52de5b4a6e882466a24169f23ffad80d --- /dev/null +++ b/environment.yml @@ -0,0 +1,6 @@ +name: abb-egm-examples +channels: + - conda-forge +dependencies: + - numpy + - protobuf diff --git a/examples/print_egm_feedback.py b/examples/print_egm_feedback.py new file mode 100644 index 0000000000000000000000000000000000000000..67e621a9cc5781a642fb66c22dff966529dd63a9 --- /dev/null +++ b/examples/print_egm_feedback.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +import logging +import sys + +log = logging.getLogger() + +try: + from abb_egm_client import EGMClient +except ImportError: + raise ImportWarning("abb_egm not found, have you installed the package?") + +UDP_PORT = 6510 + + +def print_egm_feedback(rate: int): + """Print EGM feedback. + + Parameters + ---------- + rate + Frequency of prints in hertz. + + """ + + egm_client = EGMClient(port=UDP_PORT) + + counter = 0 + while True: + try: + ok, feedback = egm_client.receive_from_robot() + if ok and counter % rate: + print(f"Seq: {counter}\tMsg: {feedback}") + else: + log.error("False from EGMClient.recieve_from_robot") + except Exception as exc: + log.error(f"Exception raised {exc}") + log.info("Retrying") + counter = 0 + + +if __name__ == "__main__": + print_egm_feedback(sys.argv[0]) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..9ac9b912aae30d4a63758999e0698edd94e3c2e4 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,6 @@ +[build-system] +requires = [ + "setuptools >= 40.9.0", + "wheel", +] +build-backend = "setuptools.build_meta" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d267f5d768649409db3bbb5c27d29bc6c4a731b5 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,9 @@ +[metadata] +name = abb_egm_client +version = 0.1.0 + +[options] +packages = abb_egm_client +python_requires = >= 3.8 +install_requires = + protobuf diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..b908cbe55cb344569d32de1dfc10ca7323828dc5 --- /dev/null +++ b/setup.py @@ -0,0 +1,3 @@ +import setuptools + +setuptools.setup()