From 831d8d93032b37dabc7edb625d16310666af5495 Mon Sep 17 00:00:00 2001 From: hlamontagne Date: Fri, 7 Dec 2018 15:45:26 -0500 Subject: [PATCH] first commit --- .gitignore | 1 + LICENSE | 79 +- kortex_actuator_driver/CMakeLists.txt | 49 + kortex_actuator_driver/RosGeneration.py | 202 + kortex_actuator_driver/build/.gitignore | 0 .../kortex_actuator_driver.sh | 4 + kortex_actuator_driver/msg/ArmState.msg | 22 + kortex_actuator_driver/msg/AxisOffsets.msg | 3 + kortex_actuator_driver/msg/AxisPosition.msg | 2 + kortex_actuator_driver/msg/Command.msg | 8 + kortex_actuator_driver/msg/CommandMode.msg | 12 + .../msg/CommandModeInformation.msg | 3 + kortex_actuator_driver/msg/Connection.msg | 5 + kortex_actuator_driver/msg/ControlLoop.msg | 2 + .../msg/ControlLoopParameters.msg | 7 + .../msg/ControlLoopSelection.msg | 14 + kortex_actuator_driver/msg/ControlMode.msg | 12 + .../msg/ControlModeInformation.msg | 3 + kortex_actuator_driver/msg/CustomData.msg | 19 + .../msg/CustomDataSelection.msg | 2 + kortex_actuator_driver/msg/DeviceHandle.msg | 5 + kortex_actuator_driver/msg/DeviceTypes.msg | 14 + kortex_actuator_driver/msg/Empty.msg | 0 .../msg/EncoderDerivativeParameters.msg | 3 + kortex_actuator_driver/msg/Feedback.msg | 16 + .../msg/FrequencyResponse.msg | 7 + kortex_actuator_driver/msg/LoopSelection.msg | 3 + kortex_actuator_driver/msg/MessageId.msg | 2 + .../msg/NotificationHandle.msg | 2 + .../msg/NotificationOptions.msg | 5 + .../msg/NotificationType.msg | 8 + kortex_actuator_driver/msg/Permission.msg | 8 + .../msg/PositionCommand.msg | 4 + kortex_actuator_driver/msg/RampResponse.msg | 6 + kortex_actuator_driver/msg/SafetyHandle.msg | 2 + .../msg/SafetyIdentifier.msg | 50 + .../msg/SafetyLimitType.msg | 4 + .../msg/SafetyNotification.msg | 11 + .../msg/SafetyStatusValue.msg | 8 + kortex_actuator_driver/msg/ServiceVersion.msg | 4 + kortex_actuator_driver/msg/Servoing.msg | 2 + kortex_actuator_driver/msg/StepResponse.msg | 6 + kortex_actuator_driver/msg/Timestamp.msg | 3 + .../msg/TorqueCalibration.msg | 5 + kortex_actuator_driver/msg/TorqueOffset.msg | 2 + kortex_actuator_driver/msg/Unit.msg | 28 + .../msg/UserProfileHandle.msg | 3 + .../msg/VectorDriveParameters.msg | 5 + .../msg/non_generated/ApiOptions.msg | 1 + .../msg/non_generated/CyclicStatus.msg | 1 + .../msg/non_generated/KortexError.msg | 3 + kortex_actuator_driver/package.xml | 35 + .../protos/ActuatorConfig.options | 10 + .../protos/ActuatorConfig.proto | 235 + .../protos/ActuatorCyclic.proto | 78 + kortex_actuator_driver/protos/Common.options | 4 + kortex_actuator_driver/protos/Common.proto | 152 + kortex_actuator_driver/readme.md | 121 + .../src/actuatorconfig_proto_converter.cpp | 172 + .../src/actuatorconfig_proto_converter.h | 82 + .../src/actuatorconfig_ros_converter.cpp | 172 + .../src/actuatorconfig_ros_converter.h | 82 + .../src/actuatorcyclic_proto_converter.cpp | 79 + .../src/actuatorcyclic_proto_converter.h | 56 + .../src/actuatorcyclic_ros_converter.cpp | 79 + .../src/actuatorcyclic_ros_converter.h | 56 + .../src/common_proto_converter.cpp | 84 + .../src/common_proto_converter.h | 66 + .../src/common_ros_converter.cpp | 84 + .../src/common_ros_converter.h | 66 + kortex_actuator_driver/src/main.cpp | 180 + kortex_actuator_driver/src/node.cpp | 1009 +++++ kortex_actuator_driver/src/node.h | 154 + kortex_actuator_driver/src/util/diagnostic.h | 16 + kortex_actuator_driver/src/util/math_util.h | 12 + kortex_actuator_driver/srv/ClearFaults.srv | 3 + .../srv/GetActivatedControlLoop.srv | 3 + kortex_actuator_driver/srv/GetAxisOffsets.srv | 3 + kortex_actuator_driver/srv/GetCommandMode.srv | 3 + .../srv/GetControlLoopParameters.srv | 3 + kortex_actuator_driver/srv/GetControlMode.srv | 3 + .../srv/GetEncoderDerivativeParameters.srv | 3 + .../srv/GetSelectedCustomData.srv | 3 + kortex_actuator_driver/srv/GetServoing.srv | 3 + .../srv/GetTorqueOffset.srv | 3 + .../srv/GetVectorDriveParameters.srv | 3 + kortex_actuator_driver/srv/MoveToPosition.srv | 3 + .../srv/ReadTorqueCalibration.srv | 3 + kortex_actuator_driver/srv/Refresh.srv | 3 + kortex_actuator_driver/srv/RefreshCommand.srv | 3 + .../srv/RefreshCustomData.srv | 3 + .../srv/RefreshFeedback.srv | 3 + .../srv/SelectCustomData.srv | 3 + .../srv/SetActivatedControlLoop.srv | 3 + kortex_actuator_driver/srv/SetAxisOffsets.srv | 3 + kortex_actuator_driver/srv/SetCommandMode.srv | 3 + .../srv/SetControlLoopParameters.srv | 3 + kortex_actuator_driver/srv/SetControlMode.srv | 3 + .../srv/SetEncoderDerivativeParameters.srv | 3 + kortex_actuator_driver/srv/SetServoing.srv | 3 + .../srv/SetTorqueOffset.srv | 3 + .../srv/SetVectorDriveParameters.srv | 3 + .../srv/StartFrequencyResponse.srv | 3 + .../srv/StartRampResponse.srv | 3 + .../srv/StartStepResponse.srv | 3 + .../srv/StopFrequencyResponse.srv | 3 + .../srv/StopRampResponse.srv | 3 + .../srv/StopStepResponse.srv | 3 + .../srv/WriteTorqueCalibration.srv | 3 + .../srv/non_generated/GetCyclicStatus.srv | 2 + .../srv/non_generated/SetApiOptions.srv | 3 + .../srv/non_generated/SetCyclicStatus.srv | 2 + .../srv/non_generated/SetDeviceID.srv | 2 + .../templates/NodeServices.cpp.jinja2 | 167 + .../templates/NodeServices.h.jinja2 | 113 + kortex_actuator_driver/templates/main.jinja2 | 148 + .../templates/proto_converter.cpp.jinja2 | 77 + .../templates/proto_converter.h.jinja2 | 52 + .../templates/ros_converter.cpp.jinja2 | 86 + .../templates/ros_converter.h.jinja2 | 52 + .../templates/ros_enum.jinja2 | 3 + .../templates/ros_message.jinja2 | 44 + .../templates/ros_oneof.jinja2 | 9 + .../templates/ros_service.jinja2 | 5 + kortex_api/include/.gitignore | 0 kortex_api/lib/.gitignore | 0 kortex_api/readme.md | 39 + kortex_description/CMakeLists.txt | 14 + .../config/joint_names_JACO3_URDF_V10.yaml | 1 + kortex_description/launch/display.launch | 26 + kortex_description/launch/gazebo.launch | 20 + kortex_description/meshes/Bracelet_Link.STL | Bin 0 -> 1164884 bytes .../meshes/EndEffector_Link.STL | Bin 0 -> 80 bytes kortex_description/meshes/ForeArm_Link.STL | Bin 0 -> 456284 bytes kortex_description/meshes/HalfArm1_Link.STL | Bin 0 -> 514184 bytes kortex_description/meshes/HalfArm2_Link.STL | Bin 0 -> 489184 bytes kortex_description/meshes/Shoulder_Link.STL | Bin 0 -> 476184 bytes kortex_description/meshes/Wrist1_Link.STL | Bin 0 -> 546484 bytes kortex_description/meshes/Wrist2_Link.STL | Bin 0 -> 516984 bytes kortex_description/meshes/base_link.STL | Bin 0 -> 172784 bytes kortex_description/package.xml | 21 + kortex_description/readme.md | 15 + kortex_description/urdf/JACO3_URDF_V10.urdf | 494 +++ kortex_device_manager/CMakeLists.txt | 40 + kortex_device_manager/RosGeneration.py | 202 + kortex_device_manager/build/.gitignore | 0 .../kortex_device_manager.sh | 4 + kortex_device_manager/msg/ArmState.msg | 22 + .../msg/BootloaderVersion.msg | 2 + kortex_device_manager/msg/Connection.msg | 5 + kortex_device_manager/msg/DeviceHandle.msg | 5 + kortex_device_manager/msg/DeviceHandles.msg | 3 + kortex_device_manager/msg/DeviceType.msg | 3 + kortex_device_manager/msg/DeviceTypes.msg | 14 + kortex_device_manager/msg/Empty.msg | 0 kortex_device_manager/msg/FirmwareVersion.msg | 2 + kortex_device_manager/msg/IPv4Settings.msg | 4 + kortex_device_manager/msg/MACAddress.msg | 2 + kortex_device_manager/msg/ModelNumber.msg | 2 + .../msg/NotificationHandle.msg | 2 + .../msg/NotificationOptions.msg | 5 + .../msg/NotificationType.msg | 8 + kortex_device_manager/msg/PartNumber.msg | 2 + .../msg/PartNumberRevision.msg | 2 + kortex_device_manager/msg/Permission.msg | 8 + .../msg/PowerOnSelfTestResult.msg | 2 + kortex_device_manager/msg/RebootRqst.msg | 2 + kortex_device_manager/msg/RunMode.msg | 3 + kortex_device_manager/msg/RunModes.msg | 10 + .../msg/SafetyConfiguration.msg | 7 + .../msg/SafetyConfigurationList.msg | 3 + kortex_device_manager/msg/SafetyEnable.msg | 4 + kortex_device_manager/msg/SafetyHandle.msg | 2 + .../msg/SafetyInformation.msg | 16 + .../msg/SafetyInformationList.msg | 3 + kortex_device_manager/msg/SafetyLimitType.msg | 8 + .../msg/SafetyNotification.msg | 11 + kortex_device_manager/msg/SafetyStatus.msg | 3 + .../msg/SafetyStatusValue.msg | 8 + kortex_device_manager/msg/SafetyThreshold.msg | 4 + kortex_device_manager/msg/SerialNumber.msg | 2 + kortex_device_manager/msg/ServiceVersion.msg | 4 + kortex_device_manager/msg/Timestamp.msg | 3 + kortex_device_manager/msg/Unit.msg | 28 + .../msg/UserProfileHandle.msg | 3 + .../msg/non_generated/KortexError.msg | 3 + kortex_device_manager/package.xml | 30 + kortex_device_manager/protos/Common.options | 4 + kortex_device_manager/protos/Common.proto | 152 + .../protos/DeviceConfig.options | 7 + .../protos/DeviceConfig.proto | 271 ++ .../protos/DeviceManager.proto | 27 + kortex_device_manager/readme.md | 96 + .../src/common_proto_converter.cpp | 84 + .../src/common_proto_converter.h | 66 + .../src/common_ros_converter.cpp | 84 + .../src/common_ros_converter.h | 66 + .../src/deviceconfig_proto_converter.cpp | 160 + .../src/deviceconfig_proto_converter.h | 86 + .../src/deviceconfig_ros_converter.cpp | 164 + .../src/deviceconfig_ros_converter.h | 86 + .../src/devicemanager_proto_converter.cpp | 31 + .../src/devicemanager_proto_converter.h | 50 + .../src/devicemanager_ros_converter.cpp | 33 + .../src/devicemanager_ros_converter.h | 50 + kortex_device_manager/src/main.cpp | 80 + kortex_device_manager/src/node.cpp | 978 ++++ kortex_device_manager/src/node.h | 142 + kortex_device_manager/src/util/diagnostic.h | 16 + kortex_device_manager/src/util/math_util.h | 12 + .../srv/ClearAllSafetyStatus.srv | 3 + .../srv/ClearSafetyStatus.srv | 3 + .../srv/GetAllSafetyConfiguration.srv | 3 + .../srv/GetAllSafetyInformation.srv | 3 + .../srv/GetBootloaderVersion.srv | 3 + kortex_device_manager/srv/GetDeviceType.srv | 3 + .../srv/GetFirmwareVersion.srv | 3 + kortex_device_manager/srv/GetIPv4Settings.srv | 3 + kortex_device_manager/srv/GetMACAddress.srv | 3 + kortex_device_manager/srv/GetModelNumber.srv | 3 + kortex_device_manager/srv/GetPartNumber.srv | 3 + .../srv/GetPartNumberRevision.srv | 3 + .../srv/GetPowerOnSelfTestResult.srv | 3 + kortex_device_manager/srv/GetRunMode.srv | 3 + .../srv/GetSafetyConfiguration.srv | 3 + kortex_device_manager/srv/GetSafetyEnable.srv | 3 + .../srv/GetSafetyInformation.srv | 3 + kortex_device_manager/srv/GetSafetyStatus.srv | 3 + kortex_device_manager/srv/GetSerialNumber.srv | 3 + kortex_device_manager/srv/ReadAllDevices.srv | 3 + kortex_device_manager/srv/RebootRequest.srv | 3 + .../srv/ResetSafetyDefaults.srv | 3 + kortex_device_manager/srv/SafetyTopic.srv | 3 + kortex_device_manager/srv/SetIPv4Settings.srv | 3 + kortex_device_manager/srv/SetMACAddress.srv | 3 + kortex_device_manager/srv/SetModelNumber.srv | 3 + kortex_device_manager/srv/SetPartNumber.srv | 3 + .../srv/SetPartNumberRevision.srv | 3 + kortex_device_manager/srv/SetRunMode.srv | 3 + .../srv/SetSafetyConfiguration.srv | 3 + kortex_device_manager/srv/SetSafetyEnable.srv | 3 + .../srv/SetSafetyErrorThreshold.srv | 3 + .../srv/SetSafetyWarningThreshold.srv | 3 + kortex_device_manager/srv/SetSerialNumber.srv | 3 + .../templates/NodeServices.cpp.jinja2 | 126 + .../templates/NodeServices.h.jinja2 | 99 + kortex_device_manager/templates/main.jinja2 | 49 + .../templates/proto_converter.cpp.jinja2 | 77 + .../templates/proto_converter.h.jinja2 | 52 + .../templates/ros_converter.cpp.jinja2 | 86 + .../templates/ros_converter.h.jinja2 | 52 + .../templates/ros_enum.jinja2 | 3 + .../templates/ros_message.jinja2 | 44 + .../templates/ros_oneof.jinja2 | 9 + .../templates/ros_service.jinja2 | 5 + kortex_driver/CMakeLists.txt | 39 + kortex_driver/RosGeneration.py | 205 + kortex_driver/build/.gitignore | 0 kortex_driver/kortex_driver.sh | 4 + kortex_driver/msg/Action.msg | 6 + kortex_driver/msg/ActionEvent.msg | 10 + kortex_driver/msg/ActionExecutionState.msg | 5 + kortex_driver/msg/ActionHandle.msg | 5 + kortex_driver/msg/ActionList.msg | 3 + kortex_driver/msg/ActionNotification.msg | 13 + kortex_driver/msg/ActionNotificationList.msg | 3 + kortex_driver/msg/ActionType.msg | 34 + .../msg/Action_action_parameters.msg | 30 + kortex_driver/msg/ActivateMapHandle.msg | 7 + kortex_driver/msg/ActuatorCommand.msg | 7 + kortex_driver/msg/ActuatorCustomData.msg | 18 + kortex_driver/msg/ActuatorFeedback.msg | 15 + kortex_driver/msg/ActuatorInformation.msg | 2 + kortex_driver/msg/Admittance.msg | 3 + kortex_driver/msg/AdmittanceMode.msg | 10 + kortex_driver/msg/AdvancedSequenceHandle.msg | 4 + kortex_driver/msg/AppendActionInformation.msg | 5 + kortex_driver/msg/ArmState.msg | 22 + kortex_driver/msg/ArmStateInformation.msg | 5 + kortex_driver/msg/ArmStateNotification.msg | 7 + kortex_driver/msg/BackupEvent.msg | 6 + kortex_driver/msg/BaseFeedback.msg | 36 + kortex_driver/msg/CartesianLimitation.msg | 5 + kortex_driver/msg/CartesianLimitationList.msg | 3 + kortex_driver/msg/CartesianReferenceFrame.msg | 6 + .../msg/CartesianReferenceFrameRequest.msg | 3 + kortex_driver/msg/CartesianSpeed.msg | 3 + .../msg/CartesianTrajectoryConstraint.msg | 2 + .../CartesianTrajectoryConstraint_type.msg | 4 + kortex_driver/msg/ChangeJointSpeeds.msg | 3 + kortex_driver/msg/ChangeTwist.msg | 3 + kortex_driver/msg/Command.msg | 6 + .../CommunicationInterfaceConfiguration.msg | 4 + .../msg/ConfigurationChangeNotification.msg | 9 + .../ConfigurationChangeNotificationList.msg | 3 + .../msg/ConfigurationNotificationEvent.msg | 10 + kortex_driver/msg/Connection.msg | 5 + kortex_driver/msg/ConstrainedJointAngle.msg | 5 + kortex_driver/msg/ConstrainedJointAngles.msg | 5 + kortex_driver/msg/ConstrainedOrientation.msg | 5 + kortex_driver/msg/ConstrainedPose.msg | 5 + kortex_driver/msg/ConstrainedPosition.msg | 5 + kortex_driver/msg/ControlMode.msg | 20 + kortex_driver/msg/ControlModeInformation.msg | 3 + kortex_driver/msg/ControlModeNotification.msg | 9 + .../msg/ControlModeNotificationList.msg | 3 + kortex_driver/msg/ControllerBehavior.msg | 12 + .../msg/ControllerElementEventType.msg | 8 + kortex_driver/msg/ControllerElementHandle.msg | 4 + .../ControllerElementHandle_identifier.msg | 3 + kortex_driver/msg/ControllerElementState.msg | 6 + kortex_driver/msg/ControllerEvent.msg | 6 + kortex_driver/msg/ControllerEventType.msg | 6 + kortex_driver/msg/ControllerHandle.msg | 4 + kortex_driver/msg/ControllerInputType.msg | 6 + kortex_driver/msg/ControllerList.msg | 3 + kortex_driver/msg/ControllerNotification.msg | 7 + .../msg/ControllerNotificationList.msg | 3 + kortex_driver/msg/ControllerState.msg | 5 + kortex_driver/msg/ControllerType.msg | 6 + kortex_driver/msg/CustomData.msg | 14 + kortex_driver/msg/Delay.msg | 2 + kortex_driver/msg/DeviceHandle.msg | 5 + kortex_driver/msg/DeviceTypes.msg | 14 + kortex_driver/msg/EmergencyStop.msg | 0 kortex_driver/msg/Empty.msg | 0 kortex_driver/msg/ErrorCodes.msg | 10 + .../msg/EventIdSequenceInfoNotification.msg | 14 + kortex_driver/msg/FactoryEvent.msg | 6 + kortex_driver/msg/FactoryNotification.msg | 9 + kortex_driver/msg/Faults.msg | 0 kortex_driver/msg/Feedback.msg | 8 + kortex_driver/msg/Finger.msg | 3 + kortex_driver/msg/FullIPv4Configuration.msg | 5 + kortex_driver/msg/FullUserProfile.msg | 4 + kortex_driver/msg/GpioEvent.msg | 4 + kortex_driver/msg/GpioState.msg | 8 + kortex_driver/msg/Gripper.msg | 3 + kortex_driver/msg/GripperCommand.msg | 6 + kortex_driver/msg/GripperMode.msg | 8 + kortex_driver/msg/GripperRequest.msg | 3 + kortex_driver/msg/IPv4Configuration.msg | 5 + kortex_driver/msg/IPv4Information.msg | 4 + kortex_driver/msg/InterconnectCommand.msg | 6 + kortex_driver/msg/InterconnectCustomData.msg | 18 + kortex_driver/msg/InterconnectFeedback.msg | 19 + kortex_driver/msg/JointAngle.msg | 3 + kortex_driver/msg/JointAngles.msg | 3 + kortex_driver/msg/JointLimitation.msg | 4 + .../msg/JointLimitationTypeIdentifier.msg | 4 + kortex_driver/msg/JointLimitationValue.msg | 4 + .../msg/JointLimitationValueList.msg | 3 + .../msg/JointNavigationDirection.msg | 6 + kortex_driver/msg/JointSpeed.msg | 4 + kortex_driver/msg/JointSpeeds.msg | 4 + .../msg/JointTrajectoryConstraint.msg | 4 + .../msg/JointTrajectoryConstraintType.msg | 6 + kortex_driver/msg/LedState.msg | 8 + kortex_driver/msg/LimitationType.msg | 8 + .../msg/LimitationTypeIdentifier.msg | 3 + kortex_driver/msg/Map.msg | 6 + kortex_driver/msg/MapElement.msg | 5 + kortex_driver/msg/MapEvent.msg | 2 + kortex_driver/msg/MapGroup.msg | 13 + kortex_driver/msg/MapGroupHandle.msg | 3 + kortex_driver/msg/MapGroupList.msg | 3 + kortex_driver/msg/MapHandle.msg | 3 + kortex_driver/msg/MapList.msg | 3 + kortex_driver/msg/Mapping.msg | 14 + kortex_driver/msg/MappingHandle.msg | 3 + kortex_driver/msg/MappingInfoNotification.msg | 10 + .../msg/MappingInfoNotificationList.msg | 3 + kortex_driver/msg/MappingList.msg | 3 + kortex_driver/msg/NavigationDirection.msg | 10 + kortex_driver/msg/NetworkEvent.msg | 22 + kortex_driver/msg/NetworkHandle.msg | 3 + kortex_driver/msg/NetworkNotification.msg | 9 + kortex_driver/msg/NetworkNotificationList.msg | 3 + kortex_driver/msg/NetworkType.msg | 6 + kortex_driver/msg/NotificationHandle.msg | 2 + kortex_driver/msg/NotificationOptions.msg | 5 + kortex_driver/msg/NotificationType.msg | 8 + kortex_driver/msg/OperatingMode.msg | 16 + .../msg/OperatingModeInformation.msg | 5 + .../msg/OperatingModeNotification.msg | 11 + .../msg/OperatingModeNotificationList.msg | 3 + kortex_driver/msg/Orientation.msg | 4 + kortex_driver/msg/PasswordChange.msg | 5 + kortex_driver/msg/Permission.msg | 8 + kortex_driver/msg/Point.msg | 4 + kortex_driver/msg/Pose.msg | 7 + kortex_driver/msg/Position.msg | 4 + kortex_driver/msg/ProtectionZone.msg | 12 + kortex_driver/msg/ProtectionZoneEvent.msg | 8 + kortex_driver/msg/ProtectionZoneHandle.msg | 3 + .../msg/ProtectionZoneInformation.msg | 3 + kortex_driver/msg/ProtectionZoneList.msg | 3 + .../msg/ProtectionZoneNotification.msg | 11 + .../msg/ProtectionZoneNotificationList.msg | 3 + kortex_driver/msg/Query.msg | 6 + kortex_driver/msg/RequestedActionType.msg | 3 + kortex_driver/msg/RobotEvent.msg | 10 + kortex_driver/msg/RobotEventNotification.msg | 11 + .../msg/RobotEventNotificationList.msg | 3 + kortex_driver/msg/RotationMatrix.msg | 7 + kortex_driver/msg/RotationMatrixRow.msg | 4 + kortex_driver/msg/SafetyEvent.msg | 3 + kortex_driver/msg/SafetyHandle.msg | 2 + kortex_driver/msg/SafetyIdentifier.msg | 60 + kortex_driver/msg/SafetyNotification.msg | 11 + kortex_driver/msg/SafetyNotificationList.msg | 3 + kortex_driver/msg/SafetyStatusValue.msg | 8 + kortex_driver/msg/Sequence.msg | 7 + kortex_driver/msg/SequenceHandle.msg | 3 + .../msg/SequenceInfoNotification.msg | 15 + .../msg/SequenceInfoNotificationList.msg | 3 + kortex_driver/msg/SequenceInformation.msg | 5 + kortex_driver/msg/SequenceList.msg | 3 + kortex_driver/msg/SequenceTask.msg | 5 + kortex_driver/msg/SequenceTaskHandle.msg | 4 + kortex_driver/msg/ServiceVersion.msg | 4 + kortex_driver/msg/ServoingMode.msg | 10 + kortex_driver/msg/ServoingModeInformation.msg | 3 + .../msg/ServoingModeNotification.msg | 9 + .../msg/ServoingModeNotificationList.msg | 3 + kortex_driver/msg/ShapeType.msg | 8 + kortex_driver/msg/SignalQuality.msg | 12 + kortex_driver/msg/SoundType.msg | 6 + kortex_driver/msg/Ssid.msg | 2 + kortex_driver/msg/Stop.msg | 0 kortex_driver/msg/SubErrorCodes.msg | 168 + kortex_driver/msg/SwitchControlMapping.msg | 6 + kortex_driver/msg/SystemTime.msg | 7 + kortex_driver/msg/Timeout.msg | 2 + kortex_driver/msg/Timestamp.msg | 3 + kortex_driver/msg/TransformationMatrix.msg | 9 + kortex_driver/msg/TransformationRow.msg | 5 + kortex_driver/msg/Twist.msg | 7 + kortex_driver/msg/TwistCommand.msg | 6 + kortex_driver/msg/TwistMode.msg | 8 + kortex_driver/msg/Unit.msg | 28 + kortex_driver/msg/UserEvent.msg | 6 + kortex_driver/msg/UserList.msg | 3 + kortex_driver/msg/UserNotification.msg | 11 + kortex_driver/msg/UserNotificationList.msg | 3 + kortex_driver/msg/UserProfile.msg | 7 + kortex_driver/msg/UserProfileHandle.msg | 3 + kortex_driver/msg/UserProfileList.msg | 3 + kortex_driver/msg/WifiConfiguration.msg | 5 + kortex_driver/msg/WifiConfigurationList.msg | 3 + kortex_driver/msg/WifiEncryptionType.msg | 8 + kortex_driver/msg/WifiInformation.msg | 10 + kortex_driver/msg/WifiInformationList.msg | 3 + kortex_driver/msg/WifiSecurityType.msg | 10 + .../msg/Xbox360AnalogInputIdentifier.msg | 14 + .../msg/Xbox360DigitalInputIdentifier.msg | 30 + kortex_driver/msg/ZoneShape.msg | 9 + .../msg/non_generated/ApiOptions.msg | 1 + .../msg/non_generated/KortexError.msg | 3 + kortex_driver/package.xml | 30 + kortex_driver/protos/Base.proto | 1766 ++++++++ kortex_driver/protos/BaseCyclic.proto | 195 + kortex_driver/protos/Common.options | 4 + kortex_driver/protos/Common.proto | 152 + kortex_driver/protos/Errors.options | 2 + kortex_driver/protos/Errors.proto | 118 + kortex_driver/readme.md | 107 + kortex_driver/src/base_proto_converter.cpp | 1227 +++++ kortex_driver/src/base_proto_converter.h | 308 ++ kortex_driver/src/base_ros_converter.cpp | 1378 ++++++ kortex_driver/src/base_ros_converter.h | 308 ++ .../src/basecyclic_proto_converter.cpp | 212 + .../src/basecyclic_proto_converter.h | 68 + .../src/basecyclic_ros_converter.cpp | 218 + kortex_driver/src/basecyclic_ros_converter.h | 68 + kortex_driver/src/common_proto_converter.cpp | 84 + kortex_driver/src/common_proto_converter.h | 66 + kortex_driver/src/common_ros_converter.cpp | 84 + kortex_driver/src/common_ros_converter.h | 66 + kortex_driver/src/main.cpp | 261 ++ kortex_driver/src/node.cpp | 3945 +++++++++++++++++ kortex_driver/src/node.h | 345 ++ kortex_driver/src/util/diagnostic.h | 17 + kortex_driver/src/util/math_util.h | 13 + kortex_driver/srv/ActionTopic.srv | 3 + kortex_driver/srv/ActivateMap.srv | 3 + kortex_driver/srv/AddWifiConfiguration.srv | 3 + kortex_driver/srv/ApplyEmergencyStop.srv | 3 + kortex_driver/srv/ArmStateTopic.srv | 3 + kortex_driver/srv/ChangePassword.srv | 3 + kortex_driver/srv/ClearFaults.srv | 3 + .../srv/ConfigurationChangeTopic.srv | 3 + kortex_driver/srv/ConnectWifi.srv | 3 + kortex_driver/srv/ControlModeTopic.srv | 3 + kortex_driver/srv/ControllerTopic.srv | 3 + kortex_driver/srv/CreateAction.srv | 3 + kortex_driver/srv/CreateMap.srv | 3 + kortex_driver/srv/CreateMapping.srv | 3 + kortex_driver/srv/CreateProtectionZone.srv | 3 + kortex_driver/srv/CreateSequence.srv | 3 + kortex_driver/srv/CreateUserProfile.srv | 3 + kortex_driver/srv/DeleteAction.srv | 3 + kortex_driver/srv/DeleteAllSequenceTasks.srv | 3 + kortex_driver/srv/DeleteProtectionZone.srv | 3 + kortex_driver/srv/DeleteSequence.srv | 3 + kortex_driver/srv/DeleteSequenceTask.srv | 3 + kortex_driver/srv/DeleteUserProfile.srv | 3 + kortex_driver/srv/DeleteWifiConfiguration.srv | 3 + kortex_driver/srv/DisconnectWifi.srv | 3 + kortex_driver/srv/ExecuteAction.srv | 3 + .../srv/ExecuteActionFromReference.srv | 3 + kortex_driver/srv/FactoryTopic.srv | 3 + kortex_driver/srv/GetActionExecutionState.srv | 3 + kortex_driver/srv/GetActiveMap.srv | 3 + kortex_driver/srv/GetActuatorCount.srv | 3 + kortex_driver/srv/GetAllConfiguredWifis.srv | 3 + .../srv/GetAllConnectedControllers.srv | 3 + kortex_driver/srv/GetArmState.srv | 3 + kortex_driver/srv/GetAvailableWifi.srv | 3 + .../srv/GetCommandedCartesianPose.srv | 3 + .../srv/GetCommandedGripperMovement.srv | 3 + kortex_driver/srv/GetCommandedJointAngles.srv | 3 + kortex_driver/srv/GetCommandedJointSpeeds.srv | 3 + kortex_driver/srv/GetCommandedTwist.srv | 3 + kortex_driver/srv/GetConfiguredWifi.srv | 3 + .../srv/GetConnectedWifiInformation.srv | 3 + kortex_driver/srv/GetControlMode.srv | 3 + kortex_driver/srv/GetControllerState.srv | 3 + kortex_driver/srv/GetFwdKinematics.srv | 3 + kortex_driver/srv/GetIPv4Configuration.srv | 3 + kortex_driver/srv/GetIPv4Information.srv | 3 + .../srv/GetMeasuredCartesianPose.srv | 3 + .../srv/GetMeasuredGripperMovement.srv | 3 + kortex_driver/srv/GetMeasuredJointAngles.srv | 3 + kortex_driver/srv/GetMeasuredJointSpeeds.srv | 3 + kortex_driver/srv/GetMeasuredTwist.srv | 3 + kortex_driver/srv/GetOperatingMode.srv | 3 + kortex_driver/srv/GetProtectionZoneState.srv | 3 + kortex_driver/srv/GetSequenceState.srv | 3 + kortex_driver/srv/GetServoingMode.srv | 3 + .../srv/GetTargetedCartesianPose.srv | 3 + kortex_driver/srv/GetWifiInformation.srv | 3 + .../srv/IsCommunicationInterfaceEnable.srv | 3 + kortex_driver/srv/MappingInfoTopic.srv | 3 + kortex_driver/srv/NetworkTopic.srv | 3 + kortex_driver/srv/OperatingModeTopic.srv | 3 + kortex_driver/srv/Pause.srv | 3 + kortex_driver/srv/PauseAction.srv | 3 + kortex_driver/srv/PauseSequence.srv | 3 + kortex_driver/srv/PlayAdvancedSequence.srv | 3 + kortex_driver/srv/PlayCartesianTrajectory.srv | 3 + .../PlayCartesianTrajectoryOrientation.srv | 3 + .../srv/PlayCartesianTrajectoryPosition.srv | 3 + kortex_driver/srv/PlayJointTrajectory.srv | 3 + .../srv/PlaySelectedJointTrajectory.srv | 3 + kortex_driver/srv/PlaySequence.srv | 3 + kortex_driver/srv/ProtectionZoneTopic.srv | 3 + kortex_driver/srv/ReadAction.srv | 3 + kortex_driver/srv/ReadAllActions.srv | 3 + kortex_driver/srv/ReadAllMappings.srv | 3 + kortex_driver/srv/ReadAllMaps.srv | 3 + kortex_driver/srv/ReadAllProtectionZones.srv | 3 + kortex_driver/srv/ReadAllSequences.srv | 3 + kortex_driver/srv/ReadAllUserProfiles.srv | 3 + kortex_driver/srv/ReadAllUsers.srv | 3 + kortex_driver/srv/ReadMapping.srv | 3 + kortex_driver/srv/ReadProtectionZone.srv | 3 + kortex_driver/srv/ReadSequence.srv | 3 + kortex_driver/srv/ReadUserProfile.srv | 3 + kortex_driver/srv/Reboot.srv | 3 + kortex_driver/srv/Refresh.srv | 3 + kortex_driver/srv/RefreshCommand.srv | 3 + kortex_driver/srv/RefreshCustomData.srv | 3 + kortex_driver/srv/RefreshFeedback.srv | 3 + kortex_driver/srv/RestoreFactorySettings.srv | 3 + .../srv/RestoreNetworkFactorySettings.srv | 3 + kortex_driver/srv/Resume.srv | 3 + kortex_driver/srv/ResumeAction.srv | 3 + kortex_driver/srv/ResumeSequence.srv | 3 + kortex_driver/srv/RobotEventTopic.srv | 3 + kortex_driver/srv/SendGripperCommand.srv | 3 + kortex_driver/srv/SendJointSpeedsCommmand.srv | 3 + .../srv/SendSelectedJointSpeedCommand.srv | 3 + kortex_driver/srv/SendTwistCommand.srv | 3 + kortex_driver/srv/SequenceInfoTopic.srv | 3 + kortex_driver/srv/ServoingModeTopic.srv | 3 + kortex_driver/srv/SetAdmittance.srv | 3 + .../srv/SetCommunicationInterfaceEnable.srv | 3 + kortex_driver/srv/SetIPv4Configuration.srv | 3 + kortex_driver/srv/SetOperatingMode.srv | 3 + kortex_driver/srv/SetServoingMode.srv | 3 + .../srv/SetTwistWrenchReferenceFrame.srv | 3 + kortex_driver/srv/StartWifiScan.srv | 3 + kortex_driver/srv/StopAction.srv | 3 + kortex_driver/srv/StopSequence.srv | 3 + kortex_driver/srv/Unsubscribe.srv | 3 + kortex_driver/srv/UpdateAction.srv | 3 + kortex_driver/srv/UpdateProtectionZone.srv | 3 + kortex_driver/srv/UpdateSequence.srv | 3 + kortex_driver/srv/UpdateUserProfile.srv | 3 + kortex_driver/srv/UserTopic.srv | 3 + .../srv/non_generated/SetApiOptions.srv | 3 + .../srv/non_generated/SetDeviceID.srv | 2 + .../templates/NodeServices.cpp.jinja2 | 145 + kortex_driver/templates/NodeServices.h.jinja2 | 107 + kortex_driver/templates/main.jinja2 | 160 + .../templates/proto_converter.cpp.jinja2 | 77 + .../templates/proto_converter.h.jinja2 | 52 + .../templates/ros_converter.cpp.jinja2 | 86 + .../templates/ros_converter.h.jinja2 | 52 + kortex_driver/templates/ros_enum.jinja2 | 3 + kortex_driver/templates/ros_message.jinja2 | 44 + kortex_driver/templates/ros_oneof.jinja2 | 9 + kortex_driver/templates/ros_service.jinja2 | 5 + kortex_examples/CMakeLists.txt | 40 + .../example_get_control_loop_parameters.cpp | 85 + .../cpp/example_get_sensor_settings.cpp | 80 + .../cpp/example_play_cartesian.cpp | 72 + .../cpp/example_play_cartesian_position.cpp | 59 + .../cpp/example_read_all_devices.cpp | 34 + .../example_set_control_loop_parameters.cpp | 72 + kortex_examples/package.xml | 34 + .../python/GetControlLoopParameters.py | 57 + kortex_examples/python/GetSensorSettings.py | 28 + kortex_examples/python/PlayCartesian.py | 49 + kortex_examples/python/ReadAllDevices.py | 19 + .../python/SetControlLoopParameters.py | 45 + kortex_examples/readme.md | 112 + kortex_vision_config_driver/CMakeLists.txt | 41 + kortex_vision_config_driver/RosGeneration.py | 202 + kortex_vision_config_driver/build/.gitignore | 0 .../kortex_vision_config_driver.sh | 4 + kortex_vision_config_driver/msg/ArmState.msg | 22 + kortex_vision_config_driver/msg/BitRate.msg | 10 + .../msg/Connection.msg | 5 + .../msg/DeviceHandle.msg | 5 + .../msg/DeviceTypes.msg | 14 + kortex_vision_config_driver/msg/Empty.msg | 0 .../msg/FocusAction.msg | 10 + kortex_vision_config_driver/msg/FrameRate.msg | 8 + .../msg/IntrinsicParameters.msg | 7 + .../msg/NotificationHandle.msg | 2 + .../msg/NotificationOptions.msg | 5 + .../msg/NotificationType.msg | 8 + kortex_vision_config_driver/msg/Option.msg | 86 + .../msg/OptionIdentifier.msg | 5 + .../msg/OptionInformation.msg | 11 + .../msg/OptionValue.msg | 6 + .../msg/Permission.msg | 8 + .../msg/Resolution.msg | 14 + .../msg/SafetyHandle.msg | 2 + .../msg/SafetyNotification.msg | 11 + .../msg/SafetyStatusValue.msg | 8 + kortex_vision_config_driver/msg/Sensor.msg | 6 + .../msg/SensorFocusAction.msg | 5 + .../msg/SensorIdentifier.msg | 3 + .../msg/SensorSettings.msg | 9 + .../msg/ServiceVersion.msg | 4 + kortex_vision_config_driver/msg/Timestamp.msg | 3 + kortex_vision_config_driver/msg/Unit.msg | 28 + .../msg/UserProfileHandle.msg | 3 + .../msg/VisionEvent.msg | 6 + .../msg/VisionNotification.msg | 7 + .../msg/non_generated/ApiOptions.msg | 1 + .../msg/non_generated/KortexError.msg | 3 + kortex_vision_config_driver/package.xml | 35 + .../protos/Common.options | 4 + .../protos/Common.proto | 152 + .../protos/VisionConfig.proto | 217 + kortex_vision_config_driver/readme.md | 106 + .../src/common_proto_converter.cpp | 84 + .../src/common_proto_converter.h | 66 + .../src/common_ros_converter.cpp | 84 + .../src/common_ros_converter.h | 66 + kortex_vision_config_driver/src/main.cpp | 75 + kortex_vision_config_driver/src/node.cpp | 300 ++ kortex_vision_config_driver/src/node.h | 93 + .../src/util/diagnostic.h | 16 + .../src/util/math_util.h | 12 + .../src/visionconfig_proto_converter.cpp | 90 + .../src/visionconfig_proto_converter.h | 64 + .../src/visionconfig_ros_converter.cpp | 90 + .../src/visionconfig_ros_converter.h | 64 + .../srv/DoSensorFocusAction.srv | 3 + .../srv/GetIntrinsicParameters.srv | 3 + .../srv/GetOptionInformation.srv | 3 + .../srv/GetOptionValue.srv | 3 + .../srv/GetSensorSettings.srv | 3 + .../srv/SetOptionValue.srv | 3 + .../srv/SetSensorSettings.srv | 3 + .../srv/VisionTopic.srv | 3 + .../srv/non_generated/SetApiOptions.srv | 3 + .../srv/non_generated/SetDeviceID.srv | 2 + .../templates/NodeServices.cpp.jinja2 | 151 + .../templates/NodeServices.h.jinja2 | 107 + .../templates/main.jinja2 | 70 + .../templates/proto_converter.cpp.jinja2 | 77 + .../templates/proto_converter.h.jinja2 | 52 + .../templates/ros_converter.cpp.jinja2 | 86 + .../templates/ros_converter.h.jinja2 | 52 + .../templates/ros_enum.jinja2 | 3 + .../templates/ros_message.jinja2 | 44 + .../templates/ros_oneof.jinja2 | 9 + .../templates/ros_service.jinja2 | 5 + readme.md | 88 + 705 files changed, 26877 insertions(+), 23 deletions(-) create mode 100644 .gitignore create mode 100644 kortex_actuator_driver/CMakeLists.txt create mode 100644 kortex_actuator_driver/RosGeneration.py create mode 100644 kortex_actuator_driver/build/.gitignore create mode 100755 kortex_actuator_driver/kortex_actuator_driver.sh create mode 100644 kortex_actuator_driver/msg/ArmState.msg create mode 100644 kortex_actuator_driver/msg/AxisOffsets.msg create mode 100644 kortex_actuator_driver/msg/AxisPosition.msg create mode 100644 kortex_actuator_driver/msg/Command.msg create mode 100644 kortex_actuator_driver/msg/CommandMode.msg create mode 100644 kortex_actuator_driver/msg/CommandModeInformation.msg create mode 100644 kortex_actuator_driver/msg/Connection.msg create mode 100644 kortex_actuator_driver/msg/ControlLoop.msg create mode 100644 kortex_actuator_driver/msg/ControlLoopParameters.msg create mode 100644 kortex_actuator_driver/msg/ControlLoopSelection.msg create mode 100644 kortex_actuator_driver/msg/ControlMode.msg create mode 100644 kortex_actuator_driver/msg/ControlModeInformation.msg create mode 100644 kortex_actuator_driver/msg/CustomData.msg create mode 100644 kortex_actuator_driver/msg/CustomDataSelection.msg create mode 100644 kortex_actuator_driver/msg/DeviceHandle.msg create mode 100644 kortex_actuator_driver/msg/DeviceTypes.msg create mode 100644 kortex_actuator_driver/msg/Empty.msg create mode 100644 kortex_actuator_driver/msg/EncoderDerivativeParameters.msg create mode 100644 kortex_actuator_driver/msg/Feedback.msg create mode 100644 kortex_actuator_driver/msg/FrequencyResponse.msg create mode 100644 kortex_actuator_driver/msg/LoopSelection.msg create mode 100644 kortex_actuator_driver/msg/MessageId.msg create mode 100644 kortex_actuator_driver/msg/NotificationHandle.msg create mode 100644 kortex_actuator_driver/msg/NotificationOptions.msg create mode 100644 kortex_actuator_driver/msg/NotificationType.msg create mode 100644 kortex_actuator_driver/msg/Permission.msg create mode 100644 kortex_actuator_driver/msg/PositionCommand.msg create mode 100644 kortex_actuator_driver/msg/RampResponse.msg create mode 100644 kortex_actuator_driver/msg/SafetyHandle.msg create mode 100644 kortex_actuator_driver/msg/SafetyIdentifier.msg create mode 100644 kortex_actuator_driver/msg/SafetyLimitType.msg create mode 100644 kortex_actuator_driver/msg/SafetyNotification.msg create mode 100644 kortex_actuator_driver/msg/SafetyStatusValue.msg create mode 100644 kortex_actuator_driver/msg/ServiceVersion.msg create mode 100644 kortex_actuator_driver/msg/Servoing.msg create mode 100644 kortex_actuator_driver/msg/StepResponse.msg create mode 100644 kortex_actuator_driver/msg/Timestamp.msg create mode 100644 kortex_actuator_driver/msg/TorqueCalibration.msg create mode 100644 kortex_actuator_driver/msg/TorqueOffset.msg create mode 100644 kortex_actuator_driver/msg/Unit.msg create mode 100644 kortex_actuator_driver/msg/UserProfileHandle.msg create mode 100644 kortex_actuator_driver/msg/VectorDriveParameters.msg create mode 100644 kortex_actuator_driver/msg/non_generated/ApiOptions.msg create mode 100644 kortex_actuator_driver/msg/non_generated/CyclicStatus.msg create mode 100644 kortex_actuator_driver/msg/non_generated/KortexError.msg create mode 100644 kortex_actuator_driver/package.xml create mode 100644 kortex_actuator_driver/protos/ActuatorConfig.options create mode 100644 kortex_actuator_driver/protos/ActuatorConfig.proto create mode 100644 kortex_actuator_driver/protos/ActuatorCyclic.proto create mode 100644 kortex_actuator_driver/protos/Common.options create mode 100644 kortex_actuator_driver/protos/Common.proto create mode 100644 kortex_actuator_driver/readme.md create mode 100644 kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp create mode 100644 kortex_actuator_driver/src/actuatorconfig_proto_converter.h create mode 100644 kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp create mode 100644 kortex_actuator_driver/src/actuatorconfig_ros_converter.h create mode 100644 kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp create mode 100644 kortex_actuator_driver/src/actuatorcyclic_proto_converter.h create mode 100644 kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp create mode 100644 kortex_actuator_driver/src/actuatorcyclic_ros_converter.h create mode 100644 kortex_actuator_driver/src/common_proto_converter.cpp create mode 100644 kortex_actuator_driver/src/common_proto_converter.h create mode 100644 kortex_actuator_driver/src/common_ros_converter.cpp create mode 100644 kortex_actuator_driver/src/common_ros_converter.h create mode 100644 kortex_actuator_driver/src/main.cpp create mode 100644 kortex_actuator_driver/src/node.cpp create mode 100644 kortex_actuator_driver/src/node.h create mode 100644 kortex_actuator_driver/src/util/diagnostic.h create mode 100644 kortex_actuator_driver/src/util/math_util.h create mode 100644 kortex_actuator_driver/srv/ClearFaults.srv create mode 100644 kortex_actuator_driver/srv/GetActivatedControlLoop.srv create mode 100644 kortex_actuator_driver/srv/GetAxisOffsets.srv create mode 100644 kortex_actuator_driver/srv/GetCommandMode.srv create mode 100644 kortex_actuator_driver/srv/GetControlLoopParameters.srv create mode 100644 kortex_actuator_driver/srv/GetControlMode.srv create mode 100644 kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv create mode 100644 kortex_actuator_driver/srv/GetSelectedCustomData.srv create mode 100644 kortex_actuator_driver/srv/GetServoing.srv create mode 100644 kortex_actuator_driver/srv/GetTorqueOffset.srv create mode 100644 kortex_actuator_driver/srv/GetVectorDriveParameters.srv create mode 100644 kortex_actuator_driver/srv/MoveToPosition.srv create mode 100644 kortex_actuator_driver/srv/ReadTorqueCalibration.srv create mode 100644 kortex_actuator_driver/srv/Refresh.srv create mode 100644 kortex_actuator_driver/srv/RefreshCommand.srv create mode 100644 kortex_actuator_driver/srv/RefreshCustomData.srv create mode 100644 kortex_actuator_driver/srv/RefreshFeedback.srv create mode 100644 kortex_actuator_driver/srv/SelectCustomData.srv create mode 100644 kortex_actuator_driver/srv/SetActivatedControlLoop.srv create mode 100644 kortex_actuator_driver/srv/SetAxisOffsets.srv create mode 100644 kortex_actuator_driver/srv/SetCommandMode.srv create mode 100644 kortex_actuator_driver/srv/SetControlLoopParameters.srv create mode 100644 kortex_actuator_driver/srv/SetControlMode.srv create mode 100644 kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv create mode 100644 kortex_actuator_driver/srv/SetServoing.srv create mode 100644 kortex_actuator_driver/srv/SetTorqueOffset.srv create mode 100644 kortex_actuator_driver/srv/SetVectorDriveParameters.srv create mode 100644 kortex_actuator_driver/srv/StartFrequencyResponse.srv create mode 100644 kortex_actuator_driver/srv/StartRampResponse.srv create mode 100644 kortex_actuator_driver/srv/StartStepResponse.srv create mode 100644 kortex_actuator_driver/srv/StopFrequencyResponse.srv create mode 100644 kortex_actuator_driver/srv/StopRampResponse.srv create mode 100644 kortex_actuator_driver/srv/StopStepResponse.srv create mode 100644 kortex_actuator_driver/srv/WriteTorqueCalibration.srv create mode 100644 kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv create mode 100644 kortex_actuator_driver/srv/non_generated/SetApiOptions.srv create mode 100644 kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv create mode 100644 kortex_actuator_driver/srv/non_generated/SetDeviceID.srv create mode 100644 kortex_actuator_driver/templates/NodeServices.cpp.jinja2 create mode 100644 kortex_actuator_driver/templates/NodeServices.h.jinja2 create mode 100644 kortex_actuator_driver/templates/main.jinja2 create mode 100644 kortex_actuator_driver/templates/proto_converter.cpp.jinja2 create mode 100644 kortex_actuator_driver/templates/proto_converter.h.jinja2 create mode 100644 kortex_actuator_driver/templates/ros_converter.cpp.jinja2 create mode 100644 kortex_actuator_driver/templates/ros_converter.h.jinja2 create mode 100644 kortex_actuator_driver/templates/ros_enum.jinja2 create mode 100644 kortex_actuator_driver/templates/ros_message.jinja2 create mode 100644 kortex_actuator_driver/templates/ros_oneof.jinja2 create mode 100644 kortex_actuator_driver/templates/ros_service.jinja2 create mode 100644 kortex_api/include/.gitignore create mode 100644 kortex_api/lib/.gitignore create mode 100644 kortex_api/readme.md create mode 100644 kortex_description/CMakeLists.txt create mode 100644 kortex_description/config/joint_names_JACO3_URDF_V10.yaml create mode 100644 kortex_description/launch/display.launch create mode 100644 kortex_description/launch/gazebo.launch create mode 100644 kortex_description/meshes/Bracelet_Link.STL create mode 100644 kortex_description/meshes/EndEffector_Link.STL create mode 100644 kortex_description/meshes/ForeArm_Link.STL create mode 100644 kortex_description/meshes/HalfArm1_Link.STL create mode 100644 kortex_description/meshes/HalfArm2_Link.STL create mode 100644 kortex_description/meshes/Shoulder_Link.STL create mode 100644 kortex_description/meshes/Wrist1_Link.STL create mode 100644 kortex_description/meshes/Wrist2_Link.STL create mode 100644 kortex_description/meshes/base_link.STL create mode 100644 kortex_description/package.xml create mode 100644 kortex_description/readme.md create mode 100644 kortex_description/urdf/JACO3_URDF_V10.urdf create mode 100644 kortex_device_manager/CMakeLists.txt create mode 100644 kortex_device_manager/RosGeneration.py create mode 100644 kortex_device_manager/build/.gitignore create mode 100755 kortex_device_manager/kortex_device_manager.sh create mode 100644 kortex_device_manager/msg/ArmState.msg create mode 100644 kortex_device_manager/msg/BootloaderVersion.msg create mode 100644 kortex_device_manager/msg/Connection.msg create mode 100644 kortex_device_manager/msg/DeviceHandle.msg create mode 100644 kortex_device_manager/msg/DeviceHandles.msg create mode 100644 kortex_device_manager/msg/DeviceType.msg create mode 100644 kortex_device_manager/msg/DeviceTypes.msg create mode 100644 kortex_device_manager/msg/Empty.msg create mode 100644 kortex_device_manager/msg/FirmwareVersion.msg create mode 100644 kortex_device_manager/msg/IPv4Settings.msg create mode 100644 kortex_device_manager/msg/MACAddress.msg create mode 100644 kortex_device_manager/msg/ModelNumber.msg create mode 100644 kortex_device_manager/msg/NotificationHandle.msg create mode 100644 kortex_device_manager/msg/NotificationOptions.msg create mode 100644 kortex_device_manager/msg/NotificationType.msg create mode 100644 kortex_device_manager/msg/PartNumber.msg create mode 100644 kortex_device_manager/msg/PartNumberRevision.msg create mode 100644 kortex_device_manager/msg/Permission.msg create mode 100644 kortex_device_manager/msg/PowerOnSelfTestResult.msg create mode 100644 kortex_device_manager/msg/RebootRqst.msg create mode 100644 kortex_device_manager/msg/RunMode.msg create mode 100644 kortex_device_manager/msg/RunModes.msg create mode 100644 kortex_device_manager/msg/SafetyConfiguration.msg create mode 100644 kortex_device_manager/msg/SafetyConfigurationList.msg create mode 100644 kortex_device_manager/msg/SafetyEnable.msg create mode 100644 kortex_device_manager/msg/SafetyHandle.msg create mode 100644 kortex_device_manager/msg/SafetyInformation.msg create mode 100644 kortex_device_manager/msg/SafetyInformationList.msg create mode 100644 kortex_device_manager/msg/SafetyLimitType.msg create mode 100644 kortex_device_manager/msg/SafetyNotification.msg create mode 100644 kortex_device_manager/msg/SafetyStatus.msg create mode 100644 kortex_device_manager/msg/SafetyStatusValue.msg create mode 100644 kortex_device_manager/msg/SafetyThreshold.msg create mode 100644 kortex_device_manager/msg/SerialNumber.msg create mode 100644 kortex_device_manager/msg/ServiceVersion.msg create mode 100644 kortex_device_manager/msg/Timestamp.msg create mode 100644 kortex_device_manager/msg/Unit.msg create mode 100644 kortex_device_manager/msg/UserProfileHandle.msg create mode 100644 kortex_device_manager/msg/non_generated/KortexError.msg create mode 100644 kortex_device_manager/package.xml create mode 100644 kortex_device_manager/protos/Common.options create mode 100644 kortex_device_manager/protos/Common.proto create mode 100644 kortex_device_manager/protos/DeviceConfig.options create mode 100644 kortex_device_manager/protos/DeviceConfig.proto create mode 100644 kortex_device_manager/protos/DeviceManager.proto create mode 100644 kortex_device_manager/readme.md create mode 100644 kortex_device_manager/src/common_proto_converter.cpp create mode 100644 kortex_device_manager/src/common_proto_converter.h create mode 100644 kortex_device_manager/src/common_ros_converter.cpp create mode 100644 kortex_device_manager/src/common_ros_converter.h create mode 100644 kortex_device_manager/src/deviceconfig_proto_converter.cpp create mode 100644 kortex_device_manager/src/deviceconfig_proto_converter.h create mode 100644 kortex_device_manager/src/deviceconfig_ros_converter.cpp create mode 100644 kortex_device_manager/src/deviceconfig_ros_converter.h create mode 100644 kortex_device_manager/src/devicemanager_proto_converter.cpp create mode 100644 kortex_device_manager/src/devicemanager_proto_converter.h create mode 100644 kortex_device_manager/src/devicemanager_ros_converter.cpp create mode 100644 kortex_device_manager/src/devicemanager_ros_converter.h create mode 100644 kortex_device_manager/src/main.cpp create mode 100644 kortex_device_manager/src/node.cpp create mode 100644 kortex_device_manager/src/node.h create mode 100644 kortex_device_manager/src/util/diagnostic.h create mode 100644 kortex_device_manager/src/util/math_util.h create mode 100644 kortex_device_manager/srv/ClearAllSafetyStatus.srv create mode 100644 kortex_device_manager/srv/ClearSafetyStatus.srv create mode 100644 kortex_device_manager/srv/GetAllSafetyConfiguration.srv create mode 100644 kortex_device_manager/srv/GetAllSafetyInformation.srv create mode 100644 kortex_device_manager/srv/GetBootloaderVersion.srv create mode 100644 kortex_device_manager/srv/GetDeviceType.srv create mode 100644 kortex_device_manager/srv/GetFirmwareVersion.srv create mode 100644 kortex_device_manager/srv/GetIPv4Settings.srv create mode 100644 kortex_device_manager/srv/GetMACAddress.srv create mode 100644 kortex_device_manager/srv/GetModelNumber.srv create mode 100644 kortex_device_manager/srv/GetPartNumber.srv create mode 100644 kortex_device_manager/srv/GetPartNumberRevision.srv create mode 100644 kortex_device_manager/srv/GetPowerOnSelfTestResult.srv create mode 100644 kortex_device_manager/srv/GetRunMode.srv create mode 100644 kortex_device_manager/srv/GetSafetyConfiguration.srv create mode 100644 kortex_device_manager/srv/GetSafetyEnable.srv create mode 100644 kortex_device_manager/srv/GetSafetyInformation.srv create mode 100644 kortex_device_manager/srv/GetSafetyStatus.srv create mode 100644 kortex_device_manager/srv/GetSerialNumber.srv create mode 100644 kortex_device_manager/srv/ReadAllDevices.srv create mode 100644 kortex_device_manager/srv/RebootRequest.srv create mode 100644 kortex_device_manager/srv/ResetSafetyDefaults.srv create mode 100644 kortex_device_manager/srv/SafetyTopic.srv create mode 100644 kortex_device_manager/srv/SetIPv4Settings.srv create mode 100644 kortex_device_manager/srv/SetMACAddress.srv create mode 100644 kortex_device_manager/srv/SetModelNumber.srv create mode 100644 kortex_device_manager/srv/SetPartNumber.srv create mode 100644 kortex_device_manager/srv/SetPartNumberRevision.srv create mode 100644 kortex_device_manager/srv/SetRunMode.srv create mode 100644 kortex_device_manager/srv/SetSafetyConfiguration.srv create mode 100644 kortex_device_manager/srv/SetSafetyEnable.srv create mode 100644 kortex_device_manager/srv/SetSafetyErrorThreshold.srv create mode 100644 kortex_device_manager/srv/SetSafetyWarningThreshold.srv create mode 100644 kortex_device_manager/srv/SetSerialNumber.srv create mode 100644 kortex_device_manager/templates/NodeServices.cpp.jinja2 create mode 100644 kortex_device_manager/templates/NodeServices.h.jinja2 create mode 100644 kortex_device_manager/templates/main.jinja2 create mode 100644 kortex_device_manager/templates/proto_converter.cpp.jinja2 create mode 100644 kortex_device_manager/templates/proto_converter.h.jinja2 create mode 100644 kortex_device_manager/templates/ros_converter.cpp.jinja2 create mode 100644 kortex_device_manager/templates/ros_converter.h.jinja2 create mode 100644 kortex_device_manager/templates/ros_enum.jinja2 create mode 100644 kortex_device_manager/templates/ros_message.jinja2 create mode 100644 kortex_device_manager/templates/ros_oneof.jinja2 create mode 100644 kortex_device_manager/templates/ros_service.jinja2 create mode 100644 kortex_driver/CMakeLists.txt create mode 100644 kortex_driver/RosGeneration.py create mode 100644 kortex_driver/build/.gitignore create mode 100755 kortex_driver/kortex_driver.sh create mode 100644 kortex_driver/msg/Action.msg create mode 100644 kortex_driver/msg/ActionEvent.msg create mode 100644 kortex_driver/msg/ActionExecutionState.msg create mode 100644 kortex_driver/msg/ActionHandle.msg create mode 100644 kortex_driver/msg/ActionList.msg create mode 100644 kortex_driver/msg/ActionNotification.msg create mode 100644 kortex_driver/msg/ActionNotificationList.msg create mode 100644 kortex_driver/msg/ActionType.msg create mode 100644 kortex_driver/msg/Action_action_parameters.msg create mode 100644 kortex_driver/msg/ActivateMapHandle.msg create mode 100644 kortex_driver/msg/ActuatorCommand.msg create mode 100644 kortex_driver/msg/ActuatorCustomData.msg create mode 100644 kortex_driver/msg/ActuatorFeedback.msg create mode 100644 kortex_driver/msg/ActuatorInformation.msg create mode 100644 kortex_driver/msg/Admittance.msg create mode 100644 kortex_driver/msg/AdmittanceMode.msg create mode 100644 kortex_driver/msg/AdvancedSequenceHandle.msg create mode 100644 kortex_driver/msg/AppendActionInformation.msg create mode 100644 kortex_driver/msg/ArmState.msg create mode 100644 kortex_driver/msg/ArmStateInformation.msg create mode 100644 kortex_driver/msg/ArmStateNotification.msg create mode 100644 kortex_driver/msg/BackupEvent.msg create mode 100644 kortex_driver/msg/BaseFeedback.msg create mode 100644 kortex_driver/msg/CartesianLimitation.msg create mode 100644 kortex_driver/msg/CartesianLimitationList.msg create mode 100644 kortex_driver/msg/CartesianReferenceFrame.msg create mode 100644 kortex_driver/msg/CartesianReferenceFrameRequest.msg create mode 100644 kortex_driver/msg/CartesianSpeed.msg create mode 100644 kortex_driver/msg/CartesianTrajectoryConstraint.msg create mode 100644 kortex_driver/msg/CartesianTrajectoryConstraint_type.msg create mode 100644 kortex_driver/msg/ChangeJointSpeeds.msg create mode 100644 kortex_driver/msg/ChangeTwist.msg create mode 100644 kortex_driver/msg/Command.msg create mode 100644 kortex_driver/msg/CommunicationInterfaceConfiguration.msg create mode 100644 kortex_driver/msg/ConfigurationChangeNotification.msg create mode 100644 kortex_driver/msg/ConfigurationChangeNotificationList.msg create mode 100644 kortex_driver/msg/ConfigurationNotificationEvent.msg create mode 100644 kortex_driver/msg/Connection.msg create mode 100644 kortex_driver/msg/ConstrainedJointAngle.msg create mode 100644 kortex_driver/msg/ConstrainedJointAngles.msg create mode 100644 kortex_driver/msg/ConstrainedOrientation.msg create mode 100644 kortex_driver/msg/ConstrainedPose.msg create mode 100644 kortex_driver/msg/ConstrainedPosition.msg create mode 100644 kortex_driver/msg/ControlMode.msg create mode 100644 kortex_driver/msg/ControlModeInformation.msg create mode 100644 kortex_driver/msg/ControlModeNotification.msg create mode 100644 kortex_driver/msg/ControlModeNotificationList.msg create mode 100644 kortex_driver/msg/ControllerBehavior.msg create mode 100644 kortex_driver/msg/ControllerElementEventType.msg create mode 100644 kortex_driver/msg/ControllerElementHandle.msg create mode 100644 kortex_driver/msg/ControllerElementHandle_identifier.msg create mode 100644 kortex_driver/msg/ControllerElementState.msg create mode 100644 kortex_driver/msg/ControllerEvent.msg create mode 100644 kortex_driver/msg/ControllerEventType.msg create mode 100644 kortex_driver/msg/ControllerHandle.msg create mode 100644 kortex_driver/msg/ControllerInputType.msg create mode 100644 kortex_driver/msg/ControllerList.msg create mode 100644 kortex_driver/msg/ControllerNotification.msg create mode 100644 kortex_driver/msg/ControllerNotificationList.msg create mode 100644 kortex_driver/msg/ControllerState.msg create mode 100644 kortex_driver/msg/ControllerType.msg create mode 100644 kortex_driver/msg/CustomData.msg create mode 100644 kortex_driver/msg/Delay.msg create mode 100644 kortex_driver/msg/DeviceHandle.msg create mode 100644 kortex_driver/msg/DeviceTypes.msg create mode 100644 kortex_driver/msg/EmergencyStop.msg create mode 100644 kortex_driver/msg/Empty.msg create mode 100644 kortex_driver/msg/ErrorCodes.msg create mode 100644 kortex_driver/msg/EventIdSequenceInfoNotification.msg create mode 100644 kortex_driver/msg/FactoryEvent.msg create mode 100644 kortex_driver/msg/FactoryNotification.msg create mode 100644 kortex_driver/msg/Faults.msg create mode 100644 kortex_driver/msg/Feedback.msg create mode 100644 kortex_driver/msg/Finger.msg create mode 100644 kortex_driver/msg/FullIPv4Configuration.msg create mode 100644 kortex_driver/msg/FullUserProfile.msg create mode 100644 kortex_driver/msg/GpioEvent.msg create mode 100644 kortex_driver/msg/GpioState.msg create mode 100644 kortex_driver/msg/Gripper.msg create mode 100644 kortex_driver/msg/GripperCommand.msg create mode 100644 kortex_driver/msg/GripperMode.msg create mode 100644 kortex_driver/msg/GripperRequest.msg create mode 100644 kortex_driver/msg/IPv4Configuration.msg create mode 100644 kortex_driver/msg/IPv4Information.msg create mode 100644 kortex_driver/msg/InterconnectCommand.msg create mode 100644 kortex_driver/msg/InterconnectCustomData.msg create mode 100644 kortex_driver/msg/InterconnectFeedback.msg create mode 100644 kortex_driver/msg/JointAngle.msg create mode 100644 kortex_driver/msg/JointAngles.msg create mode 100644 kortex_driver/msg/JointLimitation.msg create mode 100644 kortex_driver/msg/JointLimitationTypeIdentifier.msg create mode 100644 kortex_driver/msg/JointLimitationValue.msg create mode 100644 kortex_driver/msg/JointLimitationValueList.msg create mode 100644 kortex_driver/msg/JointNavigationDirection.msg create mode 100644 kortex_driver/msg/JointSpeed.msg create mode 100644 kortex_driver/msg/JointSpeeds.msg create mode 100644 kortex_driver/msg/JointTrajectoryConstraint.msg create mode 100644 kortex_driver/msg/JointTrajectoryConstraintType.msg create mode 100644 kortex_driver/msg/LedState.msg create mode 100644 kortex_driver/msg/LimitationType.msg create mode 100644 kortex_driver/msg/LimitationTypeIdentifier.msg create mode 100644 kortex_driver/msg/Map.msg create mode 100644 kortex_driver/msg/MapElement.msg create mode 100644 kortex_driver/msg/MapEvent.msg create mode 100644 kortex_driver/msg/MapGroup.msg create mode 100644 kortex_driver/msg/MapGroupHandle.msg create mode 100644 kortex_driver/msg/MapGroupList.msg create mode 100644 kortex_driver/msg/MapHandle.msg create mode 100644 kortex_driver/msg/MapList.msg create mode 100644 kortex_driver/msg/Mapping.msg create mode 100644 kortex_driver/msg/MappingHandle.msg create mode 100644 kortex_driver/msg/MappingInfoNotification.msg create mode 100644 kortex_driver/msg/MappingInfoNotificationList.msg create mode 100644 kortex_driver/msg/MappingList.msg create mode 100644 kortex_driver/msg/NavigationDirection.msg create mode 100644 kortex_driver/msg/NetworkEvent.msg create mode 100644 kortex_driver/msg/NetworkHandle.msg create mode 100644 kortex_driver/msg/NetworkNotification.msg create mode 100644 kortex_driver/msg/NetworkNotificationList.msg create mode 100644 kortex_driver/msg/NetworkType.msg create mode 100644 kortex_driver/msg/NotificationHandle.msg create mode 100644 kortex_driver/msg/NotificationOptions.msg create mode 100644 kortex_driver/msg/NotificationType.msg create mode 100644 kortex_driver/msg/OperatingMode.msg create mode 100644 kortex_driver/msg/OperatingModeInformation.msg create mode 100644 kortex_driver/msg/OperatingModeNotification.msg create mode 100644 kortex_driver/msg/OperatingModeNotificationList.msg create mode 100644 kortex_driver/msg/Orientation.msg create mode 100644 kortex_driver/msg/PasswordChange.msg create mode 100644 kortex_driver/msg/Permission.msg create mode 100644 kortex_driver/msg/Point.msg create mode 100644 kortex_driver/msg/Pose.msg create mode 100644 kortex_driver/msg/Position.msg create mode 100644 kortex_driver/msg/ProtectionZone.msg create mode 100644 kortex_driver/msg/ProtectionZoneEvent.msg create mode 100644 kortex_driver/msg/ProtectionZoneHandle.msg create mode 100644 kortex_driver/msg/ProtectionZoneInformation.msg create mode 100644 kortex_driver/msg/ProtectionZoneList.msg create mode 100644 kortex_driver/msg/ProtectionZoneNotification.msg create mode 100644 kortex_driver/msg/ProtectionZoneNotificationList.msg create mode 100644 kortex_driver/msg/Query.msg create mode 100644 kortex_driver/msg/RequestedActionType.msg create mode 100644 kortex_driver/msg/RobotEvent.msg create mode 100644 kortex_driver/msg/RobotEventNotification.msg create mode 100644 kortex_driver/msg/RobotEventNotificationList.msg create mode 100644 kortex_driver/msg/RotationMatrix.msg create mode 100644 kortex_driver/msg/RotationMatrixRow.msg create mode 100644 kortex_driver/msg/SafetyEvent.msg create mode 100644 kortex_driver/msg/SafetyHandle.msg create mode 100644 kortex_driver/msg/SafetyIdentifier.msg create mode 100644 kortex_driver/msg/SafetyNotification.msg create mode 100644 kortex_driver/msg/SafetyNotificationList.msg create mode 100644 kortex_driver/msg/SafetyStatusValue.msg create mode 100644 kortex_driver/msg/Sequence.msg create mode 100644 kortex_driver/msg/SequenceHandle.msg create mode 100644 kortex_driver/msg/SequenceInfoNotification.msg create mode 100644 kortex_driver/msg/SequenceInfoNotificationList.msg create mode 100644 kortex_driver/msg/SequenceInformation.msg create mode 100644 kortex_driver/msg/SequenceList.msg create mode 100644 kortex_driver/msg/SequenceTask.msg create mode 100644 kortex_driver/msg/SequenceTaskHandle.msg create mode 100644 kortex_driver/msg/ServiceVersion.msg create mode 100644 kortex_driver/msg/ServoingMode.msg create mode 100644 kortex_driver/msg/ServoingModeInformation.msg create mode 100644 kortex_driver/msg/ServoingModeNotification.msg create mode 100644 kortex_driver/msg/ServoingModeNotificationList.msg create mode 100644 kortex_driver/msg/ShapeType.msg create mode 100644 kortex_driver/msg/SignalQuality.msg create mode 100644 kortex_driver/msg/SoundType.msg create mode 100644 kortex_driver/msg/Ssid.msg create mode 100644 kortex_driver/msg/Stop.msg create mode 100644 kortex_driver/msg/SubErrorCodes.msg create mode 100644 kortex_driver/msg/SwitchControlMapping.msg create mode 100644 kortex_driver/msg/SystemTime.msg create mode 100644 kortex_driver/msg/Timeout.msg create mode 100644 kortex_driver/msg/Timestamp.msg create mode 100644 kortex_driver/msg/TransformationMatrix.msg create mode 100644 kortex_driver/msg/TransformationRow.msg create mode 100644 kortex_driver/msg/Twist.msg create mode 100644 kortex_driver/msg/TwistCommand.msg create mode 100644 kortex_driver/msg/TwistMode.msg create mode 100644 kortex_driver/msg/Unit.msg create mode 100644 kortex_driver/msg/UserEvent.msg create mode 100644 kortex_driver/msg/UserList.msg create mode 100644 kortex_driver/msg/UserNotification.msg create mode 100644 kortex_driver/msg/UserNotificationList.msg create mode 100644 kortex_driver/msg/UserProfile.msg create mode 100644 kortex_driver/msg/UserProfileHandle.msg create mode 100644 kortex_driver/msg/UserProfileList.msg create mode 100644 kortex_driver/msg/WifiConfiguration.msg create mode 100644 kortex_driver/msg/WifiConfigurationList.msg create mode 100644 kortex_driver/msg/WifiEncryptionType.msg create mode 100644 kortex_driver/msg/WifiInformation.msg create mode 100644 kortex_driver/msg/WifiInformationList.msg create mode 100644 kortex_driver/msg/WifiSecurityType.msg create mode 100644 kortex_driver/msg/Xbox360AnalogInputIdentifier.msg create mode 100644 kortex_driver/msg/Xbox360DigitalInputIdentifier.msg create mode 100644 kortex_driver/msg/ZoneShape.msg create mode 100644 kortex_driver/msg/non_generated/ApiOptions.msg create mode 100644 kortex_driver/msg/non_generated/KortexError.msg create mode 100644 kortex_driver/package.xml create mode 100644 kortex_driver/protos/Base.proto create mode 100644 kortex_driver/protos/BaseCyclic.proto create mode 100644 kortex_driver/protos/Common.options create mode 100644 kortex_driver/protos/Common.proto create mode 100644 kortex_driver/protos/Errors.options create mode 100644 kortex_driver/protos/Errors.proto create mode 100644 kortex_driver/readme.md create mode 100644 kortex_driver/src/base_proto_converter.cpp create mode 100644 kortex_driver/src/base_proto_converter.h create mode 100644 kortex_driver/src/base_ros_converter.cpp create mode 100644 kortex_driver/src/base_ros_converter.h create mode 100644 kortex_driver/src/basecyclic_proto_converter.cpp create mode 100644 kortex_driver/src/basecyclic_proto_converter.h create mode 100644 kortex_driver/src/basecyclic_ros_converter.cpp create mode 100644 kortex_driver/src/basecyclic_ros_converter.h create mode 100644 kortex_driver/src/common_proto_converter.cpp create mode 100644 kortex_driver/src/common_proto_converter.h create mode 100644 kortex_driver/src/common_ros_converter.cpp create mode 100644 kortex_driver/src/common_ros_converter.h create mode 100644 kortex_driver/src/main.cpp create mode 100644 kortex_driver/src/node.cpp create mode 100644 kortex_driver/src/node.h create mode 100644 kortex_driver/src/util/diagnostic.h create mode 100644 kortex_driver/src/util/math_util.h create mode 100644 kortex_driver/srv/ActionTopic.srv create mode 100644 kortex_driver/srv/ActivateMap.srv create mode 100644 kortex_driver/srv/AddWifiConfiguration.srv create mode 100644 kortex_driver/srv/ApplyEmergencyStop.srv create mode 100644 kortex_driver/srv/ArmStateTopic.srv create mode 100644 kortex_driver/srv/ChangePassword.srv create mode 100644 kortex_driver/srv/ClearFaults.srv create mode 100644 kortex_driver/srv/ConfigurationChangeTopic.srv create mode 100644 kortex_driver/srv/ConnectWifi.srv create mode 100644 kortex_driver/srv/ControlModeTopic.srv create mode 100644 kortex_driver/srv/ControllerTopic.srv create mode 100644 kortex_driver/srv/CreateAction.srv create mode 100644 kortex_driver/srv/CreateMap.srv create mode 100644 kortex_driver/srv/CreateMapping.srv create mode 100644 kortex_driver/srv/CreateProtectionZone.srv create mode 100644 kortex_driver/srv/CreateSequence.srv create mode 100644 kortex_driver/srv/CreateUserProfile.srv create mode 100644 kortex_driver/srv/DeleteAction.srv create mode 100644 kortex_driver/srv/DeleteAllSequenceTasks.srv create mode 100644 kortex_driver/srv/DeleteProtectionZone.srv create mode 100644 kortex_driver/srv/DeleteSequence.srv create mode 100644 kortex_driver/srv/DeleteSequenceTask.srv create mode 100644 kortex_driver/srv/DeleteUserProfile.srv create mode 100644 kortex_driver/srv/DeleteWifiConfiguration.srv create mode 100644 kortex_driver/srv/DisconnectWifi.srv create mode 100644 kortex_driver/srv/ExecuteAction.srv create mode 100644 kortex_driver/srv/ExecuteActionFromReference.srv create mode 100644 kortex_driver/srv/FactoryTopic.srv create mode 100644 kortex_driver/srv/GetActionExecutionState.srv create mode 100644 kortex_driver/srv/GetActiveMap.srv create mode 100644 kortex_driver/srv/GetActuatorCount.srv create mode 100644 kortex_driver/srv/GetAllConfiguredWifis.srv create mode 100644 kortex_driver/srv/GetAllConnectedControllers.srv create mode 100644 kortex_driver/srv/GetArmState.srv create mode 100644 kortex_driver/srv/GetAvailableWifi.srv create mode 100644 kortex_driver/srv/GetCommandedCartesianPose.srv create mode 100644 kortex_driver/srv/GetCommandedGripperMovement.srv create mode 100644 kortex_driver/srv/GetCommandedJointAngles.srv create mode 100644 kortex_driver/srv/GetCommandedJointSpeeds.srv create mode 100644 kortex_driver/srv/GetCommandedTwist.srv create mode 100644 kortex_driver/srv/GetConfiguredWifi.srv create mode 100644 kortex_driver/srv/GetConnectedWifiInformation.srv create mode 100644 kortex_driver/srv/GetControlMode.srv create mode 100644 kortex_driver/srv/GetControllerState.srv create mode 100644 kortex_driver/srv/GetFwdKinematics.srv create mode 100644 kortex_driver/srv/GetIPv4Configuration.srv create mode 100644 kortex_driver/srv/GetIPv4Information.srv create mode 100644 kortex_driver/srv/GetMeasuredCartesianPose.srv create mode 100644 kortex_driver/srv/GetMeasuredGripperMovement.srv create mode 100644 kortex_driver/srv/GetMeasuredJointAngles.srv create mode 100644 kortex_driver/srv/GetMeasuredJointSpeeds.srv create mode 100644 kortex_driver/srv/GetMeasuredTwist.srv create mode 100644 kortex_driver/srv/GetOperatingMode.srv create mode 100644 kortex_driver/srv/GetProtectionZoneState.srv create mode 100644 kortex_driver/srv/GetSequenceState.srv create mode 100644 kortex_driver/srv/GetServoingMode.srv create mode 100644 kortex_driver/srv/GetTargetedCartesianPose.srv create mode 100644 kortex_driver/srv/GetWifiInformation.srv create mode 100644 kortex_driver/srv/IsCommunicationInterfaceEnable.srv create mode 100644 kortex_driver/srv/MappingInfoTopic.srv create mode 100644 kortex_driver/srv/NetworkTopic.srv create mode 100644 kortex_driver/srv/OperatingModeTopic.srv create mode 100644 kortex_driver/srv/Pause.srv create mode 100644 kortex_driver/srv/PauseAction.srv create mode 100644 kortex_driver/srv/PauseSequence.srv create mode 100644 kortex_driver/srv/PlayAdvancedSequence.srv create mode 100644 kortex_driver/srv/PlayCartesianTrajectory.srv create mode 100644 kortex_driver/srv/PlayCartesianTrajectoryOrientation.srv create mode 100644 kortex_driver/srv/PlayCartesianTrajectoryPosition.srv create mode 100644 kortex_driver/srv/PlayJointTrajectory.srv create mode 100644 kortex_driver/srv/PlaySelectedJointTrajectory.srv create mode 100644 kortex_driver/srv/PlaySequence.srv create mode 100644 kortex_driver/srv/ProtectionZoneTopic.srv create mode 100644 kortex_driver/srv/ReadAction.srv create mode 100644 kortex_driver/srv/ReadAllActions.srv create mode 100644 kortex_driver/srv/ReadAllMappings.srv create mode 100644 kortex_driver/srv/ReadAllMaps.srv create mode 100644 kortex_driver/srv/ReadAllProtectionZones.srv create mode 100644 kortex_driver/srv/ReadAllSequences.srv create mode 100644 kortex_driver/srv/ReadAllUserProfiles.srv create mode 100644 kortex_driver/srv/ReadAllUsers.srv create mode 100644 kortex_driver/srv/ReadMapping.srv create mode 100644 kortex_driver/srv/ReadProtectionZone.srv create mode 100644 kortex_driver/srv/ReadSequence.srv create mode 100644 kortex_driver/srv/ReadUserProfile.srv create mode 100644 kortex_driver/srv/Reboot.srv create mode 100644 kortex_driver/srv/Refresh.srv create mode 100644 kortex_driver/srv/RefreshCommand.srv create mode 100644 kortex_driver/srv/RefreshCustomData.srv create mode 100644 kortex_driver/srv/RefreshFeedback.srv create mode 100644 kortex_driver/srv/RestoreFactorySettings.srv create mode 100644 kortex_driver/srv/RestoreNetworkFactorySettings.srv create mode 100644 kortex_driver/srv/Resume.srv create mode 100644 kortex_driver/srv/ResumeAction.srv create mode 100644 kortex_driver/srv/ResumeSequence.srv create mode 100644 kortex_driver/srv/RobotEventTopic.srv create mode 100644 kortex_driver/srv/SendGripperCommand.srv create mode 100644 kortex_driver/srv/SendJointSpeedsCommmand.srv create mode 100644 kortex_driver/srv/SendSelectedJointSpeedCommand.srv create mode 100644 kortex_driver/srv/SendTwistCommand.srv create mode 100644 kortex_driver/srv/SequenceInfoTopic.srv create mode 100644 kortex_driver/srv/ServoingModeTopic.srv create mode 100644 kortex_driver/srv/SetAdmittance.srv create mode 100644 kortex_driver/srv/SetCommunicationInterfaceEnable.srv create mode 100644 kortex_driver/srv/SetIPv4Configuration.srv create mode 100644 kortex_driver/srv/SetOperatingMode.srv create mode 100644 kortex_driver/srv/SetServoingMode.srv create mode 100644 kortex_driver/srv/SetTwistWrenchReferenceFrame.srv create mode 100644 kortex_driver/srv/StartWifiScan.srv create mode 100644 kortex_driver/srv/StopAction.srv create mode 100644 kortex_driver/srv/StopSequence.srv create mode 100644 kortex_driver/srv/Unsubscribe.srv create mode 100644 kortex_driver/srv/UpdateAction.srv create mode 100644 kortex_driver/srv/UpdateProtectionZone.srv create mode 100644 kortex_driver/srv/UpdateSequence.srv create mode 100644 kortex_driver/srv/UpdateUserProfile.srv create mode 100644 kortex_driver/srv/UserTopic.srv create mode 100644 kortex_driver/srv/non_generated/SetApiOptions.srv create mode 100644 kortex_driver/srv/non_generated/SetDeviceID.srv create mode 100644 kortex_driver/templates/NodeServices.cpp.jinja2 create mode 100644 kortex_driver/templates/NodeServices.h.jinja2 create mode 100644 kortex_driver/templates/main.jinja2 create mode 100644 kortex_driver/templates/proto_converter.cpp.jinja2 create mode 100644 kortex_driver/templates/proto_converter.h.jinja2 create mode 100644 kortex_driver/templates/ros_converter.cpp.jinja2 create mode 100644 kortex_driver/templates/ros_converter.h.jinja2 create mode 100644 kortex_driver/templates/ros_enum.jinja2 create mode 100644 kortex_driver/templates/ros_message.jinja2 create mode 100644 kortex_driver/templates/ros_oneof.jinja2 create mode 100644 kortex_driver/templates/ros_service.jinja2 create mode 100644 kortex_examples/CMakeLists.txt create mode 100644 kortex_examples/cpp/example_get_control_loop_parameters.cpp create mode 100644 kortex_examples/cpp/example_get_sensor_settings.cpp create mode 100644 kortex_examples/cpp/example_play_cartesian.cpp create mode 100644 kortex_examples/cpp/example_play_cartesian_position.cpp create mode 100644 kortex_examples/cpp/example_read_all_devices.cpp create mode 100644 kortex_examples/cpp/example_set_control_loop_parameters.cpp create mode 100644 kortex_examples/package.xml create mode 100644 kortex_examples/python/GetControlLoopParameters.py create mode 100644 kortex_examples/python/GetSensorSettings.py create mode 100644 kortex_examples/python/PlayCartesian.py create mode 100644 kortex_examples/python/ReadAllDevices.py create mode 100644 kortex_examples/python/SetControlLoopParameters.py create mode 100644 kortex_examples/readme.md create mode 100644 kortex_vision_config_driver/CMakeLists.txt create mode 100644 kortex_vision_config_driver/RosGeneration.py create mode 100644 kortex_vision_config_driver/build/.gitignore create mode 100755 kortex_vision_config_driver/kortex_vision_config_driver.sh create mode 100644 kortex_vision_config_driver/msg/ArmState.msg create mode 100644 kortex_vision_config_driver/msg/BitRate.msg create mode 100644 kortex_vision_config_driver/msg/Connection.msg create mode 100644 kortex_vision_config_driver/msg/DeviceHandle.msg create mode 100644 kortex_vision_config_driver/msg/DeviceTypes.msg create mode 100644 kortex_vision_config_driver/msg/Empty.msg create mode 100644 kortex_vision_config_driver/msg/FocusAction.msg create mode 100644 kortex_vision_config_driver/msg/FrameRate.msg create mode 100644 kortex_vision_config_driver/msg/IntrinsicParameters.msg create mode 100644 kortex_vision_config_driver/msg/NotificationHandle.msg create mode 100644 kortex_vision_config_driver/msg/NotificationOptions.msg create mode 100644 kortex_vision_config_driver/msg/NotificationType.msg create mode 100644 kortex_vision_config_driver/msg/Option.msg create mode 100644 kortex_vision_config_driver/msg/OptionIdentifier.msg create mode 100644 kortex_vision_config_driver/msg/OptionInformation.msg create mode 100644 kortex_vision_config_driver/msg/OptionValue.msg create mode 100644 kortex_vision_config_driver/msg/Permission.msg create mode 100644 kortex_vision_config_driver/msg/Resolution.msg create mode 100644 kortex_vision_config_driver/msg/SafetyHandle.msg create mode 100644 kortex_vision_config_driver/msg/SafetyNotification.msg create mode 100644 kortex_vision_config_driver/msg/SafetyStatusValue.msg create mode 100644 kortex_vision_config_driver/msg/Sensor.msg create mode 100644 kortex_vision_config_driver/msg/SensorFocusAction.msg create mode 100644 kortex_vision_config_driver/msg/SensorIdentifier.msg create mode 100644 kortex_vision_config_driver/msg/SensorSettings.msg create mode 100644 kortex_vision_config_driver/msg/ServiceVersion.msg create mode 100644 kortex_vision_config_driver/msg/Timestamp.msg create mode 100644 kortex_vision_config_driver/msg/Unit.msg create mode 100644 kortex_vision_config_driver/msg/UserProfileHandle.msg create mode 100644 kortex_vision_config_driver/msg/VisionEvent.msg create mode 100644 kortex_vision_config_driver/msg/VisionNotification.msg create mode 100644 kortex_vision_config_driver/msg/non_generated/ApiOptions.msg create mode 100644 kortex_vision_config_driver/msg/non_generated/KortexError.msg create mode 100644 kortex_vision_config_driver/package.xml create mode 100644 kortex_vision_config_driver/protos/Common.options create mode 100644 kortex_vision_config_driver/protos/Common.proto create mode 100644 kortex_vision_config_driver/protos/VisionConfig.proto create mode 100644 kortex_vision_config_driver/readme.md create mode 100644 kortex_vision_config_driver/src/common_proto_converter.cpp create mode 100644 kortex_vision_config_driver/src/common_proto_converter.h create mode 100644 kortex_vision_config_driver/src/common_ros_converter.cpp create mode 100644 kortex_vision_config_driver/src/common_ros_converter.h create mode 100644 kortex_vision_config_driver/src/main.cpp create mode 100644 kortex_vision_config_driver/src/node.cpp create mode 100644 kortex_vision_config_driver/src/node.h create mode 100644 kortex_vision_config_driver/src/util/diagnostic.h create mode 100644 kortex_vision_config_driver/src/util/math_util.h create mode 100644 kortex_vision_config_driver/src/visionconfig_proto_converter.cpp create mode 100644 kortex_vision_config_driver/src/visionconfig_proto_converter.h create mode 100644 kortex_vision_config_driver/src/visionconfig_ros_converter.cpp create mode 100644 kortex_vision_config_driver/src/visionconfig_ros_converter.h create mode 100644 kortex_vision_config_driver/srv/DoSensorFocusAction.srv create mode 100644 kortex_vision_config_driver/srv/GetIntrinsicParameters.srv create mode 100644 kortex_vision_config_driver/srv/GetOptionInformation.srv create mode 100644 kortex_vision_config_driver/srv/GetOptionValue.srv create mode 100644 kortex_vision_config_driver/srv/GetSensorSettings.srv create mode 100644 kortex_vision_config_driver/srv/SetOptionValue.srv create mode 100644 kortex_vision_config_driver/srv/SetSensorSettings.srv create mode 100644 kortex_vision_config_driver/srv/VisionTopic.srv create mode 100644 kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv create mode 100644 kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv create mode 100644 kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 create mode 100644 kortex_vision_config_driver/templates/NodeServices.h.jinja2 create mode 100644 kortex_vision_config_driver/templates/main.jinja2 create mode 100644 kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 create mode 100644 kortex_vision_config_driver/templates/proto_converter.h.jinja2 create mode 100644 kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 create mode 100644 kortex_vision_config_driver/templates/ros_converter.h.jinja2 create mode 100644 kortex_vision_config_driver/templates/ros_enum.jinja2 create mode 100644 kortex_vision_config_driver/templates/ros_message.jinja2 create mode 100644 kortex_vision_config_driver/templates/ros_oneof.jinja2 create mode 100644 kortex_vision_config_driver/templates/ros_service.jinja2 create mode 100644 readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ + diff --git a/LICENSE b/LICENSE index 92f784cc..f37a869e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,29 +1,62 @@ -BSD 3-Clause License - -Copyright (c) 2018, Kinova Robotics +Copyright (c) 2018, Kinova inc. All rights reserved. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: +* Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. +* Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software +without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +____________________________________________________________________ + + +Protocol Buffer license + +Copyright 2008 Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +modification, are permitted provided that the following conditions are +met: -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Code generated by the Protocol Buffer compiler is owned by the owner +of the input file used when generating it. This code is not +standalone and requires a support library to be linked with it. This +support library is itself covered by the above license. \ No newline at end of file diff --git a/kortex_actuator_driver/CMakeLists.txt b/kortex_actuator_driver/CMakeLists.txt new file mode 100644 index 00000000..7861e100 --- /dev/null +++ b/kortex_actuator_driver/CMakeLists.txt @@ -0,0 +1,49 @@ + +cmake_minimum_required(VERSION 2.8.3) +project(kortex_actuator_driver) + +add_compile_options(-std=c++11) +add_definitions(-D_OS_UNIX) + +## Find catkin and any catkin packages +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) + +file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") + +## Declare ROS messages and services +add_message_files(DIRECTORY msg) +add_message_files(DIRECTORY msg/non_generated) +add_service_files(DIRECTORY srv) +add_service_files(DIRECTORY srv/non_generated) + +## Generate added messages and services +generate_messages(DEPENDENCIES std_msgs) + +## Declare a catkin package +catkin_package() + +include_directories(include ${catkin_INCLUDE_DIRS}) +include_directories(include ${PROJECT_SOURCE_DIR}/src) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) +include_directories(include ${PROJECT_SOURCE_DIR}/src/util) + +link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) + +add_executable(${PROJECT_NAME} ${cpp_list}) + +target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} CppKinovaApi gcov) + +find_package(Protobuf 3.5.1 REQUIRED) + +if(Protobuf_FOUND) + target_include_directories(${PROJECT_NAME} PUBLIC ${PROTOBUF_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} ${PROTOBUF_LIBRARIES}) +else() + message(FATAL_ERROR "Protobuf libraries not found") +endif() + +add_dependencies(${PROJECT_NAME} kortex_actuator_driver_gencpp) + diff --git a/kortex_actuator_driver/RosGeneration.py b/kortex_actuator_driver/RosGeneration.py new file mode 100644 index 00000000..f47a0d01 --- /dev/null +++ b/kortex_actuator_driver/RosGeneration.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python + +import sys + +from google.protobuf.compiler import plugin_pb2 as plugin +from google.protobuf import json_format as json_f + +import jinja2 + +import itertools +import json +import types +import os +import sys + +from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto + +#Class that holds a protobuf message and some other details needed by the generator(jinja2 template). +class DetailedMessage: + def __init__(self, message=None): + self.message = message + self.HasOneOf = "false" + self.oneOfList = [] + +#Class that holds a protobuf service and some other details needed by the generator(jinja2 template). +class DetailedPackage: + def __init__(self, service=None): + self.name = "NoName" + self.service = service + +#JINJA2 function to render a file from a template. +def render(tpl_path, context): + path, filename = os.path.split(tpl_path) + return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) + +#Main plugin function +def generate_code(request, response): + + #The context is the object sent to the JINJA2 template + context = types.SimpleNamespace() + context.serviceVersion = 1 + + context.detailedPackages = [] + + MainFilePath = os.path.join(".", "src/main.cpp") + function_list = [] + fileIndex = 0 + + for proto_file in request.proto_file: + context.detailedPackages.append(DetailedPackage()) + context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] + context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] + context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") + context.detailedPackages[fileIndex].HasRPC = 0 + context.detailedPackages[fileIndex].HasMessage = 0 + + HeaderFilePath = os.path.join(".", "src/node.h") + CppFilePath = os.path.join(".", "src/node.cpp") + + #We lower the case to respect ROS coding standard style + CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) + CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) + + list_detailedMessage = [] + list_detailedMethod = [] + + # For every item in the current proto file + for item, package in traverse(proto_file): + context.HasOneOf = 0 + + + if isinstance(item, EnumDescriptorProto): + context.item = item + + ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) + + with open(ros_enumPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) + #If this it a message + if isinstance(item, DescriptorProto): + tempMessage = DetailedMessage(item) + context.detailedPackages[fileIndex].HasMessage = 1 + + for member in item.field: + #If a member is part of a oneof, it will have this additional field + if member.HasField("oneof_index"): + context.HasOneOf = 1 + tempMessage.HasOneOf = "true" + else: + context.HasOneOf = 0 + tempMessage.HasOneOf = "false" + + context.item = item + + #If the proto file contains a ONEOF we need to generate a separate file to handle it. + if context.HasOneOf == 1: + + #This line gets the list of ONEOF that is in the current message. + oneOfList = item.ListFields()[-1][1] + + tempMessage.oneOfList = item.ListFields()[-1][1] + ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) + + with open(ros_oneofPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) + + + list_detailedMessage.append(tempMessage) + ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) + + #We call jinja2 to generate a ROS message. + with open(ros_messagePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) + + #If this is a service (A group of method) + if isinstance(item, ServiceDescriptorProto): + for method in item.method: + context.item = method + if "Topic" not in method.name: + function_list.append(method.name) + ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) + with open(ros_servicePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) + + context.detailedPackages[fileIndex].service = item + context.detailedPackages[fileIndex].HasRPC = 1 + + context.currentPackageName = context.detailedPackages[fileIndex].name + context.currentNamespace = proto_file.package.replace(".", "::") + context.currentFilename = context.detailedPackages[fileIndex].filename + context.item = list_detailedMessage + + if context.detailedPackages[fileIndex].HasMessage == 1: + #Wecall jinja2 to generate a prot/ROS converter for every protobuf message. + with open(CppProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) + with open(HeaderProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) + with open(CppRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) + with open(HeaderRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) + + fileIndex = fileIndex + 1 + + context.list_function = function_list + + #We jinja2 to generate the ROS node. + with open(HeaderFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) + with open(CppFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) + with open(MainFilePath, 'wt') as mainFile: + mainFile.write(render("./templates/main.jinja2", context.__dict__)) + +def traverse(proto_file): + #recursive function that browse a protobof item + def _traverse(package, items): + for item in items: + yield item, package + + if isinstance(item, DescriptorProto): + for enum in item.enum_type: + yield enum, package + + for nested in item.nested_type: + nested_package = package + item.name + + for nested_item in _traverse(nested, nested_package): + yield nested_item, nested_package + if isinstance(item, ServiceDescriptorProto): + for rpc in item.method: + yield rpc, package + + #return a list of everything found in the proto file + return itertools.chain( + _traverse(proto_file.package, proto_file.enum_type), + _traverse(proto_file.package, proto_file.message_type), + _traverse(proto_file.package, proto_file.service), + ) + +if __name__ == '__main__': + # Read request message from stdin + data = sys.stdin.buffer.read() + + # Parse request + request = plugin.CodeGeneratorRequest() + request.ParseFromString(data) + + # Create response + response = plugin.CodeGeneratorResponse() + + # Generate code + generate_code(request, response) + + # Serialise response message + output = response.SerializeToString() + + # Write to stdout + sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_actuator_driver/build/.gitignore b/kortex_actuator_driver/build/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/kortex_actuator_driver/kortex_actuator_driver.sh b/kortex_actuator_driver/kortex_actuator_driver.sh new file mode 100755 index 00000000..011eee96 --- /dev/null +++ b/kortex_actuator_driver/kortex_actuator_driver.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +python3 -u RosGeneration.py + diff --git a/kortex_actuator_driver/msg/ArmState.msg b/kortex_actuator_driver/msg/ArmState.msg new file mode 100644 index 00000000..d85bd69d --- /dev/null +++ b/kortex_actuator_driver/msg/ArmState.msg @@ -0,0 +1,22 @@ + +uint32 UNSPECIFIED_ARM_STATE = 0 + +uint32 BASE_INITIALIZATION = 1 + +uint32 IDLE = 2 + +uint32 ARM_INITIALIZATION = 3 + +uint32 ARM_IN_FAULT = 4 + +uint32 ARM_MAINTENANCE = 5 + +uint32 ARM_SERVOING_LOW_LEVEL = 6 + +uint32 ARM_SERVOING_READY = 7 + +uint32 ARM_SERVOING_PLAYING_SEQUENCE = 8 + +uint32 ARM_SERVOING_MANUALLY_CONTROLLED = 9 + +uint32 RESERVED = 255 diff --git a/kortex_actuator_driver/msg/AxisOffsets.msg b/kortex_actuator_driver/msg/AxisOffsets.msg new file mode 100644 index 00000000..64f67904 --- /dev/null +++ b/kortex_actuator_driver/msg/AxisOffsets.msg @@ -0,0 +1,3 @@ + +float32 absolute_offset +float32 relative_offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/AxisPosition.msg b/kortex_actuator_driver/msg/AxisPosition.msg new file mode 100644 index 00000000..380da9af --- /dev/null +++ b/kortex_actuator_driver/msg/AxisPosition.msg @@ -0,0 +1,2 @@ + +float32 position \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Command.msg b/kortex_actuator_driver/msg/Command.msg new file mode 100644 index 00000000..25525fa5 --- /dev/null +++ b/kortex_actuator_driver/msg/Command.msg @@ -0,0 +1,8 @@ + + +MessageId command_id +uint32 flags +float32 position +float32 velocity +float32 torque_joint +float32 current_motor \ No newline at end of file diff --git a/kortex_actuator_driver/msg/CommandMode.msg b/kortex_actuator_driver/msg/CommandMode.msg new file mode 100644 index 00000000..fad4f4d3 --- /dev/null +++ b/kortex_actuator_driver/msg/CommandMode.msg @@ -0,0 +1,12 @@ + +uint32 CYCLIC = 0 + +uint32 ASYNC_CYCLIC_FLAGS = 1 + +uint32 ASYNC = 2 + +uint32 CYCLIC_JITTERCOMPENSATED_POSITION = 3 + +uint32 CYCLIC_JITTERCOMPENSATED_VELOCITY = 4 + +uint32 CYCLIC_JITTERCOMPENSATED_ACCELERATION = 5 diff --git a/kortex_actuator_driver/msg/CommandModeInformation.msg b/kortex_actuator_driver/msg/CommandModeInformation.msg new file mode 100644 index 00000000..e6342c48 --- /dev/null +++ b/kortex_actuator_driver/msg/CommandModeInformation.msg @@ -0,0 +1,3 @@ + + +uint32 command_mode \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Connection.msg b/kortex_actuator_driver/msg/Connection.msg new file mode 100644 index 00000000..ca08b6c8 --- /dev/null +++ b/kortex_actuator_driver/msg/Connection.msg @@ -0,0 +1,5 @@ + + +UserProfileHandle user_handle +string connection_information +uint32 connection_identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlLoop.msg b/kortex_actuator_driver/msg/ControlLoop.msg new file mode 100644 index 00000000..17b6d695 --- /dev/null +++ b/kortex_actuator_driver/msg/ControlLoop.msg @@ -0,0 +1,2 @@ + +uint32 control_loop \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlLoopParameters.msg b/kortex_actuator_driver/msg/ControlLoopParameters.msg new file mode 100644 index 00000000..72b8bbe5 --- /dev/null +++ b/kortex_actuator_driver/msg/ControlLoopParameters.msg @@ -0,0 +1,7 @@ + + +uint32 loop_selection +float32 error_saturation +float32 output_saturation +float32[] kAz +float32[] kBz \ No newline at end of file diff --git a/kortex_actuator_driver/msg/ControlLoopSelection.msg b/kortex_actuator_driver/msg/ControlLoopSelection.msg new file mode 100644 index 00000000..6b620930 --- /dev/null +++ b/kortex_actuator_driver/msg/ControlLoopSelection.msg @@ -0,0 +1,14 @@ + +uint32 RESERVED = 0 + +uint32 JOINT_POSITION = 1 + +uint32 MOTOR_POSITION = 2 + +uint32 JOINT_VELOCITY = 4 + +uint32 MOTOR_VELOCITY = 8 + +uint32 JOINT_TORQUE = 16 + +uint32 MOTOR_CURRENT = 32 diff --git a/kortex_actuator_driver/msg/ControlMode.msg b/kortex_actuator_driver/msg/ControlMode.msg new file mode 100644 index 00000000..7f80fdc4 --- /dev/null +++ b/kortex_actuator_driver/msg/ControlMode.msg @@ -0,0 +1,12 @@ + +uint32 NONE = 0 + +uint32 POSITION = 1 + +uint32 VELOCITY = 2 + +uint32 TORQUE = 3 + +uint32 CURRENT = 4 + +uint32 CUSTOM = 5 diff --git a/kortex_actuator_driver/msg/ControlModeInformation.msg b/kortex_actuator_driver/msg/ControlModeInformation.msg new file mode 100644 index 00000000..3bcfa3fa --- /dev/null +++ b/kortex_actuator_driver/msg/ControlModeInformation.msg @@ -0,0 +1,3 @@ + + +uint32 control_mode \ No newline at end of file diff --git a/kortex_actuator_driver/msg/CustomData.msg b/kortex_actuator_driver/msg/CustomData.msg new file mode 100644 index 00000000..b81c1b26 --- /dev/null +++ b/kortex_actuator_driver/msg/CustomData.msg @@ -0,0 +1,19 @@ + + +MessageId custom_data_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_actuator_driver/msg/CustomDataSelection.msg b/kortex_actuator_driver/msg/CustomDataSelection.msg new file mode 100644 index 00000000..1197aaba --- /dev/null +++ b/kortex_actuator_driver/msg/CustomDataSelection.msg @@ -0,0 +1,2 @@ + +uint32[] channel \ No newline at end of file diff --git a/kortex_actuator_driver/msg/DeviceHandle.msg b/kortex_actuator_driver/msg/DeviceHandle.msg new file mode 100644 index 00000000..49f84366 --- /dev/null +++ b/kortex_actuator_driver/msg/DeviceHandle.msg @@ -0,0 +1,5 @@ + + +uint32 device_type +uint32 device_identifier +uint32 order \ No newline at end of file diff --git a/kortex_actuator_driver/msg/DeviceTypes.msg b/kortex_actuator_driver/msg/DeviceTypes.msg new file mode 100644 index 00000000..5a55df07 --- /dev/null +++ b/kortex_actuator_driver/msg/DeviceTypes.msg @@ -0,0 +1,14 @@ + +uint32 UNSPECIFIED_DEVICE_TYPE = 0 + +uint32 BASE = 1 + +uint32 VISION = 2 + +uint32 BIG_ACTUATOR = 3 + +uint32 SMALL_ACTUATOR = 4 + +uint32 INTERCONNECT = 5 + +uint32 GRIPPER = 6 diff --git a/kortex_actuator_driver/msg/Empty.msg b/kortex_actuator_driver/msg/Empty.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_actuator_driver/msg/EncoderDerivativeParameters.msg b/kortex_actuator_driver/msg/EncoderDerivativeParameters.msg new file mode 100644 index 00000000..c83b9929 --- /dev/null +++ b/kortex_actuator_driver/msg/EncoderDerivativeParameters.msg @@ -0,0 +1,3 @@ + +uint32 max_window_width +uint32 min_encoder_tick_count \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Feedback.msg b/kortex_actuator_driver/msg/Feedback.msg new file mode 100644 index 00000000..9698d184 --- /dev/null +++ b/kortex_actuator_driver/msg/Feedback.msg @@ -0,0 +1,16 @@ + + +MessageId feedback_id +uint32 status_flags +uint32 jitter_comm +float32 position +float32 velocity +float32 torque +float32 current_motor +float32 voltage +float32 temperature_motor +float32 temperature_core +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_actuator_driver/msg/FrequencyResponse.msg b/kortex_actuator_driver/msg/FrequencyResponse.msg new file mode 100644 index 00000000..ea3ce5bd --- /dev/null +++ b/kortex_actuator_driver/msg/FrequencyResponse.msg @@ -0,0 +1,7 @@ + + +uint32 loop_selection +float32 min_frequency +float32 max_frequency +float32 amplitude +float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/LoopSelection.msg b/kortex_actuator_driver/msg/LoopSelection.msg new file mode 100644 index 00000000..f8dc270b --- /dev/null +++ b/kortex_actuator_driver/msg/LoopSelection.msg @@ -0,0 +1,3 @@ + + +uint32 loop_selection \ No newline at end of file diff --git a/kortex_actuator_driver/msg/MessageId.msg b/kortex_actuator_driver/msg/MessageId.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_actuator_driver/msg/MessageId.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/NotificationHandle.msg b/kortex_actuator_driver/msg/NotificationHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_actuator_driver/msg/NotificationHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/NotificationOptions.msg b/kortex_actuator_driver/msg/NotificationOptions.msg new file mode 100644 index 00000000..6ff46842 --- /dev/null +++ b/kortex_actuator_driver/msg/NotificationOptions.msg @@ -0,0 +1,5 @@ + + +uint32 type +uint32 rate_m_sec +float32 threshold_value \ No newline at end of file diff --git a/kortex_actuator_driver/msg/NotificationType.msg b/kortex_actuator_driver/msg/NotificationType.msg new file mode 100644 index 00000000..79dd058c --- /dev/null +++ b/kortex_actuator_driver/msg/NotificationType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_NOTIFICATION_TYPE = 0 + +uint32 THRESHOLD = 1 + +uint32 FIX_RATE = 2 + +uint32 EVENT = 3 diff --git a/kortex_actuator_driver/msg/Permission.msg b/kortex_actuator_driver/msg/Permission.msg new file mode 100644 index 00000000..c5399e9c --- /dev/null +++ b/kortex_actuator_driver/msg/Permission.msg @@ -0,0 +1,8 @@ + +uint32 NO_PERMISSION = 0 + +uint32 READ_PERMISSION = 1 + +uint32 UPDATE_PERMISSION = 2 + +uint32 DELETE_PERMISSION = 4 diff --git a/kortex_actuator_driver/msg/PositionCommand.msg b/kortex_actuator_driver/msg/PositionCommand.msg new file mode 100644 index 00000000..5e894e42 --- /dev/null +++ b/kortex_actuator_driver/msg/PositionCommand.msg @@ -0,0 +1,4 @@ + +float32 position +float32 velocity +float32 acceleration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/RampResponse.msg b/kortex_actuator_driver/msg/RampResponse.msg new file mode 100644 index 00000000..59d88d4e --- /dev/null +++ b/kortex_actuator_driver/msg/RampResponse.msg @@ -0,0 +1,6 @@ + + +uint32 loop_selection +float32 slope +float32 ramp_delay +float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyHandle.msg b/kortex_actuator_driver/msg/SafetyHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_actuator_driver/msg/SafetyHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyIdentifier.msg b/kortex_actuator_driver/msg/SafetyIdentifier.msg new file mode 100644 index 00000000..6e0c3e8d --- /dev/null +++ b/kortex_actuator_driver/msg/SafetyIdentifier.msg @@ -0,0 +1,50 @@ + +uint32 UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER = 0 + +uint32 FOLLOWING_ERROR = 1 + +uint32 MAXIMUM_VELOCITY = 2 + +uint32 JOINT_LIMIT_HIGH = 4 + +uint32 JOINT_LIMIT_LOW = 8 + +uint32 STRAIN_GAUGE_MISMATCH = 16 + +uint32 MAXIMUM_TORQUE = 32 + +uint32 UNRELIABLE_ABSOLUTE_POSITION = 64 + +uint32 MAGNETIC_POSITION = 128 + +uint32 HALL_POSITION = 256 + +uint32 HALL_SEQUENCE = 512 + +uint32 INPUT_ENCODER_HALL_MISMATCH = 1024 + +uint32 INPUT_ENCODER_INDEX_MISMATCH = 2048 + +uint32 INPUT_ENCODER_MAGNETIC_MISMATCH = 4096 + +uint32 MAXIMUM_MOTOR_CURRENT = 8192 + +uint32 MOTOR_CURRENT_MISMATCH = 16384 + +uint32 MAXIMUM_VOLTAGE = 32768 + +uint32 MINIMUM_VOLTAGE = 65536 + +uint32 MAXIMUM_MOTOR_TEMPERATURE = 131072 + +uint32 MAXIMUM_CORE_TEMPERATURE = 262144 + +uint32 NON_VOLATILE_MEMORY_CORRUPTED = 524288 + +uint32 MOTOR_DRIVER_FAULT = 1048576 + +uint32 EMERGENCY_LINE_ASSERTED = 2097152 + +uint32 COMMUNICATION_TICK_LOST = 4194304 + +uint32 WATCHDOG_TRIGGERED = 8388608 diff --git a/kortex_actuator_driver/msg/SafetyLimitType.msg b/kortex_actuator_driver/msg/SafetyLimitType.msg new file mode 100644 index 00000000..a8d7a177 --- /dev/null +++ b/kortex_actuator_driver/msg/SafetyLimitType.msg @@ -0,0 +1,4 @@ + +uint32 MAXIMAL_LIMIT = 0 + +uint32 MINIMAL_LIMIT = 1 diff --git a/kortex_actuator_driver/msg/SafetyNotification.msg b/kortex_actuator_driver/msg/SafetyNotification.msg new file mode 100644 index 00000000..36d88894 --- /dev/null +++ b/kortex_actuator_driver/msg/SafetyNotification.msg @@ -0,0 +1,11 @@ + + +SafetyHandle safety_handle + +uint32 value + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_actuator_driver/msg/SafetyStatusValue.msg b/kortex_actuator_driver/msg/SafetyStatusValue.msg new file mode 100644 index 00000000..2ea80554 --- /dev/null +++ b/kortex_actuator_driver/msg/SafetyStatusValue.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED = 0 + +uint32 WARNING = 1 + +uint32 ERROR = 2 + +uint32 NORMAL = 3 diff --git a/kortex_actuator_driver/msg/ServiceVersion.msg b/kortex_actuator_driver/msg/ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_actuator_driver/msg/ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_actuator_driver/msg/Servoing.msg b/kortex_actuator_driver/msg/Servoing.msg new file mode 100644 index 00000000..7f2750b4 --- /dev/null +++ b/kortex_actuator_driver/msg/Servoing.msg @@ -0,0 +1,2 @@ + +bool enabled \ No newline at end of file diff --git a/kortex_actuator_driver/msg/StepResponse.msg b/kortex_actuator_driver/msg/StepResponse.msg new file mode 100644 index 00000000..bde4ed2e --- /dev/null +++ b/kortex_actuator_driver/msg/StepResponse.msg @@ -0,0 +1,6 @@ + + +uint32 loop_selection +float32 amplitude +float32 step_delay +float32 duration \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Timestamp.msg b/kortex_actuator_driver/msg/Timestamp.msg new file mode 100644 index 00000000..5e60508c --- /dev/null +++ b/kortex_actuator_driver/msg/Timestamp.msg @@ -0,0 +1,3 @@ + +uint32 sec +uint32 usec \ No newline at end of file diff --git a/kortex_actuator_driver/msg/TorqueCalibration.msg b/kortex_actuator_driver/msg/TorqueCalibration.msg new file mode 100644 index 00000000..a237df13 --- /dev/null +++ b/kortex_actuator_driver/msg/TorqueCalibration.msg @@ -0,0 +1,5 @@ + +float32 global_gain +float32 global_offset +float32[] gain +float32[] offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/TorqueOffset.msg b/kortex_actuator_driver/msg/TorqueOffset.msg new file mode 100644 index 00000000..198518a2 --- /dev/null +++ b/kortex_actuator_driver/msg/TorqueOffset.msg @@ -0,0 +1,2 @@ + +float32 torque_offset \ No newline at end of file diff --git a/kortex_actuator_driver/msg/Unit.msg b/kortex_actuator_driver/msg/Unit.msg new file mode 100644 index 00000000..c019aeba --- /dev/null +++ b/kortex_actuator_driver/msg/Unit.msg @@ -0,0 +1,28 @@ + +uint32 UNSPECIFIED_UNIT = 0 + +uint32 CELSIUS = 1 + +uint32 AMPERE = 2 + +uint32 VOLT = 3 + +uint32 METER_PER_SECOND = 4 + +uint32 DEGREE_PER_SECOND = 5 + +uint32 METER_PER_SECOND_2 = 6 + +uint32 DEGREE_PER_SECOND_2 = 7 + +uint32 NEWTON = 8 + +uint32 NEWTON_METER = 9 + +uint32 KILOGRAM = 10 + +uint32 DEGREE = 11 + +uint32 TICK = 12 + +uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_actuator_driver/msg/UserProfileHandle.msg b/kortex_actuator_driver/msg/UserProfileHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_actuator_driver/msg/UserProfileHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_actuator_driver/msg/VectorDriveParameters.msg b/kortex_actuator_driver/msg/VectorDriveParameters.msg new file mode 100644 index 00000000..8fad9fca --- /dev/null +++ b/kortex_actuator_driver/msg/VectorDriveParameters.msg @@ -0,0 +1,5 @@ + +float32 kpq +float32 kiq +float32 kpd +float32 kid \ No newline at end of file diff --git a/kortex_actuator_driver/msg/non_generated/ApiOptions.msg b/kortex_actuator_driver/msg/non_generated/ApiOptions.msg new file mode 100644 index 00000000..471fddd8 --- /dev/null +++ b/kortex_actuator_driver/msg/non_generated/ApiOptions.msg @@ -0,0 +1 @@ +uint32 timeout_ms \ No newline at end of file diff --git a/kortex_actuator_driver/msg/non_generated/CyclicStatus.msg b/kortex_actuator_driver/msg/non_generated/CyclicStatus.msg new file mode 100644 index 00000000..cb36958f --- /dev/null +++ b/kortex_actuator_driver/msg/non_generated/CyclicStatus.msg @@ -0,0 +1 @@ +bool isActive \ No newline at end of file diff --git a/kortex_actuator_driver/msg/non_generated/KortexError.msg b/kortex_actuator_driver/msg/non_generated/KortexError.msg new file mode 100644 index 00000000..3ff9c32c --- /dev/null +++ b/kortex_actuator_driver/msg/non_generated/KortexError.msg @@ -0,0 +1,3 @@ +uint32 code +uint32 subCode +string description \ No newline at end of file diff --git a/kortex_actuator_driver/package.xml b/kortex_actuator_driver/package.xml new file mode 100644 index 00000000..410d5568 --- /dev/null +++ b/kortex_actuator_driver/package.xml @@ -0,0 +1,35 @@ + + + kortex_actuator_driver + 1.0.0 + The kortex package that communicate with an actuator. + + + KINOVA + + + + + + BSD + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + message_generation + message_runtime + + + + + + + + diff --git a/kortex_actuator_driver/protos/ActuatorConfig.options b/kortex_actuator_driver/protos/ActuatorConfig.options new file mode 100644 index 00000000..ef52a309 --- /dev/null +++ b/kortex_actuator_driver/protos/ActuatorConfig.options @@ -0,0 +1,10 @@ +Kinova.Api.ActuatorConfig.TorqueCalibration.gain max_count:4 fixed_count:true +Kinova.Api.ActuatorConfig.TorqueCalibration.offset max_count:4 fixed_count:true +Kinova.Api.ActuatorConfig.ControlLoopParameters.kAz max_count:5 fixed_count:true +Kinova.Api.ActuatorConfig.ControlLoopParameters.kBz max_count:6 fixed_count:true +Kinova.Api.ActuatorConfig.CustomDataSelection.channel max_count:16 +Kinova.Api.ActuatorConfig.SafetyLimitType long_names:false +Kinova.Api.ActuatorConfig.ControlMode long_names:false +Kinova.Api.ActuatorConfig.CommandMode long_names:false +Kinova.Api.ActuatorConfig.SafetyIdentifier long_names:false +Kinova.Api.ActuatorConfig.ControlLoopSelection long_names:false diff --git a/kortex_actuator_driver/protos/ActuatorConfig.proto b/kortex_actuator_driver/protos/ActuatorConfig.proto new file mode 100644 index 00000000..8aca4183 --- /dev/null +++ b/kortex_actuator_driver/protos/ActuatorConfig.proto @@ -0,0 +1,235 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.ActuatorConfig; + +service ActuatorConfig {//@PROXY_ID=10 @ERROR=Kinova.Api.Error + rpc GetAxisOffsets (Kinova.Api.Common.Empty) returns (AxisOffsets); //@RPC_ID=1 + rpc SetAxisOffsets (AxisPosition) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + rpc ReadTorqueCalibration (Kinova.Api.Common.Empty) returns (TorqueCalibration); //@RPC_ID=3 + rpc WriteTorqueCalibration (TorqueCalibration) returns (Kinova.Api.Common.Empty); //@RPC_ID=4 + rpc SetTorqueOffset (TorqueOffset) returns (Kinova.Api.Common.Empty); //@RPC_ID=5 + rpc GetControlMode (Kinova.Api.Common.Empty) returns (ControlModeInformation); //@RPC_ID=6 + rpc SetControlMode (ControlModeInformation) returns (Kinova.Api.Common.Empty); //@RPC_ID=7 + rpc GetActivatedControlLoop (Kinova.Api.Common.Empty) returns (ControlLoop); //@RPC_ID=8 + rpc SetActivatedControlLoop (ControlLoop) returns (Kinova.Api.Common.Empty); //@RPC_ID=9 + rpc GetVectorDriveParameters (Kinova.Api.Common.Empty) returns (VectorDriveParameters); //@RPC_ID=10 + rpc SetVectorDriveParameters (VectorDriveParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=11 + rpc GetEncoderDerivativeParameters (Kinova.Api.Common.Empty) returns (EncoderDerivativeParameters); //@RPC_ID=12 + rpc SetEncoderDerivativeParameters (EncoderDerivativeParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=13 + rpc GetControlLoopParameters (LoopSelection) returns (ControlLoopParameters); //@RPC_ID=14 + rpc SetControlLoopParameters (ControlLoopParameters) returns (Kinova.Api.Common.Empty); //@RPC_ID=15 + rpc StartFrequencyResponse (FrequencyResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=16 + rpc StopFrequencyResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=17 + rpc StartStepResponse (StepResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=18 + rpc StopStepResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=19 + rpc StartRampResponse (RampResponse) returns (Kinova.Api.Common.Empty); //@RPC_ID=20 + rpc StopRampResponse (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=21 + rpc SelectCustomData (CustomDataSelection) returns (Kinova.Api.Common.Empty); //@RPC_ID=22 + rpc GetSelectedCustomData (Kinova.Api.Common.Empty) returns (CustomDataSelection); //@RPC_ID=23 + rpc SetCommandMode (CommandModeInformation) returns (Kinova.Api.Common.Empty); //@RPC_ID=24 + rpc ClearFaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=25 + rpc SetServoing (Servoing) returns (Kinova.Api.Common.Empty); //@RPC_ID=26 + rpc MoveToPosition (PositionCommand) returns (Kinova.Api.Common.Empty); //@RPC_ID=27 + rpc GetCommandMode (Kinova.Api.Common.Empty) returns (CommandModeInformation); //@RPC_ID=28 + rpc GetServoing (Kinova.Api.Common.Empty) returns (Servoing); //@RPC_ID=29 + rpc GetTorqueOffset (Kinova.Api.Common.Empty) returns (TorqueOffset); //@RPC_ID=30 +} + +enum ServiceVersion +{ + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current Version +} + +/** + * list of limit types + */ +enum SafetyLimitType +{ + MAXIMAL_LIMIT = 0; // Maximal limit + MINIMAL_LIMIT = 1; // Minimal limit +} + +/** + * list of control modes + */ +enum ControlMode +{ + NONE = 0; // None + POSITION = 1; // Position mode + VELOCITY = 2; // Velocity mode + TORQUE = 3; // Torque mode + CURRENT = 4; // Current mode + CUSTOM = 5; // Custom mode +} + +/** + * list of command modes + */ +enum CommandMode +{ + CYCLIC = 0; // Only cyclic data + ASYNC_CYCLIC_FLAGS = 1; // Not Supported + ASYNC = 2; // Only asynchronous messages + CYCLIC_JITTERCOMPENSATED_POSITION = 3; // Smoothing using only position inputs + CYCLIC_JITTERCOMPENSATED_VELOCITY = 4; // Smoothing using position and velocity inputs + CYCLIC_JITTERCOMPENSATED_ACCELERATION = 5; // Smoothing using position, velocity and acceleration inputs (not supported) +} + +enum ControlLoopSelection +{ + RESERVED = 0; + JOINT_POSITION = 1; // If available + MOTOR_POSITION = 2; + JOINT_VELOCITY = 4; // If available + MOTOR_VELOCITY = 8; + JOINT_TORQUE = 16; + MOTOR_CURRENT = 32; +} + +message AxisPosition +{ + float position = 1; // Axis position +} + +message AxisOffsets +{ + float absolute_offset = 1; // Absolute offset value + float relative_offset = 2; // Relative offset value +} + +message TorqueCalibration +{ + float global_gain = 1; // Global gain value + float global_offset = 2; // Global offset value + repeated float gain = 3; // Gain (index 0 to 3) + repeated float offset = 4; // Offset (index 0 to 3) +} + +message TorqueOffset +{ + float torque_offset = 1; // Torque offset value +} + +message ControlModeInformation +{ + ControlMode control_mode = 1; // Control mode +} + +/* Control loop bit mask : + Bit 0 : JOINT_POSITION // If available + Bit 1 : MOTOR_POSITION + Bit 2 : JOINT_VELOCITY // If available + Bit 3 : MOTOR_VELOCITY + Bit 4 : JOINT_TORQUE + Bit 5 : MOTOR_CURRENT + */ +message ControlLoop +{ + fixed32 control_loop = 1; // Use ControlLoopSelection enum values to form bitmask +} + +message LoopSelection +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum +} + +message VectorDriveParameters +{ + float kpq = 1; // Kpq + float kiq = 2; // Kiq + float kpd = 3; // Kpd + float kid = 4; // Kid +} + +message EncoderDerivativeParameters +{ + uint32 max_window_width = 1; // Maximum window width + uint32 min_encoder_tick_count = 2; // Minimum encoder tick count +} + +message ControlLoopParameters +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float error_saturation = 2; // Error saturation value + float output_saturation = 3; // Output saturation value + repeated float kAz = 4; // KAz (index 0 to 4) + repeated float kBz = 5; // KBz (index 0 to 5) +} + +message FrequencyResponse +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float min_frequency = 2; // Minimum frequency value + float max_frequency = 3; // Maximum frequency value + float amplitude = 4; // Amplitude value + float duration = 5; // Duration in seconds +} + +message StepResponse +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float amplitude = 2; // Amplitude value + float step_delay = 3; // Step delay value + float duration = 4; // Duration in seconds +} + +message RampResponse +{ + ControlLoopSelection loop_selection = 1; // ControlLoopSelection enum + float slope = 2; // Slope value + float ramp_delay = 3; // Ramp delay value + float duration = 4; // Duration in seconds +} + +message CustomDataSelection +{ + repeated uint32 channel = 1; // 16 channels maximum +} + +message CommandModeInformation +{ + CommandMode command_mode = 1; // Command mode +} + +message Servoing +{ + bool enabled = 1; // Servoing enabled +} + +message PositionCommand +{ + float position = 1; // Position value + float velocity = 2; // Velocity value + float acceleration = 3; // Acceleration value +} + +enum SafetyIdentifier { + UNSPECIFIED_ACTUATOR_SAFETY_IDENTIFIER = 0; //0x0 + FOLLOWING_ERROR = 1; //0x1 + MAXIMUM_VELOCITY = 2; //0x2 + JOINT_LIMIT_HIGH = 4; //0x4 + JOINT_LIMIT_LOW = 8; //0x8 + STRAIN_GAUGE_MISMATCH = 16; //0x10 + MAXIMUM_TORQUE = 32; //0x20 + UNRELIABLE_ABSOLUTE_POSITION = 64; //0x40 + MAGNETIC_POSITION = 128; //0x80 + HALL_POSITION = 256; //0x100 + HALL_SEQUENCE = 512; //0x200 + INPUT_ENCODER_HALL_MISMATCH = 1024; //0x400 + INPUT_ENCODER_INDEX_MISMATCH = 2048; //0x800 + INPUT_ENCODER_MAGNETIC_MISMATCH = 4096; //0x1000 + MAXIMUM_MOTOR_CURRENT = 8192; //0x2000 + MOTOR_CURRENT_MISMATCH = 16384; //0x4000 + MAXIMUM_VOLTAGE = 32768; //0x8000 + MINIMUM_VOLTAGE = 65536; //0x10000 + MAXIMUM_MOTOR_TEMPERATURE = 131072; //0x20000 + MAXIMUM_CORE_TEMPERATURE = 262144; //0x40000 + NON_VOLATILE_MEMORY_CORRUPTED = 524288; //0x80000 + MOTOR_DRIVER_FAULT = 1048576; //0x100000 + EMERGENCY_LINE_ASSERTED = 2097152; //0x200000 + COMMUNICATION_TICK_LOST = 4194304; //0x400000 + WATCHDOG_TRIGGERED = 8388608; //0x800000 +} diff --git a/kortex_actuator_driver/protos/ActuatorCyclic.proto b/kortex_actuator_driver/protos/ActuatorCyclic.proto new file mode 100644 index 00000000..5508da2b --- /dev/null +++ b/kortex_actuator_driver/protos/ActuatorCyclic.proto @@ -0,0 +1,78 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.ActuatorCyclic; + +/** + * List of services available via remote procedure call + */ +service ActuatorCyclic {//@PROXY_ID=11 @ERROR=Kinova.Api.Error + +// Commands refresh (with feedback) + rpc Refresh (Command) returns (Feedback); //@RPC_ID=1 + +// Commands refresh (no feedback) + rpc RefreshCommand (Command) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + +// Gets feedback + rpc RefreshFeedback (MessageId) returns (Feedback); //@RPC_ID=3 + +// Gets custom data + rpc RefreshCustomData (MessageId) returns (CustomData); //@RPC_ID=4 +} + +enum ServiceVersion { + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current Service Version +} + +message MessageId { + fixed32 identifier = 1; // Message ID (first 2 bytes : device ID, last 2 bytes : sequence number) +} + +message Command { + MessageId command_id = 1; // MessageId + fixed32 flags = 2; // Flags + float position = 3; // Desired position of the actuator in ° + float velocity = 4; // Desired velocity of the actuator in °/s + float torque_joint = 5; // Desired torque of the actuator in N·m + float current_motor = 6; // Desired current of the motor in A +} + +message Feedback { + MessageId feedback_id = 1; // MessageId + fixed32 status_flags = 2; // Status flags + fixed32 jitter_comm = 3; // Jitter from the communication in μs + float position = 4; // Position of the actuator in ° + float velocity = 5; // Angular velocity of the actuator in °/s + float torque = 6; // Torque of the actuator in N·m + float current_motor = 7; // Current of the motor in A + float voltage = 8; // Voltage of the main board in V + float temperature_motor = 9; // Motor temperature (average of the three (3) temperatures in °C) + float temperature_core = 10; // Microcontroller temperature in °C + fixed32 fault_bank_a = 11; // Bank A Fault (see ActuatorConfig.SafetyIdentifier) + fixed32 fault_bank_b = 12; // Bank B Fault (see ActuatorConfig.SafetyIdentifier) + fixed32 warning_bank_a = 13; // Bank A Warning (see ActuatorConfig.SafetyIdentifier) + fixed32 warning_bank_b = 14; // Bank B Warning (see ActuatorConfig.SafetyIdentifier) +} + +message CustomData { + MessageId custom_data_id = 1; // MessageId + fixed32 custom_data_0 = 2; // Custom data word 0 + fixed32 custom_data_1 = 3; // Custom data word 1 + fixed32 custom_data_2 = 4; // Custom data word 2 + fixed32 custom_data_3 = 5; // Custom data word 3 + fixed32 custom_data_4 = 6; // Custom data word 4 + fixed32 custom_data_5 = 7; // Custom data word 5 + fixed32 custom_data_6 = 8; // Custom data word 6 + fixed32 custom_data_7 = 9; // Custom data word 7 + fixed32 custom_data_8 = 10; // Custom data word 8 + fixed32 custom_data_9 = 11; // Custom data word 9 + fixed32 custom_data_10 = 12; // Custom data word 10 + fixed32 custom_data_11 = 13; // Custom data word 11 + fixed32 custom_data_12 = 14; // Custom data word 12 + fixed32 custom_data_13 = 15; // Custom data word 13 + fixed32 custom_data_14 = 16; // Custom data word 14 + fixed32 custom_data_15 = 17; // Custom data word 15 +} diff --git a/kortex_actuator_driver/protos/Common.options b/kortex_actuator_driver/protos/Common.options new file mode 100644 index 00000000..5f3020ab --- /dev/null +++ b/kortex_actuator_driver/protos/Common.options @@ -0,0 +1,4 @@ +Kinova.Api.Common.DeviceTypes long_names:false +Kinova.Api.Common.SafetyStatusValue long_names:false +Kinova.Api.Common.NotificationType long_names:false +Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_actuator_driver/protos/Common.proto b/kortex_actuator_driver/protos/Common.proto new file mode 100644 index 00000000..50f762ec --- /dev/null +++ b/kortex_actuator_driver/protos/Common.proto @@ -0,0 +1,152 @@ +syntax = "proto3"; + +package Kinova.Api.Common; + +/** + * list of possible device types + */ +enum DeviceTypes { + UNSPECIFIED_DEVICE_TYPE = 0; + BASE = 1; + VISION = 2; + BIG_ACTUATOR = 3; + SMALL_ACTUATOR = 4; + INTERCONNECT = 5; + GRIPPER = 6; +} + +/** +* Message contains information about a device - device type, device identifier, and the order of the device within the robot +*/ +message DeviceHandle { + DeviceTypes device_type = 1; + uint32 device_identifier = 2; // Unique device identifier (used with other services) + uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation +} + +/** + * list of possible safety statuses + */ +enum SafetyStatusValue { + UNSPECIFIED = 0; + WARNING = 1; //warning safety reached + ERROR = 2; //error safety reached + NORMAL = 3; //safety is off +} + +/** + * Enumeration used as bitfields wih permission field + */ +enum Permission { + NO_PERMISSION = 0; + READ_PERMISSION = 1; //refers to a user's capability to read the entity + UPDATE_PERMISSION = 2;//refers to a user's capability to write or modify the entity + DELETE_PERMISSION = 4; //refers to a user's capability to delete the entity +} + +/** + * list of notification types + */ +enum NotificationType { + UNSPECIFIED_NOTIFICATION_TYPE = 0; + THRESHOLD = 1; + FIX_RATE = 2; + EVENT = 3; //Event type. Only this one is supported for now +} + +/** + * list of units used throughout API methods + */ +enum Unit { + UNSPECIFIED_UNIT = 0; + CELSIUS = 1; + AMPERE = 2; + VOLT = 3; + METER_PER_SECOND = 4; + DEGREE_PER_SECOND = 5; + METER_PER_SECOND_2 = 6; + DEGREE_PER_SECOND_2 = 7; + NEWTON = 8; + NEWTON_METER =9; + KILOGRAM = 10; + DEGREE = 11; + TICK = 12; + DEGREE_PER_MILLISECOND = 13; +} + +/** + * Message used when no information needs to be exchanged between client application and robot, and vice versa + */ +message Empty { +} + +/** + * Notification options + */ +message NotificationOptions { + NotificationType type = 1; //type of notification + uint32 rate_m_sec = 2; + float threshold_value = 3; +} + +/** + * Handle to a safety + */ +message SafetyHandle { + uint32 identifier = 1; +} + +/** + * Handle to a notification + */ +message NotificationHandle { + uint32 identifier = 1; +} + +/** + * Message that contains a Safety event + */ +message SafetyNotification { + SafetyHandle safety_handle = 1; //safety handle + SafetyStatusValue value = 2; //new safety status + Timestamp timestamp = 3; //event timestamp + UserProfileHandle user_handle = 4; //user that caused the safety event + Connection connection = 5; // connection that caused the safety event +} + +/** + * Timestamp based on epoch + */ +message Timestamp { + uint32 sec = 1; //epoch in seconds since 1970 + uint32 usec = 2;//microseconds after the second (0-999999) +} + +/** + * Handle to an existing User Profile. + */ +message UserProfileHandle { + uint32 identifier = 1; //User profile identifier + fixed32 permission = 2; //must use 'Permission' as bitwise +} + +message Connection { + UserProfileHandle user_handle = 1; //user profile handle, or set to zero if no user logged in + string connection_information = 2; //connection info (ex. IP address with port number) + uint32 connection_identifier = 3; //connection identifier +} + +enum ArmState +{ + UNSPECIFIED_ARM_STATE = 0; + BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection + IDLE = 2; + ARM_INITIALIZATION = 3; + ARM_IN_FAULT = 4; + ARM_MAINTENANCE = 5; + ARM_SERVOING_LOW_LEVEL = 6; + ARM_SERVOING_READY = 7; + ARM_SERVOING_PLAYING_SEQUENCE = 8; + ARM_SERVOING_MANUALLY_CONTROLLED = 9; + RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly +} \ No newline at end of file diff --git a/kortex_actuator_driver/readme.md b/kortex_actuator_driver/readme.md new file mode 100644 index 00000000..8b503711 --- /dev/null +++ b/kortex_actuator_driver/readme.md @@ -0,0 +1,121 @@ + + +# Kortex actuator driver +This package is a node that interfaces with a single actuator. + + + +1. [Content](#content) + 1. [build](#build) + 1. [msg](#msg) + 1. [non_generated](#non_generated) + 1. [protos](#protos) + 1. [src](#src) + 1. [srv](#srv) + 1. [non_generated](#non_generated-1) + 1. [templates](#templates) +1. [How to start the node](#how-to-start-the-node) + 1. [Normal mode](#normal-mode) + 1. [Using the device routing feature](#using-the-device-routing-feature) +1. [Generation](#generation) + + + + +## Content + +### build +This folder's only purpose is to exist as a temp folder during the generation. It should not be used. + +### msg +This folder contains every custom messages used by the node **kortex\_actuator\_driver**. All the .msg files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .msg files used by the node **kortex\_actuator\_driver**. + +| MSG | Description | +|:---:|:---:| +| ApiOptions.msg | A set of option that is supported by the Kortex API. It is used with the service SetApiOptions. For now there is only one option called tiemout_ms and it lets the user set a timeout value on every next service call. | +| KortexError.msg | Describe the topic /KortexError. Every service call of the node kortex_actuator_driver will publish in /KortexError everytime the Kortex API returns an error. | + + +### protos +This folder contains the protobuf files from where the MSG, SRV and sources files are generated. The content of this folder should not be modified. + +### src +This folder contains all the generated source files needed to build the node. The content of this folder should not be modified. + +### srv +This folder contains every custom services used by the node **kortex\_actuator\_driver**. All the .srv files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .srv files used by the node **kortex\_actuator\_driver**. + +| SRV | Description | +|:---:|:---:| +| SetApiOptions.srv | It modify the api options of the Kortex API. Once this service is called, the options set will affect every future call to the node. | +| SetDeviceID.srv | It modify the target device (device routing feature) of the node. The default value is 0.| + + +### templates +This folder contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the [Generation](#generation) section. + +| JINJA2 files | Description | +|:---:|:---:| +| main.jinja2 | Use to generate src/main.cpp | +| NodeServices.cpp.jinja2 | Use to generate src/node.cpp | +| NodeServices.h.jinja2 | Use to generate src/node.h | +| proto_converterCPP.jinja2 | Use to generate every src/*_proto\_converter.cpp files | +| proto_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_converterCPP.jinja2 | Use to generate every src/*_ros\_converter.cpp files | +| ros_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_enum.jinja2 | Use to generate every msg/*.msg files that represent a protobuf enum | +| ros_message.jinja2 | Use to generate every msg/*.msg files that represent a protobuf message | +| ros_oneof.jinja2 | Use to generate every msg/*.msg files that represent a protobuf oneof | +| ros_service.jinja2 | Use to generate every msg/*.msg files that represent a protobuf RPC | + + +## How to start the node + +### Normal mode +Use this mode if you are directly (there is an ethernet cable between your computer and an actuator) connected to an actuator. To be clear, if you are using the WIFI or your cable is connected in the robot's base, don't use this mode. + +rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100 + +In the command above, you would be running the kortex_actuator_driver node on an actuator with an IP address of 192.168.1.10. The cyclic data would be refreshed at 100 Hz. + + +### Using the device routing feature +Use this mode if your are connected via WIFI are directly in the robot's base and you want to have access to an actuator's interface. + +rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100 4 + +In the command above, you would be running the kortex_actuator_driver node using the device routing feature on an robot's base with an IP address of 192.168.1.10. The cyclic data would be refreshed at 100 Hz and the actuator's device ID is 4. + + +## Generation +

+The generation process is based on a custom protobuf plugin. Basically, most of the generation process is in the python file RosGeneration.py located at the package's root folder. Before launching the generation make sure you have the python module Jinja2 installed on your computer. +

+ +To launch the generation of this package: + +1. Open a terminal window. +1. Browse the root of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_actuator\_driver/ +1. Make sure that the file kortex_actuator_driver.sh can be executed. If not then chmod +x kortex_actuator_driver.sh +1. Run this command: protoc --plugin=protoc-gen-custom=kortex_actuator_driver.sh -I./protos/ --custom_out=./build ./protos/\*.prot +1. The result of the generation should be on thos folder: + * /src + * /msg + * /srv + diff --git a/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp b/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp new file mode 100644 index 00000000..1c7a4f74 --- /dev/null +++ b/kortex_actuator_driver/src/actuatorconfig_proto_converter.cpp @@ -0,0 +1,172 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "actuatorconfig_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_actuator_driver::AxisPosition input, AxisPosition *output) +{ + output->set_position(input.position); + + return 0; +} +int ToProtoData(kortex_actuator_driver::AxisOffsets input, AxisOffsets *output) +{ + output->set_absolute_offset(input.absolute_offset); + output->set_relative_offset(input.relative_offset); + + return 0; +} +int ToProtoData(kortex_actuator_driver::TorqueCalibration input, TorqueCalibration *output) +{ + output->set_global_gain(input.global_gain); + output->set_global_offset(input.global_offset); + output->clear_gain(); + for(int i = 0; i < input.gain.size(); i++) + { + output->add_gain(input.gain[i]); + } + + output->clear_offset(); + for(int i = 0; i < input.offset.size(); i++) + { + output->add_offset(input.offset[i]); + } + + + return 0; +} +int ToProtoData(kortex_actuator_driver::TorqueOffset input, TorqueOffset *output) +{ + output->set_torque_offset(input.torque_offset); + + return 0; +} +int ToProtoData(kortex_actuator_driver::ControlModeInformation input, ControlModeInformation *output) +{ + output->set_control_mode((Kinova::Api::ActuatorConfig::ControlMode)input.control_mode); + + return 0; +} +int ToProtoData(kortex_actuator_driver::ControlLoop input, ControlLoop *output) +{ + output->set_control_loop(input.control_loop); + + return 0; +} +int ToProtoData(kortex_actuator_driver::LoopSelection input, LoopSelection *output) +{ + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + + return 0; +} +int ToProtoData(kortex_actuator_driver::VectorDriveParameters input, VectorDriveParameters *output) +{ + output->set_kpq(input.kpq); + output->set_kiq(input.kiq); + output->set_kpd(input.kpd); + output->set_kid(input.kid); + + return 0; +} +int ToProtoData(kortex_actuator_driver::EncoderDerivativeParameters input, EncoderDerivativeParameters *output) +{ + output->set_max_window_width(input.max_window_width); + output->set_min_encoder_tick_count(input.min_encoder_tick_count); + + return 0; +} +int ToProtoData(kortex_actuator_driver::ControlLoopParameters input, ControlLoopParameters *output) +{ + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_error_saturation(input.error_saturation); + output->set_output_saturation(input.output_saturation); + output->clear_kaz(); + for(int i = 0; i < input.kAz.size(); i++) + { + output->add_kaz(input.kAz[i]); + } + + output->clear_kbz(); + for(int i = 0; i < input.kBz.size(); i++) + { + output->add_kbz(input.kBz[i]); + } + + + return 0; +} +int ToProtoData(kortex_actuator_driver::FrequencyResponse input, FrequencyResponse *output) +{ + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_min_frequency(input.min_frequency); + output->set_max_frequency(input.max_frequency); + output->set_amplitude(input.amplitude); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_actuator_driver::StepResponse input, StepResponse *output) +{ + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_amplitude(input.amplitude); + output->set_step_delay(input.step_delay); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_actuator_driver::RampResponse input, RampResponse *output) +{ + output->set_loop_selection((Kinova::Api::ActuatorConfig::ControlLoopSelection)input.loop_selection); + output->set_slope(input.slope); + output->set_ramp_delay(input.ramp_delay); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_actuator_driver::CustomDataSelection input, CustomDataSelection *output) +{ + output->clear_channel(); + for(int i = 0; i < input.channel.size(); i++) + { + output->add_channel(input.channel[i]); + } + + + return 0; +} +int ToProtoData(kortex_actuator_driver::CommandModeInformation input, CommandModeInformation *output) +{ + output->set_command_mode((Kinova::Api::ActuatorConfig::CommandMode)input.command_mode); + + return 0; +} +int ToProtoData(kortex_actuator_driver::Servoing input, Servoing *output) +{ + output->set_enabled(input.enabled); + + return 0; +} +int ToProtoData(kortex_actuator_driver::PositionCommand input, PositionCommand *output) +{ + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_acceleration(input.acceleration); + + return 0; +} diff --git a/kortex_actuator_driver/src/actuatorconfig_proto_converter.h b/kortex_actuator_driver/src/actuatorconfig_proto_converter.h new file mode 100644 index 00000000..78ffe9f7 --- /dev/null +++ b/kortex_actuator_driver/src/actuatorconfig_proto_converter.h @@ -0,0 +1,82 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ActuatorConfigPROTO_CONVERTER_H_ +#define _KORTEX_ActuatorConfigPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_actuator_driver/AxisPosition.h" +#include "kortex_actuator_driver/AxisOffsets.h" +#include "kortex_actuator_driver/TorqueCalibration.h" +#include "kortex_actuator_driver/TorqueOffset.h" +#include "kortex_actuator_driver/ControlModeInformation.h" +#include "kortex_actuator_driver/ControlLoop.h" +#include "kortex_actuator_driver/LoopSelection.h" +#include "kortex_actuator_driver/VectorDriveParameters.h" +#include "kortex_actuator_driver/EncoderDerivativeParameters.h" +#include "kortex_actuator_driver/ControlLoopParameters.h" +#include "kortex_actuator_driver/FrequencyResponse.h" +#include "kortex_actuator_driver/StepResponse.h" +#include "kortex_actuator_driver/RampResponse.h" +#include "kortex_actuator_driver/CustomDataSelection.h" +#include "kortex_actuator_driver/CommandModeInformation.h" +#include "kortex_actuator_driver/Servoing.h" +#include "kortex_actuator_driver/PositionCommand.h" + + +using namespace Kinova::Api::ActuatorConfig; + +int ToProtoData(kortex_actuator_driver::AxisPosition intput, AxisPosition *output); +int ToProtoData(kortex_actuator_driver::AxisOffsets intput, AxisOffsets *output); +int ToProtoData(kortex_actuator_driver::TorqueCalibration intput, TorqueCalibration *output); +int ToProtoData(kortex_actuator_driver::TorqueOffset intput, TorqueOffset *output); +int ToProtoData(kortex_actuator_driver::ControlModeInformation intput, ControlModeInformation *output); +int ToProtoData(kortex_actuator_driver::ControlLoop intput, ControlLoop *output); +int ToProtoData(kortex_actuator_driver::LoopSelection intput, LoopSelection *output); +int ToProtoData(kortex_actuator_driver::VectorDriveParameters intput, VectorDriveParameters *output); +int ToProtoData(kortex_actuator_driver::EncoderDerivativeParameters intput, EncoderDerivativeParameters *output); +int ToProtoData(kortex_actuator_driver::ControlLoopParameters intput, ControlLoopParameters *output); +int ToProtoData(kortex_actuator_driver::FrequencyResponse intput, FrequencyResponse *output); +int ToProtoData(kortex_actuator_driver::StepResponse intput, StepResponse *output); +int ToProtoData(kortex_actuator_driver::RampResponse intput, RampResponse *output); +int ToProtoData(kortex_actuator_driver::CustomDataSelection intput, CustomDataSelection *output); +int ToProtoData(kortex_actuator_driver::CommandModeInformation intput, CommandModeInformation *output); +int ToProtoData(kortex_actuator_driver::Servoing intput, Servoing *output); +int ToProtoData(kortex_actuator_driver::PositionCommand intput, PositionCommand *output); + +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp b/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp new file mode 100644 index 00000000..f9c7698e --- /dev/null +++ b/kortex_actuator_driver/src/actuatorconfig_ros_converter.cpp @@ -0,0 +1,172 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "actuatorconfig_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(AxisPosition input, kortex_actuator_driver::AxisPosition &output) +{ + output.position = input.position(); + + return 0; +} +int ToRosData(AxisOffsets input, kortex_actuator_driver::AxisOffsets &output) +{ + output.absolute_offset = input.absolute_offset(); + output.relative_offset = input.relative_offset(); + + return 0; +} +int ToRosData(TorqueCalibration input, kortex_actuator_driver::TorqueCalibration &output) +{ + output.global_gain = input.global_gain(); + output.global_offset = input.global_offset(); + + output.gain.clear(); + for(int i = 0; i < input.gain_size(); i++) + { + output.gain.push_back(input.gain(i)); + } + + output.offset.clear(); + for(int i = 0; i < input.offset_size(); i++) + { + output.offset.push_back(input.offset(i)); + } + + return 0; +} +int ToRosData(TorqueOffset input, kortex_actuator_driver::TorqueOffset &output) +{ + output.torque_offset = input.torque_offset(); + + return 0; +} +int ToRosData(ControlModeInformation input, kortex_actuator_driver::ControlModeInformation &output) +{ + output.control_mode = input.control_mode(); + + return 0; +} +int ToRosData(ControlLoop input, kortex_actuator_driver::ControlLoop &output) +{ + output.control_loop = input.control_loop(); + + return 0; +} +int ToRosData(LoopSelection input, kortex_actuator_driver::LoopSelection &output) +{ + output.loop_selection = input.loop_selection(); + + return 0; +} +int ToRosData(VectorDriveParameters input, kortex_actuator_driver::VectorDriveParameters &output) +{ + output.kpq = input.kpq(); + output.kiq = input.kiq(); + output.kpd = input.kpd(); + output.kid = input.kid(); + + return 0; +} +int ToRosData(EncoderDerivativeParameters input, kortex_actuator_driver::EncoderDerivativeParameters &output) +{ + output.max_window_width = input.max_window_width(); + output.min_encoder_tick_count = input.min_encoder_tick_count(); + + return 0; +} +int ToRosData(ControlLoopParameters input, kortex_actuator_driver::ControlLoopParameters &output) +{ + output.loop_selection = input.loop_selection(); + output.error_saturation = input.error_saturation(); + output.output_saturation = input.output_saturation(); + + output.kAz.clear(); + for(int i = 0; i < input.kaz_size(); i++) + { + output.kAz.push_back(input.kaz(i)); + } + + output.kBz.clear(); + for(int i = 0; i < input.kbz_size(); i++) + { + output.kBz.push_back(input.kbz(i)); + } + + return 0; +} +int ToRosData(FrequencyResponse input, kortex_actuator_driver::FrequencyResponse &output) +{ + output.loop_selection = input.loop_selection(); + output.min_frequency = input.min_frequency(); + output.max_frequency = input.max_frequency(); + output.amplitude = input.amplitude(); + output.duration = input.duration(); + + return 0; +} +int ToRosData(StepResponse input, kortex_actuator_driver::StepResponse &output) +{ + output.loop_selection = input.loop_selection(); + output.amplitude = input.amplitude(); + output.step_delay = input.step_delay(); + output.duration = input.duration(); + + return 0; +} +int ToRosData(RampResponse input, kortex_actuator_driver::RampResponse &output) +{ + output.loop_selection = input.loop_selection(); + output.slope = input.slope(); + output.ramp_delay = input.ramp_delay(); + output.duration = input.duration(); + + return 0; +} +int ToRosData(CustomDataSelection input, kortex_actuator_driver::CustomDataSelection &output) +{ + + output.channel.clear(); + for(int i = 0; i < input.channel_size(); i++) + { + output.channel.push_back(input.channel(i)); + } + + return 0; +} +int ToRosData(CommandModeInformation input, kortex_actuator_driver::CommandModeInformation &output) +{ + output.command_mode = input.command_mode(); + + return 0; +} +int ToRosData(Servoing input, kortex_actuator_driver::Servoing &output) +{ + output.enabled = input.enabled(); + + return 0; +} +int ToRosData(PositionCommand input, kortex_actuator_driver::PositionCommand &output) +{ + output.position = input.position(); + output.velocity = input.velocity(); + output.acceleration = input.acceleration(); + + return 0; +} diff --git a/kortex_actuator_driver/src/actuatorconfig_ros_converter.h b/kortex_actuator_driver/src/actuatorconfig_ros_converter.h new file mode 100644 index 00000000..39f37707 --- /dev/null +++ b/kortex_actuator_driver/src/actuatorconfig_ros_converter.h @@ -0,0 +1,82 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ActuatorConfigROS_CONVERTER_H_ +#define _KORTEX_ActuatorConfigROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_actuator_driver/AxisPosition.h" +#include "kortex_actuator_driver/AxisOffsets.h" +#include "kortex_actuator_driver/TorqueCalibration.h" +#include "kortex_actuator_driver/TorqueOffset.h" +#include "kortex_actuator_driver/ControlModeInformation.h" +#include "kortex_actuator_driver/ControlLoop.h" +#include "kortex_actuator_driver/LoopSelection.h" +#include "kortex_actuator_driver/VectorDriveParameters.h" +#include "kortex_actuator_driver/EncoderDerivativeParameters.h" +#include "kortex_actuator_driver/ControlLoopParameters.h" +#include "kortex_actuator_driver/FrequencyResponse.h" +#include "kortex_actuator_driver/StepResponse.h" +#include "kortex_actuator_driver/RampResponse.h" +#include "kortex_actuator_driver/CustomDataSelection.h" +#include "kortex_actuator_driver/CommandModeInformation.h" +#include "kortex_actuator_driver/Servoing.h" +#include "kortex_actuator_driver/PositionCommand.h" + + +using namespace Kinova::Api::ActuatorConfig; + +int ToRosData(AxisPosition input, kortex_actuator_driver::AxisPosition &output); +int ToRosData(AxisOffsets input, kortex_actuator_driver::AxisOffsets &output); +int ToRosData(TorqueCalibration input, kortex_actuator_driver::TorqueCalibration &output); +int ToRosData(TorqueOffset input, kortex_actuator_driver::TorqueOffset &output); +int ToRosData(ControlModeInformation input, kortex_actuator_driver::ControlModeInformation &output); +int ToRosData(ControlLoop input, kortex_actuator_driver::ControlLoop &output); +int ToRosData(LoopSelection input, kortex_actuator_driver::LoopSelection &output); +int ToRosData(VectorDriveParameters input, kortex_actuator_driver::VectorDriveParameters &output); +int ToRosData(EncoderDerivativeParameters input, kortex_actuator_driver::EncoderDerivativeParameters &output); +int ToRosData(ControlLoopParameters input, kortex_actuator_driver::ControlLoopParameters &output); +int ToRosData(FrequencyResponse input, kortex_actuator_driver::FrequencyResponse &output); +int ToRosData(StepResponse input, kortex_actuator_driver::StepResponse &output); +int ToRosData(RampResponse input, kortex_actuator_driver::RampResponse &output); +int ToRosData(CustomDataSelection input, kortex_actuator_driver::CustomDataSelection &output); +int ToRosData(CommandModeInformation input, kortex_actuator_driver::CommandModeInformation &output); +int ToRosData(Servoing input, kortex_actuator_driver::Servoing &output); +int ToRosData(PositionCommand input, kortex_actuator_driver::PositionCommand &output); + +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp b/kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp new file mode 100644 index 00000000..dbf2601d --- /dev/null +++ b/kortex_actuator_driver/src/actuatorcyclic_proto_converter.cpp @@ -0,0 +1,79 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "actuatorcyclic_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_actuator_driver::MessageId input, MessageId *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_actuator_driver::Command input, Command *output) +{ + ToProtoData(input.command_id, output->mutable_command_id()); + output->set_flags(input.flags); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_torque_joint(input.torque_joint); + output->set_current_motor(input.current_motor); + + return 0; +} +int ToProtoData(kortex_actuator_driver::Feedback input, Feedback *output) +{ + ToProtoData(input.feedback_id, output->mutable_feedback_id()); + output->set_status_flags(input.status_flags); + output->set_jitter_comm(input.jitter_comm); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_torque(input.torque); + output->set_current_motor(input.current_motor); + output->set_voltage(input.voltage); + output->set_temperature_motor(input.temperature_motor); + output->set_temperature_core(input.temperature_core); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + + return 0; +} +int ToProtoData(kortex_actuator_driver::CustomData input, CustomData *output) +{ + ToProtoData(input.custom_data_id, output->mutable_custom_data_id()); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->set_custom_data_8(input.custom_data_8); + output->set_custom_data_9(input.custom_data_9); + output->set_custom_data_10(input.custom_data_10); + output->set_custom_data_11(input.custom_data_11); + output->set_custom_data_12(input.custom_data_12); + output->set_custom_data_13(input.custom_data_13); + output->set_custom_data_14(input.custom_data_14); + output->set_custom_data_15(input.custom_data_15); + + return 0; +} diff --git a/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h b/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h new file mode 100644 index 00000000..ca58ab6f --- /dev/null +++ b/kortex_actuator_driver/src/actuatorcyclic_proto_converter.h @@ -0,0 +1,56 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ActuatorCyclicPROTO_CONVERTER_H_ +#define _KORTEX_ActuatorCyclicPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_actuator_driver/MessageId.h" +#include "kortex_actuator_driver/Command.h" +#include "kortex_actuator_driver/Feedback.h" +#include "kortex_actuator_driver/CustomData.h" + + +using namespace Kinova::Api::ActuatorCyclic; + +int ToProtoData(kortex_actuator_driver::MessageId intput, MessageId *output); +int ToProtoData(kortex_actuator_driver::Command intput, Command *output); +int ToProtoData(kortex_actuator_driver::Feedback intput, Feedback *output); +int ToProtoData(kortex_actuator_driver::CustomData intput, CustomData *output); + +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp b/kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp new file mode 100644 index 00000000..94228493 --- /dev/null +++ b/kortex_actuator_driver/src/actuatorcyclic_ros_converter.cpp @@ -0,0 +1,79 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "actuatorcyclic_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(MessageId input, kortex_actuator_driver::MessageId &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(Command input, kortex_actuator_driver::Command &output) +{ + ToRosData(input.command_id(), output.command_id); + output.flags = input.flags(); + output.position = input.position(); + output.velocity = input.velocity(); + output.torque_joint = input.torque_joint(); + output.current_motor = input.current_motor(); + + return 0; +} +int ToRosData(Feedback input, kortex_actuator_driver::Feedback &output) +{ + ToRosData(input.feedback_id(), output.feedback_id); + output.status_flags = input.status_flags(); + output.jitter_comm = input.jitter_comm(); + output.position = input.position(); + output.velocity = input.velocity(); + output.torque = input.torque(); + output.current_motor = input.current_motor(); + output.voltage = input.voltage(); + output.temperature_motor = input.temperature_motor(); + output.temperature_core = input.temperature_core(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + + return 0; +} +int ToRosData(CustomData input, kortex_actuator_driver::CustomData &output) +{ + ToRosData(input.custom_data_id(), output.custom_data_id); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.custom_data_8 = input.custom_data_8(); + output.custom_data_9 = input.custom_data_9(); + output.custom_data_10 = input.custom_data_10(); + output.custom_data_11 = input.custom_data_11(); + output.custom_data_12 = input.custom_data_12(); + output.custom_data_13 = input.custom_data_13(); + output.custom_data_14 = input.custom_data_14(); + output.custom_data_15 = input.custom_data_15(); + + return 0; +} diff --git a/kortex_actuator_driver/src/actuatorcyclic_ros_converter.h b/kortex_actuator_driver/src/actuatorcyclic_ros_converter.h new file mode 100644 index 00000000..b96bb569 --- /dev/null +++ b/kortex_actuator_driver/src/actuatorcyclic_ros_converter.h @@ -0,0 +1,56 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_ActuatorCyclicROS_CONVERTER_H_ +#define _KORTEX_ActuatorCyclicROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_actuator_driver/MessageId.h" +#include "kortex_actuator_driver/Command.h" +#include "kortex_actuator_driver/Feedback.h" +#include "kortex_actuator_driver/CustomData.h" + + +using namespace Kinova::Api::ActuatorCyclic; + +int ToRosData(MessageId input, kortex_actuator_driver::MessageId &output); +int ToRosData(Command input, kortex_actuator_driver::Command &output); +int ToRosData(Feedback input, kortex_actuator_driver::Feedback &output); +int ToRosData(CustomData input, kortex_actuator_driver::CustomData &output); + +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/common_proto_converter.cpp b/kortex_actuator_driver/src/common_proto_converter.cpp new file mode 100644 index 00000000..51241a2c --- /dev/null +++ b/kortex_actuator_driver/src/common_proto_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_actuator_driver::DeviceHandle input, DeviceHandle *output) +{ + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + output->set_device_identifier(input.device_identifier); + output->set_order(input.order); + + return 0; +} +int ToProtoData(kortex_actuator_driver::Empty input, Empty *output) +{ + + return 0; +} +int ToProtoData(kortex_actuator_driver::NotificationOptions input, NotificationOptions *output) +{ + output->set_type((Kinova::Api::Common::NotificationType)input.type); + output->set_rate_m_sec(input.rate_m_sec); + output->set_threshold_value(input.threshold_value); + + return 0; +} +int ToProtoData(kortex_actuator_driver::SafetyHandle input, SafetyHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_actuator_driver::NotificationHandle input, NotificationHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_actuator_driver::SafetyNotification input, SafetyNotification *output) +{ + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_actuator_driver::Timestamp input, Timestamp *output) +{ + output->set_sec(input.sec); + output->set_usec(input.usec); + + return 0; +} +int ToProtoData(kortex_actuator_driver::UserProfileHandle input, UserProfileHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_actuator_driver::Connection input, Connection *output) +{ + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_connection_information(input.connection_information); + output->set_connection_identifier(input.connection_identifier); + + return 0; +} diff --git a/kortex_actuator_driver/src/common_proto_converter.h b/kortex_actuator_driver/src/common_proto_converter.h new file mode 100644 index 00000000..4112a508 --- /dev/null +++ b/kortex_actuator_driver/src/common_proto_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ +#define _KORTEX_CommonPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_actuator_driver/DeviceHandle.h" +#include "kortex_actuator_driver/Empty.h" +#include "kortex_actuator_driver/NotificationOptions.h" +#include "kortex_actuator_driver/SafetyHandle.h" +#include "kortex_actuator_driver/NotificationHandle.h" +#include "kortex_actuator_driver/SafetyNotification.h" +#include "kortex_actuator_driver/Timestamp.h" +#include "kortex_actuator_driver/UserProfileHandle.h" +#include "kortex_actuator_driver/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToProtoData(kortex_actuator_driver::DeviceHandle intput, DeviceHandle *output); +int ToProtoData(kortex_actuator_driver::Empty intput, Empty *output); +int ToProtoData(kortex_actuator_driver::NotificationOptions intput, NotificationOptions *output); +int ToProtoData(kortex_actuator_driver::SafetyHandle intput, SafetyHandle *output); +int ToProtoData(kortex_actuator_driver::NotificationHandle intput, NotificationHandle *output); +int ToProtoData(kortex_actuator_driver::SafetyNotification intput, SafetyNotification *output); +int ToProtoData(kortex_actuator_driver::Timestamp intput, Timestamp *output); +int ToProtoData(kortex_actuator_driver::UserProfileHandle intput, UserProfileHandle *output); +int ToProtoData(kortex_actuator_driver::Connection intput, Connection *output); + +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/common_ros_converter.cpp b/kortex_actuator_driver/src/common_ros_converter.cpp new file mode 100644 index 00000000..57946201 --- /dev/null +++ b/kortex_actuator_driver/src/common_ros_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_ros_converter.h" + + +int ToRosData(DeviceHandle input, kortex_actuator_driver::DeviceHandle &output) +{ + output.device_type = input.device_type(); + output.device_identifier = input.device_identifier(); + output.order = input.order(); + + return 0; +} +int ToRosData(Empty input, kortex_actuator_driver::Empty &output) +{ + + return 0; +} +int ToRosData(NotificationOptions input, kortex_actuator_driver::NotificationOptions &output) +{ + output.type = input.type(); + output.rate_m_sec = input.rate_m_sec(); + output.threshold_value = input.threshold_value(); + + return 0; +} +int ToRosData(SafetyHandle input, kortex_actuator_driver::SafetyHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(NotificationHandle input, kortex_actuator_driver::NotificationHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(SafetyNotification input, kortex_actuator_driver::SafetyNotification &output) +{ + ToRosData(input.safety_handle(), output.safety_handle); + output.value = input.value(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(Timestamp input, kortex_actuator_driver::Timestamp &output) +{ + output.sec = input.sec(); + output.usec = input.usec(); + + return 0; +} +int ToRosData(UserProfileHandle input, kortex_actuator_driver::UserProfileHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(Connection input, kortex_actuator_driver::Connection &output) +{ + ToRosData(input.user_handle(), output.user_handle); + output.connection_information = input.connection_information(); + output.connection_identifier = input.connection_identifier(); + + return 0; +} diff --git a/kortex_actuator_driver/src/common_ros_converter.h b/kortex_actuator_driver/src/common_ros_converter.h new file mode 100644 index 00000000..505d5764 --- /dev/null +++ b/kortex_actuator_driver/src/common_ros_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonROS_CONVERTER_H_ +#define _KORTEX_CommonROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_actuator_driver/DeviceHandle.h" +#include "kortex_actuator_driver/Empty.h" +#include "kortex_actuator_driver/NotificationOptions.h" +#include "kortex_actuator_driver/SafetyHandle.h" +#include "kortex_actuator_driver/NotificationHandle.h" +#include "kortex_actuator_driver/SafetyNotification.h" +#include "kortex_actuator_driver/Timestamp.h" +#include "kortex_actuator_driver/UserProfileHandle.h" +#include "kortex_actuator_driver/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToRosData(DeviceHandle input, kortex_actuator_driver::DeviceHandle &output); +int ToRosData(Empty input, kortex_actuator_driver::Empty &output); +int ToRosData(NotificationOptions input, kortex_actuator_driver::NotificationOptions &output); +int ToRosData(SafetyHandle input, kortex_actuator_driver::SafetyHandle &output); +int ToRosData(NotificationHandle input, kortex_actuator_driver::NotificationHandle &output); +int ToRosData(SafetyNotification input, kortex_actuator_driver::SafetyNotification &output); +int ToRosData(Timestamp input, kortex_actuator_driver::Timestamp &output); +int ToRosData(UserProfileHandle input, kortex_actuator_driver::UserProfileHandle &output); +int ToRosData(Connection input, kortex_actuator_driver::Connection &output); + +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/src/main.cpp b/kortex_actuator_driver/src/main.cpp new file mode 100644 index 00000000..ef974c06 --- /dev/null +++ b/kortex_actuator_driver/src/main.cpp @@ -0,0 +1,180 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "math_util.h" + +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "Actuator_Services"); + + uint32_t cyclic_data_rate = 100; + uint32_t device_id = 0; + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 3) + { + stringstream tempId; + tempId << argv[3]; + tempId >> device_id; + + if(tempId.fail() || tempId.bad()) + { + ROS_INFO("ERROR - Bad device ID, shutting down the node..."); + ros::shutdown(); + return 0; + } + } + else if(argc > 2) + { + //Converting the second parameter(the cyclic rate) to an unsigned int variable. + stringstream tempRate; + tempRate << argv[2]; + tempRate >> cyclic_data_rate; + if(tempRate.fail() || tempRate.bad()) + { + ROS_INFO("ERROR - Bad error rate, shutting down the node..."); + ros::shutdown(); + return 0; + } + ROS_INFO("Connecting to IP = %s - node refresh rate = %s, device ID = %d", argv[1], argv[2], device_id); + } + else + { + ROS_INFO("You need to provide an IP adresse as the first parameter and optionnaly a second parameter to specify the cyclic \ + rate and a third parameter(optionnal) to specify a device ID. ex: rosrun package node 127.0.0.1 100 4"); + ros::shutdown(); + return 0; + } + + Actuator_Services services_object(argv[1], n, device_id); + + ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &Actuator_Services::SetDeviceID, &services_object); + ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &Actuator_Services::SetApiOptions, &services_object); + ros::ServiceServer serviceSetCyclicStatus = n.advertiseService("SetCyclicStatus", &Actuator_Services::SetCyclicStatus, &services_object); + ros::ServiceServer serviceGetCyclicStatus = n.advertiseService("GetCyclicStatus", &Actuator_Services::GetCyclicStatus, &services_object); + + ros::ServiceServer serviceGetAxisOffsets = n.advertiseService("GetAxisOffsets", &Actuator_Services::GetAxisOffsets, &services_object); + ros::ServiceServer serviceSetAxisOffsets = n.advertiseService("SetAxisOffsets", &Actuator_Services::SetAxisOffsets, &services_object); + ros::ServiceServer serviceReadTorqueCalibration = n.advertiseService("ReadTorqueCalibration", &Actuator_Services::ReadTorqueCalibration, &services_object); + ros::ServiceServer serviceWriteTorqueCalibration = n.advertiseService("WriteTorqueCalibration", &Actuator_Services::WriteTorqueCalibration, &services_object); + ros::ServiceServer serviceSetTorqueOffset = n.advertiseService("SetTorqueOffset", &Actuator_Services::SetTorqueOffset, &services_object); + ros::ServiceServer serviceGetControlMode = n.advertiseService("GetControlMode", &Actuator_Services::GetControlMode, &services_object); + ros::ServiceServer serviceSetControlMode = n.advertiseService("SetControlMode", &Actuator_Services::SetControlMode, &services_object); + ros::ServiceServer serviceGetActivatedControlLoop = n.advertiseService("GetActivatedControlLoop", &Actuator_Services::GetActivatedControlLoop, &services_object); + ros::ServiceServer serviceSetActivatedControlLoop = n.advertiseService("SetActivatedControlLoop", &Actuator_Services::SetActivatedControlLoop, &services_object); + ros::ServiceServer serviceGetVectorDriveParameters = n.advertiseService("GetVectorDriveParameters", &Actuator_Services::GetVectorDriveParameters, &services_object); + ros::ServiceServer serviceSetVectorDriveParameters = n.advertiseService("SetVectorDriveParameters", &Actuator_Services::SetVectorDriveParameters, &services_object); + ros::ServiceServer serviceGetEncoderDerivativeParameters = n.advertiseService("GetEncoderDerivativeParameters", &Actuator_Services::GetEncoderDerivativeParameters, &services_object); + ros::ServiceServer serviceSetEncoderDerivativeParameters = n.advertiseService("SetEncoderDerivativeParameters", &Actuator_Services::SetEncoderDerivativeParameters, &services_object); + ros::ServiceServer serviceGetControlLoopParameters = n.advertiseService("GetControlLoopParameters", &Actuator_Services::GetControlLoopParameters, &services_object); + ros::ServiceServer serviceSetControlLoopParameters = n.advertiseService("SetControlLoopParameters", &Actuator_Services::SetControlLoopParameters, &services_object); + ros::ServiceServer serviceStartFrequencyResponse = n.advertiseService("StartFrequencyResponse", &Actuator_Services::StartFrequencyResponse, &services_object); + ros::ServiceServer serviceStopFrequencyResponse = n.advertiseService("StopFrequencyResponse", &Actuator_Services::StopFrequencyResponse, &services_object); + ros::ServiceServer serviceStartStepResponse = n.advertiseService("StartStepResponse", &Actuator_Services::StartStepResponse, &services_object); + ros::ServiceServer serviceStopStepResponse = n.advertiseService("StopStepResponse", &Actuator_Services::StopStepResponse, &services_object); + ros::ServiceServer serviceStartRampResponse = n.advertiseService("StartRampResponse", &Actuator_Services::StartRampResponse, &services_object); + ros::ServiceServer serviceStopRampResponse = n.advertiseService("StopRampResponse", &Actuator_Services::StopRampResponse, &services_object); + ros::ServiceServer serviceSelectCustomData = n.advertiseService("SelectCustomData", &Actuator_Services::SelectCustomData, &services_object); + ros::ServiceServer serviceGetSelectedCustomData = n.advertiseService("GetSelectedCustomData", &Actuator_Services::GetSelectedCustomData, &services_object); + ros::ServiceServer serviceSetCommandMode = n.advertiseService("SetCommandMode", &Actuator_Services::SetCommandMode, &services_object); + ros::ServiceServer serviceClearFaults = n.advertiseService("ClearFaults", &Actuator_Services::ClearFaults, &services_object); + ros::ServiceServer serviceSetServoing = n.advertiseService("SetServoing", &Actuator_Services::SetServoing, &services_object); + ros::ServiceServer serviceMoveToPosition = n.advertiseService("MoveToPosition", &Actuator_Services::MoveToPosition, &services_object); + ros::ServiceServer serviceGetCommandMode = n.advertiseService("GetCommandMode", &Actuator_Services::GetCommandMode, &services_object); + ros::ServiceServer serviceGetServoing = n.advertiseService("GetServoing", &Actuator_Services::GetServoing, &services_object); + ros::ServiceServer serviceGetTorqueOffset = n.advertiseService("GetTorqueOffset", &Actuator_Services::GetTorqueOffset, &services_object); + ros::ServiceServer serviceRefresh = n.advertiseService("Refresh", &Actuator_Services::Refresh, &services_object); + ros::ServiceServer serviceRefreshCommand = n.advertiseService("RefreshCommand", &Actuator_Services::RefreshCommand, &services_object); + ros::ServiceServer serviceRefreshFeedback = n.advertiseService("RefreshFeedback", &Actuator_Services::RefreshFeedback, &services_object); + ros::ServiceServer serviceRefreshCustomData = n.advertiseService("RefreshCustomData", &Actuator_Services::RefreshCustomData, &services_object); + + + ROS_INFO("Node's services initialized correctly."); + + ros::Publisher pub_feedback = n.advertise("actuator_feedback", 1000); + ros::Publisher pub_joint_state = n.advertise("actuator_feedback/joint_state", 1000); + + kortex_actuator_driver::Feedback feedback; + kortex_actuator_driver::RefreshFeedback::Request req; + kortex_actuator_driver::RefreshFeedback::Response res; + + sensor_msgs::JointState joint_state; + + joint_state.position.resize(1); + joint_state.velocity.resize(1); + joint_state.effort.resize(1); + joint_state.name.resize(1); + + ros::Rate rate(cyclic_data_rate); // 100 hz + while (!ros::isShuttingDown()) + { + try + { + if(services_object.IsCyclicActive()) + { + services_object.RefreshFeedback(req, res); + + feedback.feedback_id = res.output.feedback_id; + + feedback.status_flags = res.output.status_flags; + feedback.jitter_comm = res.output.jitter_comm; + feedback.position = res.output.position; + feedback.velocity = res.output.velocity; + feedback.torque = res.output.torque; + feedback.current_motor = res.output.current_motor; + feedback.voltage = res.output.voltage; + feedback.temperature_motor = res.output.temperature_motor; + feedback.temperature_core = res.output.temperature_core; + feedback.fault_bank_a = res.output.fault_bank_a; + feedback.fault_bank_b = res.output.fault_bank_b; + feedback.warning_bank_a = res.output.warning_bank_a; + feedback.warning_bank_b = res.output.warning_bank_b; + + joint_state.header.stamp = ros::Time::now(); + joint_state.header.frame_id = std::to_string(res.output.feedback_id.identifier); + + joint_state.name[0] = "Actuator"; + joint_state.position[0] = TO_RAD(res.output.position); + joint_state.velocity[0] = TO_RAD(res.output.velocity); + joint_state.effort[0] = res.output.torque; + + pub_feedback.publish(feedback); + pub_joint_state.publish(joint_state); + } + } + + catch (KDetailedException& ex) + { + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + } + catch (std::runtime_error& ex2) + { + ROS_INFO("RUN TIME ERROR: %s\n", ex2.what()); + } + + ros::spinOnce(); + + rate.sleep(); + } + + return 1; +} \ No newline at end of file diff --git a/kortex_actuator_driver/src/node.cpp b/kortex_actuator_driver/src/node.cpp new file mode 100644 index 00000000..1b542590 --- /dev/null +++ b/kortex_actuator_driver/src/node.cpp @@ -0,0 +1,1009 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "common_ros_converter.h" +#include "common_proto_converter.h" +#include "actuatorconfig_ros_converter.h" +#include "actuatorconfig_proto_converter.h" +#include "actuatorcyclic_ros_converter.h" +#include "actuatorcyclic_proto_converter.h" +Actuator_Services::Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + m_CurrentDeviceID = device_id; + m_apiOptions.timeout_ms = 3000; + + m_actuatorconfig = new ActuatorConfig::ActuatorConfigClient(m_router); + m_actuatorcyclic = new ActuatorCyclic::ActuatorCyclicClient(m_router);//If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. + if(m_CurrentDeviceID != 0) + { + m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + } + + m_pub_Error = m_n.advertise("KortexError", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +bool Actuator_Services::SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res) +{ + if(m_CurrentDeviceID == 0) + { + auto sessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + sessionManager->CreateSession(createSessionInfo); + } + + m_CurrentDeviceID = req.device_id; +} + +bool Actuator_Services::SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res) +{ + m_apiOptions.timeout_ms = req.input.timeout_ms; + + return true; +} + +bool Actuator_Services::GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res) +{ + res.status.isActive = m_cyclicActive; +} + +bool Actuator_Services::SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res) +{ + m_cyclicActive = req.status.isActive; +} + +bool Actuator_Services::IsCyclicActive() +{ + return m_cyclicActive; +} + + + + +bool Actuator_Services::GetAxisOffsets(kortex_actuator_driver::GetAxisOffsets::Request &req, kortex_actuator_driver::GetAxisOffsets::Response &res) +{ + Empty input; + AxisOffsets output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetAxisOffsets(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetAxisOffsets(kortex_actuator_driver::SetAxisOffsets::Request &req, kortex_actuator_driver::SetAxisOffsets::Response &res) +{ + AxisPosition input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetAxisOffsets(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::ReadTorqueCalibration(kortex_actuator_driver::ReadTorqueCalibration::Request &req, kortex_actuator_driver::ReadTorqueCalibration::Response &res) +{ + Empty input; + TorqueCalibration output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->ReadTorqueCalibration(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::WriteTorqueCalibration(kortex_actuator_driver::WriteTorqueCalibration::Request &req, kortex_actuator_driver::WriteTorqueCalibration::Response &res) +{ + TorqueCalibration input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->WriteTorqueCalibration(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::SetTorqueOffset(kortex_actuator_driver::SetTorqueOffset::Request &req, kortex_actuator_driver::SetTorqueOffset::Response &res) +{ + TorqueOffset input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetTorqueOffset(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetControlMode(kortex_actuator_driver::GetControlMode::Request &req, kortex_actuator_driver::GetControlMode::Response &res) +{ + Empty input; + ControlModeInformation output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetControlMode(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetControlMode(kortex_actuator_driver::SetControlMode::Request &req, kortex_actuator_driver::SetControlMode::Response &res) +{ + ControlModeInformation input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetControlMode(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetActivatedControlLoop(kortex_actuator_driver::GetActivatedControlLoop::Request &req, kortex_actuator_driver::GetActivatedControlLoop::Response &res) +{ + Empty input; + ControlLoop output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetActivatedControlLoop(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetActivatedControlLoop(kortex_actuator_driver::SetActivatedControlLoop::Request &req, kortex_actuator_driver::SetActivatedControlLoop::Response &res) +{ + ControlLoop input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetActivatedControlLoop(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetVectorDriveParameters(kortex_actuator_driver::GetVectorDriveParameters::Request &req, kortex_actuator_driver::GetVectorDriveParameters::Response &res) +{ + Empty input; + VectorDriveParameters output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetVectorDriveParameters(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetVectorDriveParameters(kortex_actuator_driver::SetVectorDriveParameters::Request &req, kortex_actuator_driver::SetVectorDriveParameters::Response &res) +{ + VectorDriveParameters input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetVectorDriveParameters(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetEncoderDerivativeParameters(kortex_actuator_driver::GetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::GetEncoderDerivativeParameters::Response &res) +{ + Empty input; + EncoderDerivativeParameters output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetEncoderDerivativeParameters(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetEncoderDerivativeParameters(kortex_actuator_driver::SetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::SetEncoderDerivativeParameters::Response &res) +{ + EncoderDerivativeParameters input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetEncoderDerivativeParameters(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetControlLoopParameters(kortex_actuator_driver::GetControlLoopParameters::Request &req, kortex_actuator_driver::GetControlLoopParameters::Response &res) +{ + LoopSelection input; + ToProtoData(req.input, &input); + ControlLoopParameters output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetControlLoopParameters(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetControlLoopParameters(kortex_actuator_driver::SetControlLoopParameters::Request &req, kortex_actuator_driver::SetControlLoopParameters::Response &res) +{ + ControlLoopParameters input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetControlLoopParameters(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::StartFrequencyResponse(kortex_actuator_driver::StartFrequencyResponse::Request &req, kortex_actuator_driver::StartFrequencyResponse::Response &res) +{ + FrequencyResponse input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->StartFrequencyResponse(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::StopFrequencyResponse(kortex_actuator_driver::StopFrequencyResponse::Request &req, kortex_actuator_driver::StopFrequencyResponse::Response &res) +{ + Empty input; + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->StopFrequencyResponse(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::StartStepResponse(kortex_actuator_driver::StartStepResponse::Request &req, kortex_actuator_driver::StartStepResponse::Response &res) +{ + StepResponse input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->StartStepResponse(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::StopStepResponse(kortex_actuator_driver::StopStepResponse::Request &req, kortex_actuator_driver::StopStepResponse::Response &res) +{ + Empty input; + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->StopStepResponse(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::StartRampResponse(kortex_actuator_driver::StartRampResponse::Request &req, kortex_actuator_driver::StartRampResponse::Response &res) +{ + RampResponse input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->StartRampResponse(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::StopRampResponse(kortex_actuator_driver::StopRampResponse::Request &req, kortex_actuator_driver::StopRampResponse::Response &res) +{ + Empty input; + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->StopRampResponse(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::SelectCustomData(kortex_actuator_driver::SelectCustomData::Request &req, kortex_actuator_driver::SelectCustomData::Response &res) +{ + CustomDataSelection input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SelectCustomData(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetSelectedCustomData(kortex_actuator_driver::GetSelectedCustomData::Request &req, kortex_actuator_driver::GetSelectedCustomData::Response &res) +{ + Empty input; + CustomDataSelection output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetSelectedCustomData(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::SetCommandMode(kortex_actuator_driver::SetCommandMode::Request &req, kortex_actuator_driver::SetCommandMode::Response &res) +{ + CommandModeInformation input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetCommandMode(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::ClearFaults(kortex_actuator_driver::ClearFaults::Request &req, kortex_actuator_driver::ClearFaults::Response &res) +{ + Empty input; + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->ClearFaults(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::SetServoing(kortex_actuator_driver::SetServoing::Request &req, kortex_actuator_driver::SetServoing::Response &res) +{ + Servoing input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->SetServoing(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::MoveToPosition(kortex_actuator_driver::MoveToPosition::Request &req, kortex_actuator_driver::MoveToPosition::Response &res) +{ + PositionCommand input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorconfig->MoveToPosition(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::GetCommandMode(kortex_actuator_driver::GetCommandMode::Request &req, kortex_actuator_driver::GetCommandMode::Response &res) +{ + Empty input; + CommandModeInformation output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetCommandMode(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::GetServoing(kortex_actuator_driver::GetServoing::Request &req, kortex_actuator_driver::GetServoing::Response &res) +{ + Empty input; + Servoing output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetServoing(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::GetTorqueOffset(kortex_actuator_driver::GetTorqueOffset::Request &req, kortex_actuator_driver::GetTorqueOffset::Response &res) +{ + Empty input; + TorqueOffset output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorconfig->GetTorqueOffset(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + + +bool Actuator_Services::Refresh(kortex_actuator_driver::Refresh::Request &req, kortex_actuator_driver::Refresh::Response &res) +{ + Command input; + ToProtoData(req.input, &input); + Feedback output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorcyclic->Refresh(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::RefreshCommand(kortex_actuator_driver::RefreshCommand::Request &req, kortex_actuator_driver::RefreshCommand::Response &res) +{ + Command input; + ToProtoData(req.input, &input); + Empty output; + kortex_actuator_driver::KortexError result_error; + + try + { + m_actuatorcyclic->RefreshCommand(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool Actuator_Services::RefreshFeedback(kortex_actuator_driver::RefreshFeedback::Request &req, kortex_actuator_driver::RefreshFeedback::Response &res) +{ + MessageId input; + ToProtoData(req.input, &input); + Feedback output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorcyclic->RefreshFeedback(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool Actuator_Services::RefreshCustomData(kortex_actuator_driver::RefreshCustomData::Request &req, kortex_actuator_driver::RefreshCustomData::Response &res) +{ + MessageId input; + ToProtoData(req.input, &input); + CustomData output; + kortex_actuator_driver::KortexError result_error; + + try + { + output = m_actuatorcyclic->RefreshCustomData(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_actuator_driver/src/node.h b/kortex_actuator_driver/src/node.h new file mode 100644 index 00000000..6c743e23 --- /dev/null +++ b/kortex_actuator_driver/src/node.h @@ -0,0 +1,154 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_SERVICES_H_ +#define _KORTEX_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include "kortex_actuator_driver/GetAxisOffsets.h" +#include "kortex_actuator_driver/SetAxisOffsets.h" +#include "kortex_actuator_driver/ReadTorqueCalibration.h" +#include "kortex_actuator_driver/WriteTorqueCalibration.h" +#include "kortex_actuator_driver/SetTorqueOffset.h" +#include "kortex_actuator_driver/GetControlMode.h" +#include "kortex_actuator_driver/SetControlMode.h" +#include "kortex_actuator_driver/GetActivatedControlLoop.h" +#include "kortex_actuator_driver/SetActivatedControlLoop.h" +#include "kortex_actuator_driver/GetVectorDriveParameters.h" +#include "kortex_actuator_driver/SetVectorDriveParameters.h" +#include "kortex_actuator_driver/GetEncoderDerivativeParameters.h" +#include "kortex_actuator_driver/SetEncoderDerivativeParameters.h" +#include "kortex_actuator_driver/GetControlLoopParameters.h" +#include "kortex_actuator_driver/SetControlLoopParameters.h" +#include "kortex_actuator_driver/StartFrequencyResponse.h" +#include "kortex_actuator_driver/StopFrequencyResponse.h" +#include "kortex_actuator_driver/StartStepResponse.h" +#include "kortex_actuator_driver/StopStepResponse.h" +#include "kortex_actuator_driver/StartRampResponse.h" +#include "kortex_actuator_driver/StopRampResponse.h" +#include "kortex_actuator_driver/SelectCustomData.h" +#include "kortex_actuator_driver/GetSelectedCustomData.h" +#include "kortex_actuator_driver/SetCommandMode.h" +#include "kortex_actuator_driver/ClearFaults.h" +#include "kortex_actuator_driver/SetServoing.h" +#include "kortex_actuator_driver/MoveToPosition.h" +#include "kortex_actuator_driver/GetCommandMode.h" +#include "kortex_actuator_driver/GetServoing.h" +#include "kortex_actuator_driver/GetTorqueOffset.h" +#include "kortex_actuator_driver/Refresh.h" +#include "kortex_actuator_driver/RefreshCommand.h" +#include "kortex_actuator_driver/RefreshFeedback.h" +#include "kortex_actuator_driver/RefreshCustomData.h" +#include "kortex_actuator_driver/KortexError.h" +#include "kortex_actuator_driver/SetDeviceID.h" +#include "kortex_actuator_driver/SetApiOptions.h" +#include "kortex_actuator_driver/SetCyclicStatus.h" +#include "kortex_actuator_driver/GetCyclicStatus.h" +#include "kortex_actuator_driver/ApiOptions.h" +#include "kortex_actuator_driver/CyclicStatus.h" + +using namespace std; +using namespace Kinova::Api; +using namespace Kinova::Api::Common; +using namespace Kinova::Api::ActuatorConfig; +using namespace Kinova::Api::ActuatorCyclic; + +class Actuator_Services +{ + public: + Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); + bool SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res); + bool GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res); + bool SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res); + bool IsCyclicActive(); + + + bool GetAxisOffsets(kortex_actuator_driver::GetAxisOffsets::Request &req, kortex_actuator_driver::GetAxisOffsets::Response &res); + bool SetAxisOffsets(kortex_actuator_driver::SetAxisOffsets::Request &req, kortex_actuator_driver::SetAxisOffsets::Response &res); + bool ReadTorqueCalibration(kortex_actuator_driver::ReadTorqueCalibration::Request &req, kortex_actuator_driver::ReadTorqueCalibration::Response &res); + bool WriteTorqueCalibration(kortex_actuator_driver::WriteTorqueCalibration::Request &req, kortex_actuator_driver::WriteTorqueCalibration::Response &res); + bool SetTorqueOffset(kortex_actuator_driver::SetTorqueOffset::Request &req, kortex_actuator_driver::SetTorqueOffset::Response &res); + bool GetControlMode(kortex_actuator_driver::GetControlMode::Request &req, kortex_actuator_driver::GetControlMode::Response &res); + bool SetControlMode(kortex_actuator_driver::SetControlMode::Request &req, kortex_actuator_driver::SetControlMode::Response &res); + bool GetActivatedControlLoop(kortex_actuator_driver::GetActivatedControlLoop::Request &req, kortex_actuator_driver::GetActivatedControlLoop::Response &res); + bool SetActivatedControlLoop(kortex_actuator_driver::SetActivatedControlLoop::Request &req, kortex_actuator_driver::SetActivatedControlLoop::Response &res); + bool GetVectorDriveParameters(kortex_actuator_driver::GetVectorDriveParameters::Request &req, kortex_actuator_driver::GetVectorDriveParameters::Response &res); + bool SetVectorDriveParameters(kortex_actuator_driver::SetVectorDriveParameters::Request &req, kortex_actuator_driver::SetVectorDriveParameters::Response &res); + bool GetEncoderDerivativeParameters(kortex_actuator_driver::GetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::GetEncoderDerivativeParameters::Response &res); + bool SetEncoderDerivativeParameters(kortex_actuator_driver::SetEncoderDerivativeParameters::Request &req, kortex_actuator_driver::SetEncoderDerivativeParameters::Response &res); + bool GetControlLoopParameters(kortex_actuator_driver::GetControlLoopParameters::Request &req, kortex_actuator_driver::GetControlLoopParameters::Response &res); + bool SetControlLoopParameters(kortex_actuator_driver::SetControlLoopParameters::Request &req, kortex_actuator_driver::SetControlLoopParameters::Response &res); + bool StartFrequencyResponse(kortex_actuator_driver::StartFrequencyResponse::Request &req, kortex_actuator_driver::StartFrequencyResponse::Response &res); + bool StopFrequencyResponse(kortex_actuator_driver::StopFrequencyResponse::Request &req, kortex_actuator_driver::StopFrequencyResponse::Response &res); + bool StartStepResponse(kortex_actuator_driver::StartStepResponse::Request &req, kortex_actuator_driver::StartStepResponse::Response &res); + bool StopStepResponse(kortex_actuator_driver::StopStepResponse::Request &req, kortex_actuator_driver::StopStepResponse::Response &res); + bool StartRampResponse(kortex_actuator_driver::StartRampResponse::Request &req, kortex_actuator_driver::StartRampResponse::Response &res); + bool StopRampResponse(kortex_actuator_driver::StopRampResponse::Request &req, kortex_actuator_driver::StopRampResponse::Response &res); + bool SelectCustomData(kortex_actuator_driver::SelectCustomData::Request &req, kortex_actuator_driver::SelectCustomData::Response &res); + bool GetSelectedCustomData(kortex_actuator_driver::GetSelectedCustomData::Request &req, kortex_actuator_driver::GetSelectedCustomData::Response &res); + bool SetCommandMode(kortex_actuator_driver::SetCommandMode::Request &req, kortex_actuator_driver::SetCommandMode::Response &res); + bool ClearFaults(kortex_actuator_driver::ClearFaults::Request &req, kortex_actuator_driver::ClearFaults::Response &res); + bool SetServoing(kortex_actuator_driver::SetServoing::Request &req, kortex_actuator_driver::SetServoing::Response &res); + bool MoveToPosition(kortex_actuator_driver::MoveToPosition::Request &req, kortex_actuator_driver::MoveToPosition::Response &res); + bool GetCommandMode(kortex_actuator_driver::GetCommandMode::Request &req, kortex_actuator_driver::GetCommandMode::Response &res); + bool GetServoing(kortex_actuator_driver::GetServoing::Request &req, kortex_actuator_driver::GetServoing::Response &res); + bool GetTorqueOffset(kortex_actuator_driver::GetTorqueOffset::Request &req, kortex_actuator_driver::GetTorqueOffset::Response &res); + + bool Refresh(kortex_actuator_driver::Refresh::Request &req, kortex_actuator_driver::Refresh::Response &res); + bool RefreshCommand(kortex_actuator_driver::RefreshCommand::Request &req, kortex_actuator_driver::RefreshCommand::Response &res); + bool RefreshFeedback(kortex_actuator_driver::RefreshFeedback::Request &req, kortex_actuator_driver::RefreshFeedback::Response &res); + bool RefreshCustomData(kortex_actuator_driver::RefreshCustomData::Request &req, kortex_actuator_driver::RefreshCustomData::Response &res); + + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + + ActuatorConfigClient* m_actuatorconfig; + ActuatorCyclicClient* m_actuatorcyclic; + uint32_t m_CurrentDeviceID; + RouterClientSendOptions m_apiOptions; + + SessionManager* m_SessionManager; + bool m_cyclicActive = false; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; +}; +#endif diff --git a/kortex_actuator_driver/src/util/diagnostic.h b/kortex_actuator_driver/src/util/diagnostic.h new file mode 100644 index 00000000..f0199870 --- /dev/null +++ b/kortex_actuator_driver/src/util/diagnostic.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +struct kortex_error +{ + int error_code; + std::string description; +}; \ No newline at end of file diff --git a/kortex_actuator_driver/src/util/math_util.h b/kortex_actuator_driver/src/util/math_util.h new file mode 100644 index 00000000..bf935386 --- /dev/null +++ b/kortex_actuator_driver/src/util/math_util.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_actuator_driver/srv/ClearFaults.srv b/kortex_actuator_driver/srv/ClearFaults.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_actuator_driver/srv/ClearFaults.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetActivatedControlLoop.srv b/kortex_actuator_driver/srv/GetActivatedControlLoop.srv new file mode 100644 index 00000000..a19e2136 --- /dev/null +++ b/kortex_actuator_driver/srv/GetActivatedControlLoop.srv @@ -0,0 +1,3 @@ +Empty input +--- +ControlLoop output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetAxisOffsets.srv b/kortex_actuator_driver/srv/GetAxisOffsets.srv new file mode 100644 index 00000000..4735b95e --- /dev/null +++ b/kortex_actuator_driver/srv/GetAxisOffsets.srv @@ -0,0 +1,3 @@ +Empty input +--- +AxisOffsets output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetCommandMode.srv b/kortex_actuator_driver/srv/GetCommandMode.srv new file mode 100644 index 00000000..bdfef0a5 --- /dev/null +++ b/kortex_actuator_driver/srv/GetCommandMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +CommandModeInformation output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetControlLoopParameters.srv b/kortex_actuator_driver/srv/GetControlLoopParameters.srv new file mode 100644 index 00000000..d999a54e --- /dev/null +++ b/kortex_actuator_driver/srv/GetControlLoopParameters.srv @@ -0,0 +1,3 @@ +LoopSelection input +--- +ControlLoopParameters output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetControlMode.srv b/kortex_actuator_driver/srv/GetControlMode.srv new file mode 100644 index 00000000..6eb15fb1 --- /dev/null +++ b/kortex_actuator_driver/srv/GetControlMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +ControlModeInformation output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv b/kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv new file mode 100644 index 00000000..7815939b --- /dev/null +++ b/kortex_actuator_driver/srv/GetEncoderDerivativeParameters.srv @@ -0,0 +1,3 @@ +Empty input +--- +EncoderDerivativeParameters output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetSelectedCustomData.srv b/kortex_actuator_driver/srv/GetSelectedCustomData.srv new file mode 100644 index 00000000..cdc73093 --- /dev/null +++ b/kortex_actuator_driver/srv/GetSelectedCustomData.srv @@ -0,0 +1,3 @@ +Empty input +--- +CustomDataSelection output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetServoing.srv b/kortex_actuator_driver/srv/GetServoing.srv new file mode 100644 index 00000000..d4a6734b --- /dev/null +++ b/kortex_actuator_driver/srv/GetServoing.srv @@ -0,0 +1,3 @@ +Empty input +--- +Servoing output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetTorqueOffset.srv b/kortex_actuator_driver/srv/GetTorqueOffset.srv new file mode 100644 index 00000000..f8d55a75 --- /dev/null +++ b/kortex_actuator_driver/srv/GetTorqueOffset.srv @@ -0,0 +1,3 @@ +Empty input +--- +TorqueOffset output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/GetVectorDriveParameters.srv b/kortex_actuator_driver/srv/GetVectorDriveParameters.srv new file mode 100644 index 00000000..e6ea88c5 --- /dev/null +++ b/kortex_actuator_driver/srv/GetVectorDriveParameters.srv @@ -0,0 +1,3 @@ +Empty input +--- +VectorDriveParameters output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/MoveToPosition.srv b/kortex_actuator_driver/srv/MoveToPosition.srv new file mode 100644 index 00000000..bca986c7 --- /dev/null +++ b/kortex_actuator_driver/srv/MoveToPosition.srv @@ -0,0 +1,3 @@ +PositionCommand input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/ReadTorqueCalibration.srv b/kortex_actuator_driver/srv/ReadTorqueCalibration.srv new file mode 100644 index 00000000..45dec9f4 --- /dev/null +++ b/kortex_actuator_driver/srv/ReadTorqueCalibration.srv @@ -0,0 +1,3 @@ +Empty input +--- +TorqueCalibration output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/Refresh.srv b/kortex_actuator_driver/srv/Refresh.srv new file mode 100644 index 00000000..432de516 --- /dev/null +++ b/kortex_actuator_driver/srv/Refresh.srv @@ -0,0 +1,3 @@ +Command input +--- +Feedback output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/RefreshCommand.srv b/kortex_actuator_driver/srv/RefreshCommand.srv new file mode 100644 index 00000000..9bd2e9fc --- /dev/null +++ b/kortex_actuator_driver/srv/RefreshCommand.srv @@ -0,0 +1,3 @@ +Command input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/RefreshCustomData.srv b/kortex_actuator_driver/srv/RefreshCustomData.srv new file mode 100644 index 00000000..5822ae31 --- /dev/null +++ b/kortex_actuator_driver/srv/RefreshCustomData.srv @@ -0,0 +1,3 @@ +MessageId input +--- +CustomData output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/RefreshFeedback.srv b/kortex_actuator_driver/srv/RefreshFeedback.srv new file mode 100644 index 00000000..f850c63d --- /dev/null +++ b/kortex_actuator_driver/srv/RefreshFeedback.srv @@ -0,0 +1,3 @@ +MessageId input +--- +Feedback output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SelectCustomData.srv b/kortex_actuator_driver/srv/SelectCustomData.srv new file mode 100644 index 00000000..0bf1dfab --- /dev/null +++ b/kortex_actuator_driver/srv/SelectCustomData.srv @@ -0,0 +1,3 @@ +CustomDataSelection input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetActivatedControlLoop.srv b/kortex_actuator_driver/srv/SetActivatedControlLoop.srv new file mode 100644 index 00000000..14dbadcd --- /dev/null +++ b/kortex_actuator_driver/srv/SetActivatedControlLoop.srv @@ -0,0 +1,3 @@ +ControlLoop input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetAxisOffsets.srv b/kortex_actuator_driver/srv/SetAxisOffsets.srv new file mode 100644 index 00000000..00602436 --- /dev/null +++ b/kortex_actuator_driver/srv/SetAxisOffsets.srv @@ -0,0 +1,3 @@ +AxisPosition input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetCommandMode.srv b/kortex_actuator_driver/srv/SetCommandMode.srv new file mode 100644 index 00000000..9ba28a53 --- /dev/null +++ b/kortex_actuator_driver/srv/SetCommandMode.srv @@ -0,0 +1,3 @@ +CommandModeInformation input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetControlLoopParameters.srv b/kortex_actuator_driver/srv/SetControlLoopParameters.srv new file mode 100644 index 00000000..8f7419af --- /dev/null +++ b/kortex_actuator_driver/srv/SetControlLoopParameters.srv @@ -0,0 +1,3 @@ +ControlLoopParameters input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetControlMode.srv b/kortex_actuator_driver/srv/SetControlMode.srv new file mode 100644 index 00000000..d5a258a6 --- /dev/null +++ b/kortex_actuator_driver/srv/SetControlMode.srv @@ -0,0 +1,3 @@ +ControlModeInformation input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv b/kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv new file mode 100644 index 00000000..d6d6530d --- /dev/null +++ b/kortex_actuator_driver/srv/SetEncoderDerivativeParameters.srv @@ -0,0 +1,3 @@ +EncoderDerivativeParameters input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetServoing.srv b/kortex_actuator_driver/srv/SetServoing.srv new file mode 100644 index 00000000..3eb88018 --- /dev/null +++ b/kortex_actuator_driver/srv/SetServoing.srv @@ -0,0 +1,3 @@ +Servoing input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetTorqueOffset.srv b/kortex_actuator_driver/srv/SetTorqueOffset.srv new file mode 100644 index 00000000..6f2857b9 --- /dev/null +++ b/kortex_actuator_driver/srv/SetTorqueOffset.srv @@ -0,0 +1,3 @@ +TorqueOffset input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/SetVectorDriveParameters.srv b/kortex_actuator_driver/srv/SetVectorDriveParameters.srv new file mode 100644 index 00000000..68aba166 --- /dev/null +++ b/kortex_actuator_driver/srv/SetVectorDriveParameters.srv @@ -0,0 +1,3 @@ +VectorDriveParameters input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StartFrequencyResponse.srv b/kortex_actuator_driver/srv/StartFrequencyResponse.srv new file mode 100644 index 00000000..38761145 --- /dev/null +++ b/kortex_actuator_driver/srv/StartFrequencyResponse.srv @@ -0,0 +1,3 @@ +FrequencyResponse input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StartRampResponse.srv b/kortex_actuator_driver/srv/StartRampResponse.srv new file mode 100644 index 00000000..246d7fa3 --- /dev/null +++ b/kortex_actuator_driver/srv/StartRampResponse.srv @@ -0,0 +1,3 @@ +RampResponse input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StartStepResponse.srv b/kortex_actuator_driver/srv/StartStepResponse.srv new file mode 100644 index 00000000..d5f063e6 --- /dev/null +++ b/kortex_actuator_driver/srv/StartStepResponse.srv @@ -0,0 +1,3 @@ +StepResponse input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StopFrequencyResponse.srv b/kortex_actuator_driver/srv/StopFrequencyResponse.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_actuator_driver/srv/StopFrequencyResponse.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StopRampResponse.srv b/kortex_actuator_driver/srv/StopRampResponse.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_actuator_driver/srv/StopRampResponse.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/StopStepResponse.srv b/kortex_actuator_driver/srv/StopStepResponse.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_actuator_driver/srv/StopStepResponse.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/WriteTorqueCalibration.srv b/kortex_actuator_driver/srv/WriteTorqueCalibration.srv new file mode 100644 index 00000000..cf4dac5d --- /dev/null +++ b/kortex_actuator_driver/srv/WriteTorqueCalibration.srv @@ -0,0 +1,3 @@ +TorqueCalibration input +--- +Empty output \ No newline at end of file diff --git a/kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv b/kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv new file mode 100644 index 00000000..2ec06d8c --- /dev/null +++ b/kortex_actuator_driver/srv/non_generated/GetCyclicStatus.srv @@ -0,0 +1,2 @@ +--- +CyclicStatus status \ No newline at end of file diff --git a/kortex_actuator_driver/srv/non_generated/SetApiOptions.srv b/kortex_actuator_driver/srv/non_generated/SetApiOptions.srv new file mode 100644 index 00000000..cab7c810 --- /dev/null +++ b/kortex_actuator_driver/srv/non_generated/SetApiOptions.srv @@ -0,0 +1,3 @@ +ApiOptions input +--- + diff --git a/kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv b/kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv new file mode 100644 index 00000000..05417e2c --- /dev/null +++ b/kortex_actuator_driver/srv/non_generated/SetCyclicStatus.srv @@ -0,0 +1,2 @@ +CyclicStatus status +--- \ No newline at end of file diff --git a/kortex_actuator_driver/srv/non_generated/SetDeviceID.srv b/kortex_actuator_driver/srv/non_generated/SetDeviceID.srv new file mode 100644 index 00000000..396957c5 --- /dev/null +++ b/kortex_actuator_driver/srv/non_generated/SetDeviceID.srv @@ -0,0 +1,2 @@ +uint32 device_id +--- diff --git a/kortex_actuator_driver/templates/NodeServices.cpp.jinja2 b/kortex_actuator_driver/templates/NodeServices.cpp.jinja2 new file mode 100644 index 00000000..9105fde0 --- /dev/null +++ b/kortex_actuator_driver/templates/NodeServices.cpp.jinja2 @@ -0,0 +1,167 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +{% for package in detailedPackages %} +{%- if package.HasMessage == 1 -%} +#include "{{package.filename|lower}}_ros_converter.h" +#include "{{package.filename|lower}}_proto_converter.h" +{%- endif %} +{% endfor -%} + +Actuator_Services::Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + m_CurrentDeviceID = device_id; + m_apiOptions.timeout_ms = 3000; +{% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); + {%- endif -%} +{% endfor -%} + //If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. + if(m_CurrentDeviceID != 0) + { + m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + } + + m_pub_Error = m_n.advertise("KortexError", 1000); +{%- for package in detailedPackages -%} +{%- for method in package.service.method -%} +{%- if 'Topic' in method.name %} + m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); +{%- endif -%} +{%- endfor -%} +{%- endfor -%} + + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +bool Actuator_Services::SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res) +{ + if(m_CurrentDeviceID == 0) + { + auto sessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + sessionManager->CreateSession(createSessionInfo); + } + + m_CurrentDeviceID = req.device_id; +} + +bool Actuator_Services::SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res) +{ + m_apiOptions.timeout_ms = req.input.timeout_ms; + + return true; +} + +bool Actuator_Services::GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res) +{ + res.status.isActive = m_cyclicActive; +} + +bool Actuator_Services::SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res) +{ + m_cyclicActive = req.status.isActive; +} + +bool Actuator_Services::IsCyclicActive() +{ + return m_cyclicActive; +} + +{% for package in detailedPackages %} +{% for method in package.service.method %} +{%- if 'Topic' in method.name %} +bool Actuator_Services::OnNotification{{method.name}}(kortex_actuator_driver::{{method.name}}::Request &req, kortex_actuator_driver::{{method.name}}::Response &res) +{%- else %} +bool Actuator_Services::{{method.name}}(kortex_actuator_driver::{{method.name}}::Request &req, kortex_actuator_driver::{{method.name}}::Response &res) +{%- endif %} +{ + {%- set splitInputTypeName = method.input_type.split('.') -%} + {% set splitOutputTypeName = method.output_type.split('.') %} + {{splitInputTypeName[4]}} input; + {%- if not method.input_type.split('.')[4] == "Empty" %} + ToProtoData(req.input, &input); + {%- endif %} + {{splitOutputTypeName[4]}} output; + kortex_actuator_driver::KortexError result_error; + + try + { + {%- if not method.output_type.split('.')[4] == "Empty" %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + {%- if 'Topic' in method.name %} + std::function< void ({{package.name}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&BaseServices::cb_{{method.name}}, this, std::placeholders::_1); + output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- else %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); + {%- else %} + m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- endif %} + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + {%- if not method.output_type.split('.')[4] == "Empty" %} + ToRosData(output, res.output); + {%- endif %} + return true; +} +{%- if 'Topic' in method.name %} +void Actuator_Services::cb_{{method.name}}({{package.name}}::{{method.name|replace("Topic", "")}}Notification notif) +{ + kortex_actuator_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; + ToRosData(notif, ros_msg); + m_pub_{{method.name}}.publish(ros_msg); +} +{%- endif %} +{% endfor -%} +{% endfor -%} \ No newline at end of file diff --git a/kortex_actuator_driver/templates/NodeServices.h.jinja2 b/kortex_actuator_driver/templates/NodeServices.h.jinja2 new file mode 100644 index 00000000..1b7ca737 --- /dev/null +++ b/kortex_actuator_driver/templates/NodeServices.h.jinja2 @@ -0,0 +1,113 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{packageName}}SERVICES_H_ +#define _KORTEX_{{packageName}}SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +{%- for package in detailedPackages %} +#include <{{package.filename}}.pb.h> +{%- endfor %} + +#include +#include + +#include +#include + +{%- for package in detailedPackages %} +{%- if package.HasRPC == 1 %} +#include <{{package.name}}ClientRpc.h> +{%- endif %} +{%- endfor %} +#include +#include + +{%- for package in detailedPackages %} +{%- for method in package.service.method %} +#include "kortex_actuator_driver/{{method.name}}.h" +{%- endfor %} +{%- endfor %} +#include "kortex_actuator_driver/KortexError.h" +#include "kortex_actuator_driver/SetDeviceID.h" +#include "kortex_actuator_driver/SetApiOptions.h" +#include "kortex_actuator_driver/SetCyclicStatus.h" +#include "kortex_actuator_driver/GetCyclicStatus.h" +#include "kortex_actuator_driver/ApiOptions.h" +#include "kortex_actuator_driver/CyclicStatus.h" + +using namespace std; +using namespace Kinova::Api; +{%- for package in detailedPackages %} +using namespace {{package.namespace}}; +{%- endfor %} + +class Actuator_Services +{ + public: + Actuator_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); + bool SetDeviceID(kortex_actuator_driver::SetDeviceID::Request &req, kortex_actuator_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_actuator_driver::SetApiOptions::Request &req, kortex_actuator_driver::SetApiOptions::Response &res); + bool GetCyclicStatus(kortex_actuator_driver::GetCyclicStatus::Request &req, kortex_actuator_driver::GetCyclicStatus::Response &res); + bool SetCyclicStatus(kortex_actuator_driver::SetCyclicStatus::Request &req, kortex_actuator_driver::SetCyclicStatus::Response &res); + bool IsCyclicActive(); +{% for package in detailedPackages %} +{%- for method in package.service.method %} +{%- if 'Topic' in method.name %} + bool OnNotification{{method.name}}(kortex_actuator_driver::{{method.name}}::Request &req, kortex_actuator_driver::{{method.name}}::Response &res); + void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); +{%- else %} + bool {{method.name}}(kortex_actuator_driver::{{method.name}}::Request &req, kortex_actuator_driver::{{method.name}}::Response &res); +{%- endif %} +{%- endfor %} +{% endfor %} + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + {% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + {{package.name}}Client* m_{{package.name|lower}}; + {%- endif -%} + {% endfor %} + uint32_t m_CurrentDeviceID; + RouterClientSendOptions m_apiOptions; + + SessionManager* m_SessionManager; + bool m_cyclicActive = false; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + {%- for package in detailedPackages %} + {%- for method in package.service.method %} + {%- if 'Topic' in method.name %} + ros::Publisher m_pub_{{method.name}}; + {%- endif %} + {%- endfor %} + {%- endfor %} +}; +#endif + diff --git a/kortex_actuator_driver/templates/main.jinja2 b/kortex_actuator_driver/templates/main.jinja2 new file mode 100644 index 00000000..3accd393 --- /dev/null +++ b/kortex_actuator_driver/templates/main.jinja2 @@ -0,0 +1,148 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "math_util.h" + +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "Actuator_Services"); + + uint32_t cyclic_data_rate = 100; + uint32_t device_id = 0; + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 3) + { + stringstream tempId; + tempId << argv[3]; + tempId >> device_id; + + if(tempId.fail() || tempId.bad()) + { + ROS_INFO("ERROR - Bad device ID, shutting down the node..."); + ros::shutdown(); + return 0; + } + } + else if(argc > 2) + { + //Converting the second parameter(the cyclic rate) to an unsigned int variable. + stringstream tempRate; + tempRate << argv[2]; + tempRate >> cyclic_data_rate; + if(tempRate.fail() || tempRate.bad()) + { + ROS_INFO("ERROR - Bad error rate, shutting down the node..."); + ros::shutdown(); + return 0; + } + ROS_INFO("Connecting to IP = %s - node refresh rate = %s, device ID = %d", argv[1], argv[2], device_id); + } + else + { + ROS_INFO("You need to provide an IP adresse as the first parameter and optionnaly a second parameter to specify the cyclic \ + rate and a third parameter(optionnal) to specify a device ID. ex: rosrun package node 127.0.0.1 100 4"); + ros::shutdown(); + return 0; + } + + Actuator_Services services_object(argv[1], n, device_id); + + ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &Actuator_Services::SetDeviceID, &services_object); + ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &Actuator_Services::SetApiOptions, &services_object); + ros::ServiceServer serviceSetCyclicStatus = n.advertiseService("SetCyclicStatus", &Actuator_Services::SetCyclicStatus, &services_object); + ros::ServiceServer serviceGetCyclicStatus = n.advertiseService("GetCyclicStatus", &Actuator_Services::GetCyclicStatus, &services_object); + + {% for function in list_function -%} + ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &Actuator_Services::{{function}}, &services_object); + {% endfor %} + + ROS_INFO("Node's services initialized correctly."); + + ros::Publisher pub_feedback = n.advertise("actuator_feedback", 1000); + ros::Publisher pub_joint_state = n.advertise("actuator_feedback/joint_state", 1000); + + kortex_actuator_driver::Feedback feedback; + kortex_actuator_driver::RefreshFeedback::Request req; + kortex_actuator_driver::RefreshFeedback::Response res; + + sensor_msgs::JointState joint_state; + + joint_state.position.resize(1); + joint_state.velocity.resize(1); + joint_state.effort.resize(1); + joint_state.name.resize(1); + + ros::Rate rate(cyclic_data_rate); // 100 hz + while (!ros::isShuttingDown()) + { + try + { + if(services_object.IsCyclicActive()) + { + services_object.RefreshFeedback(req, res); + + feedback.feedback_id = res.output.feedback_id; + + feedback.status_flags = res.output.status_flags; + feedback.jitter_comm = res.output.jitter_comm; + feedback.position = res.output.position; + feedback.velocity = res.output.velocity; + feedback.torque = res.output.torque; + feedback.current_motor = res.output.current_motor; + feedback.voltage = res.output.voltage; + feedback.temperature_motor = res.output.temperature_motor; + feedback.temperature_core = res.output.temperature_core; + feedback.fault_bank_a = res.output.fault_bank_a; + feedback.fault_bank_b = res.output.fault_bank_b; + feedback.warning_bank_a = res.output.warning_bank_a; + feedback.warning_bank_b = res.output.warning_bank_b; + + joint_state.header.stamp = ros::Time::now(); + joint_state.header.frame_id = std::to_string(res.output.feedback_id.identifier); + + joint_state.name[0] = "Actuator"; + joint_state.position[0] = TO_RAD(res.output.position); + joint_state.velocity[0] = TO_RAD(res.output.velocity); + joint_state.effort[0] = res.output.torque; + + pub_feedback.publish(feedback); + pub_joint_state.publish(joint_state); + } + } + + catch (KDetailedException& ex) + { + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + } + catch (std::runtime_error& ex2) + { + ROS_INFO("RUN TIME ERROR: %s\n", ex2.what()); + } + + ros::spinOnce(); + + rate.sleep(); + } + + return 1; +} diff --git a/kortex_actuator_driver/templates/proto_converter.cpp.jinja2 b/kortex_actuator_driver/templates/proto_converter.cpp.jinja2 new file mode 100644 index 00000000..a2e26763 --- /dev/null +++ b/kortex_actuator_driver/templates/proto_converter.cpp.jinja2 @@ -0,0 +1,77 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentFilename|lower}}_proto_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_proto_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToProtoData(kortex_actuator_driver::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") -%} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {%- if field.type == 11 %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); + } + {%- else %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + output->add_{{field.name|lower}}(input.{{field.name}}[i]); + } + {% endif -%} + {% else -%} + {%- if field.type == 11 %} + ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); + {%- elif field.type == 14 %}{# ENUM #} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); + {%- elif field.type == 12 %} + output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); + {%- else %} + output->set_{{field.name}}(input.{{field.name}}); + {%- endif -%} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + + {% if detailed_message.HasOneOf == "true" %} + + {% for field in detailed_message.message.field %} + {%- if field.HasField("oneof_index") -%} + if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) + { + {% if field.type == 11 -%} + ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} + output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- else %} + output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- endif %} + } + {% endif %} + {%- endfor -%} + {% endif %} + + return 0; +} +{% endfor %} diff --git a/kortex_actuator_driver/templates/proto_converter.h.jinja2 b/kortex_actuator_driver/templates/proto_converter.h.jinja2 new file mode 100644 index 00000000..049cc9a2 --- /dev/null +++ b/kortex_actuator_driver/templates/proto_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_actuator_driver/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToProtoData(kortex_actuator_driver::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_converter.cpp.jinja2 b/kortex_actuator_driver/templates/ros_converter.cpp.jinja2 new file mode 100644 index 00000000..cdc873f7 --- /dev/null +++ b/kortex_actuator_driver/templates/ros_converter.cpp.jinja2 @@ -0,0 +1,86 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentFilename|lower}}_ros_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_ros_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_actuator_driver::{{detailed_message.message.name}} &output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") %} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {% if field.type == 11 %} + {%- set splitTypeName = field.type_name.split('.') -%} + output.{{field.name}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + gen3_actuator::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(i), temp); + output.{{field.name}}.push_back(temp); + } + {%- else %} + output.{{field.name}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); + } + {%- endif %} + {%- else %} + {%- if field.type == 11 %} + ToRosData(input.{{field.name}}(), output.{{field.name}}); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output.{{field.name}} = input.{{field.name}}(); + {%- elif field.type == 12 %} + output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); + {%- else %} + output.{{field.name}} = input.{{field.name}}(); + {%- endif %} + {%- endif %} + {%- endif %} + {%- endfor %} + + {% if detailed_message.HasOneOf == "true" %} + auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); + + switch(oneof_type) + { + {%- for field in detailed_message.message.field -%} + {%- if field.HasField("oneof_index") -%} + {%- set splitTypeName = field.type_name.split('.') %} + {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} + case {{detailed_message.message.name}}::k{{EnumName}}: + { + {%- if field.type == 11 %} + gen3_actuator::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(), temp); + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); + {%- elif field.type == 14 %} + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); + {% endif %} + break; + } + {% endif %} + {%- endfor %} + } + {% endif -%} + + return 0; +} +{% endfor %} diff --git a/kortex_actuator_driver/templates/ros_converter.h.jinja2 b/kortex_actuator_driver/templates/ros_converter.h.jinja2 new file mode 100644 index 00000000..254292c2 --- /dev/null +++ b/kortex_actuator_driver/templates/ros_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_actuator_driver/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_actuator_driver::{{detailed_message.message.name}} &output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_enum.jinja2 b/kortex_actuator_driver/templates/ros_enum.jinja2 new file mode 100644 index 00000000..164146fc --- /dev/null +++ b/kortex_actuator_driver/templates/ros_enum.jinja2 @@ -0,0 +1,3 @@ +{% for member in item.value %} +uint32 {{member.name}} = {{member.number}} +{% endfor %} diff --git a/kortex_actuator_driver/templates/ros_message.jinja2 b/kortex_actuator_driver/templates/ros_message.jinja2 new file mode 100644 index 00000000..167f685f --- /dev/null +++ b/kortex_actuator_driver/templates/ros_message.jinja2 @@ -0,0 +1,44 @@ +{%- for member in item.field -%} +{%- if not member.HasField("oneof_index") -%} +{%- if member.type == 9 %} {# TYPE_STRING #} +string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 12 %} {# TYPE_BYTES #} +uint8[] {{member.name}} +{%- elif member.type == 1 %} {# TYPE_DOUBLE #} +float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 7 %} {# TYPE_FIXED32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 6 %} {# TYPE_FIXED64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 2 %} {# TYPE_FLOAT #} +float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 5 %} {# TYPE_INT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 3 %} {# TYPE_INT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 17 %} {# TYPE_SINT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 18 %} {# TYPE_SINT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 13 %} {# TYPE_UINT32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 4 %} {# TYPE_UINT64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 14 -%} {# TYPE_ENUM #} +{% set list1 = member.type_name.split('.') %} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 8 %} {# TYPE_BOOL #} +bool {{member.name}} +{%- elif member.type == 11 %}{# TYPE MESSAGE #} +{% set list1 = member.type_name.split('.') %} +{{list1|last}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- if HasOneOf %} +{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} +{%- endif -%} \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_oneof.jinja2 b/kortex_actuator_driver/templates/ros_oneof.jinja2 new file mode 100644 index 00000000..4fac302a --- /dev/null +++ b/kortex_actuator_driver/templates/ros_oneof.jinja2 @@ -0,0 +1,9 @@ +{%- for member in item.field -%} +{% if member.HasField("oneof_index") %} +{% if member.type == 11 %} +{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} +{%- else -%} +uint32[] {{member.name}} +{%- endif -%} +{%- endif -%} +{% endfor %} \ No newline at end of file diff --git a/kortex_actuator_driver/templates/ros_service.jinja2 b/kortex_actuator_driver/templates/ros_service.jinja2 new file mode 100644 index 00000000..cc015cf8 --- /dev/null +++ b/kortex_actuator_driver/templates/ros_service.jinja2 @@ -0,0 +1,5 @@ +{% set split_input_type = item.input_type.split('.') %} +{%- set split_output_type = item.output_type.split('.') -%} +{{split_input_type[4]}} input +--- +{{split_output_type[4]}} output \ No newline at end of file diff --git a/kortex_api/include/.gitignore b/kortex_api/include/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/kortex_api/lib/.gitignore b/kortex_api/lib/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/kortex_api/readme.md b/kortex_api/readme.md new file mode 100644 index 00000000..681edf0b --- /dev/null +++ b/kortex_api/readme.md @@ -0,0 +1,39 @@ + +# Kortex API +This package contains all the files needed to use the c++ Kortex API which is used by all the driver nodes and the device manager. This package is mandatory because most of the other package refer to it. A more detailed documentation is available on the Kortex API [repository](https://github.com/Kinovarobotics/kortex). + + + +1. [Install Cpp Kortex Api & the needed dependencies](#install-cpp-kortex-api-the-needed-dependencies) +1. [Content](#content) + 1. [include](#include) + 1. [lib](#lib) + + + + +## Install Cpp Kortex Api & the needed dependencies + +> *Manual installation using downloaded archive:* +> + Download the archive via the [Kinova drive](https://drive.google.com/file/d/19zfCNlRUfNBbZoMW9LOpLjVrYOO2BwYb/view). +> + Uncompress the content of the archive and copy the content of /kortex_api/cpp/linux_x86/include/ and /kortex_api/cpp/linux_x86/lib/ respectively in kortex_api/include/ and kortex_api/lib/ . +> + Remove the folder /kortex_api/include/google/ + + + +## Content +The content of this package should not be deleted or changed. + +### include +Contains header files of the Kortex API. + +### lib +Contains binaries files of the Kortex API. diff --git a/kortex_description/CMakeLists.txt b/kortex_description/CMakeLists.txt new file mode 100644 index 00000000..bb671d14 --- /dev/null +++ b/kortex_description/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 2.8.3) + +project(kortex_description) + +find_package(catkin REQUIRED) + +catkin_package() + +find_package(roslaunch) + +foreach(dir config launch meshes urdf) + install(DIRECTORY ${dir}/ + DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir}) +endforeach(dir) diff --git a/kortex_description/config/joint_names_JACO3_URDF_V10.yaml b/kortex_description/config/joint_names_JACO3_URDF_V10.yaml new file mode 100644 index 00000000..39d5611d --- /dev/null +++ b/kortex_description/config/joint_names_JACO3_URDF_V10.yaml @@ -0,0 +1 @@ +controller_joint_names: ['Actuator1', 'Actuator2', 'Actuator3', 'Actuator4', 'Actuator5', 'Actuator6', 'Actuator7', ] diff --git a/kortex_description/launch/display.launch b/kortex_description/launch/display.launch new file mode 100644 index 00000000..c695a85d --- /dev/null +++ b/kortex_description/launch/display.launch @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/kortex_description/launch/gazebo.launch b/kortex_description/launch/gazebo.launch new file mode 100644 index 00000000..70ad31fa --- /dev/null +++ b/kortex_description/launch/gazebo.launch @@ -0,0 +1,20 @@ + + + + + + diff --git a/kortex_description/meshes/Bracelet_Link.STL b/kortex_description/meshes/Bracelet_Link.STL new file mode 100644 index 0000000000000000000000000000000000000000..e8a9f58e9fb27f5ea7f1850da7e76dd2d4382258 GIT binary patch literal 1164884 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Ⓢ| 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
=)|he)mKjM3$AbH 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 o!(0%0$ns~5NTnZ#!?z;Z4{ocpv&D?lnm_A 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

6z3|}bTKR>~eSv^3_-p1fMl2>^ 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%0D^}q5;!h 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 {>HAOA*nm!KU7nZe=UggC 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 literal 0 HcmV?d00001 diff --git a/kortex_description/meshes/EndEffector_Link.STL b/kortex_description/meshes/EndEffector_Link.STL new file mode 100644 index 0000000000000000000000000000000000000000..6dc3cfa9466a85796b24e7a507f7563f30ec0529 GIT binary patch literal 80 LcmZQzpe_Ia08jt{ literal 0 HcmV?d00001 diff --git a/kortex_description/meshes/ForeArm_Link.STL b/kortex_description/meshes/ForeArm_Link.STL new file mode 100644 index 0000000000000000000000000000000000000000..21ee2dbe07fdaf65b8870a5325b20a541c901b77 GIT binary patch literal 456284 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

vy#4)Pd;_xqju3x{``3p13ke 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

dt8l9DVvSYeAUwx%=iS; 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%0D^IW% zDrDG5%@e(Z2{*=4^F&Xu7V2HtNX>V>gb6oSQuAF;uokLU*htOWy@Uxj=Tq}`Pp}qh zQP@bWKfHtq=ettt4^OZbDofZf|CQm0!xAQ(4^FM4d|RxAY7#cg|5(@tOPFx61eIQV z)-u6bTqo8bG}7A&QhTE9E^1ndUe!N+eN7vl2uMrp>3P$u$_v+(I-K@QVb$d~$`_!w z>Fu z5v=9zn;}+KEh>+%e4x;*!=({Rn84G74HG$={A*45gTw!?aNf;>V+3ot=WmGa4eLhx zHNU;kqxqQ;OPIi@gbfope_7W!8n|?1;m5Ok#t7DOr0nKJ$ntRdgQLzWtK1juMHa}a{h7JmC--<-nnYSn-gOMYdJq}h&ka6(b1EJv~1t6 zOPM81Ao{?DiJWJR9}yjS-3t|;-q$cju$GHghS=uIkkMHthM*bL{41!&YO44$d$(kcjeG>cf=65yZ@Qf zG4sQl6Z0%#!aW-kIq?J!KCNp;o?wh%E%#&%fl<6q-yYi8Yc!n6kTFzq_;%D(b!3|Glemc8n$Py-;?=q1S9`1tdjEs1=7{OZ3 z^BJPCc+v0no|6$T8nT25=Yvh;gr~08<++S_>KMUV&Vw5Q(V+H+^D+_*LY6S$Vu^`S zk4VJ%wCDVcM4TAGS}qb*N3{d*o|loR7P5qi;N;yZF$YcLti14?(v(x5&pb0}WQ>Su z9kCn5S|M_i51p+~)3>->aO&TJ04Rtc7F5b3;h1%}cD+D`yE4a^JGB;qPu< zVy)g?CRhu{u;HIzUSh32L6$Hf&tGkrQ6jN6FR@lf2@|Y^W7zN`F_c)VBatOc$T(IT zX0%JJ4JFoQB-UbF`LJ&Evy&+w>GLJ)UMdm^EI!7+hQ%bBSqLqy;oksgxohhk2_uC z?s|f?uwFcD)LaLWB}~YZRRT{oZi5Nd!g}$rQFA>@mN4<^=BJf-p&3%H z&2>3h!o=c3-c;iG(PI+V!31kzy?EHDxxOe%m{|JqH%go~?Zku)CRhvW#luF;by8Wv z#8VrC5{L!Uem4I__M@E%*1~%6AZo7n$`U5Ny}7;;SDaEWVS@?Q!g}$rQFGl|mN2pY zjD|{lzhJQWPqn`eCRhvW#luF;^>XmtqZ$*eh4tcLqvrbUEMdaMlI`kb5;mBK zX^q;{5;juSp(ja<2u4i?@%;DuCTs*mNFL#}uwMM%UI$6439+Z=Q?J7ltcCUBVI%c< zcnK47-}HRy^Y8>~VZC_RNF7&R!h}43J)b(RJi%HrruBU4{O}ScWE|`H)cN5F*1~%6 zxQ^6$?j=mfeAM%)^V}1xh4tcLBh_Dd2@~R1^n9wn@&s#Py?EG2^}Aleg!soCh*ZDp z3Dy#yuS9D6@De7(&+GZr_~8lG!g}%ORcajc5+)>G>G{++=n2-sdhxK48qd9i33r?t z&ub9S!g}$rk(!ry3AgL6DK#(g1Z!cvc-TnIue^i__iR%0D^IW%){BRY)I8Bkm~dk( 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≦iV#=g8ZtsO|x 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
$ouLd1>J~ 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%0AOu>F5N(X+ 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 !umycKeC7iWU;T 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 literal 0 HcmV?d00001 diff --git a/kortex_description/meshes/HalfArm2_Link.STL b/kortex_description/meshes/HalfArm2_Link.STL new file mode 100644 index 0000000000000000000000000000000000000000..6d23022db8d0d8ef09a68c6537a58465c17ffcf3 GIT binary patch literal 489184 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 z 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

-HUbD@kapy0bPB4&q%KV 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 E|A|0Hvj6}9 literal 0 HcmV?d00001 diff --git a/kortex_description/meshes/Shoulder_Link.STL b/kortex_description/meshes/Shoulder_Link.STL new file mode 100644 index 0000000000000000000000000000000000000000..6cfaedc14198314e3a4a31931468312cd811054c GIT binary patch literal 476184 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 z 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�%lmz3;vz6B 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�iEf?@SGp1m~wB;GeZ3k15b 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 Ky*y&As{aqQXU?Ml literal 0 HcmV?d00001 diff --git a/kortex_description/meshes/Wrist1_Link.STL b/kortex_description/meshes/Wrist1_Link.STL new file mode 100644 index 0000000000000000000000000000000000000000..7ab8f92b9452c005dadadd460e149947b352272d GIT binary patch literal 546484 zcmb@PXIK^QqGqWz9S$sU+4=%|uy8GI1n`9?ixsds{Bz>&w9BWhK)<%`MoV3H#{DZSzB_eMQ zH&dZA&zIe#*2lPgtH>ay6fGZXYpo}@oka4jSJMc*77|;oGtx23WsR1kc3n7GY_5zbqVZ7|sfYdNp|DTPcvyh^hyje1Q^ z7cu|tek_G_+hYDLNiBx2+|ccfnLrB?a|))DhIyv^;jWNC)xPmr=$&c<{y?AwiT-c1 z&~*hOei2PifZ#ZcJ_e2cp8G3m&IKYiOm5*FvIQF9&++NSR-E^}h&I;oV9S5@=}Noq{vM?Mo_*VeZe2GkQ2i}Q^MX25+%_$uocf$2fvRd> zUFe~c2a?T%TamjJ2eoNhUM0|i#Gwr?H225-zlZ?^YxyoMa4Zvns%|-5>9(q$e-SnE z`1*Qunq5In11(61<425fp|9t^k~ZR?1&KjzTxgiCw>J7nQsLxxzEze+WFk<7W0xf9 zVrTBm8mR10@9Ndbtn_%ET0|`qolAE5sF}O=8`GAgbwg%UY&5=&mIjV}FK#>0A>SYW zVH|8T_xg^7`QOH?Y2dYxn0(rSj&I|mr6)-nJ8jrmzy3Y#u8=?#-mN5U{rY6*mu>Dl zt@D8do8mx=Rj&9ejV$Fa?~0kfa+gXtm3ctMP2R3q>WsNh8oQc*?<22B`m$BOh{Q%~ zcNKftUL(+ggrUn<(yQgPUqsUw*Mvw~U%M+zeXQP|CY#J9E#_l>&n5|*J}=3X4{r=P7>x=5f3OI?zp*L>VH zGjV^W8XPj=E-5iSLA!UX8%dHk+9WPsbWS7Cf`rYFTVzGCq+dDrJK~YJXs=76TDnM} zs>6fhWd8HxzX;otzKNxRN@>KG?l(xlzk4&?N&hPc$kfYce-TBF*H1iss-{Mu1=ADL zsC{!pV);g6GZCn&JmMg!IqTf7G;|y7lbY%}CaL-Ok##l6TJe=;8MtjONqPTK`~9uq z6cXM){TH$7Zl0tTFQ;T8Q03WX5E*kc3pMwm5qo@+`kmdP5okdoY12TGyO)LV_w!FG z`&!9Fpz6@N2vWk)=2sefUsp?dH1ecIpaqGE-P@CEiMGFpvuo^<_P$(_i9pqyNrj1P zF~?s-*Ewf)1y2akh|}XIn-&hpL7jM?7(V8S=}Kj1O*Q50Y15$`Ierm($C$*n3kU2` zOIMPnlq}QM^_OKzN$%a#?3`wEdzrj)xcvIR=e9eEIhW+r2+{JJz_cZ4k(ZQIc6y`T zY8ptOs%h$EQ-v#*yNci5FY(do=UP6{f`ph4f4}#;US8^yDd$sqd^BxHankNxEUON# z4v8nLcGCzfA53HKo5JKtD@*CxX4dU?0=;Z7kVmjW~7Toz*2c79<95UPWd;Hq(;i`7$-}7z@fopbDR0 zNjh76O5&nP3$?Ps9^hJS6Y1e}UAsfpS#32Q638>;a;0ClY8u zLRa2}o(t=xUFm-ls6sDOB+yIkInarEF32jY{UCa^B7qhpFn^Nt<-g~p-1?g521ual zXO|qbM#SD<`9K0KNMMPGcZGADSLIX4k+Z9{eBg{sBydi)b^3Yo>4$knClb#`=r`Pn zGta!xf`m_tTcpkEL@hl@`dzDqktWJM95Ie75flLId@NOk(`>KT4a;1u8$_El7Z5NRl zEz^Fb@zZHl?A9-(G7+f4IEo})n=*St$c{@|Oh%1t@o`YEJ`?9A^fG<4|5LGxP8(1OH~+2>71 zKAEF!k~A~xxY%W>4>J*{!uXsdwHbcS+jQ67QXjG`>zs6wBJ`=WssUzCqt zvc>=8BY)!50m* z_@YRliu(_;;EM)Yd{ML@!F?3@w=Y`rK->0GNMdTnh<4 z7mdi zVc9ZY7KzLJRX8&6*+lZYc-^n)AdV9}I;gkA5b;Vp4rg2#@AW$Z znQ>Q0@Mxs|cU-hZ9^d#pxx3vj zEF)T*VL^gNZuP$-!ncDuZ0|hN91+HAp^AIRdP{6sl3w0FwBhmNn%d~heRaLXyXRiN z-V&R>@9m@?+&|kdZ^?b#u2KtnoBdrLJ=a^-2Y7^DZ;8-ze_n5i+)L7~u?;tr@HfZX z@miRMNE}RPy1^2mM+*||dO7HSN9ap0pS3RVo%ybiKo#DtBq4zoB>0Me-m-=uN&hS7 zsNyRS`roS=@3&0%s^x6i?kU$F(e7!~fy^b?xho4tyv^fnVP{rpA z^6#~x;iu-5s-2!OH^{Ic!Pkvs%Sw|tE8_DS*)kL2GbGuvYQ^V1^8Z}(%CI28*T3XH zudCs;P{r5V0}uQaz3Bv8dy8s*<>kYh$|^jb2vs`h-K z1qnX?0Pl52*aWXx2QpShGb~8(wMqH+%IMjfv0gKJo72E+p$a``N%DVm$Ge{GSIuun zZ=0_P%a)a6KEKNF&L!!|kcZyIQ(tNXT9Dvt(DLu~^X${^dUvvYnu$OaUm2GzE8~)6 zdiKJ5?DsPoffgkAD!Kf7#l3wq>YZHhqDG(v2|kn2S#}gi(!a}gd55hv&!fBzR;-dh&? zXavq{_^eU3tiFpx_a%|uEn1h+2(%!<=b!TLS?ZmD81Ld&i)JEFg*7Wl{SPI0x9*WY zQ$CR3vts%8Y}=>rL2p}6*GvSeaHhw1i>$lq>2lc|#lfeRM_6P_ghlLqHk~c%wLF)( z_rYFZ@5t7HU^p+@>I6C*Bs$S*fhN9oi<2hQ8!0}O%+zg91lwOjVKoyTI>MhYoaWp^+5@J4ZZ5s(x z@o1#}&oN81Ac0XQ=RQd4CnTB|!J` zmL*P|G3P{rN1$a(csj?1gda`%%f_vmj;C9-4zU>uQx@T`eO5g#_l0M}*5S zu6+2Lw{}-}EmZNfDV=3)N|G9GOG&upP&PnaB|{4mm_JD>L0fyznx3)eE@Qmou|Az8 zB8cN7?-@E)_pWY#H`B<81dlE1e#b1Y2Nm;98*3PABNvpqmeV#{)AKwwH{$AH$E|ml#qRtylb@}`}n!BTqtg3SSyFj2t z0P4yaCZ~meNdxJc@1JOCGcwPLKnoI>Kk=@RK-I;r1GO|3ueZ**>LIE3d!e+G zlDFs_?f25bPKqTTJ$kt)Vj5^cLLNCqqa)rqSrKYYX=RezO}OrtcjlZgn&WCkpas*b z7G|!SPFt++3JFx{j+<+C@I>o0@P1px_SWuweYqUU$dvZlZ{5%wR(Him7|pV1!B(oq zEY&;>n6;Va_q(nAz7-Z{RfD|NOsYz4ed@}%RtnGN{-q^i8%098_s&D5y{lW-AQGs; z`WI^ubB?*ik`@WHAW=5OPs{nq>DKju1gfxZ#5B~onwrDwBkYy62lr{eyM4D;cw|`n zJ?2n0tNK6-5(}CpX~dx-4u2s~rTPzQ+N;y839Q?E+3#qo{Y&F0wgoXCXhGt1t*09O ze*QMAR)PeoRF7P}tNNyRD*`P@Oy6rJ{=H*OWIX3HmeV%{mTT8tzF`Hmy1esOmpFRwIrdh_NED=WJKhS5p<(wSZb$Pv%|}ElBu&Hb1oqZx>mm zfds15l?}CY<6bPbBGfTkwH%ysoVs<%uKgbDbA+lp57qzQJ#^TLKnoJB9y(~mwKWI- zLZC|B^`@qAuH$YiLW=M0saiHRa#P-3uC!78-K(CP^01?Mw7Xc;&8oGd1qtkr#kPwC zswO_}tM%ZGGo^tRB(Ogg)4=EMY*?aJ2OX z_-H5I6iTp7VE}Hj3p5UNl!yh9o}I^6|V|7OOO{y`Fs1 zLsQ*px0wF#wu=@drq&y$(YsTZShXu8P{r3*G$Q@KrB(!5khnkJ>;ZIp{Wk(t8Kus9 zC9$l~f<%kjv$VTb%8hztw(lc(K*m@9wj#dpNWpk+WQ^ zMl?vY?%}X*JICIY)$~?8uu-rrhTs} z4mUKmvq}RARN<&C<^wHA#3!84(#U-#t5q6EpbE!!F%2~iqn2pZ)~6}&wYA@Buf42~ zv-W#&^a-n0lGM~evlLD^K(pL4|8BkZAXV2w)GOuaqgW9*dfjN7pxt{1`!)ZMBPS9) z>zn)YgY8i-!}{VyzW{79^y@igt%_5&!*#K-I-?rV+(gSQCN;u3O^l zA&uC6ah+8fNTAA6vxi?<6KFxgQvXeAY_LiL2~=5HsOpi6tpqJdjIMM^%SSZZ_!k0I z=naZ#V9%iLdsN#}^-9Yr@5i*?Y9AvKXh9+@YKlfo`)u8dB7rL2gKI=)PX;YW3_mtZ zBPv$=!)TCkEmVD2*FpP#?U&a6mAbFb@(l9%xc0lF?|G`e&7uB(^rN#@Ik$LAOWa>k zb+@6a+PCI8-O5&!DEbX(bUbk}eH~Oa3JMFjUuAj8M?Kkar zK%R6f0xd|ytvCDBb)zJ!{)+Fn(W_}(vi(FKr2W*cs|)@@)g1-u|2K~LYLy0BkifLX zR)Peo(0>pKv>@@n^MM4aaO@J(Fb+5OoKxSureW#kp0mS<)Qn!V&*1k~Ik)t$ss#yu zXFIJ7f1XSG3xO&ub@8syg2Z|}5&&g)uOT8DMp8bVDRX?41}T^%8DaOrwsIuIlI<|{tg%%`!Rx#(JQrh1LRQ+$CL46ZJt*Nk{ zVid>s!xQcQ+mo#$cWA*V4#tDTd?10U>dSv>X>@j)Z|V@=y6;p?U4CPC_ltiaP=({JcvomaqTNDs8vm_0ZMTFp${x_iSa4YVLJJj_f4t-1ae0#(?0#L`6z64zRo(+J`1?SB)f!Zs!n*y~$* zRCUbA-PhcUzHDzj8lVLUUQc?pbTijE5~zB<#7sP?WbMOYj~u+xtTOC9t+p#IjX(A! z85Sh+EqBrWzig^?YsYJ$inkt(_~TQXVL{?vSu^pp>K~r-3<6cWX0`vTJ%(5xXhA}K zYr)dT{BHtPDW%PX>$RI!X`ls(>^^2>r^zB!GDBdpUv0#*OJC0hK%|86AHt=Y{U>xCRN!{5yuH9&6(i53UU z-f~JIW>r>5pb8@vVx42O-{s*aS#25lpYNg;fBx_521u;5G0%#6ok+5}E4&t}Ec24g zacZ<6VJKmqAfH7AIO8fZa+uRv%-=G6=&P!-tDS0gSaS*L*>8G2znDxwjYBP@6=OhbKVRBbWKsr5=V zT9Dv-g*BplXX_XM5~%v$Q3JFf(P>0yEe&IF>s1*fP=zrLu?DexihMkzUH8+ib@YFi z6I2;nF;_*3+_+#WQ!-B+u`bpaVi)4xp;VHSJ`4dIeGEt)+>M1Vj@3?s%=o42v?f1d+)-!rb+ui1#RXOwOigqX8 z%iAeDKBxWuW1Kp}f<*Rmx3&M*t^S9|b_Rhe-j8YjSJzv_vQkeSQt$nE{%i{08Lj>P zq_iiv(Jbcob)z6%{=Fhsd^eUG-Y1!V(eFKnoJ;8?Nfz>f2hUfds0s+{836 z=a{GbUgnlqEPtleaIhd@X+4?O?(kZu>Jk^H<>R%F_1Ya;kl=e$H6px-^-3HPsM=(= zMk6{GwIoW?ReM5)bbI^X5-Wl0##UUVj5V3 zBl-tuHCS<^Seqh&^^Ami=AGKwPrtO@O@#!iEZ#sV#hO4166rb3YZKK+|BXNuwqr3L zXhEV|@9tVYj@7qL0|`|9@8{!VV2l>id;G~&QQzBE%V&0?tHO7bYrj{Xv)-$Q79?!a z%n`_gbN@!5$`UEeHrSd#3liCm+h{qT-2QI_s{Z$Ljus?3wl1ut@gmK-XFvi~*h0k` z#Il-9muV$B;)AP#r7jX^L4xmR(dbQl-{Su!P_?jSZ!=NEnm`K@xGzUc0|`{!sU51N zan{>94YVMEJBP$HFs5tqAJkZHNB65*eH59!$*M0w3lbI|F7xUu5~#ZDWA@>^+gk6M zL<i$bHA4s4|Jv~c(x^}s2u_DldMB=EY8Zlyn^)5ZMAaRR4(+E4y?N(_Z zfvPR>W?$6xp7kz0v>;*eUNg_=kwDd<&#$$+TGC>N)m@ z(1HZ+*b`eK5~xzo*i+Nk<6ylL5a&+laa`FiX~dV|pRMi+ElAu6Hxs6VeLG*PX{8u8;U~@B$Xw5Nv;Ux$+N^u$yVYHx1&Qh#(zPquG_YQAM*>y<`>xP}#F*UX zR?;J%bs9*Z3d>NeL7X+FRWtV=5%0Afds;p+&mb*Nk!nFAYODDfQlzi0g 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

  • }<)qCzYGvvyhz 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 nTBTYsihCri6=yP;A2u@J?&cVTyT*LQaB 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
    6I3ll*m>-R&4-CJtG-iFThXbxhqYE!bbA%gk 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
      $Nd$p)p^;p#z z8?}o~d<6nsn~L&C(M|6oRj3yyq9YvGG_Tj1#W6nx6(kZ*QxddhHXk48qixG__H1(1 zQ(CueT?GPN*LP9kpR&d0K}&rE+5cu4#@9no_qsh4RFIgtYdcvNbl&JbL?0WNjkaI` znUA&6ZTkuYx_YeJPAs=|HpaBqN83fk-{_yBN;KnssDcU-Wj-t>-Mf|`F_-l5;FyLl z=-{HCT8Qspfk0P$(PA<`Y=v>&O?`B?di)J~$=8{tJB2H#AkkrO3c2&M8hNuzA5B~@ zI7#O$wx-o@jSvWQZQh?kJe2ds^m`pSaj0r8HM`w}=GcrC?_>utJoB5IL2wVTkMx?4|FP(dQ?TBvc#wqRnd>c8s2 zgNvHarMh%^Xo5hX>v=IJ`qw1$I|p$hrgRj$WR)rft)gI8#nR8c47rj1$2A+4lIRU`!!B+A-7B#u9+>8jD46aAh! zv$RoZ(uXtc1Oi=?-#j2^3M;B}hv}{8@oUxD)QOH#rFESZRFK$tJ&*ia6>nX*%kiE^e0+xMc><&X3Z|}eO!^f6;zNozmAd?-an5txTv>@ z$19Xzj>Csbl~;rc1iJPup`>fhZqt<-I?-&-C;GP61M-*WGEhO{`ReT?cS?uDf4=E$ zVt`8_m4bUql3%z$pli{}?PP`f1k;b+I#F%+HM+Re0kXN|2n7`+C~rkem)+y@b3=Ph zT>5gH{<7~Rg$)`d5a?1rEheTqRZWQ%bt1^Pk9MrEfRvset)PNLNt!~!_q!V_ozPpj z0N)LC2a?}QsPCdf(jCIgM&zTqXgp#-!7cU zKb=OE0uO1&-3bDLE{nlIB+FsW!47BjHZh@gBt60RAEwlusGx$xqJvK4`1iHSRbRrc!`}nL~r?*$Np19I-YGu+TBvC;HiIxxU7>_6KF=jW? z+pEV-%F|{8>PeQKNdkec9iQ$P(=V$&64hJL2kI?t{H&kGn5@YPDoAWA-``m1#f&}2 z_uxcY>rL93SGA??pG5*)4;%J3rdN39Gq8+KT38_c5 z0`*AmGMq@S*_)-u+RKl&St_U?;kn~4nWrpKBd+M{`T{!e^WkcE%0CuX6bN)xT=<79 zh`pp9Ii#<;U*Ehn+uYej9&)>mf(jCShkqprF4I+)SSL<&-tNh+l=YKmMz{$Cy2kQ* z?)FY)>VgLPuUeJs!YuvU$uFuJ6;zNIIpPiR8?!(ydr)twt60}$9;b%N6OZ@`1iE$> zzb4TEx$2ozeIBQ8jvY(c&|jWF!2#>^42Ow07zrI;p`Bxx7tp1r;Px!}EyWvoY$ipL)BSaOxc`T{=eY(q zaDhPAsEXT(`OP%-VKu$~$hfnfnzf0P`v*iSs375ZYB6a#si_)1PM`mH?6#Crvq|#l zE~5kjU4v5=6Td-|)YsefU*)@Z79D$VlpGiut)PO$-0T#xIm1!)oTty2R9TutJ*Fhc zgWie+y2cJoA>Rf^s-t)7QFu~=L3GT^D0zBDjDiXh7L9_)zkzn@%hLM1LF(=R+VF6q zT!M)Ny3SnaP9EMHpl-LRGB=Z|QBj_lKHvoSGzW ze;O+g=(6bPM5=rXR@>z3aeG@E1C2Z$EmyfRK|uwH03KP+t@hLO^0_{nady!?t?Giw za<4HWfv#%v#nfBpQAVHSWrMZwhFn_c)d860~)4 zvfOx7oIs!}XJM$(>Ubx$ZE1aMke(2v{SD|upKqC@V8ptxQ!9_GpS{UV+dxf>UgtZU zQ;)>B&}$PD6;zOj^hj#{L#{`d3k2k>spdPplkV#sm&Y4)gJ|RNJd;rG2Jl=gbjP3iPl8+k-WK@vA+yK9;(LIdy`&~k^-}qG^(1o!t zKNrWXH>=vX8Y$dbT0sQ~%nk5a{UP00z`yNe^B;SGKo`coe9zCE4(xiu3e(}mwG~v5 zz}x`O`_z-!6(=VWJ;YTY(1o$D!BG8>7t1@bSnbosQ$Ym@%nk4p1pYK;&o?eVvTPp_ z2y|iW%WM1Rx=h*nPqkmsRzU>`%nk4rrZsA^7mtmq~9Fd>z@`8+6LA%9_=r2!TKs#=iWF-^r)w zXp8yU$b?7*6(le>U@+W!zK?cU)J$_SMhgVGF!nVVX8l`F+s;{|x$YXPpn?SE2Kd@2 zvxW3+#g3ZS(O7{%7skE@!_?nX=!;D|wDj#06jYGF+yK89AR?RwM)%W_9486{x-j6`i|lhdPzq8`7+sDgT{5{%AD49y@%#f&5~JtYG|E{=geD z<7lLM`%irhV@AG%XGK+Jb)}K~tZXL*6(kxSc|iXC4Nzb8(C6-wV#~4d?uwi+zpFr? z3u8uuA$M0vHs(|l*+00af(jDLm*tU`KJMzOf%-bK+YY}eUF$1*M)ws6bYaZMSAPzD zODBzMDzi%i6jYE{mO#ns4fg8CGJ2MCsdoW=#7~VFnm0%w(1kH0Z>jfRqJ>fJa!q-d zf(jB5Gqw}@^rwk-(&MWs3n}&T>md7wMF<4CFlOZYqgW0tQ@WX)RezL%3KHL*EGCz8 z@=UgtdenD i*iRn0AW9(6g)t+KsY@-QohLSv_Y{m#P(k9v!4z`2>NeA<|E(4| zdwm97+@Pa8WA9jjKo`c02E)Eyu{7#dGx_V%SOpa%j&~0tqi3d@dK}c(u+-caLi-eS zly`m*33Or1$jex(&>GD>Q}F^ zn%m@L1>2?ZmVWLrsfFpFRMygNe#2ZS8kX~OIDfGc2v)0 z{Ky)^PB^cXstnjBqk;tHefdoFy9j31Cr_I2^O8WI3o{`+7v8Er%M809?Opm?Mg>^ILOYI`z;)=%bLpOfjE{o9oI}$Y%0C52HY!3;QdcXQ<`OJm1}y=DD_0 zP(cDS#r!;(>s8s9)#mckL;eDRF6^&(PG*1|+gEr`>anW3f(jCtDdxAC54U3eN6qCB z)=MDJh5Z%Zr7JcVfU-8+#%{^$$%nMSJCKDA@kibl_!O+;r zhgJzP$j^3(1iG-l;+Z@D>U6-U^HSry1O*i&FjLG&+tbbHICq1*^07#u3;QdBA+Xai zZT9nX(uL(o3Mxoo3(ju_>bOXIBpYPE0Fgi!_E!c&nZ4Dte-2lrQ*o1p2pI{nZD$!- zYVm9f*?2igAkc;JHD3>>d{T$SEtIYKongUSvi8_K+^vqUDQSTV_%-cr6}8c{k!C(L z#CXj&N9D@_cyG{n-gwOvpC#A*9;={&#D(x1Mz_TkwJm$}Y;9`GCEC{>3*~M8B7v@} z?zfF?&+k#=4(oG8g$r+LBf4hE_9bE!RFGIO$brOksiaN$>B5Nskt}x2sv|oHG0W5OTLj9qo9Js!53Y~fo}Gi<^R?vj^ACM#?b}xp7gN- zfv&g>futNcq?)zUcMl|e>PR;o$&@qtk5N!TV$rVzlDo9BmT*{~wJbNMC*9m-fo#<| zS|HGMF*KPZTWabATYb&M;@cDH{jQnv>)BBXDo6zL6YbsWR@EkS(DUu5?WWS7+I;zO z?@UUv zY)Fp~2y|VnxsCiAeomeGUeBJ7IJt+`GoL3fY!a@Zg2d4-M@YoS8rtq}`q?65o*twd zt+M1R8;1x4x+)i{r0L^)wR&B>mQ-n+M@tpYkprs?R8T=;*pKsMW)nxPVGDhZrRTI8 z^wrvVvR(K70)eiSE0@SPr#otwBK>TtCL@b!uz!Z!v~F(&6(pMPxI^TXPFhUuvYbe4 z@s;kKJx9(j(NiGM6?VLU45?D6t_#&?+>_RnV%v7ilG7IlD5xN@Ony$>NFD9Wc`Hs# z7*Up0^G}!87IqQ{bk&&siqty%M!i2xf4ZFyIk2~3X>yqWSwRJfmFe$EuQK(u-5tz0 zv8IYMyHhev_TS_q5a_CG_L(gB^+k;OUdGV10jzSvp|V+lt%3>?{U7`xBic9C zb`bsaz2yso*u}9Sa?q`k0)eih2MyBbMkO`ZAPZi`ANz3D-jc{I{qtp1kifIC`Csl7 z$s8kG<<}Dq3Iw`B`FXD+Nf|BV=WqV2w2*k#q0Bc)8`WDz1qtz-?fXHA%s1a8eQQ=; zAkdXK#9Z>5`b)jp*TDadf=g4?>j~ZD51S_`I9}?vwy~T1q{uWNu8W4_E1vPnnX1;2 zhsjRULepV&Kvm8ic`<;o+4LS9jBmz z#Gi^g_rxvksCHEJnTC?f;#6aebh%W*1c5-;uW2)KTTV$--yYTHSSHa#cH>T_bn{|) zVN`_U9r0P2I>a;U5vL@F&fzjDNW@$7+u+8%QR_A>$;>!Wzog$=nNM&Chg}+x#u9pn?R> zF7rL3kNnt;z&Mq4aJ5E$(f7?!#TW#?b2y|h~$5$?UmSI=irpRXA z0YVFh1kNt=9V0C)8ND?_Zg;+$K%fg-aD%}s<1;;(I8F8~?j^L;NZ{-;pOq;_^PmsmGt0%S@O<;5kdrj1kNt= z5&hix)S=Zp*?0L!fj}2VIDEw7H2k)BC?S$T0%wY53Ni+8fM9(mx%LOB4i|RcA3AA)>pNpxmoh6k|KdF z90Bl_y3|tbV8;yEEPlKY=_7%?1kX$i8>8L5l_fhCi=zp2;Yfy`*jwh4x;%BB{49IC zFvdYb>_5g%AFa;$vrt~aXZ7*_LKlv&ctkethuSaq7PYX6P;jr+>bs4b|A@*aL%RBD zxHpTRu(6d#Kt0dU?mHrdU0X=lCZF^8<2H+IKcTM!n0GTqD@r~{AEk~K2y}`2Al=u! zQFoecrAKFtRZu}9)Y0UzvF&uy(o^rxZ$EmYzALqq4(lB&5a`-<-om5Pln~& z9TLjqV{5dK9D{=E=J5n8T75a`0S?gm5gYfo0&;7A`FcUMqB zLfoNXH>?Sp_p}0?aoI`d8XuNH^N0b3cJV7p`?T7@WF2p>-OMr)A3YS5QG>jj(U~-_NUb(By&i z(uBbRfi7I@&d+roPw5CPl^z>ER6zv^+?~zuWUar8&Y2WNzXXgB2z23EcfOj+X(^q` zS5%!#AE}^%1n$n}^UmLA(2qV7Y3=;c0)Z}E>&|1*tS~xo@I3mfO|*gv61Y2?uL^tE znm!DeLUX>x2n4!ttveq_ncLE1yBE;SGh-A~kib@n-_AAVf!1sPG@7w%yg;A}*BbG0 zRQ?bx+GPf9mpVaMg@lCIUS-DKQ=iTsO@j;K1p-~TB8jh#{+PfH)q5_@?p8*|^Z(`R ze@OR_{@UbI`6}Kp!1Hh&#}=cL1JM@5jjxPPt#7n=VgQpZ_nzMA0St1T}>d+g*R95(=Y0J zGW+R6<-5BZ3pZ3CK|P+3u<{+WKka_;GNg`8*`~?ESv?bef*U*|5ZdEvOSKH}4iC5a_}a|M?7W`Iq$FkkRtx_Mr+YNPKy9kjx(4 zR&%k`XZy}YU8Q?&jh5%G93&9vYM!%^eA@4;RdCU>I2-v)L%lu2WH+nPN?KkPnOMPB z`+C2k*7;sMX_MAQ>*iQRlU(N!kJuRPR`pVxc-d|`Jy@@o9N{`vK?R9~6Mkew+&FEg zZ8=WdA99pdPVXmQFBm2e)zmqp;KfueV2OqH(rhic-g~O1&DC=mfjP;n#m*Zfw6Cl5 z+TjOrNlw*eH}&^2Y& zbFydlbnWG2m6y>Wp%1%#F++Crc`c)Y1m5z&Pl%n{jlK9gUp~FWOhE!&x55g@qWLql zt$ok)GPbyOU@LPL%FZS16jYGFTR!+2uX++&x?{2Y(7lF0pexfYpO`P0sZHsBi>MIcFnp`uN?1)a++HKZzmh-I2uq`dqqPlhZm>weEg|9;^=|Gv+G6_{c}!S81r_{%v5nzvNlrd3J~>DpdUvou zpbNi$zN0GP1f4Q^s62aRxbU4LA+|m(pKPWsY?z#Sf22U53tJ_FAynE*FYO7Ci=9R( z*nZ$I`NZ#k-Z*rc7F6Auw%%caMw3l5?V-!@75ZkMO4U_4ba38sA`Z$3=*OvVD zaocrK0qcul&d+l1CJmbDfvD*A=6|}A%Pj`DQ z?W$GZq0g}x{RhzQ!^331Y2y@ZIj;@uOjed_qjkSuO~djGhLjsdYSA-HzSCp8f(jDJ z6Kas}xvjMvJAJ0%oTmegYZV|z9ghH0?)x%C>lfi7$GIgcs3386-EQ~HPO)0m)|EJ6d3S~S z=X-UzPKhLeK$pdfO700+X8D-vc zev4C=J;;=8Q^zYfbBx3^cQcPbmx@})cKZCFVi~W_Xfs=0)_sCNper=#bd$LI4YkQf z>gs>T{z+_qofne#YgZX>BgGjLjIa53o)*oTKdmi?FIp?3f&|X#@HN8wMzVsfu5yRD zhXn#%7+>@G^Y4Ax8;`DXc=0zG6(n$O%3!d29n2oy?-sdGd7t11hkBtMT&b^j{OSHWPOYA#$){|FD5xNTbLj@d%5qeG}aE%5ZO+*FLdLxqMVJ=@iViwF(CAb8|Nbo*HhR@;TuSR=oXTVB1uJK1bD}3JmwWHkP(fl- z-aupJ8P?jnn$tLu|8uG~a9WU(am0>2{S{_3tSX}oO{%IyBH& z`f@2Pw@4pz&UV)ChJ{z1h3G z%(^Eri?_p#Z%0(t8Yit$E$Tb%yV}%Vi~PP?EqQFH@n~9kt&!PkUWQy_p=!N#j2v<< zo}q%ooZfFe2Yjla1#i{I&i<#}w1Hu#dmUaIQdp z`(zkH1&NW{=6X%zQH-D8Do)Hu8la7uQCZo#tgAqv3*Rh1Q#SdN`XZyYGH`4M;hiJ# zqK)Oguad1cEqxg;qnG<2y|`px^H}Wwv?8*WC{hDi+W*3tY@?Q1aYdcTt}~t1i|waOIQN{Qf&`YwcLT22MrVE-s#H0)R3Ok* zygHaPE&8K2PSO94yvf^W?dqcycG;1lf&@MV9%Z~s=eIjgP!7i1X!s5`Cpwc+Q+U>t zx7s3c=E+K$GGmvt=W*_^d>c5cRJuonjuG%+3X}w$|&_$|8kQrCL{YRvn^`g_O*(x`z z1KER9kBnyfZMD?{SF89o>)x$HvM*R^%vo>Yn%o~v+l}y0Mz3hXP(cFUEWc$eFq?iT z-%gnpXeSWp%J~sY%oZ55Fblnw#E&~f>#ysll&p7@qJjiI5gz;G-=*fO2P*lSMhgVG zzBNxJ6>UDMUTJzQS#bIx{nt8N@t?I_Lj?)(SzYQ-M0ey2R)+Xl3k16EH%cYZE#Lq5 zbTdaA=*9&LIOrD-81RI1=SRfN^JxJUF3I9k{xfRty-eL!K$aW(9x0JN@?pF3>75ssq=MY zC-UguXYG}B8-GwF&~>3}D(SuBvwCo}{s#RAyrkcQdMP8wN{R{+_|*9+H;>F&>w~?N zQPfi)(Dn5AQc`U7R4w;Ye}gw~nXz}PLX_h@`f8{kA-<0*cP-iO2K^MvCu>zC&{clS zT#~oq)qig=xonR1({d(lb!9xu+0ch1dbw-;`!7?;XczL%;G&%@u}ZaF*pI|SJ8QX} z*79GqwR*Ou{OLfu^q#~}L1I&A1Cm+2y0*E@I!;^~LbduI%Fsh&69ocY%e4@)$<|)$ z(R(8&y3ahXy&N=MyW&2Xp@PJOt0AQBVq0zC8J(D2&yJ>DongEmlOz!6djB_#{QYC4 zxxC!MiLz6@X@#T{Qo99{7%E6Snv+I+>RM=z&TZzzwtLBR_oP;GhdJW}0$t1Bt{`mp zcQq?>8z=VP-AkiS=E#v31~62Rc>8Y|8ThG4eb#LQCu)9rM;rfmFOSMm1Oi=sF76_| z?-r;nJ8a^_jh-o5pzWw5O_Gz@;onbCs)k#^s;ORgIlDG=zIyt6m?>13(xG3vF%zT;e4G0H|6Hs7D2 zf&_kPy#LS+(K8XXl`}<61p-}b&!&>j&fnFbXg#uwq<5&_4x@7Np%p^~3H&wG!-Um72CW>jT= z9{MXW)|LW+t^v1pk`S}&>YQ78B=e(H6&5zCt1|KV2Ne}0_U>6q9?mTM@2g$?r#ky; z>a6VgR7)VxwMW`ahNRs7kBBR1r@i;N%IAS5Gv8fLjn9ubXq#8AR02b+^DFr z26`=d(f&|tcgW*xrdzxdJj?&v!lLZ1@*R4VbJyu$~-9i6qms}+J&$l<7ODnuRE9XrN69{w_Z<{dRpERW`(e)$Q%AY|VQ`Q9%N056?QM z+A~{oqO7snBM|7?k-w9~9lfE-JM}S+-AhLnwa-_nTjWboK>}+JpWz+l%A(d0Wnnng zkU-bQ&c{fV8pqY|74(s?N2x|^b00-n*tDyP3KH_Eo#fx`tN+!jS1E36V^^cH=4vYw z66i{GrX+di$^Qs<7f02rmVtH3?$4g=;N#cQt+dvB3vBs#ZfUwx1oC9MDN1&{g@sJ>ww9E}8?4;DmSD9`#aJN~s9?_~l@4U6 zAR+!8`(xA9V|KM!L@~cL9cmxCR{b4djF{a;EB_#z|K(4lG}E99EtulnoEiUl=FU6b zQ@ho}S3S9IaPFB&T{W+wL8?fUdq2%YhBsj@JqSYuiNk7_+y>3MXc_jyco|)@Y}5-& zYO^!x`~+es9bNcq`N^tpvP|=hRoUMBF2dh|#OXgv_w4s+uWh)H%*)u3nq_*jqYPX0 zxTip%3%@jep8k4AO>XYa?#6gCtQofs)grm|dTRc8{wh8M;d0m1vu)^}!H+^UyW(nUKD}XFawSwd(bka@1@-!= zS#Et<|3oW>3K9*n2JOi|8mcwFTb&cRy|-x9qnofCMORoiF;)Z_ONPj<0+#L8p%TJV9 zM4tu%fv$0%x{!M1LbbRLO*nBSJV^VVT$NRA-i2X{gTD}K55H$LGEVzZu@O7BUl!^W z68LNR*!kKZ?eiB;_IkRfK%fij7(ZuX$0F_N&^GM*?)nTBB*ed?T{2%O;KNtZ&2Sb7 zbYUIi>vseAJC?ez{UKEuDoEg)H5iifpQ+7{bY@9+s|y6Wu#WLHslyklr+x>q!k0YH z0JRzkv6g%|z0#C+ybH_hT2&y>CDz^g8wP7Et0nc1O<*{p!rM%I+8@?fxJSH<#kihtn?|j+Pn3h;r zD5YtW1Oi<+3gaUd^E6uP*Ft&pp-6@b5*R=7onhu0-E{q-Jmph&fj}3I+xR*3E8fv* z@2e_H%DXUBkihs+KMm1}?RZ&T37=F|AkZa_2e&n@Ib{noM5Coz<<`zf}#CFN>BPK?R9D=dY6D0lWT-ERSvSXCb3%DviqD z_CW$&vkny!mcR5rVq^c;+ObtfXv0OLSW1bh;%Q6SLe)ORH*)5xG5AH0K?q0X5_KNmKU3lGOIRFJ@|h{3R;-CjCr zM2g(7^l*Vd*XtQMWZbXk>eXa@W#;9pFX->kvvOqBE({eU@GIcCj8k^ZT>2^Bw`(L2 z=vwmS7>PDNuil%fXNpdLYQXwVs-g59T}V+u0_!y2SCrtx=8#%SUCRXmfi6?wRZ?;J zZq+4Q&t(|u__B>Lb(Qcdg&HbIV4dc36UCibao_67(mU<~fvzE}ki>Z`Q(ujn&&&9G zjGt$jWv~4H$c(5UA$}j8_k-CbFI%Pf(ky{Mm-~yS5SPSgt*Ow-FU2MtgiF<=#*DuZ+%aQEcRv zqjLJ7ea69mevw<(gVn>w7OPE6zlh(0;QzU9c^jlS8|6Quw$~W;`D>2+^SdiS0$t%t z&7|GEoK?AjKH64(#jsC}*UGI2tv8};UW}RaFx>fn|F1~o-5Ad*U7aiU8ob_!3KF%C zT1W%;TKxB`s+5aoA$aWp2R{Y+^tq`J34@fk4-#Qr6PF z3jIx~9rf(T562N~ZpKx)z^%SkIrKeQ;4xJVE?TGJlfM4s7n$+7rz-#cU*3mAv!P86 z$gf>WtEeD>PlQL7UNLO3aie_1=B7ZPD-lMxjpW>9OX<(!?~PjX4y*nu$L3&oM?B#TDx#>tPvF?BKbS7*K3H8uG6!Fw?-wi zG1)UUY3NCTK-a(DR#N!(!NwKa4szmpZW3!*WKD}A=NeH#BK@nSG(YNrac6hE9}FLz z$ZA$;L`}z>2omV(@XAt(Y5%|&A8z8r$`TWq^^Pc7_0}RIDoCtbVkZ6ARfnwprnl|A zK22Z_XQtD@IspU;bd8;5CY9e&hit0CII-Z_SZ2R)GtDWtz=#SGLx2Aw6Myw2K6AEn zVpxr6_V~mBYHB;2Ac3yH2fxTxi(Vw|z;RC0O^aX?-EY$Cm1Y@HK|+dqPky{fC4M%$ zI1yGRoXws6lpc8)OOQZUaqst}@8?uPTAt>_OY8n@SiKS~zJII{6(sf_FC^Z{%gDNs zdQE)xwh!x2XvH!U;s_GxDp*%YX3bhgddxe=iAGDhu?m;%*_---MpTgaRN@->vtSo# zxgnPm#~=B#h4wYsmi}W266hMjd(QjWyGVn57dg?tduwL=)_{F0)4+%d5@Y%tBXdd~ zCtq^*aiY4Fk*z-I#v3p3lNz!YHx;(|W)MLFU1^tgl2z(8V&ij_6M_3{vWU_C%&XESA5@U&d3P!K zGX4oU?sA9|Pr6rTCq25cy7>}80$p2=E+yfUpOALbuXCd89BVcxy${RTU)u*2B&K&s zC8u0JkV8`sbK?7k670m0P&V#qeS!qKTDD9j?VEof>Emy5V&m}1Y>oRk1VkDo7-pv6iBmxgYtzbpQ_MlG(kK`qHbwWdeaN zY`gdz{oiC}zpcPH(Bqj8DoD)RWi3^{lez!@%BWkI%-Y=fs+Jrk66o4StR>5$j>i8Z z%00DVeUpOO@7_T{`&y@hj0zHQZ3@XA+Xdur$&Z}yJ>8wT$CqPWTYQy}K-ccLLh`5E5^{UXLry%s z(T@d{F|d#0%gU%A;a=iBId?0LtSzO#L21nZHZ|u9t+ua7LIPdB9`A{ioI+Nl-Qz^B z*25S(c!Q=Nvyf3i;(69D;+@}tT)L(|UF+#1Sl0pP=~<8a5)$a@On;G1s{)CW=Pgcr z&y8juS8t_jI=z!nL1M{pGwD^gisaRVLQV_|k6|YQR?#h1CjQ-}U&J_*4Bfv(pdt)%va9gL2L z^gilCNHQyMo}ew>QB^_(iE>M4P|v+Q!-*b46WN@c>T;m6Kp@cd_L-$b zcNCdiR_c2c53h-5Q#W^$e^xM1RFJqg)l6FA<)h}ip5Vm(X%pD0-DBjhovj1{U0>48 zq-fGuJ)WiaYMK4UupJZT$|uviQB;uVY4}Z6dyiHpo}!${*bv3qrLC5=yCQ+ETkn67 zdCLc?^-k&$z<}hTEIwnmeE$6+iV703r{0q@r8Ct{+7V8aPanhzvX05CR%QtVy0)gi zC*%6gRPT^IoVc?)m~C-CCs(+1j-rA@*pw&4C2zC(t-Kx~*RTj;$Nm<`lS&;G2z2>= zC?p3rtX3n;^{DUs>DFvU_#HWVr-7k@M1Iff?;?JhO_*>-0tr+fUQs33vQjjseO3}pRc_sfBIUI_%c3f8_Sz3(kn zuXokIkJV}YS*6`OT>*O7eb_fKzEU*3|-PR_kb=>vuT>8q_ zQCH_@O%6??s33v$n4gn+Ihq9ynJ#~>6(tbpdO5;OS{>o1j!Dw@@P=7TU`2HY%i~5h zqNpH&-y`3hIWL}lp436UaiW|+pzE{AQd-igyjs;YpO-PbPa>$vGAr(RUv03-Nx#7g`&LS*Ac6fAA8j{FWOG9+(8t412n4zcck;Uf zE3P-bto=$a<3~Juo8Fyj8ww>FO8@83}Yf_BWI6q+1b-DaE{u z>cKJWWaJ`RHKdG;3KAGU@b+qLG;23*E!|d7OCSVSpI@W|zY}lL@h`lLh@273_s3D1 zaMnpSfPw_ZL41$<&|&QCzYEl>iI+g2Yv}1>GVA;(5_VOOUQamX_~VfvyTZS4r7f>q+WNb6!TR&~~h*g#$C(Z!M#O1jg5V{ndDd&Hd)Y_7wLO z2z0HOb(BcE4w7+Y_45-?HS}a1YBpunr?!((K?27K2E$S6#y-yWVE5w(3Iw|1s_i6~ z%+HgZ!TL^bQ)Oos^+aL)wzrp2K?27+2E*qTq3m_HSMtTskraD1%q?P%%6H^W4QD^S zZp+L5S_?fV5}0S?{a~L6_HN8cdC?3vfj}2V2K)@V_-NL!`!1R6JFcOE1ZEBSDx_ay z8J)dC?%VCNK%fgF9D`w*YaDZkn4{8@sw>+sDx;x-1ZEBSy4T}L?8&GS^1MSe1Oi(%zT2tw{2?=yz9L%GPyUDDlT2k}B_tA(75|}mQ=S=XN<-S(aw1$rt5+u-t z@jPDxsV1>DFD>aon*&0mj|657`97A!L{=lCE{&g2Ll{k<3r8}1Zkx}idnyf{)kh%Eg(EV)hQ3t{v+B2j7F#qDMqWr@){viJIxCu`eThTm$Ko^d8`Pkq@e-<_M zFSY&JSr`c;fmuVInRwTi1^u#MK5*z^oyUeNqXV+Nd#`ow-CH(1m#vgTZ2~ zJ1bk>n+4hU2^kh7Fl)%a^UAL5#~g|MbeS&@=)!yuUmJD9fmLkLi9PB}giH|*qb%1+*HVTAt7cU7yFpAZ!JRj%C;1NKo{oc zcqVm8Uv{BaF3s$JUS2ohF}c!X1bLKOL3>*Gj#L|4hYU`usJ$LgOiCT>O3qXLyrqOW zVJt6xDgFNNsEi5{7km9A>-s-4PN=S*GjS{}oP}OnOiT9MDiG*e{`@BySJw$waBYP56K z&)DkTe;gb3+?D=WktU;p#3Wlwsp8p2J|{ltziQd639Q!XTD0t)Fo8f<<_Jsa)X^^g zA64fam-F}j@moa5o{_zkgplrY-wD~7Wh4|Cp%kT*%E(@onZ1$~QH1VuE<#2|W=2M` zN0e3O@7$m7AHUc6&%^8W?9_d~-)CIsI@i%wp8Q+R$SPI~CAUl0c;Q$lJt{~vuO(v{ zKij5d3@RbpxX^YE1^Fj(LstuhK-ZJmWpod2Eji`8;HzxoKwt!gmN4bRm)+B$g2cLv zGP=LbE~Q-wDwf3M@sX6?e7NDhVVOdpE31u}?pIMzTJNL}l8DWgF`2#Qx=YaoT2zo2 zR5*M=Cn-Ze%CyWI(+txLY?=C>&;kU&>zu&J(App9Ye0b?94W$i3#V`ibR zExZLPNNmn6q5F})z~D947#A&fawbhrZKt1Cex5?0Yp$J%E;7p7Fm;=8b+CJF=ebo->3W2UWYk#qe?kfzo1;$;OjISeT z+q{wb=~asbDoE7m{+V^|aKf-W*GSAdI+V<9{Pk<^m=F@^GT-)@b)Ob*$lqm*4(`70 zL^tn`(&zoCN2nlCZdx9zm3+-mVeutNJPp)Ra?EsnNkbEbK-aRpGVbHS4GR*CF|yYU zn$w`@UiwSD7@>kh=*BzpCgnUs=V@mpakrp8Ik^niXAE^x2z2c^bB8@Oy<>2H&m}ST za~blSQ(u3gryHSygu|6{>_%*np?0h>;$`ivA*Zjc^yfWBDg?TEd^*QocYJHOG}aio zJ9hoHc$%K6dv$OUp@PJeQb$=uGUeyX8RKvrnp_a4W<1jMJ}^Zg&~>rxQTFBFZ^QXA z#`smm4wEVNU=`8y?G=4cY%zQJdb&1FUyE11rqTT>H8iccLv3E&rG#!xFDr-5WsUbu zoc!rallNcXwd$Vw4mT2`Tg;$@zk;u=wOt|5wPSrLUD)A9X-&@> zEBx)L7)-g>2Jodj7wAzz;{G2~T`!AThH5j7M28=<=^L}BUIuQqV*fWbMdML1IXusqX3Ia6|Ar<4X8vXe8Bl9HXnX(u^a4E|b{O zI%?6!kkI0%{09I0oW3KCOaXmpc`ju_e&zn6sDA%8lb^ix;(aF;@$ ztGRCp-Snu92G`hElK3=k0*$@(P1o_kLxBns|6Ge1&A4c|zaUo*-fmEs*o8{^cG11^ZWO_m$V+fE}?kT@Hh#2Q9c;FYtC{Z&>cFWSX} zMfR$jdYl_#--YuzS-GX%Bx+o~n^-^af*utlupg6s$+oE!f18Qb%aRlVT{xeUPy2I! z8f#Tn)NZ?7j|vjlkI5Op*g$Ie0rz;p6arm1pOYtxKgq~M+bxEQ&Kf-`NMNrdBaqc2>2CdjY4o6J1+(!>J=f1qtlO+AnvobKy_PX;8=h4VQ%FXtfl`IxJDt+ zh4VR$=5|kcOJ!C=eZ4~$1u95jKPKxM^czn$!`kcZ%RN*Gbm4qX_U%pGXxl0){oUqe z2o)r-ACsqk_Y9zr4i0+zbCnbVT{xeU@5fn2Q)f5UZ?tGhs33v;n4D98v7=FTZS)>@ z+bRUQa6Tt@Ul%o`tMg6ur8oB=RFJ@aOruGDQi~pbEw67{yPra!3+HpPXV_^%fo~7% zI#e4)s33v;n5 zw(-rGiZy%mku}YgnLZM@n<+<}j(zEf{ThAhfpQ9gE?miIG|kLL(O0WY`ul6M1u973 zZl*?4?Z6oN$(HJWS>90ybm96+R)IP>g|-Zrwe)f~DQh((a5qzC4kY{1pJP7yzn|7A z1iEl#Dfd{SgXr^wLHci*y_FRt61bZwPyJpECY#^3`qRM<3V|+MAD}q`*(((zjwkmClZ&-cpPUHF`WKui-F`w~c zSsktMhP-JNy=iVylDPC`y+WW1Ba_Amus4_OTpZ5a-Ha7`JGl&|pc`LAWs29Mg2c-*w^%*RR#t6=F=pve ztv~tCFB0N@szRX4JohFGII@GED14BigL{o0Ohk>piqrz;=tqx>v%?H_CK;guo5I$shg>t(I`$7Z_V&UY08UGc7R?Ogqe;rUG?@ps2C z`f%ZEnr2aXLIsKW`+l&ePk$N`>lkw;3|)s%#ZOM`PsyqZfiCB%MQruYr-nm5d6KZd zrlt6tR@{7V8$tz%>b@V@rf;SBre?+nWLRuxIyP~qTphMo2y|5~k|8EVv;7DaB$}1j#9Rio;j6wGs}7C$;UxmRqQv^M{tAJvmpeAGBG!yI zt(72&k>tNyZb!bg+-3vMPh^ui*zyOTb{mFQOk_jDy6_4gH%a2< zlgVOh(q&Qg_jp1DiGs6d*lD}g{NR7LN6ge5U_Ggg6e zxV}NG>VHC<&lyLkAW^veCfgU=glFt9ejnoxZ4+UQh4@s-Qz6iGkY};Mu5Ed2%K`zgCbK++gO1&RA!&sb%5OP<`|yd+ZcFNts44v4q2MkxfkToyiMU*@*r6Rb~5 z;`P%4@gr`f*u{nsDoC_^{()t!ug)JgGiILkpYu~RKetXa8a_lJ&~@DG0~=@Ggx4uF z=G+~=T%9U3@)JvU^&(V|=xg$W{T*t~pU*aCg(ZKspktYHgyYg~3W2V~`rn!LTuYu= z$(ZpwIIRP@_-MsiYgNJzm-Y?{jKQot(3Cj5D8edZPwC;05>;etP5l&VL(S^{1{!h}{)D9J>Ac4Q3 ztTyczNZ;aI)4p48R0wq82q(|#H})p85o7tkt*-Avoo9*{UpxpEB(NuvS$cz?h<(W(;>w$`3V|*h;bcbq=@hZsd$oAG)SFO2 z0((^XedHV#V>>SteeEVG1iEm9le6$G%SGVRJ>qMv$%G0LI5NnStf>n{kN2C!vxq4Q zfi4{3G@3HF;S_G$R{XwP zl6I}o=&V;X;Cq(j7#z0#VOHg|eB9LYhV;6>Sz$~wexb`v`JR7jJ%Aj>_Y>K_D-tS5 zRE;WP?POy9(rn{dGPh|R$@$$p5w*CbLZGYTuCMHE7b~8##n`v^?%9Uk*IO;pU2O;z zB(7H~U_F02@v`Q|IfGNl8uT=1kLaXzR0woMZhyz-MA`BmWsPH0fxaRQGd(5-4Raz? zkm%F)HS18vnfK~#9Gwqn3dE@CXN9X}e}zET-?mR!^%)&`qpQZT_T}f7qEFu}F)+R# zp@Ky2*N4ne)0XCQM2tr%8rX8ELZGXk<`5hF&WU?zVkB`l-h4 zA_ZGtUm?(i-@lA<7IvoOK`VsK?k0o^5`#~EWcqGH`B~>JvW*T`8qk1evJ&k;S#t@V zQFP(=FXwRU>d?3O$A#JXPJ{{)r=RCBuXI=b`-Jhc>g-#RCQrB~9@%wM2z251FRQl} z{uTCJABnORoCp;pUR=#)aV>}O>k}5sHVop9XqB8V3P1N!2z251FaPq?>!PLZuc&jp z2cd#QX3S+aC2%-T`xz?Ra2mZ|m}ixybF+IZ1iJ8vksb9*KN>f{oiG1>T#q~X)_x^* zE#h0tm1zx*yYKQIlhtz0aBRL|VZ9A{RFJ^ffXun`3L)G2iwr#{1}g-*aQ9vA(XX9D zlk;Y<#WkDjQ9%Nu334XmA3^CRJJ^L0PjpD23wPh;Ir?;258#Hij$YPcs33vS1UaYn zm-qG!AEIk$X2p>}7w*1mH2p@;p{XvBx>tz}1S&{iG(oPTDu+_(kT~7xF)j*$F5G>W z`_9P$)MRU{Zo;uW0u>}MnjrJxUi#9Fi$`^atW9_g!X^XZNP&!2@(RJJlytkicky%y0MYPFrQxnRZ4~ zg+LeXzRUR4r8Z=qzKb<@qa{?3z-WTJ)4NPd(#F@&Ilb+w5a`0)cNsOPQH4Tmj~Sfq z4PLyAFvXTg&Q0mia0BYDm0%oWxQ? z^9^SzCCN56HO~?EUyavK{ySD7(1m+!8jbVvKO+0^R{hcM1CJSPan#4ZHrd)bjK6@>>ZYb3KITax7qEO`St(_g*g zi%trGEg_~Tl#JOYP}_NVeKW2X2bna;>(m4v?-+v9UXFtIqw<4 ztM-~~z{-(6)7G&s4ukod>eJ+BRs6SxxUt@be5Q9MRFJ?*mGapg`kCkTXiBHex+w&@ z?559SL(25#H!jYTZN!{9!EbkHOjd>-gbET^cTzsP6?X9b&Q)mqy}=5BF5QG-tkV@8 zKYnM0Y-3i%2>$Y7IjXp17@>j$R>qVg&YVEb!rqGw*TyLXx_Ufo#*UlYapt{NwlU65 z$EQEY5l!|@Bvg>V%DOUR>y0(Pv^hnb?k`X5!OuchL(e=db#BdnzBaBu{xG?*(J?`M ze;7chAc0kn?~RCXyqD00<1JG=#?8>?6qot$?h?GgNv=OO znTx_5a~x~bJHk;x0&l3175=K16Tf{!9LJivD0e%d%U-#oD(#=OxU3I!EY~+&xp4{! zywgTzt6w)0C*8+8PHB^?5a?2GQL;C0E>5g-bA0l=v~njB5_l_(yq9eCC*Ju=JIBYo zqe7qy?|hPbUUMpmO3#`*{u~$}O>JT1B<^MtlO}foGNTPsF3q6y#=8V6NHh$%WV>wUWWM0- zNJ&KOjW%S|_NRy`M->8H<{MLNHLE7^yEfsH*j==iFKRTACRjZdb>jQ64)No7&QDVV zw)e09ZSC9Saa=e0tt6^0s=&+Wr%~;I^8ytl)HVXyGJ|iaDKuz;%$tCpg)Xe|E%&^F zI*S^@k3ReE5KGRjW@YC3^Vqx9(+V&4X6wdH=WV(;oC;|g&0-U$@!ZloAB6#`wouSYX0>&g5=nL^yDxF+;Ui8wYZ`$tLX8@oF93YXf=1c4e9TtePG&B&CK? zq;nU63KBkpT(uiEg>cWz36e;U?qb+=BaDjb+baaRM#he?TXsE!cl$C;67dJ@4V5Co z$m)k)pn^n};|9CnzoERJ+bT))YhW<=y&p?&bAO0q|2#SzdB1?CetgV!SdZ)wdTs%q zwk1d2vo%87H*Ep0xci|brcfIm)@}kdt(YfJLE`SL;ad9(^SINA%aYg{w3k2c=|fWt z*A)U?ah>jH-@TZ}>zzF>2^zbWr^N=)u;K9n6(s(Cls9yb4(B-@J0;O!Y65RnHHd7# zuT%(h%{g*Q>lYKwPk-DjiGf>2^OIX=)87dm0u?0ibCX&3?dI`n(?Tg`Szm=fmsf+E z+Eo`rxcKHS+Zeppj(?pSMj`vV2vm^3?_aJ5O-AsCPGMAg8&e2$-M7us2IvF%_QKCv zd3vCr&@g#o811^R7pNeCPpFKrxYgrRwV_nB#8oBWImVt(uDq&lFgPxlP38M|D}5sV z+*2u5wn5kZ_^O-=^0(q8HyBJBhEU>=Foi%D_Kz|HqUKXWf_5-{7*>s-T0qn|$&&f6_eK?0vp8K({{EjC}CNlxWgDg?T&^smc?Rgd7cm#md-e7|&# zH@p-=x>UKV2nrJTgvu<|TDN$Y8M7(vQGbO%mubs7?1}ws-Xx{JY~xLnoxJn;P#V5o zCs08GpHNxLd%;mYaC9iu9otPI(3Kiu!J5Se^0k$-<#XjScopxxZ#ETH8ZJ;lLVb1{ zFFnbBZw{uW7BdwBT{!y4J+IbV`SuclR3>YkKm`dLMP)v<=SBW?=yXcCcvvCOg`a=Pl=Y zPRTVy^RJR9u4W<>apUzi+GXq6G>#{4;B+IxRCf!kx)UR{C!L2 z(J6{&*xiuC#kV1%$+n^N=wk_mK-V%07k1)E6c4MEA&LD~vxMW2v9##x1Az(>W-I!$ zwL9kXWBL?HB>i3{E`)kf*4_+-Kv#LIP?p?z0e@V$PZDD~28r`cr_!a$I|V98bgk5n zO?e){uk>0j3Hw7c#fe})s&i+BLZEB$&=A)7M_P-yd5a?PqZx)Mr6v`9!HVmd;th&G-CcX%9wf+iqITcONaGlV<_eF6Z|7*UJz0h3bR4+qSeccEZB=9Ye^TcuE#YEq# zbhKGtg+SLq`+96n^iqDj?>pJXqLDL1KWA(DHMs+!f&{(=@@Y?x7Jc4yq$dSU6#`v} zlU>;7HjDY@@pok#Wdfo_`*nS&lZ!c_f&{(=@-8~vE|Ga_0R5WqS0I6|hfhOUlFLFq z<;H2*MtIRy(K5}Q%A4O4s33uFfy@KwohZEY9^}{RoI;?h>AYALP_TgaylR~F&AT2a z;!aH@%Lm&9DoEg4AnTX>+aT6dpF-w^D-;4gu}gU9ldtTHbERWp zBNy@UwjUVw+A<5tcRC-P#%T2*YeEGHoT+#n z$Su1vp@Ia?)MR#BavO2-kIdUHRZ1byg}t^M)$X+u87sz775m2m6(n$`CjXAOq2k$~ z2~=~zWraW&_S$kZFn18aL;Ofs?-HmWfipFEk9(+AeA^j7@6W7I2y|huE%TPHR}>Nb zf@x{t7=a2BI8&47Sc0pIE!n{oTYIoVpbL9#nJJt4k#~ujO&bi|1u973Oik8qJMo7< z`V>NWllv+Jy0D*@e|h?Qo_;QvCe)fBP(cD`YI0P|uPkDHXVHm;(-Z<-_~gsHr8ic> zq~T0i8)vc175@K`1qqCC$Qi&R7h&o(gK`efRS0ycZ`6!6KMYA3UUW43vvOM+-fD%B z7n#v$8Oi_6A3=uwWe61{@ZK$r=3wwK-g&1x&FNoKA<%_$M!6EcT3Q_Q>_=TM)gn}o zz`ZHC$I{$dOdZsp4%V-(5a?3pq95>DhN#sb^mN;OeOcc@|)Kw)k_`_cp0RAX zY$I)m6>V&DOuVboQX$ZVc~Wu*E4nGo7<^sCUT99JAmK7Cmo;1C#ha{{E8Do5Sczhs zo{H%;?GyrCm?tIAT1J(ngtmXggpW3a3KIC;$o;{94`Nu~QdG3UULnwhnN@Nxb=D0r zXH;dfv$rQykiaKK{vEsbh`zp+=+~6)3V|*)V=K6Ol<;+|L6#ky2^AzT0xhGpc^)Ei zc}03N!bKs_rREO4IB6?h{;NoblLithNMKxC)&q!~K;w(MibF%L34HoyxqfH)FMT-k zSZly1My_iokD>Iq`C|FN2Lcr&%9<1~|12L~+szo$&%M~6&JEuoYMGZLB+!LVjLeNH z(}Q|d$q=`elq6J;a9Z=0rKkDuma9W#8^dncQspB#qT{~m3V|+sVq_$BPz#!|qy(L> zRhdvh!tDD~)^MW_-?i6Mws9l1I+tGM>B6?u)SrV!{-d!HM56X|2exnj9Ziooxnfz3Bo&@6!8Em&m0 z&rQyE=Z&T2&b!5-M+Sik68oNgVp|UT^U51%%HOKiD;J8aktr-zJXZ*G;pZkt1Kxvb z`hFB<$8!ZLNc4z!!wz)z=Tpazlx;kc^;a%7D?^Seek%mJ@N<)u3P-e{3Y%(D|5INC zDoA(~JYf%#rt_vt9Az61@~e?$L1VJWFd-z+g`c#%!R1CddT(w^tJ?e!s37sZ{cX0Z z_H=IQ(_FUEb7rA1J7Q0(-AfP>=u*GIeD~+#@5Js@$*w@4f`s+p3#`Q~KkhQQqHH7X z>pAhfK_BXzTci-^iq@WBFRo1H4#o8(vCsX4$UHfioEp9os35_8jPiZm^ zm$ycQ`;MYIqaG>*x^TBf&P$#x5ozDXQ`e;iWmg7?tsQr>OS%AFa??cFMufv;v1$4g z>Ue&?LZAz0PI3h~bFLWdFpc`1U#ILYAt4&=X0z@G^G}yvImlh)_W{Cr%XAvBXQ4u% zOP!Ie?!HunkD5+fFZv2pkXZ3#w>*m+&Mim2ldGam$qPiaH?o4#A5Voq7p}-;%}nP_ z!mOt+O&UHyS$QGhZxPR0_|N0(O7&whJNn=TQBvzmy`D}}2z24fQs(>YJ1N|(y{UK7 z3S|X}MBNE{SxgP8Hdj;>?%%*fo5mm$8jrUL(obwv6M^bCwKmUc|gUy!BD; zvBZuflho3V8rNI{Do9}Fq0BJ-JBT)psOs43LIOtuU3hz?ypR50UkVGV?3mPjsz3z^ z%%GH67Bd)mr&n?8Jw8n#(1o{f${BLGR&?0TPUNQgE4S(*p`LJ?7h6^Qj6WqN(Nu*%7v|;2a}(QZiCtZ6SDu&Z+J4hcMEE_adFe-Iz09T&6f4^jwp;kiO% zRr#`XXzNySIk&fReh>*fWiD?xO0G%|D{T?4L^p*%7oLxlr{c@BqSoK$iGPK5$~j0R z@RYgCfSA^S@;Zi!Un{H>0$q5{Q&u-_-;eqp(2IMlx^kWq2|Q&k*MlG3DDj<@n2~F$ z5a`0wry9+Wuqott{w|N1kReb(LOp+8$#p6vetX1kygjQB=)!Y_GSf*HNEU93`S$JW zloN+Y3{U*SrsxOoW0#F}AnjNCQ8Rv;M_)=-2y|g2Oh(U3&!VaGNAsl@mnktaBz_F} z#rih)Tl1W@brQ#{FOuR@>;BNno6?;cF~R!e!R#atzpfkf%JVs^F06n=Ef z4%x;-c{BGL=OSLxcfCTO3)j>dO=-&z5(Rhorxb5xwT;B#nMJH-S^yu=$e68Oe&bBq zcDl9j91x`t=)#q^MpH>v4;*RYL3R4>7l#T{*sW?acyi+%X_+_Av-qDg_|e5#X@+y> z*{Z3b+^%K%X}K!;U7cF*)Y1~K6p?Z07E5?DlRwp%7=})G!tUG(4$7B`36OYBYIb*2woj`>^mxX02Yws#EYd%;>qF28Xly5nNb{|_JP(h+s zh0CmVmfX#%?ZR$sV|Nn;-&mb#lw=Q^~8j>+t`uavfm1Uu3cT%umd}maQ`O8ETr2Jr73AsLt50l8li&3 zxm9ae+_~kvaiTG=uS>mOqMDfnJ#=fV5aVT<2S0^#BMrSh*@;j= zqI<*~wrcSz9+dr5644RQ#Yp>);=!683W2Vn+5s#yWhFnH`c4u*dOi?Q(+uKG=1@Wf zi4QFXvewBle0A9ZNn{43i9;n1if-;>6armad(~&dUq|y^hmE`XzfK(z-S~V_?b{?m z1qrJL4cLxB>v*@ieJY#7)7S=W@E120oi%Jq4^aqoExz+e8~5!X|2EQ866f=R#Ko~w z(`w8QAw_|oo7uNO>+YS#kCE}WT0F>Ad>D~^`uy}zg+SL#*PQ=|HEoS;glsV<{b^^q zI(WCzCt^RiGvO9X$`0e(`VNzQqJ`Y+Iy1N%T|2l`pn}AWgHPF4>-qe^q*}7yEqYv; zmVM|=2l~!a2y_kNx0#Q_Jnk8M$wB_*v+L8s=3VK`&S?S_B*Kp6GV9QV{MMDZvQP9d zsY7q~cBj9ueH8*-ix%BwuA`&)?ju(vk?n0o2P@i<#pXbP3KH|HzF;5QEaj*2P34nV z&a*X*FzrASq8BOzy0o#`%>UbB{xr!(5^mXc6kF7k@?NYHs35T?_C7n&dKpinndPb=zPuumb-74qydYyNi$Usx|#63_RymC@k(l5SJ+aqP5>LZIto<+beD%+)+Ctgva^H-8M6;+CUotP|Mw;D>QAhEe>B+Dzafx9#` z_PdE^-;2KCgG5=|(F%dC@Lq!$HD1qu^!X+Us{LMAohd5@XL=GUNR<6FmsPjk$-V9K zC2_y%Bas$;k;j@%R0wo!TRnt5@Y%ty>@)V%TYA0`|IAu(r4|hMp z_?LI9azi}5-XP7i(G-P1mssceAMvoav5kxeiQ)~dPTP0cpKAMb_)nR=N~6Pm7u%Lq z3WE2GgnQ|Ri4g%x8%QYqyhd01wD6B>!C!atQwVh7XQ)hZwGNvn^6%sgJ z8PA^^gy)dT!n4~{g+LcR3$ov>&c)S@9>RIrB;`9t0>@o>gXG8@arN;mp+7Q4A<%`- zw4CXee%3V|-{V`NlqLlv@;d)qGkEtI|l37pT#+^D-2)Uu!^&1hLp zA<%_ApRAJhr3SVA*oxLR$X9w%Bye7;(af~2N24xV(c9~H6arn?=gT}~I|~{V(V0d% zrYe0q5;(t>dtOr;QDCMWJ-E9^A<%_mm%RTxrv@1gb))o;tCcYd30x=0739+z)H}Ba zZE;kp%|Pqry@A0%+aDr3mw zzKJeT14vWqs6wC%SFf^fA2@)ViZqnjWxII(;WfK?B#0M0us7`ND{nlFn8nSQn<04S zCw8yqT)wJy4TDD0s8k5Gz0_Sa_Gu(8t^LY2x&-ssCjo}b*+1lIdwGh=eX*g)w1^$t zIFCOWIzkd2A9|3+u?lHI*DGz{&#hDX4NIX2UTw=8IZv$p$Ayy1nv+YwG=T~d=gkUO z?S@gDs>e%WQ?xT}^r=m4UV1A8y8ijUW!X&^@b)PkC6TyoAca~~q<@`t0u>}Ctoy>I z-&xFG^j{$7qO&KeZE4?4A<*TO_MUm}TEtJJUyyUr_Wo{iZBv@QSho|XATehD zceWsFIp0;oLC!3fc@Lq^y0XNlJ1Ydb!e`~Pp~1_zUVlOo`=5;<7tfy}Gu2g~f<(P1 zpIF~BD|q#jUnJqZaS*+DZc2G&=PCrc#yP)aWv4CYCq6fmIgJm`O-=b#GT7e1@ z9j3lw-y5&u4bOCw#IY}Z=~UMeRQ={*g+SNec@J3ohbwq5KVM0N=v`>{;g`ax(-naV z5{rW$vfIt0`PJL=CDCk6PYOzZCRVn3qY&tN;+4rZzhA`%ns1OqLe*ZBSX-=nO!sm1qg+SL~T^d^v6T@5VJSK_n|Fkr{XqA{cwmzYP z#9w;@+kavmpF94fB(nY6(c0EgqJ3X$g+NzQzx}LL+*p&8%xyrQ*8Sywlbi_^ zBy8#)V(~Y3@g^^`B+)0THa*DW{G_(OLZGXQ(*|~~cqgyA{+T3B$(6+B_jbIfW*mXS-jn0?m;&tal@n*wQ2O)V6kC|CRToHZ2c3fs}tFR)o83;HV(6Y4dMZ&2t&wHR!4&aK2mjiZ9Z?CKg_Vah5#IFd=?ZOZ_Pzp+=0V|x?= zUFA3YW;eU6TV^g%H#WU)X6iK5s-HYGcjTTQc;gh#n?bo6JU z=zlw2A<&f*`f|Bp$pRL>H%f z3IE$>gao?c{I0RE7wfsn#CS;3W2WeeK`xSvx#^4oF<8_2fNY251)9=MNJ45B>LXZV(&KX;q6`>l!QkCqZ@vw z`M?%d3W2UkBZ&na+s);rwUQV*$B7(5`||0{TM#Np6o=hnyY)wS$sLCz5hr&U+V3gH zpMGwm5a>FRbA~-gJ_xF{IfrZ7n!fn|Hkj6T zRN6oS`*~UEHqMsvlJ&gL7kh<37k-8^p18q^?8DRefyGSutdPL*N}hr!YDb&beCKgf zIw}OZ@L7=Y-5%{JEx=avkX8OsK?28J+3yDFsOthJ;p@;$A<%`-w7fyGRyS&PFHpGj zud6(}NZ|ZI=0MKvM@w5Q5ZyD)6#`xOrpdqjtqbXrcZ$~cG|D@O1kQuxTy&xv1s&Qa z?wjN(?>V}#k1?J;b0dq=mxR~$OG;mY1kUGVHtwiVv@7JY7`FU?LZA!#N{yy$33tkF zmMi+!i&gqWBye6TV*ryqsnpDD(XH}yg+Lef`7)B)+mlL9%N1v=`Y3%n5;(t>_4HFF z(VnfDBE_S5d|&BygP|t0$RFqLs0?MXwJ<$~cHF9E0U7 zBWDankNYg_U(^(+Ac5;0nVs;^n+6PjD7IKsPzZG4Ttdznibhkjp&y0eor6FH30$|y zY75II(BQY%#Z6rog+Le1iDb5VrLmNwe;`&*oFh;7|NlG+30$$tH_BuZeX5uudY6t= z2z24Ljb(f{>u#aCZ3j3?s!QSOorHK8r$_YBu{9?Cos35U5%#2AP3quqcYW9 zcTri_B7r+JaJ)U_oos?(O*8+I!3Dux@@3P5MH?X;f*5R@I|Kr9T-tlEt z@peJ2#inavgbEUvFD&mj*j+(J>f_z3(xKwkSoYAc5xs^4my(1m$f@&r$Z-NI(bR9cWUP07DP0?*CJ5vSn+QKF#_ZI~0L5a`1EGWlDb z*&vSR`H=JMRZ1Qi5_tYc?u>rjAz~L#AkU-Q6#`wDStp}7PTNGHg%|Z*cuL8KLjun+ z$vTk3Qbp(U?sRt38HGR>?rg}rAdZ|D1Nys?=am}*6(sOHmh62>=LzQ*E)=@}o>e9$Z%lbg84kMz40XwL(qm{qLT#D}w}{^OJi;-+IvC`laX{Kcf)n z!uhq#%a}2MYBqTzKDnn0RFJ^)in4OcnXz;y-XQE-?otSJsq^+vzLRL^yEtLLb+ZzC zMMBN~d~t3j-Rd|@yn8oZA<%`pS@Kqr=^-@IvYOa1zo$S23CuQ?**k&Z^mff_LvGy) z`iZ4W>x@|ln;f2}JuPMS-@m)d=&Ae3(z>?;5AnEVerYoMGcJN6M!q)e_xWMno%QI0e1re=Q<69vNmWL_GLTnU9V$qSKKQ>j zN_lpY#G#jwbiTtY!{6NjX-J^!{DuD!t1i`)vDZP@N2NT%O@QSXQf5+;}8nN8>}ZgJ|7 zBx=pFrlHTQ^cIfx3W2U!gHJNoemnVvEt!%q@n}V9PoL-#KkFP(LBgZ#KIYkcAHUr^ zTM{{yZRt_RSl!Og_6mWn!}m|KEzJ}7s6Q7Z(WZ_qIh-oZJTtpEqJqRWSI)K{KE!|B zIVXwKP%Ygqu|ivAu#G~XYw*`h7E^UEzfe0_5{WaqlFyY>2J@3G9Z^9dBjGx0c>5rq zwZvHKzKNzE1#jM-*6K%Hg+P~Emq%>U`#pTt=53N_KV%>c+G5IA6xMJ=1&NK8Pnho2 z0p4@VW=R+hk07f(^9%*u%@hJ%g;8&qwTz3tN?0O^QKRHZ5zBV`$DI<6s32ij{hrNx zv!A!NTPTSSe%^G@?47}D-zz;5=!#4E!tPAk#owM8Cy914-hQCkSpMM4eLX5jw0$CX zUmxz{^Ip44qH;4oy57c?Tg9AK2y}gj|IJv1o!sksJ4v)$;`f`qM8 zNnNMtz5MJ0V-?yB#i3-U-@?;cJ17LYYVRtkYukDoFNj?uiS1@{Xwd0Xe0-vX9u*`O z^)c18c8lkSKZi-;d#=3kHX)to#V6^IKv%Mrsc!h#9sJQFhtu)|XtxMTYj%g9)r{1k zf<*hDraCY4J^X0QN7?(#nHxdB&pqNPkNX*rKvzgFQ=Ojg;(wNO)f)F}BWP9ORla3@ zlmQhaupiTCrmu*gqTQUYYA}o=fv$5YrFH$h5Ab_Cj1`(9f+DGmw>Q6dz>K4UgxV(t zb&I4u!=D@W{)<)!blu7?^WVtO+rm}0G3M@O!-%^T_3ksn9ZS8gZW|V}Q11O!=9P|> zu&tc1h!53O=CK0?X&vV; zV);9pU$XZp-|ntxbZwO0+U3PhRO6ZNKE?vAJ+!5{2k z@AG1~-Ivd@4d1vD^eQ_<-{JO9g+Nz?`ZC@lAzu;`zg41#HRkL2j6RO2Ac1oU z*XEnO0HSL=Z!Yb8Co9hNV?%`^a{I3ioH(jiLt)GcPpljaJSM2EWMf^>Kk$6}0?&hR0wo!TAj~s$^I(tzdMWd_a;*4uj%^6rl<9&AYpOu6FXjU zId46{ILmnY&zBY?57UpTyjda8HEhgRW;Z8_zwk58WQJ>J(%mlY^vmu>=}|#q;I(h; z`0b@Ue(6$4SZ0S%{VQhrURRtI0$tIsey}&83wUkkRgyUTGmI_<9oE?otFK1|i60@w z%p-0Izm@4Li8DnJlzFs}wXTq;Ljqmz>J_sVk@LCtkx)t8TpUR+tGqX8hPdlcL84~n zPu6J6V(ydGQxYY&ycA`!ylHFk;Ivxp=d%k3J~Q*-(+qo0yR!KAzyAC8A{Y7pRt4VdFljP6{4dXA3oCwPRa1=pZb7^$WycJcdBWxNNT4gA|3>!s z%M+HWD>XV{+~``Gmd)g)1IqmEY9t3d7ed4)iidG1XX zaAYkTm1>-qq+aPthJ=42bJ!z2Do6yKy2(ISPTUU9)o8 z&7nT**|DmUIGERuio!BQk^5UcDoA`|xh!t?VAd?Hi|6^w zBA^Kyx6t^P2ab26-EB9DS5x!#s30+|Q$924d`~-OkfkI_{}@H~7eYjx`L7fLT|u$M z?B(m}+Bm)Ox3ZNtlZHHW61^XN)}w;NrlcbF;Pu&4*UQ$I#J_Lj$YyS3p^eT}2z24? zmGaDw&3Kv?k;;2SzE z*62||V${Y`y4^Ek4C8Ma-;dnkVU$#|iLO*#y+WXCb^}x0=EezzL4IW=F8c8>$_^Yt1Si@kU$sSIxg!#o{uD}+YNOmo-Q#c z3jEwT<4fv#E%;@)H_|vGGaDR1M`LO-?di8133TD@>GC~46-j%a6|wW9D|1wkXcuLo z+q<_aA6j7ScekGnr;LO#X&tm>1QO`N)9Z4NWkDp}jQqexWsc#fAn`u)FKe>2KmXn( zL$>kFTiziQd*f7}(^Ui#=)%+M^4ZlzQUz^IUHXh=92F$m1^;FPzK!KWx2DQAa#x4b z(%4e$A~zREpbJm0Yc$$sku(B`PA zKmuK*l~eK4heT4%!YtM-O#b?XN5qQ8iCAP z8A%>xzn``V58$XEQS_&XnNOO{6ARYKHvD@<(7B&ex$pLC3V|++erhz;<-Fu)iWT?$ z(1D|Z1kP7vwS|mu8ecw_=eLooH#jkXF3f?InH&crXj_+S++#!u>S~Y(M3cKyA z3`n30b718f$8-+$tI$F8@ms`DK_YagM(5unnisAl8DX)j6iQWFj1r5|%nV4N3v*y) zJ(-=Mbk%2&Na$O~fC>^ZrX_Sgo5%2l%?`+z%-i%?#O6kc#SbGn66pFr#?CuTisI?x zLrwyMprB-Kfg=kXAUC^>2#B1hNEE~)XURDoQ6vX{ASe=Vfkluc@n&ZP1SJTP1O$nK z3X(yRz+2U`GxzPiJ$(P*p`WYzbanT1S69zYcjGs(bi?X_{?>^>pP1d3Y!9LYi9*>l zZ-X8)gV#-dml55yw-r41xj8cKWfKY1!f#+{CH#7CYtcWG%^d@3nJ7Wx#b%H6esBFR zSnZ?xWTReEck7);GtCz-CnyAJ;Wx1KtEIQQmH(xYX6v-GO_U&U?#^v}=9<~T=IwQz z-tQ)LwB9{6!i<`(y&j0Q)QG&z^blXauu5*LctM?}xaeG@? zM?LSD@BI6hLZB9Y152m%G;Cq{4n~_dCOkG#g2de%r}e8{<^_FsKO-9@mNm5I*DGX3 z56NyJfm-+tEPc5=zM*yLgUi8hial?k1c?v&oz*u^@COT@olQ309Qn5OL7%O`X0PQ_ z2-L!FU}^UN?MgYB)GWAi&kGhxkjPZ!yk6tS)j{uM-p$deL!4Ekd%j>o^eYO1TKEkt zJ;6qC*6+6yjC&(qu~33U$Mr|#w_kBzt{@wm^3}Cw*1eLnD5{u3pcZ~LOHp5o*(E2X zPg9!qN?Q+`oJ#uW&kXVo$f`fzNHT`l>HBy7N%~Qwm48=>EG4(;{XN^{`fTX0yY-mG zn`L_B*6sSZO`Bv|B`B|0Coj*XYq4EFwQZOmoQi#T*-onjY9YOBSTVi(s7R%H{i{sg z@)>6&@d|Rt;SApS6;H|ZZ->%(Pv71m)2fYjb#EAJtBjWAZC~zhV@An|GX41YAI9L5 z<08~!OuCHTT7yo-vW?-3GI;Cfd{BeaXJR#PuIc$B5R{khj(3@eO^P zZrfH%g>8bjZDK2^1WJ&=n?6$~P%CZ1)WD#Vk)B7cUQ_i0U;brqZGS60TJKryhD;xO zyO*BLdtIhg8`xIOb7%A}4*Z&;-Bbcw6p2BZGJD6(i}9!XlYfdp!ycU1|LAaQwDMLplhG!bS_Bv32$Sq=RzmT>*rIr^DT&qt^S zN|5N3ccs2J&rknBpw?RNGQHi%;}M9Cb+_rA-r6Q5ql=k(!m96O8fmqyP=bVS=PLc_ z@k0@8Ac0z`mkMK%JwG1OvnQ?6xtE~FP)mgpBwA$nO+OmDNYbejsD-nHN}vRZic`<) zqc+cpU;_!%!uUb8fgbMd<&BMTzt|oQeV0n01c{Fa)iZued=jBlNTAl3&c%%V1JioB zrBxfhug)BN@x-JJEO}qg9IVs&Ehhp9I+2q~Pz2ygkoYN6=3s`eQi%Xu0<~y<3`UN~ zP=W+~0Trw?!jA3KQXzp_$LFLC7M&Amc3!&mkx}xq#s=5CQ++Miv!zd_&mO#Me4g9> zyJ`a^NSx`DHaM+gF-fORpcciu!N~D0N|0E)Cw;KmbLk`4KmxV09?1~QQOS<4)l#8n zz!AK5&msN#N8d!Sff6M81%J`2onG)C1Zqv#d|tPHo)dwcG}?F(k10HM?a<#C_$piZ;y;~nA2SC(zF#V`FL7rz)WR86wLy`d;jF_Koa$^8PqZWC>}5t9FIBhK>MBt#>5=|s zXpZVp>5iWB#sKL#X(rNBouga{5}Dq_1OU5 z4i)__y*GZnJ@=t^Rc)XIiD`Y(de3x-G&>`KTG%404U`~p>^03hFq`;~)Q^E&|9{Ya}?%x|&+1Jc*x`v;Xk2@a9BsTrwp;21YGI401WJ(TyXTNmG_+z( zoj@&oYorpJHk>!C{dOemf9axed*&?ZKghcpkz;CcN7|6`4V zMC~?rjAO6avyWO2%nP+}eWemvepqFQllJ?Bf7_de_}G0jVMKoWL2C|IfwpZk}o^=xM*L$H+h>P=ZA4x;e&~ z3FjlsI7pxtwuov2B}lw7ahY+iPNa8BNT3!zS=9#qYE^4kF{4)K_aS`Gs1hhaVz_wK zczHl7Z|>appQwc`qS`a0@HkMeayn%FMIMl*;PTE*Tzum2%-|j@4*|UtDJum24 zj}=e4xT2%+*nd%`{V_ER|4&b4S|w0|#Ks&~lbYms_#Xsn%{??MX=cStUbd~;KnW6e z9?l6I8m|2Zfm)PPY^pX~2@+&4HgY{MFVvzI(Nk?JSAqn!o9?uiY=K0}0d`l4h5loo-7{`8-g9#QviD^+5l*|3RSE@75K)T!Bv`5GX;S z{=F-D!)$?bCYKdJ04!P=Z9IJdgFo3F~50)*K1cianRfTfgSx8Yu~sAW^=q z<{j|D^{vk)Q0q|EjNTl1gGng~lpt}T!asVo&Mz3xCQ$3)od^26iOnJqC_!TPl+*g* z;UoWpK&@phe$}5&T^xZx2@)}XZ`EU4toaWDwGKY~MsN4&&k+ceAn{k#Df$oJ{_-CL zYDG8ir|*5^b_4mIR(eNQ9UKmxT6 zjhz}OUm$Y?8z@17(n*nRgb}V5*-lEe9^^>3$T?rC2w;PdT2Fwe!Fn&xCm$;E75*Rbm zPVWP^y*J8@5b0NGrK`WvH7Q%GhemvKT+-~dQv>n2{xv=reB78CcQfe?^NvhwTG>wP zeFb;+6!Y)hiJo1rt8wMkGg7jqds$=0Z+}Z#B|a3BeH~&3hyuZf(I`QpPtx_IYWZ$U zn$G=*kMj+@G(01s8lWbp73qm(Mc?wb5$Ww3+tq58xMQM=Iv!f z(R|-VFY0r^I9YL;EY&~FHyKF}SIT^`v~(g+=L#atfEwcOHrthYAkn(uQX`>PQm9n_ z^eQ6S40}^#{%5~JpcdAN&c(^zM%2%I$9LT~COYk!E5@1cE6Gyje*0G=KG!grFP4_h zkOkAH${IL3eNeqs1T@yb)u6B#|{)@H;nda zSMo-mt?|%^&DA%Fdtd({H;sX_pO^V!X{jd;>McIcy27`%pjW8}5^GvqHag9JHB_qN z(Ot#JtNVQqwzW|R)WSN^*=@HIMB#Z0^tbn1D#@j)ldEqmm#R|YBV*&p%UgM@U}@>5 z*exT(bJ6>}pT9ksP6jS|M{)rG+C-Y`u<_eSoNmP zrNYwEJthx67QbvU%rCc<4WI;xZYwVvU7{;VTGPf%?{ihGPYpUjr|Vrl8*`YZ2=O}AdKTJ)Qu)B}l!tM(fWt*N0> zwK7|ZMNQIK-!B-X5U7Q9qLWo0y(F|W?^v0i-xFXjdiB*avQ(=wE;d@_+a~kH(o(<5 zP)gj0dfi$x+ED6&L|A6-*4^o<<8gLs@?Q* zfIW2`^NuW4zt`IuQ(iwO^TpEA7uc1r_$@nMv-^k z2i9Bde^Ch3!a9*}?^4vae%~;wQRByf^X8mDt6cxeQvEyb&!oF`?#g_zv~+T0jy}E( z<{;~(QTLU4Akp;pjignh?u1Hp$FsmUvteJWMw43#fm&E6St^rDRnw!bAnUPCTak@e zr&L&4I={W`{NR?@1Z&O{Z3Rk@$bHeSpY0il@G=potrDn(b&^le&d$VrglAlxKm-HUG1$Y%8}ONKh-pCbw0W9DPh~-Q73;<+gGO)WSN+-fnSkUr_xh z_e9+pgY=wrr?+EiX@AtQj8-1%CC}BD{mQKe64Yb#MBt3)0 zo?)N0l1HuX_$wL{y5kwJv~=e3fT|XcD1A+mQV%3(bm_@skVdV=qqfY69~A<%uujs8 zTI@yNf6$LTobLE`@*le6MX|JWmWA2UV(-(i&t#<@NRTJell>KWIEy{plWE#yL4TZGdJ2-I-a)*XquUgQb<8+A2n#+B2xMQV%4^YwO9ron`}zXM;QI-c<+2Yyx%RSk6j?$f&f#xM0W@opwa#pi=R(m|-EuIHm2@*8J>B;jT&72m`oa?fG zs}QJ#b&`>c#gWV&&xKOlCQf`sbGYtAGFVy}0azRX^vE}ZBLKG^NKiDOC&vsFWmq{V z%1HAdtwNv{)=5Tv7Ds(&`*w)t{^P`=6z}Lx)Q6>|Go7NlS{yB%ZzG~nf&@iQdUAY4 z5t+piS@l4Eg+MK=6P-bK*lTT}2svM=rO`aroVcB0L*0pxv9z?KDrcOPmmr`UQC5&k zZ%qwET1`qK$i##1w9>fFM1od#u?{U)sX<<)9xU)Q8VS_G7LhARlUI;~GCfk-3JF?G z#wM>hX_ad7Ds}1ScNGG)u-!Ce4;GHvwe#=mC4b9fa72#dMkP>!#82Oy)h}!xCF#@& z)KbR>?hHc-5-;wg7%|_v2sV&FEw#6!4U`~Ja^6(^_Tl3ZY#@PJYTrd0C_$p&C$H)+ zow*&s1`?>H_7b##5+o8c^^UE3UJLTmRG$YDsD(XLB~XII-?OI%e&3!Zf(;~4i)_O? z8LS6tk&Ps$?5PtdL4sPrh}^nJpcb{d`#vbF<{&|Wo~9AGmtbC~MZL#;yQA7b2@=#R zjmW(n3Dlxd;J&L-ZJ-1R8eK-@QHum>(fD`Yyr?!%f&_U9!|^Mr6R1UA$$gKa5-34p z&BQdps=aP*P1)O#KrQ~e6Ah-c;Yg6^^}nY^r8mBn?@>}GP>Wl{iGx)FB}nLRUo#rc zYM`gA2NI~o&&gQ1@BG^CzwRrqH>s{3bN|5N@@p{tLPwaJj>I7=x3Rxvkg2Xq6 z<^;}fPvcGb%#lDXDy_SERc)XI39=WPYCYV%P>b5oUA?L{P=W-to1W_PaPvYf>I?3g zTD5@^BZy)%H!sv8 zf9021D9Wx#owvE~aSNqmY>tz+Gaa|!$i@vgg{pXF(9rmTq-o+Yo>rw!< z&adpDU!Q+f=BpBKH^1kr;%RO9oBtL-2@swVS?FyjQ_$w>)18eund{yH6Ol3uhSzhbt@y!90AVJ@e>SH!-3Y984 zriK{5s)E(%?G*}vTJ%jJ?5NuE#+#zSrXp77q%Q)fWxjP(PuM+Q=BpCr3pNs8?|a@_ z{OZI2N|2y0X!U_7$AwCDY<(+1Yi{e)ZM_u&weY)lI%DfjN73}uDf8z*g8*u^Ds@Ls zSn|HiS0&OO>>=iM+iXU)D-}Qq60}>z`_lCMp;Go3k6n`s6!)7vQ6?SNYN{l2Ch zsx(Ag-qGBwa&yCS)cWRHTJMv!o0GV|s>I)k!$tGCSxryo2Fp=`1nmp)R?YcftKHj+ z%t#P*qk9A=##LU11Zr_QdFSLZ`gN&8x&`{u&o7lkt#Vt_d$YE_SA+9aiTe9Shy^uv z(RHH}N}&V^wtfEgmRP$~9~KxUe);)T-;}(^6#})mMUwYgzWC=r(YH^6FGEu9Xw>>C z>52aOC;4>FS0&0<>m#z7eqW8v)uT~@1V5*_xf@Gb)2cq-P2AtJ$G3AuD}_KU?mf=Q z8+7VvLR&F*!8PBM&qhY0)`~YT>Dz9PmHDcK_^i1|n~+&N={F-9B}nincrC#Ustx^-m}Eo~{STVVy~2ZuED~SdBoZ}?}^^;9*ah;zY5OO zua-J3^HqsaZ>AUd%C!{V1kXjI1PS)8*}d08rAoW|qOZWt_G16;%L;*7?7@@wC}v-@ z&A0X6?xIB8s}hBp&hr)B)mKcLd_Ni`NbnrBOQiMMy?sWB?!H0! z2aCVGj}-#7LbF|HS4y#%LcW);4il>@YNb)@{+$7_^RuUy`KrVx=6vtb8VO?4W34nw zka#Y`+`xd78A7F6RA8^4zxJ(9C-xwLTJ(3=)krpiY-45(tu$(pjU*@)5L6G7>mhnS zj>f!@p!y{#ZDn#>J-l&0j7Zj^R)^g+^gK*{9y5Qr6^(h(^Dy8E0zuE*8 zN|2zwU?lgebh|H_+^@n8AVK5CP{yFeV{qpZOCeB;Mzeb!2%TG7tFp!8JkN%;JORv?wkKLL>tO#Xc6t zK7a3j!jX(CL4w;*iLWe2eoo1|Oeu!5IEK3%7Z*S+is1~1`ha+Pr=!(` z;>6EC>&Y>kD?x($n-Ys!9E<)`a)Lsj7We7o{ZZu#HnKS0)fdhUpcciu21Lj}P)u!c zOubSBINo(7NbuNH;&zMU_Amb4q!6gZ<3D-t60Hp^UK`YDu`_^Lv^FqcH30;zKP+B< zJeYrw*9NWx3HD>k8pq-_&d*7w6aux_S2{b6=~Tz&_e@?#W$1Y+fLgSUGGOHe1g+If zUaQ4h*LWS}N|0cmudD}6UJsTE+*JtF;(5h6X-=*=OkOIw5~OI zU7JypD`8iHL}-4LYh1Z@4)WSLdX2UMt)mvMqupPytd9B9tUw78D|^}}vDtA+=vOjp z=z2{dP>X0jC%`FH{y6K8W3N~v$0Y_{`}QxR-66l+&vhZoS)=lbbxOL??hdq~pL8d| z+7mrjKeI9SvSHbC1}{#~}Twe-u1ywlf7+r;(p?X5J%CExoynnmB=_s}>x z&ptozz>8^uX;uuycG=LH$(vz+IWYe~xt+?k)%+cCe%+qWykvA)juI!$1dS-KGrH)WpSKdkiS2WO8*0s8=4i2X)N;~xsc6&+ z9<{H{yHL`RaK1Exy)c5M4V$<$CqWcj(ZQQoM3iy}mLM^$bq;T_rX%I}r(3PsjS!0( zT=ahMWR60h7MC`6&Zn`qjcjd)iEW>h@m()=s1!<&xLq^5_tsM@WTVv=L&TGk4Sm*@ zdkTSCPEK|&$v$|HST$^bui$_j(J1+PRTgiT<%M+Tc_f!=)sz0BZE%Wj|D7T(!R1AQ zpX}hbyppE%x!p^AovP~!fm%FP*xT7P|7b~9VSTsHcX~;DG)f{7c0I_83ihJK+6;CH zmXJr)!J~o=@@^t6c{zXXaW28uk>JsshCHclBQ(xMz1L?b1ZwdZj3J+F*Mq#YU~k=e z|H5dLL?Ub(s*4ZBN4N3kIw&W z8zH|dmgfm71ZuHQyhwEk)#FhK!Tx>p+TGESv^ZatXzYDnR7+?iiVprY8YNDeiO^gU zdIym2##3L9&8_a8Qjs4q*`FjF z|2O)^Q!D8f`3;s(J(9S6xFkiJj!c?LKFcP^R|VN;RcrM$8YM_zX*DhPy>Y?Bz6l~v zZ>=;Es5SJPnn@jZIyMe|EQ0MeCy4#D^93bHsP!Q4X0n%C`R&7q^$4#M?J=R*hG(7M zfBq*L%kHF^AYWyiCZA>3oM$xlS)cd2p%AD=eaxU}Nwym;hrZiqvd=ne{mK2xl|&*! zt=sp!Ibd!F@kh-I3gOVKRr-@L#?{%*DS|7XUN+12ZYMVVc{Um)54IQv<q;UKp|)D| zmQ}$hD6W70xk5NJYZd(GcfD+{8tc9q z!F5t_xcXsoq|;q0<|bw4(58lWvCt$gN5+t}!D{D3G?IuOx3V~YO6M4OB+n^cE;+c)2@Bm685q3RjMza>t%(ka+e}!;p z*19(PiBX1THk+Us&ElD@^jE_JDB-bvm}WNCa%j6${8oZzHj3L78%VHUQP$_|uPln& z6#})`C-NL(+o&A zn!KV9%~96e<-7RJgyFoi;8Ji7ToRsFD$_r^t@vFD|D(7)fD$Cowp<(V9A$01v`!&V zi)Wu#$i8hOG)Gyq{s^E12`6n6q1o9AY}gmE9;}5Wq&IgN@>%@;YCyH40hBmtCOCdj z-d}NCV);g&Q3%uu#Xh0;SNsNt-sD*4C;u5hNhHFqN4LW#%(AOGSu;Pmst^v%TJ!UE zHA?*G+?(-b;e%%Bm0hgtZLbGVlAGSHl%iRH35T}(6~A4fw=CAuCpQ%vNN~)^Bg`&U zC>FI=E&oR$P>Unk>EyF)8#D)+>>bWbc^E(m5}nDXtR&xJ+o0LTWDnGBx5wSh%z18yss7fYNp=gaYe@;rRBHn3=Ipb)4< z&m7*Q@_P*Sq_j5RC+JEd5q3QuCtdRKTjAyT&ntvOvzGeqmA*Z9PqTWpeim=B)emFM zJ1vdt)?+L zwVaciQW7XZq5!qPRceW66R72!K$Vg}2@(aV#Vb+EKbt@;=OnF^1WJ%7)n#rV>!If& z*gyic=JU);>E$5Vylr~U;1dT_-8Nn&Wpgbdm^Fl4>w3U=LP=W+` zjG*H&R2xX3mUC)MN*gFaBHN+of;H*)uV)je<(z(#l0XR(Y_AaY-)9r3<(%S^l0XR( z+-`-b|2~^QE$1|%lmtqU;OEc%?AZirIj1V6Bv66`=UD% zL4x|R&i(A!1ZvS}mM8qBBv66`wUeIeICt|xE%Hk8q{5UoP=W;c6>qBk%FPS4$h*oD z7gO3m2@>QV<*$~{CQyrfzC1ZHC4mwo*j}phhnp8_VZ_O2auhP(zcS3~SxH-gW6&A% zd=8+Kwo6r^<~-BCyRVgQ&iw#NoHP@TSF%qLY_oBj8GpaKb++>@g+MJQZQDrnrnjD} z+|v4e@3{af7GHtCxA z_opKj0=1m9ZKH4HKGw0relzZB^#DqoH0SHg+P00mmj_yh>m-=De$A~AsO6+>8)f&7 zu$s)?73?))!g7>2Y0lS)K5QFj=}W*fGruyvH7+i5v^X!+a?-Yqp-YEb>$_$3eKPg! zQYdlKoUaoT**4l%9Ae$P(cIVT+6IL{EhlZ;D0#Gp^-9ytzKyj@MWe(?bG}YAXxqqm zqoY;u<|*HoW&?#lEhlZ;SXaD}ReHzs;=AaH(I|1!oUaq3+BQb$Z(6m#DN3SEJ~TH+qr^#bzD}%d+lbp+!0OwozPMLymqMVHleTRP?taf)Qn%0M?TK0dUQR1XIUuW%O z+bCVWjyW!7s94zHkwT!BleTTF9#A;gkWO1zWoV^Q;-o`1+_RW9jR-FjjbBa^PPke` z%d~BSO6B8Hy^#KCG)kN_+n_qRXEAFU)!fH5uaNJNLZFtDwr#Z7ci6|R+vvbGuDQ&M zB~F@c(6fP4n&}Dp_zAY?b4ejk%SqcdsFw)tCDzu1`~+oQEOF9ogZdbp(o8*3a8E4M zdZ$95mXo$^P;VF9+t)P{z1^sO6+>8{|a=d(n!AvX?}OlV%&_U1hvt*MmH@U{BqD&BJAm7UzXpPTICX zvw`5*VB@7z?AzVg$4PU(G?&P@%eFx?j^G(*K&!j~M~m}9EhlZ;pjl1utTy&QJkL08 z4CkadUz!u)lxCVa1<#zu*P|2ywVbqVgJx&JvvZFri+SdB<60-pHfU~_aj;zviU0&h z042X(s}QK=q-`5df6pU0%GlI%A4dRgOzosOUy4y=Ja5~eNJelZGxf#e3V~Wq+O|Q_ zl8>XM8E;?VNXA_oIBCw8Vl6nOxqQueK90z?p1h?HsO6+>8x-~VIO@wb;FWdDt zDN2P}xU*c-D(3pZSNv`ZX#=(B8*z94m`W6F_ouJo=kH4bB}m{-G)+5RD7`3puAVFv z5~ziH(KT&U^B2V9{61*|wdi|#cdwmFOj=k}#1yI|36vm#yY@6~&iV4<+>ay7VdY~v`-&57iC5r@NvIFE!wBy?%`C4)A6mvjM}Rtff6KeH>jq0n{*VpFHi7s zZ$|>PaEH964awC_c$UXW8>mG)RNVcpDxtsALwr*$t&iIZB}m}TS$ZBBdx=M@;=Nod zBv1=?;cJ?2a4)g0!z_c_3bkklkGnTmC4%jGii6&*K_*aw1nx4{v}-?f7r$#IO)eD@ zsHL6<@Y?0h;`q~^Cfh(Q+MDCc5FxO>i3;^QH4;*wXhxE?4$0(Y-#+US!t#g@-J4cFwP|;Z(6rC?wDSFRoAwn^sgOV|JUvU( z{#=sBH-6E_vQ#KRLfu{SIBJ%6&fcCW2-L!pv}opx%Ilrgw3j4Mf&}j7kwh>Ofm(Rp z78A3APN`6fZ17HBxid&5sOBcr+&%3J3EcUlX|wjUGM(1Nyiki;9ZvqDCullP5VdeW zmP$}BF`Zt55+rb!nCywB(-VVbtoJU4p)N;HiYT=$p zl^{=T#gnIIUxE@OaHpo64J>CiKmxUBmVgt?XvVS1(u~74Pz(2ussznymNToN1PR>L zDrZj1nK_X_Et*l`%rlyuEoXK{E!>f-5)=VgP6U7wByb0?j4~`I%0L3ODEfd?(kPO# zIFboP8SegL-kt00aaIY6maGz?XbB}qP!#3vua*&+l`9mHA%R*HslmBw6!lq7)Q4KU zpV!$Bt`ZbkT25q%5+rbExr|<|j1;|cOpOF;QB(^ju~CFZ-0ISL8Xq7{IVe8$$~g+;9@w3^`Fj#|8**EwfEC1}NBIV%>FAb}?q z$W@V5j8;V)`yhc@v|57G-e~1zIx8>K;{CkNnG7mHt2@(K-Jt{tJl#RAAWdfli3DoV zS`^NQqgATutWr^ncjr3iSExkp?ys57N*EO+ciC$$Dw;P1fm+Ttm-hE?t;XFo zKW>)Z`kZQx5+v{|0!?FWrosu-a=sU}ZE%SWP|27;2@>=xDSTz|64jb(&(8x1)Kb3@ z=9c9aW&$Nh(C?A(wa72@^sdlT3@1=a{Q{eN2=^2wP=W-0ouX;g(pItR_h^=aKrQ@= z-6gzi10_hXz2skCL#0YVpca?b*%6^>+;6G>`kZ<=5+u0YlD|RC6v2@?2Kpr*x9zoq`0fO$L!bl+vIk#H(rEHh|CKh7KrJe*+|OzI67ILu zf1Ogf5+tbI;OkFnT_5$|6a;EftMga7q36Nc37eaV1DlKZdVyS(~Yl-*pMpqEVnbeOlAFMC5m!@!?94pz-K_FRW?YZ=F$# zd7&1KP1sY-Ez2#;;{zo~kY9nXMab_8^1CSr)FOZ7b-a?MaS!3167pBB1PS~)MS4*| zem4byTI5|}cR%-A$5W#O3AUH~^-ic%K`s>%sKxb2-dDu^mPf8r4@ZIow_Ea8NTJqE zL7*15dh!k)?zhg&i4r9E`LqABeMzX7m?6LG=7n0^7uc8CV=&YcC4mwoxF09SC86Ff zqYNZai^m7aLN-Dp%Hp;{2@*UWsa~Oakl*!j+~AB4Coj|rjpoq4iI8WIHc)~@$ghOH z(hGT?6a;Fqze?Vl5%O@7KnW7~RiNudQxK?yF{^>k}hT3-9((iE;gNTWPl*F)L?|5hy|8 z;VQgKDDTPqR?i!T*>r?TpcdZstZ7yD7qP5Q6V04mVgzd8-99QY-CNSy&}*WZHEWDO z2@-fqkfxTR?SZXT!-s8wFMr~3ZdD%QW7CU4!^EJmOf-tD6jGrLx?V!O8Y z-pdgqP=W;B5~OK&;wxFhUOwl|&|f7`3vZy-wC;N=SmlBxeaqgB5vYZC`=~_8yk)I~ zEUkUnbJIEsZplUhZwaCZ;9Lo7dDe-(BlGe)2m-tD6j zD`H=^M!gyIP0t%6P=W;B5~OM0l*ny8U;c>iWG|IKExhGg(>gB5V%;8a*|();j6f~C z+ean3ZhUHP%%q8g{4oM0NZ>6&bW_vH%VzPoETThCl|U`L7hBWT{&mEpx`?x{#R$~G zyM0t5{;*+=Yx1%*j?7&AaYR!J0O`R~50O%tuB%JweP1 zweV(h88ZksW`MjX8gOsxRSAkq1jHro?dwQTjAA(VHfq|4UFF5;yOm8Y73PInco({i zuY?m{p%z6>?rps)F~eI@a158lj^W(<+L54m&b=vE)0(d-ELN3XZgOwOyif~oPuH|O zC-aNmp;#2PD9Uti>s1MgcLl_|?hWrqQ0(j86s&2Do@5eJ-nuGFg?XVC-nXu46u0}F zxE-}9B6n}=RS8-f_+V||-U*KctrOgvf;H{0YX^M?_UE>^tuQatQg42zHI5I~IL2fD zMV-HUM1oc_aC0xMqkPUf3MI6Ta&HG#ZO~fH=d9IGf&{JM;2vID5Bdtwda#bY9&}5E zTC_GyYLerjEUl&$%Ngyvmad{zl2&&pK|;MFcg}lfyagLnl5K?qYTbD_Cva%E=C!|K zo%3G2*SuC)5-33e@8qT52j7biMj}uP*SJia2|}r2of;yc-l|(PXS4}5cL~(O6*9et z3!OuMpkTMCfz7wkH{eOZ@$EAO57#}F)QZw87Gw($-Sl4Cph`>}b6#i3tU_NH zX6&yry}Qd&gTFlFzc*>Hh<5j*jotB=q~xdQnfjZxZpd^EYoyL!Z!yub`&eBi$a<_} z-E-+$>_?<^Ut|oLADoiu@ryHtl?t_x?va>XZ%Oo?3+cm%GwCyX*~S|=yCrqZm{F#` zsBu1tzY65P*I#4N7x7pRlpqoKUs_3=>g@@uITEPF-$SyEpKmk`BT#}w^~$!5cWRV* z27y{%AATfl)SKEYjKEf0(6&!(8!AbcwVC;uyREL)93@D+za?JMKWxh!*1AZbR@oV& z16=bApM^icL)S9NR;-u5aqRay?PoLf#}{kx_mE7CEO@?#S}K$v(duiPPT#ufmedK< z!snzCC_&<2P20xN@eQBROHd2@n`-0J{`Rx2J-M)+{djs=+tQ6Roxi!{n*X-;MO`IO zf<&fcc3XLd{1Tfwfm+yxDuEIt+Rn3|Q>_t`!fYUcTKHsD8|V$bD{qg9^-;Z^;Th0p zAdxP~?(IW1HVkVkBv1?6P%RZokf<@jejaPydM(Tb5~zhwR<+S>!yGv}PZl|+8=nPa zx|a8-&R=QrGk>g~4zqz0B+egNB?)85!DkSt#owp0jV|>zh7l-1Vp@yuByl?Twr3Ei zbu)gOBwoK|g%Lgb7n71)->32B>rz>!2T#?!{3R%tYI(7TVFXH$FlRNE#IN-t5QdZ2 zi@e4Rv|;!h|2ova2a{!$#BQ`Jh8FPQRbnVj}6|< z!#R~&c_Zw3pah8-Kh>4=PnET>C<6)9!stV-2TG6_-=&x=?T!lR!fYUcTB%2tICB1X zah1$BuFDYv$EI2;lpt}q!yHLxUG{reTOom3*dnS8lps;9)@W&C?k_jPY#@PJ_+(WZ z=#lT8=q8`@@ey}*^x!Ii5+vG`8ZGHnJFkWHT_jKo=SS5BN{}cLm@aKR*mo(+1`?=+ zv$kpj#|MrHEUikQ1c|-%Z^{w1&PpFPqL4r>oKaO93)}Wd;<47CRwgg+1#m_%tpH@Y zTjlUkixMQrw!w7D*%=Acq7|96aq8#rdY}Y})Mw{RZ{LvC|JpH9ulUFBGQINS|8bls z(C*H?!1E6fYEI@aALiMU_G zqa})|gWT@C`WgB|W|@wDCvA-rS2M}NUYr) zpTukDLMc{vNT3$^O8LxFzBNDz5^37>mBgXd5mu0HUZ{m{EK=|7)C!XR`hB(Ms|5CN zB*yL?BUh>CU(6gf29ZE5`g^Q1x>DG1B}lB^8ZZA|xN)YGHe3R=aNbpIVE-9i%#?kp zy>AD{C2kK@36vn=+qp^-=evZjCXhfa@|BW^xMFc7NUZfPlYg(5>sZ+Mz`Rgv{n|N_ z_&)!+aH3CIIS!VNFRUMXO_S-G<#b*<%XGxGvnxTOT+$t zJu2OiHjd=#7gi4>PzybuYNL7XjItijcRZUkD3k3Oy65f2@2}+FBfh_KB}lB$ZTduq z#wp)rxCCmUS5ixb5+tU5W82u-J;FN~X@fl+YN5ANZS48c_OB&NuQpm__)WIxjTMV| zX|%z9@O=JT9KA{#5u;aEf<(fh zIg&14JUoWOyiki`JDF3&)txIrVo`~C(#G3)&xh3m^Fpnbdsaze@ta4&2z(1Xxa$iB zzY$(FBKOCovM}G86pN!-wSf{Oh8(uzm8$*1-#{XPTIgL>8z@1d=y&O*$0&I; zO<2v5K&@#oOQ<#mTzDv3@pRW#{Qg3w`K^4x#&*QH@ayn56DUCfeT-@Y3DkPn?W(l5 zt=ELGzKaqhQukL_k4Jayne0TMnNlaUR9JQ-iZ8Qg)c41Q|C)gWYW@Fa93;l1v*)hW zRn9+S#z8Hd?bLdpCp%R9TiK#3-#x&qZJB_WWZBpN+#>jsyuhRmWiZk9BvbRD4pQzgt`)pTC0yYH^x#vI#z^@Wmgu zCh{3SC_#cw2a+~M+&f4%_@u%KX@5`TbA*sUEl#ryo8XfQ8y?K(=d+4Xf&`s%ByALY zvV?5#NrmUrmhtm>NJyX-r`d*0@JWRap2qq4%q5f{L8moI8)HYeARByAp|-DupU-td z0<}2JHf(}VDjZv}pP$c;LJ1Odo>Y*ZNB@J{X?*ZWg|&B&@bmdpNT3#{*@jKA%R+)W*auaCly}YKgG{yd7%UeIt5JH z82V;@oxa7PlL}ugKh@9Yg&~1joMsy~LFbWKHCs*g^O{Cu_=N|2ya*`$qI@mt6SpH$es*Kj|d--ZNgahh$| z1fNtmZCpn`pAm-=BYR3K?yK_p^x|A|Bv6af$!*0a70z!oAc|WTB}h=KOB?PJ^c8&QkK!kY z1Zr`bZMeNeY(IN1ihBu4kf7cpZMZ#A>>ZNR!#xoR)Z#STaC^Hbw6L;=dpk;ypiv-g zxFbsJtWn#;BMJ%B;xyZEN3EDNzm11SElQA}(d^~t;d%z~R;L~w_6$g%7N^;U>wUyK zTSs}=`=A5~@=DT%>*2)0Q{z1B;gCQrPO}Zyi;7)KCwbV5q67)@uF{6fzY{B}mXLA)kjkv_ryicwP=W-_ zcG8ABbBa|TjPvl!i3DnKnr*nVvv@IXkcVeylpsN~wzT0!0HV;g?jDW+kU%X?vkjZz zlM2@^Zs_4C10_gM^dW7yk&Jl!TrCerGDx5nr`d)ZE%^qmEbQTE2_;BS6eazN9g*=# zg-g#r=i!J93Dn{=+pq~fsc>AiJy9I>p#+KNCyx&B_~2;JKB@47v)@E*iA_)l)WZ1D zKB>^N^i@fq1PQX2#5U|w(YH|^O&e*^cVvk)KHQm}ztUu_SH7*M)7X@0dz>SI5+wL* zN~Wh~oI`U|Y6NPLkCBA!uaH0q68vo>+lc;nN0<#HP>Xz}By7KnHc)~Df9c3Jey{p_ zm<=RQi+sK$>=_4bpacp2Zjo*13+{*6KmxUB?vjK(*P;!SAkp0%Bm33l$xp*w$Tp7SE4NL~JWpf&{gj{Cmphfq9`8&yQ>);xl(8NYL|_e^1%3 zFfY{N`H^iz?7OZ63F^o4?4S+GA|yTNYHqcf9DaLI)Pd^i>d@lkl?*? zT=U91R@%Q{p)YY~dep*MRJDN;BzWf=+nAO%o&BD{wSfd`;Vi1!KnW7OD~)aRuKS{q zI)Pd^i>d@lklf&}k^VjC%+ITENveL)g- z42L#Qf&}lVVjC&@E)u9keOeNBEQ&Tzf&}krVjC&PAQGrWV^b1#OpP{Bf&}kSVjC%a z2@72MfV%&ynfU`eJ$XARyz$n-fn<4z?$6q9`w<}N7SA!dL;2@6m-&c+ zrKNq4>;CoKE%{B<_x_KRdLY5O9hq(sb%sjSqVEacY%wNk>yAzefm&E6P1|_bD+Vts z;n}>sj9Ap?fGpMh1=9`QOUU`2=<mv*-E#2=t zuBm8LwVr3<`fN%)kl-DTOuzE&G%D589C4ydrRts+FTSD>sD*W+{hVV5iZ`c^@QmFs z+IP0bLs_Z<6GtTRUP8`yRlgSuEG_lKLA^!nZ+$(VXI-Jx0}0;Y$n;mks!*wlM|Tyo ztd5?MSNAIfYGIw|v^Tm#;c>%>p2G7M=uWBH&gm4(I}SPD*SBa%&fmGTnl@$22vP8( z@t)_R_jyr*1n+QUI%d@{BCbCgDgyb&dOEGBqSPF?Jax%;Z|l6{kn`26K>74xVK|zH7)j7MypnpZHam8 zUgFjR3FZ^=n|-fb&{UJ`XN^ZKYIom=aOK5MPowd%bo#CD@T-7 z=Z6CR(1>#Dfdq{%N!w$PMy++_rELDtsC5a{!a7MWYE3QL+Rt8;yrm@Ax0C;n`LY+q z(n{}Ry}RT+f5`i|^+19=k)*3ie?=b7%6d-tLmtj0Pz&oMXB_K6wNZYaacDM>1kWtw zYh}JX<6vo}r?wVd9q2D+duq2HNRZdIOC^0f%?8$$mLK~=vw=&X7S>75&X#dvl0P&% zOM+)%nwMn0q1o9jt(?`Y$<-(LL$jJIL4syDN!#-v&79WDW5)SIGp9?S7S>5dGFJL6 zQ~VssIBml570ux?Uyfv)Hnd{~iU6#)c1-byA^^7@NKiB&X**`1D8uSIXo^3F9c8!# zYGIvZ)Mw=x@u{DqKBxb1EK2c?%$K7+EUk=|tk(-p@`s`&X(JRTx&%c|GHu6KWe4@P zJR>LjLlK!vpcd9i(>5ITT50a|_iv#H*%@mbw^M8=^W_K`OG{rsjWY{* z{Y}~=?x5eDaZOft?r1rag|8+h5$wM2OG)556A8*m&NxiVRcdhllON?O6$#YB7LhAR zGj7$n#Lx;-&QaV}NYH9h+OXH0v`RHI4o>e6tx{bAwXmh-YTHl0;|M+v0LL?(lrP(@ zMbb-QBZ}SuxCD+hBiNk4rx{0llHP)i*jXaglk(7gxJ#*p#rsdZB$P)qIYNT37> zy758Uc>axF!)zddT58`#8z@17?z)gRD!p?z%mxyurS=lEff6M6Mih>sj?7I%zYnHH zpceK}l|Ts+E0@@BTY3)(KQ#gg)S}WRajEQgGFU3q;u}hwvZqd<1PN*dgXxs5iv(&> zt4o4?j9PP)Ai?*7u#J?x1PRol-XjV2uBr``AVIxS5-EE-5~xMvMiM-)s5Vf71mD@g z^+-8tkw7gP&6405RkeWb47=bA@+9Xtx{CmWH$`S*za z$|X?Cu@TYlN`fUwkbm@YFNx@PT>`Z*X4JGo+pl{6D77K#bnOuq?!3nxr@Ytlqu$Gd z?|seRx3_9p$G3dQ#i$0AhgvA%Ti;mgY~HkCCmRino8arP=LOHf1p^ctNYJhuUDDcP zL(^&(T2donej79rl$=SJ{(3dlw6}__jRGH*1dTVJ9KH z-Ta=f)HvN!#naltypW*XLz0ep60mDrzSI{i+sDFkZK{uWs(`&6zccRGr_?Z5CeJ$1@NExxgmOSO4a zlduy{(jM#~au=BGncHo%iFqMGJCwXk$Mq;crTWR&U#!bN-E-#HOoc!#Jb_Bn4pkZ= z8t5{#;TgN&nh&-3hF#8g>DV!0=U<7>nu~;Q-|(bO$Sg1~BzP1sU9jhTD%GuK z4aBYCbv*6PA?%c!mbEI2858n* zs_dvLFfSz7V=%qezn4mtG$l%``toVi@K_9<{d4djhri z=4Q_K;FeQiCuWU$Grh<#cSBUZaxDesg#>$7rf>Xol}eR%_eEc;Ulv9c*x6noP>Ve{ zm&!iy8C8~&R%>_{=o`?TI!ht#bOHi23Gptl9#Uz6R5>Ei*dfWnx^A3K-`lBXz!9a z-@9Y$3yDW-BnXrsvEsm(0MmaJ=aWKWa_3oophJ^Hep`eDYSG{2-d;W_NZJU_DzZ@8 zKrOy44N3(B)x-Su@z04|56lY*s-L9YwldrNb1jkEN+puDsMU?+CrHo3d~H}kKR*x5 zi*K3ZQiYx%5cJH=Cr_jO{LC>gB&aV)+U{5Bc3(6T-i`Kizd{1FsE0}$c5kP?YyGpe zwx9bhYVnPHT&hrS2ZF|j^=tjMejXo~7ZNmXB<+qtYtEStejbBJpcaj0X~XsmG|nya z41%mvpmGpRypZzZ8g#`IyNw;-;yEW6A>1W@L1ZvSNA@?HN zGY-ukR`mJVex5&2i*Lo`QiWz5AZU)V4h3fW`_LSPc_Be_SCDCU9<^&4Wmw z7R`^+hCMseTx)glO!V_yi&}ioDCZlRoq?eF+`7MPl0P(`yOMB%X*XuDvVAtw&oKj9 z=d`26ws{QNCsR;dVqHi(!Ow9CYVmEWOoSpCASm{+I(qx~IrhQ4kl+?!+KsQQji>wh zIle*ywfH%4sqCnaVmNEj*%p3|;ZTcjrsaG?Q6CUb?{u_gz4p4l3B`$+7ZTiin08}P ztJIIL(;IZnLISn8Pjjj42)SIrM%Is~V*MQNq88uc%lU>PWFRP}wz_P7!_P4_=7j{0 zG^X9S-8#Ctl%L~vBv6aTKbOkhQ%!3FYyT_H`+04ET72U%=Nnp0072^yYr+@5B=Y(L z^Fo5X64UM)$7=BM)Qn=G|K~CqYYRL4Vt6ur{ z=F4-?ivG^JgWj||7Dr84Ho`&)68k5P4lr##$w@@3I$6YvJ?eUlyv?mUIlt7|#+(K> z48Ez0wVn<-XYh?$oNl$BfB$H-rkk(h!G}?UiVRjt)%(5YB>i)}Y)T0=t>O3o^Yts7 z(=+W(KS?-cN8;;K?InF^0-t#D=&cRD&dp!()au$(Ay7*#)wZ$6eOq^y^-O-$$wEmu z!S%E2k+=U%--8uZJ#)=A3c<9ag)O3KTe=C+Yji))#7EH<-+jhf@8vZuHK3dH}2@=@S^wai@;^Od*4?Xb^hBjWxY}-y4&f;_e8~Pqdfl<&m#$^ zwn)sOZzi}@UpAdgrRx7mOEI?5r=E@N(<=mO@vU~8Q|zZhiD=WNy|~eHk|&|@A7;1~ z=gV3uvAJYd(eTu#p1*GIH&McAhZwQNUTyE6SeI;k65Csxq80s&HeV|QYVl2fT&nLo zq$T3cKLf;Zd8y=w$BQ^%BI9`7=G0GS3a71c{qFb4VLk8!z2T-^2Zz zAXZhG;yKZzjDZrSxm27l=A>z#Z%YuFhK=`h+E~ep5+r7p&o1d6`KHl(hAve`h{WDw zJ(UaHQV7&?TIB2Z9}saMb9bR%>gqXAW0%i)YCrAmuRBkZ)BiTN&kJvSsF+S)r0nS< z=6^WAlk!fM7 z)5nMvTMK&l|7elTj0_)p)daXU9)O=1u z`#nsp^+S|a(6sbj;zhw?tv%}=Kahm%4b(nJ{JGVBU()SyBH8%rViPeb?|Yu>%bt@r zdO8GZsinHSufBNDwWcS1Yyp9iaDsb`U5^UcYKhq|SMc+$>O^S&0Z&xl$#t3!%sF$`Q4V&wKsGLp&rAe)!8lKAZefUNp)VJ)%Q#bNN6K zo-db*3Drior|*Mo@Q`~9Y*AW#ciL_QC*VY=e}(DN{yXF$)x;I`r?NG&4&?miFG zUpAMYp9e~ip!&HjEnC+tndfn0sCC`EP>a(}yOF1U`i}Y4-dl;G)^#OFsP&+pXcn1V z&d)uOOXAdnMwd*7MweSBIR?!u?^p8k7{sz8K_gAl?ijQNWv%7sF^B|e(O8i->=8v{ z&??dPJ%4Bnx_Pk{myoqog2tdFhQ|9tW6;eD2^xcvX74KfuJwGdo1gtI=7n11iDXW; zzalSc-7!Y{*^83r401_AzBUN{QQC05sMWRmNI!c~@`J8~W*nDLZIBnW_O&16XD^Bb zYH^xvyI#~vSUJES@}jN;39OTxKdi@ped_1=BfK7*Z)g^EODN}B%lE=0e`v0CC0q}O zpcz%B-MQ8pwR*Cj=US{SYSEl1bFybnnrp2!qo(*nbFG^fYq1U1QVE)Ctro4P`$KcB zn->x^*Gk%rGOVIUrujL_z`Rh4Vidc6GFm!XY`B&A<_P~k!F(n~NHQ;uyd0WiIEsnn z-|c8=YVHK9`a7Ta*OvPxh!P}J8x&tzYqSaeP<-X)g<71JEiFq$@s-ti@Kk>&zH%i< zV4XCLB1BX9Q8M2@@)36-32^is$T(;hHmg6%`YR0Tcr& ziXv}4)mzQe%d9W|^=GQSQ$0Q1UDaWFcCN}{R8;yLxNmW!=buT(gGuY_+vbYnK`*hk zT^tW;ZvA*Lnfqsx9L9tEv@$mITGo%b(VdJ3lSNY-=8EINKnuBoR!GQrFlpT4hnnJe zP;+HkM#y+j?}U-Q&H*GpEq+5 zWIuSbU(7p?c&8JuW<}99efP_La?+gazzzG#%Fo)BF_~f0IV-Fv@tvY*_3GhDygB#Z zfej{j9WRQ`x~wLPTs8jTjDTP*-oq3{9kzN&ZM69Hn9nHZjU-b(3t&S~3r-xx$K4NL+JQGbJjU zc8poV1g{Uv|Lzv;6`wA-`r_}3fM6}&Cly6s?$a$^D7nh6**<11nX}ehVMQqa@6TF`#ik83BS9A4c)Uv^D$P!-p z3vEa(Dd5RbOIX4LuSaT4)Lfw^GQnE>^@w~$H|2ND6>2+c@hWLZNQ+94E3_z(U zqG|)ZC~NWRdq_x6o#37KmY$j=Oz@rn^#+NykCc6d%ESW7%AeO)8oS#7{Ovlj2_2nmS*lt2W)5+)=v(48FE zouW~O<_b{;6RaiChnAJw-!74i+CU`3TG$6du@4avEh({wL`!@xCM1fg1C5PHniI{Sx)54Mcscg?%8nZ!u0JLLy5g5LxoQnBYB38oefnsT)Z2$^>gk zRI4`JHw_XYYrR5*%v#t7f?O42Y9b^GPb>=OdojWLy)@F-vO=WK1Z&BdL2bCNIVRoJ zOmo#)MiZ=seIUqHar{Aqj99d+Fk<0*F~NJ|bX25mu(^zim|!g#U#SiE9gB>-w5P_% zi?y&11i31X)rgSMoe~(`@x7SfeS|uK)V>`fNG4cIMybws>6b_{N>v*erLq=wjv!aX zaV-&B_uWqkjD-1KOz@sd9c|~)GZaVL{$8xbBk#bU$1GujcZCKqLqM<=kK5&(iGCmC zZyH;fd^n_IFwd~-oK>|o1M>M~gH5oL!_RR<(RWWDUjXsHVeNvs3?_Ct_mVo$joahD zGE;sUr9{UDtpb9zcz#CW_RAhuV#i*)BrIWK_Ov-_qwC$Dh>bVTe@%(In{5{mti|(M zGUGMo*TT*692fPfAIx|$(X``2weeCToazWo5Fq(pti>~W^1Yhm2E<#EJC-o)<`OASs7xzMP}&NzQJI{gb929Q`$Tv1l5v& zU@fZ)Zmo!FVwNRLSUukG`H#c~)po4W>x?k&#adRU-P#?ss9;@<32Tq<9`l#jC`g?} zZI?P65Ugdb8SAP+&k(FAGGYD7jH&pWAoV^0!CKZ|xz%v$;jr$kJsBiS-2Tz1S!f?a zcG^^I93gcUwM1%UK(H3CM=Mcn1WT9@d);8eJ%{8<38}-u+BR!RZoAofy*_ysHlz+C zS6;$|lv@>Sxc4DFf)dh01O#iz`>3*YZtZuKkUEUg^%5rJ{i_XEucVeJA$2$)SWD`a z-pSP~sfpQQzl&PpB}_;?RvWH;NNtac{ce^C){;7{cXI6mxheL$Xdhm}gtSMs;o3Rs zEJ|1U-GE>%Y3J3pKCC^15-4SsFd_X)HQtBoucY5qLi*i+U@hsD)Q0P?P&<$-)E1U7 zA^oG;@cph5((eWYYf10woqP^CwRkNo=&6I~l?k!uBU$+}?9|f> zhh9^e?EF;QgwLMmv+nr>JDK;HI-&5#n93wtvPZ%aK1Gi26h+&eRa1C&BdNRHn*}zQ z7#5sbxA_0+3fD>9{bhrl0)n;p6#FPTF?qM}%T<-h#s_Sjuoj;p7ZNjDE-SpypfWk? zu8k9xFu~{1MbQ^qtSRh2vNCye(wYJjti|WvOBBA_#>p`QE0ePuEi14VpCT6$V=mn~ z>C~t)+3@N23M^rQ&!dyl{kTbT;?T;Z|BrP6!CHJ$eiU_nbN6J6^DC2Nd`*G1_!PO2 zxURZovdJcu$=m@G3oK!R&!dZ?dJncu-n&x92DQBdg0=W;ec4ZaYx|^QpUPy>TdfPM z#iz)H#H<%OCP!>qnQUKgQJy7C@OgAm^m^1edFryttu9x?ON~HA|S_^XOzhb?=VJMweD5SMT&iK(H2{-ycPN zUu&P-cXVa4XTD{YwfGddkZ8GGyJWMiE0bXx_sOz^2|kZbMqXd+k=xfM6{? z@n62xZ`&+c-Munt{m_goYw;;^A#s1Vos#Ret4v08&u3Y}1fNG2MGx(N4+z%cKNm#NDeo=LU$AFovhdc9F>CRubs^E?_&)hJTUI8| zp4d5N2@`y-UKH)}!%O##l3caCJtSC*|8=0Ho3+xFvZ}*LusAJ{|0KYFE{Gz@Rkh`c z?<={g1&vevLL2hr)%N5pVM0noX?I?qly25amkHJib0u#uOK(t5+Q;86n2@)r&xf-V zwU%V9mhin;i%TSm`n+40{ZQ)eXsNp_k-Dq*#mSLeZrVPw);?ImgtQw+>&cPQ2D4~` z719QoU@iUwgPchE#F{L%bA59B^MMIz^J)VpZbs3omuwoJeqCj9<-Lotd@t7GKQL&2 z6{Ek}O8P6-lAcKKi?cXGLi)s*`b5nY{u052^p8s8bkZnl@Md$()fUg)hCa~~ti}Iq z(7rvkzMZwC*Vg;u+|rQPW4m_o=Hfp_IRBwG@Lvfg#Fr?IlU(KhoP9cIt{VTiBm9Ra zSWEmP{XOE>-W}um;s=L_A7m}@aC%>y@fs51Yh(D@{hY7$_hLf)uF^R5R(9PF=p6T! zH#np1>2-WB*5dy{Xv`4%n1Svk(SY6;=i!Eg#3eDsCHmy}cLfs?qbQ9Ng5@8eFYcwe z`t;XM1-=(+N!+D(a(_{h_$s#einSzi();3E_>j21x@Ela+8EB?iwTM6l*VbwQFPM7 zyXhNzu+2=waGqc-iBa{s`+wB7A2*2+i(V|TC~HZS>2f9KEQf@|yD`PP{$5N-?5i|R zo|gTIe>c=zO+Ng4#JiqgEs4(cy8CmM#O+y&+gVE@a=kCkqz(xg8)Rv0;P1tRj1!c` zDcw=@?ecfB=o#L6b8CzyJi%HrD$?ujpJ6h_$_K|2^qtw|8OV1%Xlz*h>Qn!apOUsE7p>+q5dVv{U@&Z7Ok@_WpuZ^ zUWbGwOoXSg-*U`n)hMf7dv**6*5d!U$!gy*y_F~|@075F2|oQ@i9BqS60F5zTo9ir zQOuS8kqJ-8M0kFCvn^T|=*d07T0BCIBAWNf-uU81`fuW|qE)r?UTByfapUv(F88jk z?R3D(I{d5glMOGHUXON5|#pMYSk{inRIHkwa-KnR-m$+Cor zEua5TZG5xC93glHk_pyou=8xSaq8b62to5cF-w?ueddE|qg}_3g`jz#fMBhAEBdL8 zqaXfV2%7haS;EBBM=w?zjnDW?2%7f^2-dp%;9vBA!Yzh22TlV!A8ZOjUAE4Tp#8xnP4rkt^WXZ&%vtz zEMY?IbzA!!ywbn~Ye}hBq3*i(fw@ZL3U!zzOh~y^!G?Puw9Xk2tR=NaZMb^Ht1>KM zLf*gHaP^8;ewbh_sncr1wGUohVhIyckJW~2AJU?1of9p}-;1@RHS2ZP&S{+!t=3DJ zkoKrHTsxOiO^P$Z0l`|*$LPO)(Z>YqoalYLgbC?as_{P16NM{^Ot99G`);gv^7HMQ zE6lgEgo&FDYOFTaA@WSHmf7B9{BntwXq_|95+=;vseAq`1g&!xm|!g{_5O!mSQV^u z7FfcBmD?%r^%H{DIRk>VtS&5_Jxd6xB?Xo+VekLp{T>j4YGOdJmeuKs-Tx;9)%JuX zOjtes<+uexP>Tu(*0R>T!~9=`pmolKB}`a*e0Ss@LQu~T5Ugc=Ov5d3Rv7g@2}_u; zex>c^4TYc{E+ANI^U1@t-z^NoS}Lt`CM;oM=xxKb-)%GrUl#KWJrk@YxmEw+o`bvr za^)pVh&}Zm?m6Vibwv?%m)r=>HI%NGFd^kuhj#AX2Uhvem!J+a!CF## z^iHl`k#|Nd@e(HF{i_XEuP6ct2-cETpm%cZgQ5)7b}wN<>ap5z?SmqjfM6|Y&3Y%- z&S{+!t=3DJkoKrHTsxYaQq zs;hm{@1hs=5+u#x(IPA_4?`h4e|`8oJrtc8E)!ba-QowdDEgtVBYBB}_=UDY5SRV1l*eJt>j; z&b@>QdH;HS-Fn6MVlAm}N~G3ZFJVIJv0h)deek_lOWKVRscq0pn2`3U*Vk?5d@t6* zAARvYQu`7wVM6*9y}oXL#rI+@{AU<8Qu{xS2#tdGKLc)UCc%?!4f8T2B|#3T9VstWuL=Km=JqK4_zAMlf&30HIa#?_Bq^>co}VNqSZ|2Ed^{VvDJcr?FTUkZV#T@PF(1kLXjSi;1&$1YSG%bPzU1docCV6BJRd|rj; z8{DaMUmr`DnE%)uwXxB2_}+j=cTBL>$^U&+ZM-@SXEgE%k|j)xoOp@a_}}sPZi41_ z6DC;e{5LOG8wY-Yb2)h=%n~LBzPG9y-bcsnOZW9L!CL(~ujz)ey8f!teSIup;@FSI z%z}-ncb4w!V}iB*{&37J*m!cAE#*0QW`ZS5h`rji&%v`FOt6;Nu3h^aJj22gCZycz zV8gu+p2cB;wWJK|V8gu+n%_-W!i2nkwc+X&&qgu9T2dF(hO1XR7mM|ghQEj+(PV>73CRj__W*%kb+BwbdqMdsQ6Vk8b@jlQK1@pTB z!CKPC=$%}D#WSfaVWR%mo2m^zYhd%cc_vs(`bxF24pGe#Cd^*_9e)kycLRd8%yx7+ z&dj9w-7HI(uyQ-%fzt0-m|!g{^^QMYS{2OiW?907z5gc;F8z*$3D&Z@kUaq>U{X!Y zvV;k%$8Rhy{f>nR*0MT1wHBv3Qj3aN!i2TQI|i42$HD|_S=-!WVCi=(EMda>mF@2< z{f>nR*0Mh4(oJ!GBK2@FOPIK1$Z+j<2e&W%j)e)<+WL~=+V9?0gL5Ehem7U-LOXZwgS=Wmu$Gje`a$i2_21ko!KX3zPLqBn?(@os*f*#(Pt^-IQLysOuJybEs-BX&S93IYUcvlI;4lH2;{UdDnco(a$F}^Zog0;|B!iJA`l|byk5+=|; z!iJA`3$TG6n+euJUkMvN-o+4Il5S4a5#iuon7C*zobL+Cc2U5+=|; z!iJA`m4F9jg0;|B!iJA`vDY9*ZD9!$e=Q!P-?8|3R|$O4$^>iG|7^@G*zoZ#zI=&6 zu!ITpk87W!*zantm|!jRu4|v8*zd-8a+WZG{&DU5DE7NCN|y=NLhriveH8oM80%^* zVFLXlZ1{K=D{)#&m|!jRm9XLC-K^C_mN0?-5jK3hi?6m~)OIFV3%x6B_;^5tSbOyGuG&EC!1rP;YnwjaRU3#MSi*$$D?Z*;0y9QTu$J{PKHk+n5wQbHn5cin zaP4<}ylcH^K(N-e*HPPsbiKfA@nGoo0QFd_9= zZTNUMDfYXFcm2IsOX{><_wlY0((j^ucnK5I9@U1Acavhj8xX7|tvQcY;Nx8-&@-@v z3F%ifp7Zgp68LVL3D%N6Ms4_bR|$A&mM|gxquTJjs1nle1_WziHX-PDjX=EXB}|w- z=RfXkJ|rIck_JvHOfm;=^y5oVj(uO^9BrVcoQhKwr6b z7U!%U{o=d3PReYvTWvtF7Sgzr^Mn1LIxT*v-MGw-KdvdTgbDO~u;IM(zQc}-8w?qh zIlg+!gbCI{8a5m;VNSRB(w_%qwra8$qE|0r0zDsWxF}+?5mGy{OZI=MLTXFG5+-^EoN$yvgLlv~}} z_klXw>g#SbC|xF43+c7*19kSfUJutu9Y*PT2@~@E)rPMn$+zb$s6j1Zg0+x_4M(8P z4sW`3PUtH^N>}<_lx{$=v8YRBurR6c2NfEtn|A%slx%mTGk32fjTSwZVq07 zB}`a*bkP#(tn|A%slx%mTGlolfjTSwZca)$W(gD4uehiWbyoV_96Tr!tYv+SBT#3h z->s3_60?K}o|ARGsPwxvQX>O`wKzs~J+<_^O0a|pvFGPxqX>0Y`rR4G6%(w5G}@qh z4%AuccU$1eS;B;ri26Zax>@OWD^R*juolv=;oo3Z`rQh|4lH3p-oM)LwIr5)w*s|< z3D!ayHXMOEEB$T;u>(t(kb0~(Ty004m3}va*ntVwLK-%Fi;AV+MI?jT?j=k}OVjwu zwOZ6!>30z=1tUn-LK-%F&k#$$i--*E+)J2{enoBg-Y1rRH-p%L3D!ayHhd2kKht&$ zB1`l>Uc!X*d}_n@yYc?x$7j%sGQnC%!^T?TmZg(GAl~&7Cd{7m2D0}<{t`PperwkY zEBF)`8+l|Bmu zEvr3K+)0HgwFD9-?EM$#$jT6`Wv#%SD95>C2@_V2-CRaFg0-wQyOZ&lU;t4liLs?CJH?=kNq; zNvT)W$c$I&`|uJbq}=p+>ih5nYf0_V>#6n1OPG-Nuh&!Sl_yxsPJT;mA4)*Ngw$ib zp4vVqxd?#U2NSGi&yngs^j?rKVfNe{8Qb7{v6j7$R6nSt3kefeZmE9I6Rc(RD%GDW z0SOcK{!{(ACs@ncM`~Q61SCvYJx+~FJi%Jl&Qs$nB_LtK+GA>bq(H$ZwD( zOjy6-)`ZIuti>k^hIN-EOz_%md4jdfOQb$WEqY5xm=Jq<-9Lx_`V8OmVFwMq&z3i+ zY19mSONi_4+i-buPq2guc{fV%}t%sP3|a3G`jC z;rm4YKA2!Fe2WgkojJhooFz=44+i1;c5j0T){<{Vb*Iz1-;A<^3HTD&@IK1hV1l)9 zHUJ3kIX%G=Cg2nQ{{(B9ZTAf?mlaExFnc~`@VR1wwX6)?x5#XRB}`bk`Pj$XV1l)* zE)>71PN`RrFk$cC$8g>T-;1@ZeYkJK`8im^gwucy{4Pq3EMX}zA> zKD>kpsmFRfwS9PkwWMw8_0)FmB}_|u&Q_G(DutPl7;^DC~buoAaHHN633EK0<i>Y}fjwPi8Xh-l$91}>J7RU49N*qg= z;FHF}l{h9?OK9~gK39GvjwPjp)plrE z+jOxgR*!Ax8B0nD*l+|^k8S4}6V_^>Wqpi`sj+%&JI`2BO2CFAuzGAe&zP{@2U;A@ zyI$0Gp0R`pK55ML)VA}C3Dy$2+uE@Kyn*dJV@WBo_BnXx852mGmXt!(+OYw=n(aJe zNhz`ReZX_t&NC*EHZ6IZYQxtOzw?YGr37e4@Xj+PkTxx;m1@J)cHVi$l2QV+Z&7~d z852mGmb5Ol;aV;4JYz{I0owNre&-nzNSl`Q64h(R28jA>=NU^%3DCZWOJoOx?mS}x zY15M4PHp&JG+D564x-mQOG*jQjyQFftK*AWjLN+C_TJemc59GdzU-O&&C8#wT{*p8 z{)rX&e5;;oYR@~QpO-OmODXw&-f z`JdFr+mBx=Hul-_!noHj=VktQ_0=p(m>9D2Dy8!?P8QW+`!()+%1!koJKQy1&?iM!k^#3P3s6L)=i|IA$xKf#lPKg zM5gQTMgalZwD$dSnc6t$t_fn}gU3#bTTMAuW?7<`B~0-1MbW#%&WvBp|0}cV_T^b7 zSgZT_E7ZnDr{WZkKEIqBPyO-C%(71xW?8~SSXT27>>jt;xpSuPQ@aOcHEQPDdf&yP z9}dbbiVpi?|M>Uq+h#f)*DB`nVdAgdUQ~L;$#s&eR+U}jZFX#)8UJAWfMBf;mOZWI zw&RqSggD`VPVtxD@0h9l?>;e0N(s~$M;vy1tN4G9ZIU_h^Zf$?v}p~y_HMPY&&3~! zjoQf-@%wEXWQOc~aLf`WUfOPs($jaCFT}y`?h-G0?e~g9di97|vf0dgRO{c%KCa_C zMbT>uw~ZSf^Hs&i2OksIV4~lHH!8h+gC$~P`U9KBFQ5BP#kfT$1O#if+&Fl5l&^Sy&r@QSloBWfM~t4nJUe!i+bUW~{bB-X(`tCkiE3l^hkuBT4PRN3 zJ?+cuD|UI|Ydpa*5JsE%-%5CXhC**-L9{(dIu{j?t?x^H%ETKGGDwdRZOu8vt!O2CFAmOg({p<#!wYvzlWW&&x`>e+thD%faq z)P|BPsU?LkPx!e8wS*;1$op3sH71I>9W|ja_lbJBe$xlXERmX61skZZd?&5#g~LDG zEQi|85+2Ys6PEfwXCzcgQ%k5!Ehpy-#7-D;;v^eOSVT^f5}i-si28R~E+3*)KP;q7Ql> zFOmLA)945JPTGqmmmPaR4!tN#n2;V-Y2Q;PgSI|Ahn|`V){=f+p97vj{@}83+ob8; zN9W)TSW-%$6dcj>$=#EB6Hdv^JE(g=fHtkeX3kR^nJzDi4e@HpEuWvBgI8k-6XLs+ zc3$n>M(vV4k32Wm{)TFJH7^lAsA>3DzLR?AWbga>=HQ)K!i0EgrF{gD^t*3hZh}Mr zOt6;35BeO4IOKhNv48T>AA@sY^Su36O*H6kINxWWP-IMw$tZuQJ=(#$$t) z@WkBlU%VR-piOJdet)ZtM$5a&lS>qyjC^on4pBHun2^X)X%~f$eWzbC_mOLI-<|hV zmL(Fms}{xsd?y`EB#Zh_&S5mc5+-D1QH>n>5leFH&y#Z)u`t0}GTy01zl#x)j*5~~ zj<`05Q4vc@3D|H%&rVk*pZ+*GciJh31O#Z)I^dKBYU7~ON6F|;#)HYIYp%^SS`u&yrFCPwt3^Rt!s4{%}q1^8ejg#RSr(WwuAR+oYJQ4+@izt7?`oVfNgU@A3N3 ziP*&EWcDrQXpxmMet@f%X`lHnrxO|wf)_nBW$5*+Yq1TP)qh|;R*0Nsd z=IJ=|Oh&26)ab07j8Y3MDJ9Ul9ML(`C+T)duiTL*tqch3eV}E1Ww&ns5gRhvPFhbn zHn(QYngUChu>P^}b7O@-Pd#{L5A@UtORT3pHhV*f4S0j23kSm+By58T^AbOGxm#?& z<8-*DDtFdrI|c-6nYWvL?}I|f_&jOVqcSJs^Moa(1j@=0d)!!^yf>|7?!OJ&1%!Du zXqgZG{$J0F4H=&&$NZ}WymP`5Cd}{FUOi6;8J{O#uG$e1K*AD>06u^Cza=&hWvrO7 z1)_|=1``&2{CmH*#0DZ68J{DP2?*A*D60Kt9||Gk^JLL!t7>F?p0K2pKv_9r_Ul_F zE1G{?vzNR{CM;Tlmc@22FZ@Pq$oM>Y`QG_867?l4VZ!3MCt55LLdNIG183INNMxC? z#3IX`FI`$<;~j}!-#_Z!8i`&58%$VK+jiAYVnfE~h12f5u0|r{fM6|)wa<9qcOhha zUZ~mZiW(W8CoCx?P*#qZcHvWnsQ*4S8%htsghk=dvN6NvpGDPCgwe!C|Jk)hMiU83 zn6PoePh&nu=xDXXUK>pVTp}cmOQgTHQ&jNie~OGX@-o70vk-&Xz7hN>PfCJ z@{;lSJu>nN2-dPO+_Hb;pD!{#FZBQO^5!x=Pgqh)psXArF9j@c^X;nVCqKK-#os7iUao_{?A)34 zGN`*ODJ4(}j@YD-%l`i6R++u_9T*UxP0Qxa2L1V)v?ytVSsBr1&<0t;gtRoJT^qza zT;~sV&&Y@#ZO}`k)oL2;obTl3`rbXeRR(;RpR0FI((x1^ZxmL;+t0X&zy2#r-UV? z1Zs&R#B;`bo_uZwo|6frO-nqS+VGw;zGXyj%xottVS=B}&1`RW)kzt6P9|7OJe=Ba zo)a_MyIyciM&>f$IlY95u&iW6AAi*9a;zH!WhGID(uhmA6g2jUcd0i7YZD1en2iz84dS`KT$91rfF-2_O2HA$WajaWX_GTePrN-K zK%17WO&I4RYXt*J2H_z!D~8)Rza1QJ-7qtUc*ktaDC-9Y$% z@c8$^5+-bZ#?9}t4JKIYwS(Mza-V&$JAnz7Fk$mEZl1av!CLqy8lI!aHP~gr1WTB( z*&R3EUXEa`m-@T;{UIA+w+Is~VM2Vn=F06BDMzpt{^y71@c%3F?}H^w*c^~sn_wGE zu-2L5-CD@^=VOh936?M+v6kk_t+A9NSPTD;!*jIBV($kNEMdZCklb2PIfAt|f9q+r zank_o7GZ)VOi1jjgxf7rj$kePg9p#y|Lx@82TPc+c_z26#x|H>tqrEQb-d?a!TKN* zEMdatncVtdIfAwDuRT1+;!nRUvB451Y?jKcbFvL4SZl9c+`4Mi9y?N)USpI#mgbAC=a%;kDg9+B^S>x8Aw?7+e+f1;837gAuYun`r*1~@Y z@f^MH#2ywVSi*$Ogt;~Pas+EVnsIvqmhOyQFHEq637HSjT)AB@hf1!Bg?6emfBzm6C9U@PcB+I_lB6-X1q|M z9AAe7OPH{^tkiezV|CV&8d`_}XgbAC=O0Bz|U@iRbvTPgl5+-aWEVT`Kg0-Z_ z(CevviI*^8^JS@hi6>Y~`Z2wp+9!Gm6E#2RamoQ=TWvP9;Cs+&r z2F3eG^-*5Jgv~9b`Y2DZmUvXXp6YA8gbAD1O7*p#U@h_UdObB}@De6$wkKMlptR*8dy`DN&^AaX(ZZUPN<_XrqzgqDesbfwrVZ!DXQ^%a1U@aLT>-E&JvzIVo zbBn2CXHT#e{?Ci&NSy=l5+-bBGIb8X6RagO7J5B(F2hThu=&f>xeQOR7XHtR=SZEC z@e(F%#xr$J#uKb1^Few&b#BQ^m?%Hj$M<3_{L2{6kvd1_B~0+#Vi?Kry;y6nUDnQc zh6GEP;2F>I1Z$aX|9@v6Q?rB#v*%`nITmGtwX6*5{)Ih7Ot6FrD>pZ@U5;Qat5?%b z!rmw*Si*$8e>dM=j$kco9~1jvj~5dxVZ!RM+v8P^U@dFs{-56deXxWHYmaVif^9It zTGn6n>xDHICRoCR^($_Tr5wRp*6(irB6e&s!4f8{e{^d_ z0|^t-9`$-^JNE=@*$PBzf29N@Oh~_?*Hil|Pq3D)q@?z{N|5+#1>xCs@nYKU3o?B_Lr!;vl`A8ee&WwQS`#HBM9l5+)>`)9a~m zq9<6(RvYkVz^9)Kr!i3BR==Icj22Ze- z%yCr16Q$0VcnK3Suc6md=Sw`nTDFrbb>7F_OJ;GjlkI4@yB=F9YY>O7n$SWD&r^?K@jqL(ls^L~0gbw1G(ti?MI zqiFP5os!WPRmNlT_vQPK-bnxK@aY9ByB)c&`zr-@H1hX~QS|kYy^}XvR>tE7HZHIP zrHlQvcx!y8C~9-yUP|0r|G)xEnBZ?0qv(YvTWhXf-u|+HV6E4yf7QPj>^*ppjMaX* zzd~(HoO@&NRU_IUa)q`X5>5IvRbupiA1bhf3I0kjitT+t%|PmHCGR; zd`NP2(aO!$#)H#83BGDXPmNr`1B676Up7+W*_~DtSi%H<^A|GcvO zSgZLLGc;FEKk|{}>dsvk7w`seer?m>OFj5=@NL(}hbtP7`*)CxT6Z~~u6t%ql zan047^LGgd)>?4(zcg2`PF^Ls`gOD0)kc>NErM_25cMHfh$cf~^id;~_&DDxVF?rA z*Jn?3JX&*=Y_w-Uu-5T+7W7X$+g^Y%XS>!-)W$NMMOz^i^Q8Z|qKKY*ysEl8$>KqWP_0Zd+^bg&IVT~kLfAoC0Oy))>E=*A1}S12?*9Ya^DG>tCroqlbX2b)|qOf@5Z|aUpry`3c12~AS51K z{EQN>HfWNtgbDuAMn?3Hf1tVA;j=9Rg0=2Cu1<5+ZLb$4SMPlGz1rCFutvexPMGCH zt`HT6#J$Zoh*7%B{%>`GB~0*lI`X~q$(zJ@gPV2uCLmbrrQ6BZ`xsSR? zuKpa@Qf+j5dwlS%3|35#D?~^kabvcf68n9BYJnw8gkPn6m~XGSYIWNl0l``?9o|TD zHT~a%WX)@jvn*l4-lp3*K(!nF!CKau2W|R_5Y*1ItYz&S`-nn<`jVI>Oju9kPT!;cDj-

      |cuwL7pb4Pu9K(Lm1i56|^=cDL|2Ceew;lAtH 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 TOh}8;nbd#I6>D*cMA82PSIojI literal 0 HcmV?d00001 diff --git a/kortex_description/meshes/base_link.STL b/kortex_description/meshes/base_link.STL new file mode 100644 index 0000000000000000000000000000000000000000..2b29c6a982951e4bd54ac66423ea884cb696eb1b GIT binary patch literal 172784 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 literal 0 HcmV?d00001 diff --git a/kortex_description/package.xml b/kortex_description/package.xml new file mode 100644 index 00000000..fe825e87 --- /dev/null +++ b/kortex_description/package.xml @@ -0,0 +1,21 @@ + + kortex_description + 1.0.0 + +

      URDF Description package for ultra_lightweight

      +

      This package contains configuration data, 3D models and launch files +for ultra_lightweight robot

      + + KINOVA + + BSD + catkin + roslaunch + robot_state_publisher + rviz + joint_state_publisher + gazebo + + + + \ No newline at end of file diff --git a/kortex_description/readme.md b/kortex_description/readme.md new file mode 100644 index 00000000..9d38b9fe --- /dev/null +++ b/kortex_description/readme.md @@ -0,0 +1,15 @@ + +# Kortex Description +This package contains the URDF, with the STL files of a Gen3 robot. + + + + diff --git a/kortex_description/urdf/JACO3_URDF_V10.urdf b/kortex_description/urdf/JACO3_URDF_V10.urdf new file mode 100644 index 00000000..99df3ea6 --- /dev/null +++ b/kortex_description/urdf/JACO3_URDF_V10.urdf @@ -0,0 +1,494 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kortex_device_manager/CMakeLists.txt b/kortex_device_manager/CMakeLists.txt new file mode 100644 index 00000000..cd5b2aaf --- /dev/null +++ b/kortex_device_manager/CMakeLists.txt @@ -0,0 +1,40 @@ + +cmake_minimum_required(VERSION 2.8.3) +project(kortex_device_manager) + +add_compile_options(-std=c++11) +add_definitions(-D_OS_UNIX) + +## Find catkin and any catkin packages +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) + +file(GLOB_RECURSE msg_list RELATIVE ${PROJECT_SOURCE_DIR}/msg "*.msg") +file(GLOB_RECURSE srv_list RELATIVE ${PROJECT_SOURCE_DIR}/srv "*.srv") +file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") + +## Declare ROS messages and services +add_message_files(DIRECTORY msg FILES ${msg_list}) +add_service_files(DIRECTORY srv FILES ${srv_list}) + +## Generate added messages and services +generate_messages(DEPENDENCIES std_msgs) + +## Declare a catkin package +catkin_package() + +include_directories(include ${catkin_INCLUDE_DIRS}) +include_directories(include ${PROJECT_SOURCE_DIR}/src) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) +include_directories(include ${PROJECT_SOURCE_DIR}/src/util) + +link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) + +add_executable(${PROJECT_NAME} ${cpp_list}) + +target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} CppKinovaApi gcov) + +add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_gencpp) + diff --git a/kortex_device_manager/RosGeneration.py b/kortex_device_manager/RosGeneration.py new file mode 100644 index 00000000..a93fc316 --- /dev/null +++ b/kortex_device_manager/RosGeneration.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python + +import sys + +from google.protobuf.compiler import plugin_pb2 as plugin +from google.protobuf import json_format as json_f + +import jinja2 + +import itertools +import json +import types +import os +import sys + +from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto + +#Class that holds a protobuf message and some other details needed by the generator(jinja2 template). +class DetailedMessage: + def __init__(self, message=None): + self.message = message + self.HasOneOf = "false" + self.oneOfList = [] + +#Class that holds a protobuf service and some other details needed by the generator(jinja2 template). +class DetailedPackage: + def __init__(self, service=None): + self.name = "NoName" + self.service = service + +#JINJA2 function to render a file from a template. +def render(tpl_path, context): + path, filename = os.path.split(tpl_path) + return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) + +#Main plugin function +def generate_code(request, response): + + #The context is the object sent to the JINJA2 template + context = types.SimpleNamespace() + context.serviceVersion = 1 + + context.detailedPackages = [] + + MainFilePath = os.path.join(".", "src/main.cpp") + function_list = [] + fileIndex = 0 + + for proto_file in request.proto_file: + context.detailedPackages.append(DetailedPackage()) + context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] + context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] + context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") + context.detailedPackages[fileIndex].HasRPC = 0 + context.detailedPackages[fileIndex].HasMessage = 0 + + HeaderFilePath = os.path.join(".", "src/node.h") + CppFilePath = os.path.join(".", "src/node.cpp") + + #We lower the case to respect ROS coding standard style + CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) + CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) + + list_detailedMessage = [] + + # For every item in the current proto file + for item, package in traverse(proto_file): + context.HasOneOf = 0 + + + if isinstance(item, EnumDescriptorProto): + context.item = item + + ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) + + with open(ros_enumPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) + #If this it a message + if isinstance(item, DescriptorProto): + tempMessage = DetailedMessage(item) + + context.detailedPackages[fileIndex].HasMessage = 1 + + for member in item.field: + #If a member is part of a oneof, it will have this additional field + if member.HasField("oneof_index"): + context.HasOneOf = 1 + tempMessage.HasOneOf = "true" + else: + context.HasOneOf = 0 + tempMessage.HasOneOf = "false" + + context.item = item + + #If the proto file contains a ONEOF we need to generate a separate file to handle it. + if context.HasOneOf == 1: + + #This line gets the list of ONEOF that is in the current message. + oneOfList = item.ListFields()[-1][1] + + tempMessage.oneOfList = item.ListFields()[-1][1] + ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) + + with open(ros_oneofPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) + + + list_detailedMessage.append(tempMessage) + ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) + + #We call jinja2 to generate a ROS message. + with open(ros_messagePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) + + #If this is a service (A group of method) + if isinstance(item, ServiceDescriptorProto): + for method in item.method: + context.item = method + if "Topic" not in method.name: + function_list.append(method.name) + ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) + with open(ros_servicePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) + + context.detailedPackages[fileIndex].service = item + context.detailedPackages[fileIndex].HasRPC = 1 + + context.currentPackageName = context.detailedPackages[fileIndex].name + context.currentNamespace = proto_file.package.replace(".", "::") + context.currentFilename = context.detailedPackages[fileIndex].filename + context.item = list_detailedMessage + + if context.detailedPackages[fileIndex].HasMessage == 1: + #Wecall jinja2 to generate a prot/ROS converter for every protobuf message. + with open(CppProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) + with open(HeaderProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) + with open(CppRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) + with open(HeaderRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) + + fileIndex = fileIndex + 1 + + context.list_function = function_list + + #We jinja2 to generate the ROS node. + with open(HeaderFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) + with open(CppFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) + with open(MainFilePath, 'wt') as mainFile: + mainFile.write(render("./templates/main.jinja2", context.__dict__)) + +def traverse(proto_file): + #recursive function that browse a protobof item + def _traverse(package, items): + for item in items: + yield item, package + + if isinstance(item, DescriptorProto): + for enum in item.enum_type: + yield enum, package + + for nested in item.nested_type: + nested_package = package + item.name + + for nested_item in _traverse(nested, nested_package): + yield nested_item, nested_package + if isinstance(item, ServiceDescriptorProto): + for rpc in item.method: + yield rpc, package + + #return a list of everything found in the proto file + return itertools.chain( + _traverse(proto_file.package, proto_file.enum_type), + _traverse(proto_file.package, proto_file.message_type), + _traverse(proto_file.package, proto_file.service), + ) + +if __name__ == '__main__': + # Read request message from stdin + data = sys.stdin.buffer.read() + + # Parse request + request = plugin.CodeGeneratorRequest() + request.ParseFromString(data) + + # Create response + response = plugin.CodeGeneratorResponse() + + # Generate code + generate_code(request, response) + + # Serialise response message + output = response.SerializeToString() + + # Write to stdout + sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_device_manager/build/.gitignore b/kortex_device_manager/build/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/kortex_device_manager/kortex_device_manager.sh b/kortex_device_manager/kortex_device_manager.sh new file mode 100755 index 00000000..011eee96 --- /dev/null +++ b/kortex_device_manager/kortex_device_manager.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +python3 -u RosGeneration.py + diff --git a/kortex_device_manager/msg/ArmState.msg b/kortex_device_manager/msg/ArmState.msg new file mode 100644 index 00000000..d85bd69d --- /dev/null +++ b/kortex_device_manager/msg/ArmState.msg @@ -0,0 +1,22 @@ + +uint32 UNSPECIFIED_ARM_STATE = 0 + +uint32 BASE_INITIALIZATION = 1 + +uint32 IDLE = 2 + +uint32 ARM_INITIALIZATION = 3 + +uint32 ARM_IN_FAULT = 4 + +uint32 ARM_MAINTENANCE = 5 + +uint32 ARM_SERVOING_LOW_LEVEL = 6 + +uint32 ARM_SERVOING_READY = 7 + +uint32 ARM_SERVOING_PLAYING_SEQUENCE = 8 + +uint32 ARM_SERVOING_MANUALLY_CONTROLLED = 9 + +uint32 RESERVED = 255 diff --git a/kortex_device_manager/msg/BootloaderVersion.msg b/kortex_device_manager/msg/BootloaderVersion.msg new file mode 100644 index 00000000..d6dc8352 --- /dev/null +++ b/kortex_device_manager/msg/BootloaderVersion.msg @@ -0,0 +1,2 @@ + +uint32 bootloader_version \ No newline at end of file diff --git a/kortex_device_manager/msg/Connection.msg b/kortex_device_manager/msg/Connection.msg new file mode 100644 index 00000000..ca08b6c8 --- /dev/null +++ b/kortex_device_manager/msg/Connection.msg @@ -0,0 +1,5 @@ + + +UserProfileHandle user_handle +string connection_information +uint32 connection_identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceHandle.msg b/kortex_device_manager/msg/DeviceHandle.msg new file mode 100644 index 00000000..49f84366 --- /dev/null +++ b/kortex_device_manager/msg/DeviceHandle.msg @@ -0,0 +1,5 @@ + + +uint32 device_type +uint32 device_identifier +uint32 order \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceHandles.msg b/kortex_device_manager/msg/DeviceHandles.msg new file mode 100644 index 00000000..739f4ff3 --- /dev/null +++ b/kortex_device_manager/msg/DeviceHandles.msg @@ -0,0 +1,3 @@ + + +DeviceHandle[] device_handle \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceType.msg b/kortex_device_manager/msg/DeviceType.msg new file mode 100644 index 00000000..b4dd97c2 --- /dev/null +++ b/kortex_device_manager/msg/DeviceType.msg @@ -0,0 +1,3 @@ + + +uint32 device_type \ No newline at end of file diff --git a/kortex_device_manager/msg/DeviceTypes.msg b/kortex_device_manager/msg/DeviceTypes.msg new file mode 100644 index 00000000..5a55df07 --- /dev/null +++ b/kortex_device_manager/msg/DeviceTypes.msg @@ -0,0 +1,14 @@ + +uint32 UNSPECIFIED_DEVICE_TYPE = 0 + +uint32 BASE = 1 + +uint32 VISION = 2 + +uint32 BIG_ACTUATOR = 3 + +uint32 SMALL_ACTUATOR = 4 + +uint32 INTERCONNECT = 5 + +uint32 GRIPPER = 6 diff --git a/kortex_device_manager/msg/Empty.msg b/kortex_device_manager/msg/Empty.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_device_manager/msg/FirmwareVersion.msg b/kortex_device_manager/msg/FirmwareVersion.msg new file mode 100644 index 00000000..ef44f90b --- /dev/null +++ b/kortex_device_manager/msg/FirmwareVersion.msg @@ -0,0 +1,2 @@ + +uint32 firmware_version \ No newline at end of file diff --git a/kortex_device_manager/msg/IPv4Settings.msg b/kortex_device_manager/msg/IPv4Settings.msg new file mode 100644 index 00000000..5be19d99 --- /dev/null +++ b/kortex_device_manager/msg/IPv4Settings.msg @@ -0,0 +1,4 @@ + +uint32 ipv4_address +uint32 ipv4_subnet_mask +uint32 ipv4_default_gateway \ No newline at end of file diff --git a/kortex_device_manager/msg/MACAddress.msg b/kortex_device_manager/msg/MACAddress.msg new file mode 100644 index 00000000..a2764fac --- /dev/null +++ b/kortex_device_manager/msg/MACAddress.msg @@ -0,0 +1,2 @@ + +uint8[] mac_address \ No newline at end of file diff --git a/kortex_device_manager/msg/ModelNumber.msg b/kortex_device_manager/msg/ModelNumber.msg new file mode 100644 index 00000000..adb82526 --- /dev/null +++ b/kortex_device_manager/msg/ModelNumber.msg @@ -0,0 +1,2 @@ + +string model_number \ No newline at end of file diff --git a/kortex_device_manager/msg/NotificationHandle.msg b/kortex_device_manager/msg/NotificationHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_device_manager/msg/NotificationHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/NotificationOptions.msg b/kortex_device_manager/msg/NotificationOptions.msg new file mode 100644 index 00000000..6ff46842 --- /dev/null +++ b/kortex_device_manager/msg/NotificationOptions.msg @@ -0,0 +1,5 @@ + + +uint32 type +uint32 rate_m_sec +float32 threshold_value \ No newline at end of file diff --git a/kortex_device_manager/msg/NotificationType.msg b/kortex_device_manager/msg/NotificationType.msg new file mode 100644 index 00000000..79dd058c --- /dev/null +++ b/kortex_device_manager/msg/NotificationType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_NOTIFICATION_TYPE = 0 + +uint32 THRESHOLD = 1 + +uint32 FIX_RATE = 2 + +uint32 EVENT = 3 diff --git a/kortex_device_manager/msg/PartNumber.msg b/kortex_device_manager/msg/PartNumber.msg new file mode 100644 index 00000000..0cd6468f --- /dev/null +++ b/kortex_device_manager/msg/PartNumber.msg @@ -0,0 +1,2 @@ + +string part_number \ No newline at end of file diff --git a/kortex_device_manager/msg/PartNumberRevision.msg b/kortex_device_manager/msg/PartNumberRevision.msg new file mode 100644 index 00000000..90cb8f65 --- /dev/null +++ b/kortex_device_manager/msg/PartNumberRevision.msg @@ -0,0 +1,2 @@ + +string part_number_revision \ No newline at end of file diff --git a/kortex_device_manager/msg/Permission.msg b/kortex_device_manager/msg/Permission.msg new file mode 100644 index 00000000..c5399e9c --- /dev/null +++ b/kortex_device_manager/msg/Permission.msg @@ -0,0 +1,8 @@ + +uint32 NO_PERMISSION = 0 + +uint32 READ_PERMISSION = 1 + +uint32 UPDATE_PERMISSION = 2 + +uint32 DELETE_PERMISSION = 4 diff --git a/kortex_device_manager/msg/PowerOnSelfTestResult.msg b/kortex_device_manager/msg/PowerOnSelfTestResult.msg new file mode 100644 index 00000000..53a0cef1 --- /dev/null +++ b/kortex_device_manager/msg/PowerOnSelfTestResult.msg @@ -0,0 +1,2 @@ + +uint32 power_on_self_test_result \ No newline at end of file diff --git a/kortex_device_manager/msg/RebootRqst.msg b/kortex_device_manager/msg/RebootRqst.msg new file mode 100644 index 00000000..befd3fc3 --- /dev/null +++ b/kortex_device_manager/msg/RebootRqst.msg @@ -0,0 +1,2 @@ + +uint32 delay \ No newline at end of file diff --git a/kortex_device_manager/msg/RunMode.msg b/kortex_device_manager/msg/RunMode.msg new file mode 100644 index 00000000..7b3b1a3a --- /dev/null +++ b/kortex_device_manager/msg/RunMode.msg @@ -0,0 +1,3 @@ + + +uint32 run_mode \ No newline at end of file diff --git a/kortex_device_manager/msg/RunModes.msg b/kortex_device_manager/msg/RunModes.msg new file mode 100644 index 00000000..15c2a7da --- /dev/null +++ b/kortex_device_manager/msg/RunModes.msg @@ -0,0 +1,10 @@ + +uint32 RUN_MODE = 0 + +uint32 CALIBRATION_MODE = 1 + +uint32 CONFIGURATION_MODE = 2 + +uint32 DEBUG_MODE = 3 + +uint32 TUNING_MODE = 4 diff --git a/kortex_device_manager/msg/SafetyConfiguration.msg b/kortex_device_manager/msg/SafetyConfiguration.msg new file mode 100644 index 00000000..6f1f0819 --- /dev/null +++ b/kortex_device_manager/msg/SafetyConfiguration.msg @@ -0,0 +1,7 @@ + + +SafetyHandle handle +float32 error_threshold +float32 warning_threshold + +SafetyEnable enable \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyConfigurationList.msg b/kortex_device_manager/msg/SafetyConfigurationList.msg new file mode 100644 index 00000000..8ae23b3d --- /dev/null +++ b/kortex_device_manager/msg/SafetyConfigurationList.msg @@ -0,0 +1,3 @@ + + +SafetyConfiguration[] configuration \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyEnable.msg b/kortex_device_manager/msg/SafetyEnable.msg new file mode 100644 index 00000000..771f7400 --- /dev/null +++ b/kortex_device_manager/msg/SafetyEnable.msg @@ -0,0 +1,4 @@ + + +SafetyHandle handle +bool enable \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyHandle.msg b/kortex_device_manager/msg/SafetyHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_device_manager/msg/SafetyHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyInformation.msg b/kortex_device_manager/msg/SafetyInformation.msg new file mode 100644 index 00000000..66be9094 --- /dev/null +++ b/kortex_device_manager/msg/SafetyInformation.msg @@ -0,0 +1,16 @@ + + +SafetyHandle handle +bool can_change_safety_state +bool has_warning_threshold +bool has_error_threshold + +uint32 limit_type +float32 default_warning_threshold +float32 default_error_threshold +float32 upper_hard_limit +float32 lower_hard_limit + +uint32 status + +uint32 unit \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyInformationList.msg b/kortex_device_manager/msg/SafetyInformationList.msg new file mode 100644 index 00000000..ff11edbe --- /dev/null +++ b/kortex_device_manager/msg/SafetyInformationList.msg @@ -0,0 +1,3 @@ + + +SafetyInformation[] information \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyLimitType.msg b/kortex_device_manager/msg/SafetyLimitType.msg new file mode 100644 index 00000000..f0beacf4 --- /dev/null +++ b/kortex_device_manager/msg/SafetyLimitType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_SAFETY_LIMIT_TYPE = 0 + +uint32 MINIMAL_LIMIT = 1 + +uint32 MAXIMAL_LIMIT = 2 + +uint32 EVENT_LIMIT = 3 diff --git a/kortex_device_manager/msg/SafetyNotification.msg b/kortex_device_manager/msg/SafetyNotification.msg new file mode 100644 index 00000000..36d88894 --- /dev/null +++ b/kortex_device_manager/msg/SafetyNotification.msg @@ -0,0 +1,11 @@ + + +SafetyHandle safety_handle + +uint32 value + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyStatus.msg b/kortex_device_manager/msg/SafetyStatus.msg new file mode 100644 index 00000000..b82ac221 --- /dev/null +++ b/kortex_device_manager/msg/SafetyStatus.msg @@ -0,0 +1,3 @@ + + +uint32 value \ No newline at end of file diff --git a/kortex_device_manager/msg/SafetyStatusValue.msg b/kortex_device_manager/msg/SafetyStatusValue.msg new file mode 100644 index 00000000..2ea80554 --- /dev/null +++ b/kortex_device_manager/msg/SafetyStatusValue.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED = 0 + +uint32 WARNING = 1 + +uint32 ERROR = 2 + +uint32 NORMAL = 3 diff --git a/kortex_device_manager/msg/SafetyThreshold.msg b/kortex_device_manager/msg/SafetyThreshold.msg new file mode 100644 index 00000000..b50b25e3 --- /dev/null +++ b/kortex_device_manager/msg/SafetyThreshold.msg @@ -0,0 +1,4 @@ + + +SafetyHandle handle +float32 value \ No newline at end of file diff --git a/kortex_device_manager/msg/SerialNumber.msg b/kortex_device_manager/msg/SerialNumber.msg new file mode 100644 index 00000000..9831a3ee --- /dev/null +++ b/kortex_device_manager/msg/SerialNumber.msg @@ -0,0 +1,2 @@ + +string serial_number \ No newline at end of file diff --git a/kortex_device_manager/msg/ServiceVersion.msg b/kortex_device_manager/msg/ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_device_manager/msg/ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_device_manager/msg/Timestamp.msg b/kortex_device_manager/msg/Timestamp.msg new file mode 100644 index 00000000..5e60508c --- /dev/null +++ b/kortex_device_manager/msg/Timestamp.msg @@ -0,0 +1,3 @@ + +uint32 sec +uint32 usec \ No newline at end of file diff --git a/kortex_device_manager/msg/Unit.msg b/kortex_device_manager/msg/Unit.msg new file mode 100644 index 00000000..c019aeba --- /dev/null +++ b/kortex_device_manager/msg/Unit.msg @@ -0,0 +1,28 @@ + +uint32 UNSPECIFIED_UNIT = 0 + +uint32 CELSIUS = 1 + +uint32 AMPERE = 2 + +uint32 VOLT = 3 + +uint32 METER_PER_SECOND = 4 + +uint32 DEGREE_PER_SECOND = 5 + +uint32 METER_PER_SECOND_2 = 6 + +uint32 DEGREE_PER_SECOND_2 = 7 + +uint32 NEWTON = 8 + +uint32 NEWTON_METER = 9 + +uint32 KILOGRAM = 10 + +uint32 DEGREE = 11 + +uint32 TICK = 12 + +uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_device_manager/msg/UserProfileHandle.msg b/kortex_device_manager/msg/UserProfileHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_device_manager/msg/UserProfileHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_device_manager/msg/non_generated/KortexError.msg b/kortex_device_manager/msg/non_generated/KortexError.msg new file mode 100644 index 00000000..45392615 --- /dev/null +++ b/kortex_device_manager/msg/non_generated/KortexError.msg @@ -0,0 +1,3 @@ +string description +uint32 code +uint32 subCode \ No newline at end of file diff --git a/kortex_device_manager/package.xml b/kortex_device_manager/package.xml new file mode 100644 index 00000000..9c848b67 --- /dev/null +++ b/kortex_device_manager/package.xml @@ -0,0 +1,30 @@ + + + kortex_device_manager + 1.0.0 + The kortex package that act as a device manager. + + KINOVA + + BSD + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + message_generation + message_runtime + + + + + + + + diff --git a/kortex_device_manager/protos/Common.options b/kortex_device_manager/protos/Common.options new file mode 100644 index 00000000..5f3020ab --- /dev/null +++ b/kortex_device_manager/protos/Common.options @@ -0,0 +1,4 @@ +Kinova.Api.Common.DeviceTypes long_names:false +Kinova.Api.Common.SafetyStatusValue long_names:false +Kinova.Api.Common.NotificationType long_names:false +Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_device_manager/protos/Common.proto b/kortex_device_manager/protos/Common.proto new file mode 100644 index 00000000..50f762ec --- /dev/null +++ b/kortex_device_manager/protos/Common.proto @@ -0,0 +1,152 @@ +syntax = "proto3"; + +package Kinova.Api.Common; + +/** + * list of possible device types + */ +enum DeviceTypes { + UNSPECIFIED_DEVICE_TYPE = 0; + BASE = 1; + VISION = 2; + BIG_ACTUATOR = 3; + SMALL_ACTUATOR = 4; + INTERCONNECT = 5; + GRIPPER = 6; +} + +/** +* Message contains information about a device - device type, device identifier, and the order of the device within the robot +*/ +message DeviceHandle { + DeviceTypes device_type = 1; + uint32 device_identifier = 2; // Unique device identifier (used with other services) + uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation +} + +/** + * list of possible safety statuses + */ +enum SafetyStatusValue { + UNSPECIFIED = 0; + WARNING = 1; //warning safety reached + ERROR = 2; //error safety reached + NORMAL = 3; //safety is off +} + +/** + * Enumeration used as bitfields wih permission field + */ +enum Permission { + NO_PERMISSION = 0; + READ_PERMISSION = 1; //refers to a user's capability to read the entity + UPDATE_PERMISSION = 2;//refers to a user's capability to write or modify the entity + DELETE_PERMISSION = 4; //refers to a user's capability to delete the entity +} + +/** + * list of notification types + */ +enum NotificationType { + UNSPECIFIED_NOTIFICATION_TYPE = 0; + THRESHOLD = 1; + FIX_RATE = 2; + EVENT = 3; //Event type. Only this one is supported for now +} + +/** + * list of units used throughout API methods + */ +enum Unit { + UNSPECIFIED_UNIT = 0; + CELSIUS = 1; + AMPERE = 2; + VOLT = 3; + METER_PER_SECOND = 4; + DEGREE_PER_SECOND = 5; + METER_PER_SECOND_2 = 6; + DEGREE_PER_SECOND_2 = 7; + NEWTON = 8; + NEWTON_METER =9; + KILOGRAM = 10; + DEGREE = 11; + TICK = 12; + DEGREE_PER_MILLISECOND = 13; +} + +/** + * Message used when no information needs to be exchanged between client application and robot, and vice versa + */ +message Empty { +} + +/** + * Notification options + */ +message NotificationOptions { + NotificationType type = 1; //type of notification + uint32 rate_m_sec = 2; + float threshold_value = 3; +} + +/** + * Handle to a safety + */ +message SafetyHandle { + uint32 identifier = 1; +} + +/** + * Handle to a notification + */ +message NotificationHandle { + uint32 identifier = 1; +} + +/** + * Message that contains a Safety event + */ +message SafetyNotification { + SafetyHandle safety_handle = 1; //safety handle + SafetyStatusValue value = 2; //new safety status + Timestamp timestamp = 3; //event timestamp + UserProfileHandle user_handle = 4; //user that caused the safety event + Connection connection = 5; // connection that caused the safety event +} + +/** + * Timestamp based on epoch + */ +message Timestamp { + uint32 sec = 1; //epoch in seconds since 1970 + uint32 usec = 2;//microseconds after the second (0-999999) +} + +/** + * Handle to an existing User Profile. + */ +message UserProfileHandle { + uint32 identifier = 1; //User profile identifier + fixed32 permission = 2; //must use 'Permission' as bitwise +} + +message Connection { + UserProfileHandle user_handle = 1; //user profile handle, or set to zero if no user logged in + string connection_information = 2; //connection info (ex. IP address with port number) + uint32 connection_identifier = 3; //connection identifier +} + +enum ArmState +{ + UNSPECIFIED_ARM_STATE = 0; + BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection + IDLE = 2; + ARM_INITIALIZATION = 3; + ARM_IN_FAULT = 4; + ARM_MAINTENANCE = 5; + ARM_SERVOING_LOW_LEVEL = 6; + ARM_SERVOING_READY = 7; + ARM_SERVOING_PLAYING_SEQUENCE = 8; + ARM_SERVOING_MANUALLY_CONTROLLED = 9; + RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly +} \ No newline at end of file diff --git a/kortex_device_manager/protos/DeviceConfig.options b/kortex_device_manager/protos/DeviceConfig.options new file mode 100644 index 00000000..8dba0376 --- /dev/null +++ b/kortex_device_manager/protos/DeviceConfig.options @@ -0,0 +1,7 @@ +Kinova.Api.DeviceConfig.ModelNumber.model_number max_size:25 +Kinova.Api.DeviceConfig.PartNumber.part_number max_size:25 +Kinova.Api.DeviceConfig.SerialNumber.serial_number max_size:25 +Kinova.Api.DeviceConfig.PartNumberRevision.part_number_revision max_size:9 +Kinova.Api.DeviceConfig.MACAddress.mac_address max_size:6 fixed_length:true +Kinova.Api.DeviceConfig.RunModes long_names:false +Kinova.Api.DeviceConfig.SafetyLimitType long_names:false \ No newline at end of file diff --git a/kortex_device_manager/protos/DeviceConfig.proto b/kortex_device_manager/protos/DeviceConfig.proto new file mode 100644 index 00000000..d9a28047 --- /dev/null +++ b/kortex_device_manager/protos/DeviceConfig.proto @@ -0,0 +1,271 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.DeviceConfig; + +/** +* Service to get and set device configuration information +*/ +service DeviceConfig {//@PROXY_ID=9 @ERROR=Kinova.Api.Error + + // Returns the run mode for the device + rpc GetRunMode (Kinova.Api.Common.Empty) returns (RunMode); //@RPC_ID=1 + + // Sets the run mode for the device + rpc SetRunMode (RunMode) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + + // Returns the type for the device + rpc GetDeviceType (Kinova.Api.Common.Empty) returns (DeviceType); //@RPC_ID=3 + + // Returns the device firmware version + rpc GetFirmwareVersion (Kinova.Api.Common.Empty) returns (FirmwareVersion); //@RPC_ID=4 + + // Returns the device bootloader version + rpc GetBootloaderVersion (Kinova.Api.Common.Empty) returns (BootloaderVersion); //@RPC_ID=5 + + // Returns the device model number + rpc GetModelNumber (Kinova.Api.Common.Empty) returns (ModelNumber); //@RPC_ID=6 + + // Returns the device part number + rpc GetPartNumber (Kinova.Api.Common.Empty) returns (PartNumber); //@RPC_ID=7 + + // Returns the device serial number + rpc GetSerialNumber (Kinova.Api.Common.Empty) returns (SerialNumber); //@RPC_ID=8 + + // Returns the device MAC address + rpc GetMACAddress (Kinova.Api.Common.Empty) returns (MACAddress); //@RPC_ID=9 + + // Returns the device IPv4 settings + rpc GetIPv4Settings (Kinova.Api.Common.Empty) returns (IPv4Settings); //@RPC_ID=10 + + // Configures the device IPv4 settings + rpc SetIPv4Settings (IPv4Settings) returns (Kinova.Api.Common.Empty); //@RPC_ID=11 + + // Returns the device part number revision + rpc GetPartNumberRevision (Kinova.Api.Common.Empty) returns (PartNumberRevision); //@RPC_ID=12 + + // Returns the result on the device power on self test + rpc GetPowerOnSelfTestResult (Kinova.Api.Common.Empty) returns (PowerOnSelfTestResult); //@RPC_ID=13 + + // Sends a request to the device to reboot + rpc RebootRequest (RebootRqst) returns (Kinova.Api.Common.Empty); //@RPC_ID=14 + + //Enables (disable) the specified safety + rpc SetSafetyEnable (SafetyEnable) returns (Kinova.Api.Common.Empty); //@RPC_ID=15 + + //Sets the Error threshold for the specified safety + rpc SetSafetyErrorThreshold (SafetyThreshold) returns (Kinova.Api.Common.Empty); //@RPC_ID=16 + + //Sets the Warning threshold for the specified safety + rpc SetSafetyWarningThreshold (SafetyThreshold) returns (Kinova.Api.Common.Empty); //@RPC_ID=17 + + //Configures the specified safety (i.e. sets error and warning thresholds) + rpc SetSafetyConfiguration (SafetyConfiguration) returns (Kinova.Api.Common.Empty); //@RPC_ID=18 + + //Retrieves configuration about the specified safety + rpc GetSafetyConfiguration (Kinova.Api.Common.SafetyHandle) returns (SafetyConfiguration); //@RPC_ID=19 + + //Retrieves information about the specified safety + rpc GetSafetyInformation (Kinova.Api.Common.SafetyHandle) returns (SafetyInformation); //@RPC_ID=20 + + //Indicates if specified safety is enabled (or disabled) + rpc GetSafetyEnable (Kinova.Api.Common.SafetyHandle) returns (SafetyEnable); //@RPC_ID=21 + + //Indicates if the specified safety is raised + rpc GetSafetyStatus (Kinova.Api.Common.SafetyHandle) returns (SafetyStatus); //@RPC_ID=22 + + //Clear all safety status for this device if they are no longer raised + rpc ClearAllSafetyStatus (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=23 + + //Clear a specific safety status if it is no longer raised + rpc ClearSafetyStatus (Kinova.Api.Common.SafetyHandle) returns (Kinova.Api.Common.Empty); //@RPC_ID=24 + + //Gets configuration on every safeties + rpc GetAllSafetyConfiguration (Kinova.Api.Common.Empty) returns (SafetyConfigurationList); //@RPC_ID=25 + + //Gets information on every safeties + rpc GetAllSafetyInformation (Kinova.Api.Common.Empty) returns (SafetyInformationList); //@RPC_ID=26 + + //Puts back all safety configuration to factory defaults + rpc ResetSafetyDefaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty); //@RPC_ID=27 + + //Subscribes to safety notifications + rpc SafetyTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle); //@RPC_ID=28 @PUB_SUB=Kinova.Api.Common.SafetyNotification + + // Sets the device model number (intented for Kinova Production) + rpc SetModelNumber (ModelNumber) returns (Kinova.Api.Common.Empty); //@RPC_ID=29 + + // Sets the device part number (intented for Kinova Production) + rpc SetPartNumber (PartNumber) returns (Kinova.Api.Common.Empty); //@RPC_ID=30 + + // Sets the device part number revision (intented for Kinova Production) + rpc SetPartNumberRevision (PartNumberRevision) returns (Kinova.Api.Common.Empty); //@RPC_ID=31 + + // Sets the device serial number (intented for Kinova Production) + rpc SetSerialNumber (SerialNumber) returns (Kinova.Api.Common.Empty); //@RPC_ID=32 + + // Sets the device MAC address (intented for Kinova Production) + rpc SetMACAddress (MACAddress) returns (Kinova.Api.Common.Empty); //@RPC_ID=33 +} + +enum ServiceVersion { + RESERVED_0 = 0; + CURRENT_VERSION = 1; // Current Version +} + +/** +* Options for the run mode for the device +*/ +enum RunModes { + RUN_MODE = 0; + CALIBRATION_MODE = 1; // calibration mode + CONFIGURATION_MODE = 2; // configuration mode + DEBUG_MODE = 3; // debug mode + TUNING_MODE = 4; // tuning mode +} + +/** +* Message specifying the device type +*/ +message DeviceType { + Kinova.Api.Common.DeviceTypes device_type = 1; // Device type +} + + +/** +* Message specifying the run mode +*/ +message RunMode { + RunModes run_mode = 1; // Run mode +} + +/** +* Message specifying the firmware version for the device +*/ +message FirmwareVersion { + uint32 firmware_version = 1; // Firmware version +} + +/** +* Message specifying the bootloader version for the device +*/ +message BootloaderVersion { + uint32 bootloader_version = 1; // Bootloader version +} + +/** +* Message specifying the model number for the device +*/ +message ModelNumber { + string model_number = 1; // Model number of size 25 including null character +} + +/** +* String specifiying the part number for the device +*/ +message PartNumber { + string part_number = 1; // Part number of size 25 including null character +} + +/** +* String specifying the serial number for the device +*/ +message SerialNumber { + string serial_number = 1; // Serial number of size 25 including null character +} + +/** +* MAC address for the device +*/ +message MACAddress { + bytes mac_address = 1; // MAC address +} + +/** +* Message containing the IPv4 settings for the device, including address, subnet mask, and default gateway +*/ +message IPv4Settings { + uint32 ipv4_address = 1; // IPv4Address + uint32 ipv4_subnet_mask = 2; // IPv4SubnetMask + uint32 ipv4_default_gateway = 3; // IPv4DefaultGateway +} + +/** +* String specifying part number revision for the device +*/ +message PartNumberRevision { + string part_number_revision = 1; // Part number revision +} + +/** +* Result of power on self test +*/ +message PowerOnSelfTestResult { + uint32 power_on_self_test_result = 1; // Power on self test result +} + +/** +* Reboot request with bootloader delay +*/ +message RebootRqst { + uint32 delay = 1; // Bootloader delay +} + +/** + * Types of safeties limits + */ +enum SafetyLimitType { + UNSPECIFIED_SAFETY_LIMIT_TYPE = 0; + MINIMAL_LIMIT = 1; // Safety that will kick in below a certain Minimum threshold (ex. Minimum temperature safety) + MAXIMAL_LIMIT = 2; // Safety that will kick in above a certain Maximum threshold (ex. Maximum voltage safety) + EVENT_LIMIT = 3; // Safety that will kick in in reaction to a specific event (ex. motor drive fault) + +} + +/** + * Information about a particular safety + */ +message SafetyInformation { + Kinova.Api.Common.SafetyHandle handle = 1; // safety handle that this information is about + bool can_change_safety_state = 2; // true if related safety configuration can be modified + bool has_warning_threshold = 3; // true if safety status can go in Warning + bool has_error_threshold = 4; // true if safety status can go in Error + SafetyLimitType limit_type = 5; // safety limit type + float default_warning_threshold = 6; // default warning threshold (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT and 'has_warning_threshold' is true) + float default_error_threshold = 7; // default error threshold (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT and 'has_error_threshold' is true) + float upper_hard_limit = 8; // maximal threshold value (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT) + float lower_hard_limit = 9; // minimal threshold value (if 'limit_type' is either MINIMAL_LIMIT or MAXIMAL_LIMIT) + Kinova.Api.Common.SafetyStatusValue status = 11;// current Safety status + Kinova.Api.Common.Unit unit = 12; // Unit that the safety status is in +} + +message SafetyInformationList { + repeated SafetyInformation information = 1; +} + +message SafetyEnable { + Kinova.Api.Common.SafetyHandle handle = 1; + bool enable = 2; +} + +message SafetyThreshold { + Kinova.Api.Common.SafetyHandle handle = 1; + float value = 2; +} + +message SafetyConfiguration { + Kinova.Api.Common.SafetyHandle handle = 1; + float error_threshold = 2; + float warning_threshold = 3; + SafetyEnable enable = 4; +} + +message SafetyConfigurationList { + repeated SafetyConfiguration configuration = 1; +} + +message SafetyStatus { + Kinova.Api.Common.SafetyStatusValue value = 1; +} + diff --git a/kortex_device_manager/protos/DeviceManager.proto b/kortex_device_manager/protos/DeviceManager.proto new file mode 100644 index 00000000..abdf4e2a --- /dev/null +++ b/kortex_device_manager/protos/DeviceManager.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.DeviceManager; + +/**************************************************************** + * This service is always present on every framework 3 robot + * Its purpose is to provide information about presence of devices + *****************************************************************/ +service DeviceManager {//@PROXY_ID=23 @ERROR=Kinova.Api.Error + + //Retrieves the list of every device that the robot contains, along with its type and order within the robot + rpc ReadAllDevices (Kinova.Api.Common.Empty) returns (DeviceHandles);//@RPC_ID=1 +} + +enum ServiceVersion { + RESERVED_0 = 0; + CURRENT_VERSION = 1; // Current Version +} + +/** +*Message containing a list of DeviceHandle objects +*/ +message DeviceHandles { + repeated Kinova.Api.Common.DeviceHandle device_handle = 1; +} diff --git a/kortex_device_manager/readme.md b/kortex_device_manager/readme.md new file mode 100644 index 00000000..c8a6c275 --- /dev/null +++ b/kortex_device_manager/readme.md @@ -0,0 +1,96 @@ + +# Kortex Device Manager + + + +1. [Content](#content) + 1. [build](#build) + 1. [msg](#msg) + 1. [non_generated](#non_generated) + 1. [protos](#protos) + 1. [src](#src) + 1. [srv](#srv) + 1. [templates](#templates) +1. [How to start the node](#how-to-start-the-node) +1. [Generation](#generation) + + + +
      +## Content + +### build +This folder's only purpose is to exist as a temp folder during the generation. It should not be used. + +### msg +This folder contains every custom message used by the node **kortex\_device\_manager**. All the .msg files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .msg files used by the node **kortex\_device\_manager**. + +| MSG | Description | +|:---:|:---:| +| KortexError.msg | Describe the topic /KortexError. Every service call of the node kortex_driver will publish in /KortexError everytime the Kortex API returns an error. | + + +### protos +This folder contains the protobuf files from where the MSG, SRV and sources files are generated. The content of this folder should not be modified. + +### src +This folder contains all the generated source files needed to build the node. The content of this folder should not be modified. + +### srv +This folder contains every custom services used by the node **kortex\_device\_manager**. All the .srv files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + + +### templates +This folder contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the [Generation](#generation) section. + +| JINJA2 files | Description | +|:---:|:---:| +| main.jinja2 | Use to generate src/main.cpp | +| NodeServices.cpp.jinja2 | Use to generate src/node.cpp | +| NodeServices.h.jinja2 | Use to generate src/node.h | +| proto_converterCPP.jinja2 | Use to generate every src/*_proto\_converter.cpp files | +| proto_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_converterCPP.jinja2 | Use to generate every src/*_ros\_converter.cpp files | +| ros_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_enum.jinja2 | Use to generate every msg/*.msg files that represent a protobuf enum | +| ros_message.jinja2 | Use to generate every msg/*.msg files that represent a protobuf message | +| ros_oneof.jinja2 | Use to generate every msg/*.msg files that represent a protobuf oneof | +| ros_service.jinja2 | Use to generate every msg/*.msg files that represent a protobuf RPC | + + +## How to start the node + +rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10 + +In the command above, you would be running the kortex\_device\_manager node on a Gen3 robot with an IP address of 192.168.1.10 + + +## Generation +

      +The generation process is based on a custom protobuf plugin. Basically, most of the generation process is in the python file RosGeneration.py located at the package's root folder. Before launching the generation make sure you have the python module Jinja2 installed on your computer. +

      + +To launch the generation of this package: + +1. Open a terminal window. +1. Browse the root of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_device\_manager/ +1. Make sure that the file kortex_driver.sh can be executed. If not then chmod +x kortex_device_manager.sh +1. Run this command: protoc --plugin=protoc-gen-custom=kortex_device_manager.sh -I./protos/ --custom_out=./build ./protos/\*.prot +1. The result of the generation should be on thos folder: + * /src + * /msg + * /srv + diff --git a/kortex_device_manager/src/common_proto_converter.cpp b/kortex_device_manager/src/common_proto_converter.cpp new file mode 100644 index 00000000..f6bcd03f --- /dev/null +++ b/kortex_device_manager/src/common_proto_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_device_manager::DeviceHandle input, DeviceHandle *output) +{ + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + output->set_device_identifier(input.device_identifier); + output->set_order(input.order); + + return 0; +} +int ToProtoData(kortex_device_manager::Empty input, Empty *output) +{ + + return 0; +} +int ToProtoData(kortex_device_manager::NotificationOptions input, NotificationOptions *output) +{ + output->set_type((Kinova::Api::Common::NotificationType)input.type); + output->set_rate_m_sec(input.rate_m_sec); + output->set_threshold_value(input.threshold_value); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyHandle input, SafetyHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_device_manager::NotificationHandle input, NotificationHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyNotification input, SafetyNotification *output) +{ + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_device_manager::Timestamp input, Timestamp *output) +{ + output->set_sec(input.sec); + output->set_usec(input.usec); + + return 0; +} +int ToProtoData(kortex_device_manager::UserProfileHandle input, UserProfileHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_device_manager::Connection input, Connection *output) +{ + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_connection_information(input.connection_information); + output->set_connection_identifier(input.connection_identifier); + + return 0; +} diff --git a/kortex_device_manager/src/common_proto_converter.h b/kortex_device_manager/src/common_proto_converter.h new file mode 100644 index 00000000..c16d8738 --- /dev/null +++ b/kortex_device_manager/src/common_proto_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ +#define _KORTEX_CommonPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_device_manager/DeviceHandle.h" +#include "kortex_device_manager/Empty.h" +#include "kortex_device_manager/NotificationOptions.h" +#include "kortex_device_manager/SafetyHandle.h" +#include "kortex_device_manager/NotificationHandle.h" +#include "kortex_device_manager/SafetyNotification.h" +#include "kortex_device_manager/Timestamp.h" +#include "kortex_device_manager/UserProfileHandle.h" +#include "kortex_device_manager/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToProtoData(kortex_device_manager::DeviceHandle intput, DeviceHandle *output); +int ToProtoData(kortex_device_manager::Empty intput, Empty *output); +int ToProtoData(kortex_device_manager::NotificationOptions intput, NotificationOptions *output); +int ToProtoData(kortex_device_manager::SafetyHandle intput, SafetyHandle *output); +int ToProtoData(kortex_device_manager::NotificationHandle intput, NotificationHandle *output); +int ToProtoData(kortex_device_manager::SafetyNotification intput, SafetyNotification *output); +int ToProtoData(kortex_device_manager::Timestamp intput, Timestamp *output); +int ToProtoData(kortex_device_manager::UserProfileHandle intput, UserProfileHandle *output); +int ToProtoData(kortex_device_manager::Connection intput, Connection *output); + +#endif \ No newline at end of file diff --git a/kortex_device_manager/src/common_ros_converter.cpp b/kortex_device_manager/src/common_ros_converter.cpp new file mode 100644 index 00000000..bdfd6e33 --- /dev/null +++ b/kortex_device_manager/src/common_ros_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_ros_converter.h" + + +int ToRosData(DeviceHandle input, kortex_device_manager::DeviceHandle &output) +{ + output.device_type = input.device_type(); + output.device_identifier = input.device_identifier(); + output.order = input.order(); + + return 0; +} +int ToRosData(Empty input, kortex_device_manager::Empty &output) +{ + + return 0; +} +int ToRosData(NotificationOptions input, kortex_device_manager::NotificationOptions &output) +{ + output.type = input.type(); + output.rate_m_sec = input.rate_m_sec(); + output.threshold_value = input.threshold_value(); + + return 0; +} +int ToRosData(SafetyHandle input, kortex_device_manager::SafetyHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(NotificationHandle input, kortex_device_manager::NotificationHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(SafetyNotification input, kortex_device_manager::SafetyNotification &output) +{ + ToRosData(input.safety_handle(), output.safety_handle); + output.value = input.value(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(Timestamp input, kortex_device_manager::Timestamp &output) +{ + output.sec = input.sec(); + output.usec = input.usec(); + + return 0; +} +int ToRosData(UserProfileHandle input, kortex_device_manager::UserProfileHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(Connection input, kortex_device_manager::Connection &output) +{ + ToRosData(input.user_handle(), output.user_handle); + output.connection_information = input.connection_information(); + output.connection_identifier = input.connection_identifier(); + + return 0; +} diff --git a/kortex_device_manager/src/common_ros_converter.h b/kortex_device_manager/src/common_ros_converter.h new file mode 100644 index 00000000..164b3a3f --- /dev/null +++ b/kortex_device_manager/src/common_ros_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonROS_CONVERTER_H_ +#define _KORTEX_CommonROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_device_manager/DeviceHandle.h" +#include "kortex_device_manager/Empty.h" +#include "kortex_device_manager/NotificationOptions.h" +#include "kortex_device_manager/SafetyHandle.h" +#include "kortex_device_manager/NotificationHandle.h" +#include "kortex_device_manager/SafetyNotification.h" +#include "kortex_device_manager/Timestamp.h" +#include "kortex_device_manager/UserProfileHandle.h" +#include "kortex_device_manager/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToRosData(DeviceHandle input, kortex_device_manager::DeviceHandle &output); +int ToRosData(Empty input, kortex_device_manager::Empty &output); +int ToRosData(NotificationOptions input, kortex_device_manager::NotificationOptions &output); +int ToRosData(SafetyHandle input, kortex_device_manager::SafetyHandle &output); +int ToRosData(NotificationHandle input, kortex_device_manager::NotificationHandle &output); +int ToRosData(SafetyNotification input, kortex_device_manager::SafetyNotification &output); +int ToRosData(Timestamp input, kortex_device_manager::Timestamp &output); +int ToRosData(UserProfileHandle input, kortex_device_manager::UserProfileHandle &output); +int ToRosData(Connection input, kortex_device_manager::Connection &output); + +#endif \ No newline at end of file diff --git a/kortex_device_manager/src/deviceconfig_proto_converter.cpp b/kortex_device_manager/src/deviceconfig_proto_converter.cpp new file mode 100644 index 00000000..a3a2d11b --- /dev/null +++ b/kortex_device_manager/src/deviceconfig_proto_converter.cpp @@ -0,0 +1,160 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "deviceconfig_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_device_manager::DeviceType input, DeviceType *output) +{ + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + + return 0; +} +int ToProtoData(kortex_device_manager::RunMode input, RunMode *output) +{ + output->set_run_mode((Kinova::Api::DeviceConfig::RunModes)input.run_mode); + + return 0; +} +int ToProtoData(kortex_device_manager::FirmwareVersion input, FirmwareVersion *output) +{ + output->set_firmware_version(input.firmware_version); + + return 0; +} +int ToProtoData(kortex_device_manager::BootloaderVersion input, BootloaderVersion *output) +{ + output->set_bootloader_version(input.bootloader_version); + + return 0; +} +int ToProtoData(kortex_device_manager::ModelNumber input, ModelNumber *output) +{ + output->set_model_number(input.model_number); + + return 0; +} +int ToProtoData(kortex_device_manager::PartNumber input, PartNumber *output) +{ + output->set_part_number(input.part_number); + + return 0; +} +int ToProtoData(kortex_device_manager::SerialNumber input, SerialNumber *output) +{ + output->set_serial_number(input.serial_number); + + return 0; +} +int ToProtoData(kortex_device_manager::MACAddress input, MACAddress *output) +{ + output->set_mac_address(std::string(input.mac_address.begin(), input.mac_address.end())); + + return 0; +} +int ToProtoData(kortex_device_manager::IPv4Settings input, IPv4Settings *output) +{ + output->set_ipv4_address(input.ipv4_address); + output->set_ipv4_subnet_mask(input.ipv4_subnet_mask); + output->set_ipv4_default_gateway(input.ipv4_default_gateway); + + return 0; +} +int ToProtoData(kortex_device_manager::PartNumberRevision input, PartNumberRevision *output) +{ + output->set_part_number_revision(input.part_number_revision); + + return 0; +} +int ToProtoData(kortex_device_manager::PowerOnSelfTestResult input, PowerOnSelfTestResult *output) +{ + output->set_power_on_self_test_result(input.power_on_self_test_result); + + return 0; +} +int ToProtoData(kortex_device_manager::RebootRqst input, RebootRqst *output) +{ + output->set_delay(input.delay); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyInformation input, SafetyInformation *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_can_change_safety_state(input.can_change_safety_state); + output->set_has_warning_threshold(input.has_warning_threshold); + output->set_has_error_threshold(input.has_error_threshold); + output->set_limit_type((Kinova::Api::DeviceConfig::SafetyLimitType)input.limit_type); + output->set_default_warning_threshold(input.default_warning_threshold); + output->set_default_error_threshold(input.default_error_threshold); + output->set_upper_hard_limit(input.upper_hard_limit); + output->set_lower_hard_limit(input.lower_hard_limit); + output->set_status((Kinova::Api::Common::SafetyStatusValue)input.status); + output->set_unit((Kinova::Api::Common::Unit)input.unit); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyInformationList input, SafetyInformationList *output) +{ + output->clear_information(); + for(int i = 0; i < input.information.size(); i++) + { + ToProtoData(input.information[i], output->add_information()); + } + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyEnable input, SafetyEnable *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_enable(input.enable); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyThreshold input, SafetyThreshold *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyConfiguration input, SafetyConfiguration *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_error_threshold(input.error_threshold); + output->set_warning_threshold(input.warning_threshold); + ToProtoData(input.enable, output->mutable_enable()); + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyConfigurationList input, SafetyConfigurationList *output) +{ + output->clear_configuration(); + for(int i = 0; i < input.configuration.size(); i++) + { + ToProtoData(input.configuration[i], output->add_configuration()); + } + + return 0; +} +int ToProtoData(kortex_device_manager::SafetyStatus input, SafetyStatus *output) +{ + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + + return 0; +} diff --git a/kortex_device_manager/src/deviceconfig_proto_converter.h b/kortex_device_manager/src/deviceconfig_proto_converter.h new file mode 100644 index 00000000..9be3f0ba --- /dev/null +++ b/kortex_device_manager/src/deviceconfig_proto_converter.h @@ -0,0 +1,86 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DeviceConfigPROTO_CONVERTER_H_ +#define _KORTEX_DeviceConfigPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_device_manager/DeviceType.h" +#include "kortex_device_manager/RunMode.h" +#include "kortex_device_manager/FirmwareVersion.h" +#include "kortex_device_manager/BootloaderVersion.h" +#include "kortex_device_manager/ModelNumber.h" +#include "kortex_device_manager/PartNumber.h" +#include "kortex_device_manager/SerialNumber.h" +#include "kortex_device_manager/MACAddress.h" +#include "kortex_device_manager/IPv4Settings.h" +#include "kortex_device_manager/PartNumberRevision.h" +#include "kortex_device_manager/PowerOnSelfTestResult.h" +#include "kortex_device_manager/RebootRqst.h" +#include "kortex_device_manager/SafetyInformation.h" +#include "kortex_device_manager/SafetyInformationList.h" +#include "kortex_device_manager/SafetyEnable.h" +#include "kortex_device_manager/SafetyThreshold.h" +#include "kortex_device_manager/SafetyConfiguration.h" +#include "kortex_device_manager/SafetyConfigurationList.h" +#include "kortex_device_manager/SafetyStatus.h" + + +using namespace Kinova::Api::DeviceConfig; + +int ToProtoData(kortex_device_manager::DeviceType intput, DeviceType *output); +int ToProtoData(kortex_device_manager::RunMode intput, RunMode *output); +int ToProtoData(kortex_device_manager::FirmwareVersion intput, FirmwareVersion *output); +int ToProtoData(kortex_device_manager::BootloaderVersion intput, BootloaderVersion *output); +int ToProtoData(kortex_device_manager::ModelNumber intput, ModelNumber *output); +int ToProtoData(kortex_device_manager::PartNumber intput, PartNumber *output); +int ToProtoData(kortex_device_manager::SerialNumber intput, SerialNumber *output); +int ToProtoData(kortex_device_manager::MACAddress intput, MACAddress *output); +int ToProtoData(kortex_device_manager::IPv4Settings intput, IPv4Settings *output); +int ToProtoData(kortex_device_manager::PartNumberRevision intput, PartNumberRevision *output); +int ToProtoData(kortex_device_manager::PowerOnSelfTestResult intput, PowerOnSelfTestResult *output); +int ToProtoData(kortex_device_manager::RebootRqst intput, RebootRqst *output); +int ToProtoData(kortex_device_manager::SafetyInformation intput, SafetyInformation *output); +int ToProtoData(kortex_device_manager::SafetyInformationList intput, SafetyInformationList *output); +int ToProtoData(kortex_device_manager::SafetyEnable intput, SafetyEnable *output); +int ToProtoData(kortex_device_manager::SafetyThreshold intput, SafetyThreshold *output); +int ToProtoData(kortex_device_manager::SafetyConfiguration intput, SafetyConfiguration *output); +int ToProtoData(kortex_device_manager::SafetyConfigurationList intput, SafetyConfigurationList *output); +int ToProtoData(kortex_device_manager::SafetyStatus intput, SafetyStatus *output); + +#endif \ No newline at end of file diff --git a/kortex_device_manager/src/deviceconfig_ros_converter.cpp b/kortex_device_manager/src/deviceconfig_ros_converter.cpp new file mode 100644 index 00000000..1fefb387 --- /dev/null +++ b/kortex_device_manager/src/deviceconfig_ros_converter.cpp @@ -0,0 +1,164 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "deviceconfig_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(DeviceType input, kortex_device_manager::DeviceType &output) +{ + output.device_type = input.device_type(); + + return 0; +} +int ToRosData(RunMode input, kortex_device_manager::RunMode &output) +{ + output.run_mode = input.run_mode(); + + return 0; +} +int ToRosData(FirmwareVersion input, kortex_device_manager::FirmwareVersion &output) +{ + output.firmware_version = input.firmware_version(); + + return 0; +} +int ToRosData(BootloaderVersion input, kortex_device_manager::BootloaderVersion &output) +{ + output.bootloader_version = input.bootloader_version(); + + return 0; +} +int ToRosData(ModelNumber input, kortex_device_manager::ModelNumber &output) +{ + output.model_number = input.model_number(); + + return 0; +} +int ToRosData(PartNumber input, kortex_device_manager::PartNumber &output) +{ + output.part_number = input.part_number(); + + return 0; +} +int ToRosData(SerialNumber input, kortex_device_manager::SerialNumber &output) +{ + output.serial_number = input.serial_number(); + + return 0; +} +int ToRosData(MACAddress input, kortex_device_manager::MACAddress &output) +{ + output.mac_address = std::vector(input.mac_address().begin(), input.mac_address().end()); + + return 0; +} +int ToRosData(IPv4Settings input, kortex_device_manager::IPv4Settings &output) +{ + output.ipv4_address = input.ipv4_address(); + output.ipv4_subnet_mask = input.ipv4_subnet_mask(); + output.ipv4_default_gateway = input.ipv4_default_gateway(); + + return 0; +} +int ToRosData(PartNumberRevision input, kortex_device_manager::PartNumberRevision &output) +{ + output.part_number_revision = input.part_number_revision(); + + return 0; +} +int ToRosData(PowerOnSelfTestResult input, kortex_device_manager::PowerOnSelfTestResult &output) +{ + output.power_on_self_test_result = input.power_on_self_test_result(); + + return 0; +} +int ToRosData(RebootRqst input, kortex_device_manager::RebootRqst &output) +{ + output.delay = input.delay(); + + return 0; +} +int ToRosData(SafetyInformation input, kortex_device_manager::SafetyInformation &output) +{ + ToRosData(input.handle(), output.handle); + output.can_change_safety_state = input.can_change_safety_state(); + output.has_warning_threshold = input.has_warning_threshold(); + output.has_error_threshold = input.has_error_threshold(); + output.limit_type = input.limit_type(); + output.default_warning_threshold = input.default_warning_threshold(); + output.default_error_threshold = input.default_error_threshold(); + output.upper_hard_limit = input.upper_hard_limit(); + output.lower_hard_limit = input.lower_hard_limit(); + output.status = input.status(); + output.unit = input.unit(); + + return 0; +} +int ToRosData(SafetyInformationList input, kortex_device_manager::SafetyInformationList &output) +{ + output.information.clear(); + for(int i = 0; i < input.information_size(); i++) + { + kortex_device_manager::SafetyInformation temp; + ToRosData(input.information(i), temp); + output.information.push_back(temp); + } + + return 0; +} +int ToRosData(SafetyEnable input, kortex_device_manager::SafetyEnable &output) +{ + ToRosData(input.handle(), output.handle); + output.enable = input.enable(); + + return 0; +} +int ToRosData(SafetyThreshold input, kortex_device_manager::SafetyThreshold &output) +{ + ToRosData(input.handle(), output.handle); + output.value = input.value(); + + return 0; +} +int ToRosData(SafetyConfiguration input, kortex_device_manager::SafetyConfiguration &output) +{ + ToRosData(input.handle(), output.handle); + output.error_threshold = input.error_threshold(); + output.warning_threshold = input.warning_threshold(); + ToRosData(input.enable(), output.enable); + + return 0; +} +int ToRosData(SafetyConfigurationList input, kortex_device_manager::SafetyConfigurationList &output) +{ + output.configuration.clear(); + for(int i = 0; i < input.configuration_size(); i++) + { + kortex_device_manager::SafetyConfiguration temp; + ToRosData(input.configuration(i), temp); + output.configuration.push_back(temp); + } + + return 0; +} +int ToRosData(SafetyStatus input, kortex_device_manager::SafetyStatus &output) +{ + output.value = input.value(); + + return 0; +} diff --git a/kortex_device_manager/src/deviceconfig_ros_converter.h b/kortex_device_manager/src/deviceconfig_ros_converter.h new file mode 100644 index 00000000..cc1632c7 --- /dev/null +++ b/kortex_device_manager/src/deviceconfig_ros_converter.h @@ -0,0 +1,86 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DeviceConfigROS_CONVERTER_H_ +#define _KORTEX_DeviceConfigROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_device_manager/DeviceType.h" +#include "kortex_device_manager/RunMode.h" +#include "kortex_device_manager/FirmwareVersion.h" +#include "kortex_device_manager/BootloaderVersion.h" +#include "kortex_device_manager/ModelNumber.h" +#include "kortex_device_manager/PartNumber.h" +#include "kortex_device_manager/SerialNumber.h" +#include "kortex_device_manager/MACAddress.h" +#include "kortex_device_manager/IPv4Settings.h" +#include "kortex_device_manager/PartNumberRevision.h" +#include "kortex_device_manager/PowerOnSelfTestResult.h" +#include "kortex_device_manager/RebootRqst.h" +#include "kortex_device_manager/SafetyInformation.h" +#include "kortex_device_manager/SafetyInformationList.h" +#include "kortex_device_manager/SafetyEnable.h" +#include "kortex_device_manager/SafetyThreshold.h" +#include "kortex_device_manager/SafetyConfiguration.h" +#include "kortex_device_manager/SafetyConfigurationList.h" +#include "kortex_device_manager/SafetyStatus.h" + + +using namespace Kinova::Api::DeviceConfig; + +int ToRosData(DeviceType input, kortex_device_manager::DeviceType &output); +int ToRosData(RunMode input, kortex_device_manager::RunMode &output); +int ToRosData(FirmwareVersion input, kortex_device_manager::FirmwareVersion &output); +int ToRosData(BootloaderVersion input, kortex_device_manager::BootloaderVersion &output); +int ToRosData(ModelNumber input, kortex_device_manager::ModelNumber &output); +int ToRosData(PartNumber input, kortex_device_manager::PartNumber &output); +int ToRosData(SerialNumber input, kortex_device_manager::SerialNumber &output); +int ToRosData(MACAddress input, kortex_device_manager::MACAddress &output); +int ToRosData(IPv4Settings input, kortex_device_manager::IPv4Settings &output); +int ToRosData(PartNumberRevision input, kortex_device_manager::PartNumberRevision &output); +int ToRosData(PowerOnSelfTestResult input, kortex_device_manager::PowerOnSelfTestResult &output); +int ToRosData(RebootRqst input, kortex_device_manager::RebootRqst &output); +int ToRosData(SafetyInformation input, kortex_device_manager::SafetyInformation &output); +int ToRosData(SafetyInformationList input, kortex_device_manager::SafetyInformationList &output); +int ToRosData(SafetyEnable input, kortex_device_manager::SafetyEnable &output); +int ToRosData(SafetyThreshold input, kortex_device_manager::SafetyThreshold &output); +int ToRosData(SafetyConfiguration input, kortex_device_manager::SafetyConfiguration &output); +int ToRosData(SafetyConfigurationList input, kortex_device_manager::SafetyConfigurationList &output); +int ToRosData(SafetyStatus input, kortex_device_manager::SafetyStatus &output); + +#endif \ No newline at end of file diff --git a/kortex_device_manager/src/devicemanager_proto_converter.cpp b/kortex_device_manager/src/devicemanager_proto_converter.cpp new file mode 100644 index 00000000..ec89c604 --- /dev/null +++ b/kortex_device_manager/src/devicemanager_proto_converter.cpp @@ -0,0 +1,31 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "devicemanager_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_device_manager::DeviceHandles input, DeviceHandles *output) +{ + output->clear_device_handle(); + for(int i = 0; i < input.device_handle.size(); i++) + { + ToProtoData(input.device_handle[i], output->add_device_handle()); + } + + return 0; +} diff --git a/kortex_device_manager/src/devicemanager_proto_converter.h b/kortex_device_manager/src/devicemanager_proto_converter.h new file mode 100644 index 00000000..d04d1eae --- /dev/null +++ b/kortex_device_manager/src/devicemanager_proto_converter.h @@ -0,0 +1,50 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DeviceManagerPROTO_CONVERTER_H_ +#define _KORTEX_DeviceManagerPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_device_manager/DeviceHandles.h" + + +using namespace Kinova::Api::DeviceManager; + +int ToProtoData(kortex_device_manager::DeviceHandles intput, DeviceHandles *output); + +#endif \ No newline at end of file diff --git a/kortex_device_manager/src/devicemanager_ros_converter.cpp b/kortex_device_manager/src/devicemanager_ros_converter.cpp new file mode 100644 index 00000000..35027ed0 --- /dev/null +++ b/kortex_device_manager/src/devicemanager_ros_converter.cpp @@ -0,0 +1,33 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "devicemanager_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(DeviceHandles input, kortex_device_manager::DeviceHandles &output) +{ + output.device_handle.clear(); + for(int i = 0; i < input.device_handle_size(); i++) + { + kortex_device_manager::DeviceHandle temp; + ToRosData(input.device_handle(i), temp); + output.device_handle.push_back(temp); + } + + return 0; +} diff --git a/kortex_device_manager/src/devicemanager_ros_converter.h b/kortex_device_manager/src/devicemanager_ros_converter.h new file mode 100644 index 00000000..2d319260 --- /dev/null +++ b/kortex_device_manager/src/devicemanager_ros_converter.h @@ -0,0 +1,50 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_DeviceManagerROS_CONVERTER_H_ +#define _KORTEX_DeviceManagerROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_device_manager/DeviceHandles.h" + + +using namespace Kinova::Api::DeviceManager; + +int ToRosData(DeviceHandles input, kortex_device_manager::DeviceHandles &output); + +#endif \ No newline at end of file diff --git a/kortex_device_manager/src/main.cpp b/kortex_device_manager/src/main.cpp new file mode 100644 index 00000000..b472d598 --- /dev/null +++ b/kortex_device_manager/src/main.cpp @@ -0,0 +1,80 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "math_util.h" + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "DeviceManager"); + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 1) + { + ROS_INFO("Connecting to IP = %s", argv[1]); + } + else + { + ROS_INFO("You need to provide an IP adresse as a parameter. ex: rosrun package node 192.168.1.1"); + ros::shutdown(); + return 0; + } + + KortexDeviceManager services_object(argv[1], n); + + ros::ServiceServer serviceGetRunMode = n.advertiseService("GetRunMode", &KortexDeviceManager::GetRunMode, &services_object); + ros::ServiceServer serviceSetRunMode = n.advertiseService("SetRunMode", &KortexDeviceManager::SetRunMode, &services_object); + ros::ServiceServer serviceGetDeviceType = n.advertiseService("GetDeviceType", &KortexDeviceManager::GetDeviceType, &services_object); + ros::ServiceServer serviceGetFirmwareVersion = n.advertiseService("GetFirmwareVersion", &KortexDeviceManager::GetFirmwareVersion, &services_object); + ros::ServiceServer serviceGetBootloaderVersion = n.advertiseService("GetBootloaderVersion", &KortexDeviceManager::GetBootloaderVersion, &services_object); + ros::ServiceServer serviceGetModelNumber = n.advertiseService("GetModelNumber", &KortexDeviceManager::GetModelNumber, &services_object); + ros::ServiceServer serviceGetPartNumber = n.advertiseService("GetPartNumber", &KortexDeviceManager::GetPartNumber, &services_object); + ros::ServiceServer serviceGetSerialNumber = n.advertiseService("GetSerialNumber", &KortexDeviceManager::GetSerialNumber, &services_object); + ros::ServiceServer serviceGetMACAddress = n.advertiseService("GetMACAddress", &KortexDeviceManager::GetMACAddress, &services_object); + ros::ServiceServer serviceGetIPv4Settings = n.advertiseService("GetIPv4Settings", &KortexDeviceManager::GetIPv4Settings, &services_object); + ros::ServiceServer serviceSetIPv4Settings = n.advertiseService("SetIPv4Settings", &KortexDeviceManager::SetIPv4Settings, &services_object); + ros::ServiceServer serviceGetPartNumberRevision = n.advertiseService("GetPartNumberRevision", &KortexDeviceManager::GetPartNumberRevision, &services_object); + ros::ServiceServer serviceGetPowerOnSelfTestResult = n.advertiseService("GetPowerOnSelfTestResult", &KortexDeviceManager::GetPowerOnSelfTestResult, &services_object); + ros::ServiceServer serviceRebootRequest = n.advertiseService("RebootRequest", &KortexDeviceManager::RebootRequest, &services_object); + ros::ServiceServer serviceSetSafetyEnable = n.advertiseService("SetSafetyEnable", &KortexDeviceManager::SetSafetyEnable, &services_object); + ros::ServiceServer serviceSetSafetyErrorThreshold = n.advertiseService("SetSafetyErrorThreshold", &KortexDeviceManager::SetSafetyErrorThreshold, &services_object); + ros::ServiceServer serviceSetSafetyWarningThreshold = n.advertiseService("SetSafetyWarningThreshold", &KortexDeviceManager::SetSafetyWarningThreshold, &services_object); + ros::ServiceServer serviceSetSafetyConfiguration = n.advertiseService("SetSafetyConfiguration", &KortexDeviceManager::SetSafetyConfiguration, &services_object); + ros::ServiceServer serviceGetSafetyConfiguration = n.advertiseService("GetSafetyConfiguration", &KortexDeviceManager::GetSafetyConfiguration, &services_object); + ros::ServiceServer serviceGetSafetyInformation = n.advertiseService("GetSafetyInformation", &KortexDeviceManager::GetSafetyInformation, &services_object); + ros::ServiceServer serviceGetSafetyEnable = n.advertiseService("GetSafetyEnable", &KortexDeviceManager::GetSafetyEnable, &services_object); + ros::ServiceServer serviceGetSafetyStatus = n.advertiseService("GetSafetyStatus", &KortexDeviceManager::GetSafetyStatus, &services_object); + ros::ServiceServer serviceClearAllSafetyStatus = n.advertiseService("ClearAllSafetyStatus", &KortexDeviceManager::ClearAllSafetyStatus, &services_object); + ros::ServiceServer serviceClearSafetyStatus = n.advertiseService("ClearSafetyStatus", &KortexDeviceManager::ClearSafetyStatus, &services_object); + ros::ServiceServer serviceGetAllSafetyConfiguration = n.advertiseService("GetAllSafetyConfiguration", &KortexDeviceManager::GetAllSafetyConfiguration, &services_object); + ros::ServiceServer serviceGetAllSafetyInformation = n.advertiseService("GetAllSafetyInformation", &KortexDeviceManager::GetAllSafetyInformation, &services_object); + ros::ServiceServer serviceResetSafetyDefaults = n.advertiseService("ResetSafetyDefaults", &KortexDeviceManager::ResetSafetyDefaults, &services_object); + ros::ServiceServer serviceSetModelNumber = n.advertiseService("SetModelNumber", &KortexDeviceManager::SetModelNumber, &services_object); + ros::ServiceServer serviceSetPartNumber = n.advertiseService("SetPartNumber", &KortexDeviceManager::SetPartNumber, &services_object); + ros::ServiceServer serviceSetPartNumberRevision = n.advertiseService("SetPartNumberRevision", &KortexDeviceManager::SetPartNumberRevision, &services_object); + ros::ServiceServer serviceSetSerialNumber = n.advertiseService("SetSerialNumber", &KortexDeviceManager::SetSerialNumber, &services_object); + ros::ServiceServer serviceSetMACAddress = n.advertiseService("SetMACAddress", &KortexDeviceManager::SetMACAddress, &services_object); + ros::ServiceServer serviceReadAllDevices = n.advertiseService("ReadAllDevices", &KortexDeviceManager::ReadAllDevices, &services_object); + + + ROS_INFO("Node's services initialized correctly."); + + ros::spin(); + + return 1; +} \ No newline at end of file diff --git a/kortex_device_manager/src/node.cpp b/kortex_device_manager/src/node.cpp new file mode 100644 index 00000000..8c94bf50 --- /dev/null +++ b/kortex_device_manager/src/node.cpp @@ -0,0 +1,978 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "common_ros_converter.h" +#include "common_proto_converter.h" +#include "deviceconfig_ros_converter.h" +#include "deviceconfig_proto_converter.h" +#include "devicemanager_ros_converter.h" +#include "devicemanager_proto_converter.h" +KortexDeviceManager::KortexDeviceManager(char* ip, ros::NodeHandle& n) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + + + m_deviceconfig = new DeviceConfig::DeviceConfigClient(m_router); + m_devicemanager = new DeviceManager::DeviceManagerClient(m_router);m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + std::cout << "\nSession Created\n"; + + m_pub_Error = m_n.advertise("KortexError", 1000); + m_pub_SafetyTopic = m_n.advertise("SafetyTopic", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + + + + +bool KortexDeviceManager::GetRunMode(kortex_device_manager::GetRunMode::Request &req, kortex_device_manager::GetRunMode::Response &res) +{ + Empty input; + RunMode output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetRunMode(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::SetRunMode(kortex_device_manager::SetRunMode::Request &req, kortex_device_manager::SetRunMode::Response &res) +{ + RunMode input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetRunMode(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::GetDeviceType(kortex_device_manager::GetDeviceType::Request &req, kortex_device_manager::GetDeviceType::Response &res) +{ + Empty input; + DeviceType output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetDeviceType(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetFirmwareVersion(kortex_device_manager::GetFirmwareVersion::Request &req, kortex_device_manager::GetFirmwareVersion::Response &res) +{ + Empty input; + FirmwareVersion output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetFirmwareVersion(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetBootloaderVersion(kortex_device_manager::GetBootloaderVersion::Request &req, kortex_device_manager::GetBootloaderVersion::Response &res) +{ + Empty input; + BootloaderVersion output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetBootloaderVersion(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetModelNumber(kortex_device_manager::GetModelNumber::Request &req, kortex_device_manager::GetModelNumber::Response &res) +{ + Empty input; + ModelNumber output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetModelNumber(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetPartNumber(kortex_device_manager::GetPartNumber::Request &req, kortex_device_manager::GetPartNumber::Response &res) +{ + Empty input; + PartNumber output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetPartNumber(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetSerialNumber(kortex_device_manager::GetSerialNumber::Request &req, kortex_device_manager::GetSerialNumber::Response &res) +{ + Empty input; + SerialNumber output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetSerialNumber(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetMACAddress(kortex_device_manager::GetMACAddress::Request &req, kortex_device_manager::GetMACAddress::Response &res) +{ + Empty input; + MACAddress output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetMACAddress(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetIPv4Settings(kortex_device_manager::GetIPv4Settings::Request &req, kortex_device_manager::GetIPv4Settings::Response &res) +{ + Empty input; + IPv4Settings output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetIPv4Settings(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::SetIPv4Settings(kortex_device_manager::SetIPv4Settings::Request &req, kortex_device_manager::SetIPv4Settings::Response &res) +{ + IPv4Settings input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetIPv4Settings(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::GetPartNumberRevision(kortex_device_manager::GetPartNumberRevision::Request &req, kortex_device_manager::GetPartNumberRevision::Response &res) +{ + Empty input; + PartNumberRevision output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetPartNumberRevision(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetPowerOnSelfTestResult(kortex_device_manager::GetPowerOnSelfTestResult::Request &req, kortex_device_manager::GetPowerOnSelfTestResult::Response &res) +{ + Empty input; + PowerOnSelfTestResult output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetPowerOnSelfTestResult(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::RebootRequest(kortex_device_manager::RebootRequest::Request &req, kortex_device_manager::RebootRequest::Response &res) +{ + RebootRqst input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->RebootRequest(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetSafetyEnable(kortex_device_manager::SetSafetyEnable::Request &req, kortex_device_manager::SetSafetyEnable::Response &res) +{ + SafetyEnable input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyEnable(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetSafetyErrorThreshold(kortex_device_manager::SetSafetyErrorThreshold::Request &req, kortex_device_manager::SetSafetyErrorThreshold::Response &res) +{ + SafetyThreshold input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyErrorThreshold(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetSafetyWarningThreshold(kortex_device_manager::SetSafetyWarningThreshold::Request &req, kortex_device_manager::SetSafetyWarningThreshold::Response &res) +{ + SafetyThreshold input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyWarningThreshold(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetSafetyConfiguration(kortex_device_manager::SetSafetyConfiguration::Request &req, kortex_device_manager::SetSafetyConfiguration::Response &res) +{ + SafetyConfiguration input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetSafetyConfiguration(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::GetSafetyConfiguration(kortex_device_manager::GetSafetyConfiguration::Request &req, kortex_device_manager::GetSafetyConfiguration::Response &res) +{ + SafetyHandle input; + ToProtoData(req.input, &input); + SafetyConfiguration output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyConfiguration(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetSafetyInformation(kortex_device_manager::GetSafetyInformation::Request &req, kortex_device_manager::GetSafetyInformation::Response &res) +{ + SafetyHandle input; + ToProtoData(req.input, &input); + SafetyInformation output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyInformation(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetSafetyEnable(kortex_device_manager::GetSafetyEnable::Request &req, kortex_device_manager::GetSafetyEnable::Response &res) +{ + SafetyHandle input; + ToProtoData(req.input, &input); + SafetyEnable output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyEnable(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetSafetyStatus(kortex_device_manager::GetSafetyStatus::Request &req, kortex_device_manager::GetSafetyStatus::Response &res) +{ + SafetyHandle input; + ToProtoData(req.input, &input); + SafetyStatus output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetSafetyStatus(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::ClearAllSafetyStatus(kortex_device_manager::ClearAllSafetyStatus::Request &req, kortex_device_manager::ClearAllSafetyStatus::Response &res) +{ + Empty input; + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->ClearAllSafetyStatus(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::ClearSafetyStatus(kortex_device_manager::ClearSafetyStatus::Request &req, kortex_device_manager::ClearSafetyStatus::Response &res) +{ + SafetyHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->ClearSafetyStatus(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::GetAllSafetyConfiguration(kortex_device_manager::GetAllSafetyConfiguration::Request &req, kortex_device_manager::GetAllSafetyConfiguration::Response &res) +{ + Empty input; + SafetyConfigurationList output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetAllSafetyConfiguration(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::GetAllSafetyInformation(kortex_device_manager::GetAllSafetyInformation::Request &req, kortex_device_manager::GetAllSafetyInformation::Response &res) +{ + Empty input; + SafetyInformationList output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_deviceconfig->GetAllSafetyInformation(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool KortexDeviceManager::ResetSafetyDefaults(kortex_device_manager::ResetSafetyDefaults::Request &req, kortex_device_manager::ResetSafetyDefaults::Response &res) +{ + Empty input; + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->ResetSafetyDefaults(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::OnNotificationSafetyTopic(kortex_device_manager::SafetyTopic::Request &req, kortex_device_manager::SafetyTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_device_manager::KortexError result_error; + + try + { + + std::function< void (Kinova::Api::Common::SafetyNotification) > callback = std::bind(&KortexDeviceManager::cb_SafetyTopic, this, std::placeholders::_1); + output = m_deviceconfig->OnNotificationSafetyTopic(callback, input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void KortexDeviceManager::cb_SafetyTopic(Kinova::Api::Common::SafetyNotification notif) +{ + kortex_device_manager::SafetyNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_SafetyTopic.publish(ros_msg); +} + +bool KortexDeviceManager::SetModelNumber(kortex_device_manager::SetModelNumber::Request &req, kortex_device_manager::SetModelNumber::Response &res) +{ + ModelNumber input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetModelNumber(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetPartNumber(kortex_device_manager::SetPartNumber::Request &req, kortex_device_manager::SetPartNumber::Response &res) +{ + PartNumber input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetPartNumber(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetPartNumberRevision(kortex_device_manager::SetPartNumberRevision::Request &req, kortex_device_manager::SetPartNumberRevision::Response &res) +{ + PartNumberRevision input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetPartNumberRevision(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetSerialNumber(kortex_device_manager::SetSerialNumber::Request &req, kortex_device_manager::SetSerialNumber::Response &res) +{ + SerialNumber input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetSerialNumber(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool KortexDeviceManager::SetMACAddress(kortex_device_manager::SetMACAddress::Request &req, kortex_device_manager::SetMACAddress::Response &res) +{ + MACAddress input; + ToProtoData(req.input, &input); + Empty output; + kortex_device_manager::KortexError result_error; + + try + { + m_deviceconfig->SetMACAddress(input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + + +bool KortexDeviceManager::ReadAllDevices(kortex_device_manager::ReadAllDevices::Request &req, kortex_device_manager::ReadAllDevices::Response &res) +{ + Empty input; + DeviceHandles output; + kortex_device_manager::KortexError result_error; + + try + { + output = m_devicemanager->ReadAllDevices(); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_device_manager/src/node.h b/kortex_device_manager/src/node.h new file mode 100644 index 00000000..11164747 --- /dev/null +++ b/kortex_device_manager/src/node.h @@ -0,0 +1,142 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_SERVICES_H_ +#define _KORTEX_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include "kortex_device_manager/GetRunMode.h" +#include "kortex_device_manager/SetRunMode.h" +#include "kortex_device_manager/GetDeviceType.h" +#include "kortex_device_manager/GetFirmwareVersion.h" +#include "kortex_device_manager/GetBootloaderVersion.h" +#include "kortex_device_manager/GetModelNumber.h" +#include "kortex_device_manager/GetPartNumber.h" +#include "kortex_device_manager/GetSerialNumber.h" +#include "kortex_device_manager/GetMACAddress.h" +#include "kortex_device_manager/GetIPv4Settings.h" +#include "kortex_device_manager/SetIPv4Settings.h" +#include "kortex_device_manager/GetPartNumberRevision.h" +#include "kortex_device_manager/GetPowerOnSelfTestResult.h" +#include "kortex_device_manager/RebootRequest.h" +#include "kortex_device_manager/SetSafetyEnable.h" +#include "kortex_device_manager/SetSafetyErrorThreshold.h" +#include "kortex_device_manager/SetSafetyWarningThreshold.h" +#include "kortex_device_manager/SetSafetyConfiguration.h" +#include "kortex_device_manager/GetSafetyConfiguration.h" +#include "kortex_device_manager/GetSafetyInformation.h" +#include "kortex_device_manager/GetSafetyEnable.h" +#include "kortex_device_manager/GetSafetyStatus.h" +#include "kortex_device_manager/ClearAllSafetyStatus.h" +#include "kortex_device_manager/ClearSafetyStatus.h" +#include "kortex_device_manager/GetAllSafetyConfiguration.h" +#include "kortex_device_manager/GetAllSafetyInformation.h" +#include "kortex_device_manager/ResetSafetyDefaults.h" +#include "kortex_device_manager/SafetyTopic.h" +#include "kortex_device_manager/SetModelNumber.h" +#include "kortex_device_manager/SetPartNumber.h" +#include "kortex_device_manager/SetPartNumberRevision.h" +#include "kortex_device_manager/SetSerialNumber.h" +#include "kortex_device_manager/SetMACAddress.h" +#include "kortex_device_manager/ReadAllDevices.h" +#include "kortex_device_manager/KortexError.h" + +using namespace std; +using namespace Kinova::Api; +using namespace Kinova::Api::Common; +using namespace Kinova::Api::DeviceConfig; +using namespace Kinova::Api::DeviceManager; + +class KortexDeviceManager +{ + public: + KortexDeviceManager(char* ip, ros::NodeHandle& n); + + + bool GetRunMode(kortex_device_manager::GetRunMode::Request &req, kortex_device_manager::GetRunMode::Response &res); + bool SetRunMode(kortex_device_manager::SetRunMode::Request &req, kortex_device_manager::SetRunMode::Response &res); + bool GetDeviceType(kortex_device_manager::GetDeviceType::Request &req, kortex_device_manager::GetDeviceType::Response &res); + bool GetFirmwareVersion(kortex_device_manager::GetFirmwareVersion::Request &req, kortex_device_manager::GetFirmwareVersion::Response &res); + bool GetBootloaderVersion(kortex_device_manager::GetBootloaderVersion::Request &req, kortex_device_manager::GetBootloaderVersion::Response &res); + bool GetModelNumber(kortex_device_manager::GetModelNumber::Request &req, kortex_device_manager::GetModelNumber::Response &res); + bool GetPartNumber(kortex_device_manager::GetPartNumber::Request &req, kortex_device_manager::GetPartNumber::Response &res); + bool GetSerialNumber(kortex_device_manager::GetSerialNumber::Request &req, kortex_device_manager::GetSerialNumber::Response &res); + bool GetMACAddress(kortex_device_manager::GetMACAddress::Request &req, kortex_device_manager::GetMACAddress::Response &res); + bool GetIPv4Settings(kortex_device_manager::GetIPv4Settings::Request &req, kortex_device_manager::GetIPv4Settings::Response &res); + bool SetIPv4Settings(kortex_device_manager::SetIPv4Settings::Request &req, kortex_device_manager::SetIPv4Settings::Response &res); + bool GetPartNumberRevision(kortex_device_manager::GetPartNumberRevision::Request &req, kortex_device_manager::GetPartNumberRevision::Response &res); + bool GetPowerOnSelfTestResult(kortex_device_manager::GetPowerOnSelfTestResult::Request &req, kortex_device_manager::GetPowerOnSelfTestResult::Response &res); + bool RebootRequest(kortex_device_manager::RebootRequest::Request &req, kortex_device_manager::RebootRequest::Response &res); + bool SetSafetyEnable(kortex_device_manager::SetSafetyEnable::Request &req, kortex_device_manager::SetSafetyEnable::Response &res); + bool SetSafetyErrorThreshold(kortex_device_manager::SetSafetyErrorThreshold::Request &req, kortex_device_manager::SetSafetyErrorThreshold::Response &res); + bool SetSafetyWarningThreshold(kortex_device_manager::SetSafetyWarningThreshold::Request &req, kortex_device_manager::SetSafetyWarningThreshold::Response &res); + bool SetSafetyConfiguration(kortex_device_manager::SetSafetyConfiguration::Request &req, kortex_device_manager::SetSafetyConfiguration::Response &res); + bool GetSafetyConfiguration(kortex_device_manager::GetSafetyConfiguration::Request &req, kortex_device_manager::GetSafetyConfiguration::Response &res); + bool GetSafetyInformation(kortex_device_manager::GetSafetyInformation::Request &req, kortex_device_manager::GetSafetyInformation::Response &res); + bool GetSafetyEnable(kortex_device_manager::GetSafetyEnable::Request &req, kortex_device_manager::GetSafetyEnable::Response &res); + bool GetSafetyStatus(kortex_device_manager::GetSafetyStatus::Request &req, kortex_device_manager::GetSafetyStatus::Response &res); + bool ClearAllSafetyStatus(kortex_device_manager::ClearAllSafetyStatus::Request &req, kortex_device_manager::ClearAllSafetyStatus::Response &res); + bool ClearSafetyStatus(kortex_device_manager::ClearSafetyStatus::Request &req, kortex_device_manager::ClearSafetyStatus::Response &res); + bool GetAllSafetyConfiguration(kortex_device_manager::GetAllSafetyConfiguration::Request &req, kortex_device_manager::GetAllSafetyConfiguration::Response &res); + bool GetAllSafetyInformation(kortex_device_manager::GetAllSafetyInformation::Request &req, kortex_device_manager::GetAllSafetyInformation::Response &res); + bool ResetSafetyDefaults(kortex_device_manager::ResetSafetyDefaults::Request &req, kortex_device_manager::ResetSafetyDefaults::Response &res); + bool OnNotificationSafetyTopic(kortex_device_manager::SafetyTopic::Request &req, kortex_device_manager::SafetyTopic::Response &res); + void cb_SafetyTopic(SafetyNotification notif); + bool SetModelNumber(kortex_device_manager::SetModelNumber::Request &req, kortex_device_manager::SetModelNumber::Response &res); + bool SetPartNumber(kortex_device_manager::SetPartNumber::Request &req, kortex_device_manager::SetPartNumber::Response &res); + bool SetPartNumberRevision(kortex_device_manager::SetPartNumberRevision::Request &req, kortex_device_manager::SetPartNumberRevision::Response &res); + bool SetSerialNumber(kortex_device_manager::SetSerialNumber::Request &req, kortex_device_manager::SetSerialNumber::Response &res); + bool SetMACAddress(kortex_device_manager::SetMACAddress::Request &req, kortex_device_manager::SetMACAddress::Response &res); + + bool ReadAllDevices(kortex_device_manager::ReadAllDevices::Request &req, kortex_device_manager::ReadAllDevices::Response &res); + + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + + DeviceConfigClient* m_deviceconfig; + DeviceManagerClient* m_devicemanager; + + SessionManager* m_SessionManager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_SafetyTopic; +}; +#endif diff --git a/kortex_device_manager/src/util/diagnostic.h b/kortex_device_manager/src/util/diagnostic.h new file mode 100644 index 00000000..f0199870 --- /dev/null +++ b/kortex_device_manager/src/util/diagnostic.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +struct kortex_error +{ + int error_code; + std::string description; +}; \ No newline at end of file diff --git a/kortex_device_manager/src/util/math_util.h b/kortex_device_manager/src/util/math_util.h new file mode 100644 index 00000000..bf935386 --- /dev/null +++ b/kortex_device_manager/src/util/math_util.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_device_manager/srv/ClearAllSafetyStatus.srv b/kortex_device_manager/srv/ClearAllSafetyStatus.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_device_manager/srv/ClearAllSafetyStatus.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/ClearSafetyStatus.srv b/kortex_device_manager/srv/ClearSafetyStatus.srv new file mode 100644 index 00000000..a44abf78 --- /dev/null +++ b/kortex_device_manager/srv/ClearSafetyStatus.srv @@ -0,0 +1,3 @@ +SafetyHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetAllSafetyConfiguration.srv b/kortex_device_manager/srv/GetAllSafetyConfiguration.srv new file mode 100644 index 00000000..f60360fc --- /dev/null +++ b/kortex_device_manager/srv/GetAllSafetyConfiguration.srv @@ -0,0 +1,3 @@ +Empty input +--- +SafetyConfigurationList output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetAllSafetyInformation.srv b/kortex_device_manager/srv/GetAllSafetyInformation.srv new file mode 100644 index 00000000..ccb6480c --- /dev/null +++ b/kortex_device_manager/srv/GetAllSafetyInformation.srv @@ -0,0 +1,3 @@ +Empty input +--- +SafetyInformationList output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetBootloaderVersion.srv b/kortex_device_manager/srv/GetBootloaderVersion.srv new file mode 100644 index 00000000..f9df34be --- /dev/null +++ b/kortex_device_manager/srv/GetBootloaderVersion.srv @@ -0,0 +1,3 @@ +Empty input +--- +BootloaderVersion output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetDeviceType.srv b/kortex_device_manager/srv/GetDeviceType.srv new file mode 100644 index 00000000..841cafb0 --- /dev/null +++ b/kortex_device_manager/srv/GetDeviceType.srv @@ -0,0 +1,3 @@ +Empty input +--- +DeviceType output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetFirmwareVersion.srv b/kortex_device_manager/srv/GetFirmwareVersion.srv new file mode 100644 index 00000000..f92f54c5 --- /dev/null +++ b/kortex_device_manager/srv/GetFirmwareVersion.srv @@ -0,0 +1,3 @@ +Empty input +--- +FirmwareVersion output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetIPv4Settings.srv b/kortex_device_manager/srv/GetIPv4Settings.srv new file mode 100644 index 00000000..dbe3ca40 --- /dev/null +++ b/kortex_device_manager/srv/GetIPv4Settings.srv @@ -0,0 +1,3 @@ +Empty input +--- +IPv4Settings output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetMACAddress.srv b/kortex_device_manager/srv/GetMACAddress.srv new file mode 100644 index 00000000..8b79b417 --- /dev/null +++ b/kortex_device_manager/srv/GetMACAddress.srv @@ -0,0 +1,3 @@ +Empty input +--- +MACAddress output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetModelNumber.srv b/kortex_device_manager/srv/GetModelNumber.srv new file mode 100644 index 00000000..7d685d93 --- /dev/null +++ b/kortex_device_manager/srv/GetModelNumber.srv @@ -0,0 +1,3 @@ +Empty input +--- +ModelNumber output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetPartNumber.srv b/kortex_device_manager/srv/GetPartNumber.srv new file mode 100644 index 00000000..b4d06776 --- /dev/null +++ b/kortex_device_manager/srv/GetPartNumber.srv @@ -0,0 +1,3 @@ +Empty input +--- +PartNumber output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetPartNumberRevision.srv b/kortex_device_manager/srv/GetPartNumberRevision.srv new file mode 100644 index 00000000..dde505da --- /dev/null +++ b/kortex_device_manager/srv/GetPartNumberRevision.srv @@ -0,0 +1,3 @@ +Empty input +--- +PartNumberRevision output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetPowerOnSelfTestResult.srv b/kortex_device_manager/srv/GetPowerOnSelfTestResult.srv new file mode 100644 index 00000000..adf306ed --- /dev/null +++ b/kortex_device_manager/srv/GetPowerOnSelfTestResult.srv @@ -0,0 +1,3 @@ +Empty input +--- +PowerOnSelfTestResult output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetRunMode.srv b/kortex_device_manager/srv/GetRunMode.srv new file mode 100644 index 00000000..0b17a758 --- /dev/null +++ b/kortex_device_manager/srv/GetRunMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +RunMode output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetSafetyConfiguration.srv b/kortex_device_manager/srv/GetSafetyConfiguration.srv new file mode 100644 index 00000000..21b52ca7 --- /dev/null +++ b/kortex_device_manager/srv/GetSafetyConfiguration.srv @@ -0,0 +1,3 @@ +SafetyHandle input +--- +SafetyConfiguration output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetSafetyEnable.srv b/kortex_device_manager/srv/GetSafetyEnable.srv new file mode 100644 index 00000000..b0957315 --- /dev/null +++ b/kortex_device_manager/srv/GetSafetyEnable.srv @@ -0,0 +1,3 @@ +SafetyHandle input +--- +SafetyEnable output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetSafetyInformation.srv b/kortex_device_manager/srv/GetSafetyInformation.srv new file mode 100644 index 00000000..2869681a --- /dev/null +++ b/kortex_device_manager/srv/GetSafetyInformation.srv @@ -0,0 +1,3 @@ +SafetyHandle input +--- +SafetyInformation output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetSafetyStatus.srv b/kortex_device_manager/srv/GetSafetyStatus.srv new file mode 100644 index 00000000..c188202d --- /dev/null +++ b/kortex_device_manager/srv/GetSafetyStatus.srv @@ -0,0 +1,3 @@ +SafetyHandle input +--- +SafetyStatus output \ No newline at end of file diff --git a/kortex_device_manager/srv/GetSerialNumber.srv b/kortex_device_manager/srv/GetSerialNumber.srv new file mode 100644 index 00000000..e1bc96c2 --- /dev/null +++ b/kortex_device_manager/srv/GetSerialNumber.srv @@ -0,0 +1,3 @@ +Empty input +--- +SerialNumber output \ No newline at end of file diff --git a/kortex_device_manager/srv/ReadAllDevices.srv b/kortex_device_manager/srv/ReadAllDevices.srv new file mode 100644 index 00000000..8f01b626 --- /dev/null +++ b/kortex_device_manager/srv/ReadAllDevices.srv @@ -0,0 +1,3 @@ +Empty input +--- +DeviceHandles output \ No newline at end of file diff --git a/kortex_device_manager/srv/RebootRequest.srv b/kortex_device_manager/srv/RebootRequest.srv new file mode 100644 index 00000000..25cc1893 --- /dev/null +++ b/kortex_device_manager/srv/RebootRequest.srv @@ -0,0 +1,3 @@ +RebootRqst input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/ResetSafetyDefaults.srv b/kortex_device_manager/srv/ResetSafetyDefaults.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_device_manager/srv/ResetSafetyDefaults.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SafetyTopic.srv b/kortex_device_manager/srv/SafetyTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_device_manager/srv/SafetyTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetIPv4Settings.srv b/kortex_device_manager/srv/SetIPv4Settings.srv new file mode 100644 index 00000000..a745cb17 --- /dev/null +++ b/kortex_device_manager/srv/SetIPv4Settings.srv @@ -0,0 +1,3 @@ +IPv4Settings input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetMACAddress.srv b/kortex_device_manager/srv/SetMACAddress.srv new file mode 100644 index 00000000..33f6a894 --- /dev/null +++ b/kortex_device_manager/srv/SetMACAddress.srv @@ -0,0 +1,3 @@ +MACAddress input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetModelNumber.srv b/kortex_device_manager/srv/SetModelNumber.srv new file mode 100644 index 00000000..47eb98c4 --- /dev/null +++ b/kortex_device_manager/srv/SetModelNumber.srv @@ -0,0 +1,3 @@ +ModelNumber input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetPartNumber.srv b/kortex_device_manager/srv/SetPartNumber.srv new file mode 100644 index 00000000..12321918 --- /dev/null +++ b/kortex_device_manager/srv/SetPartNumber.srv @@ -0,0 +1,3 @@ +PartNumber input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetPartNumberRevision.srv b/kortex_device_manager/srv/SetPartNumberRevision.srv new file mode 100644 index 00000000..43c27428 --- /dev/null +++ b/kortex_device_manager/srv/SetPartNumberRevision.srv @@ -0,0 +1,3 @@ +PartNumberRevision input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetRunMode.srv b/kortex_device_manager/srv/SetRunMode.srv new file mode 100644 index 00000000..fc420a73 --- /dev/null +++ b/kortex_device_manager/srv/SetRunMode.srv @@ -0,0 +1,3 @@ +RunMode input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetSafetyConfiguration.srv b/kortex_device_manager/srv/SetSafetyConfiguration.srv new file mode 100644 index 00000000..db370ae2 --- /dev/null +++ b/kortex_device_manager/srv/SetSafetyConfiguration.srv @@ -0,0 +1,3 @@ +SafetyConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetSafetyEnable.srv b/kortex_device_manager/srv/SetSafetyEnable.srv new file mode 100644 index 00000000..198bd121 --- /dev/null +++ b/kortex_device_manager/srv/SetSafetyEnable.srv @@ -0,0 +1,3 @@ +SafetyEnable input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetSafetyErrorThreshold.srv b/kortex_device_manager/srv/SetSafetyErrorThreshold.srv new file mode 100644 index 00000000..04c3ade4 --- /dev/null +++ b/kortex_device_manager/srv/SetSafetyErrorThreshold.srv @@ -0,0 +1,3 @@ +SafetyThreshold input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetSafetyWarningThreshold.srv b/kortex_device_manager/srv/SetSafetyWarningThreshold.srv new file mode 100644 index 00000000..04c3ade4 --- /dev/null +++ b/kortex_device_manager/srv/SetSafetyWarningThreshold.srv @@ -0,0 +1,3 @@ +SafetyThreshold input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/srv/SetSerialNumber.srv b/kortex_device_manager/srv/SetSerialNumber.srv new file mode 100644 index 00000000..f00cd0f9 --- /dev/null +++ b/kortex_device_manager/srv/SetSerialNumber.srv @@ -0,0 +1,3 @@ +SerialNumber input +--- +Empty output \ No newline at end of file diff --git a/kortex_device_manager/templates/NodeServices.cpp.jinja2 b/kortex_device_manager/templates/NodeServices.cpp.jinja2 new file mode 100644 index 00000000..52b39999 --- /dev/null +++ b/kortex_device_manager/templates/NodeServices.cpp.jinja2 @@ -0,0 +1,126 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +{% for package in detailedPackages %} +{%- if package.HasMessage == 1 -%} +#include "{{package.filename|lower}}_ros_converter.h" +#include "{{package.filename|lower}}_proto_converter.h" +{%- endif %} +{% endfor -%} + +KortexDeviceManager::KortexDeviceManager(char* ip, ros::NodeHandle& n) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + +{% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); + {%- endif -%} + +{% endfor -%} + m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + std::cout << "\nSession Created\n"; + + m_pub_Error = m_n.advertise("KortexError", 1000); +{%- for package in detailedPackages -%} +{%- for method in package.service.method -%} +{%- if 'Topic' in method.name %} + m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); +{%- endif -%} +{%- endfor -%} +{%- endfor -%} + + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +{% for package in detailedPackages %} +{% for method in package.service.method %} +{%- if 'Topic' in method.name %} +bool KortexDeviceManager::OnNotification{{method.name}}(kortex_device_manager::{{method.name}}::Request &req, kortex_device_manager::{{method.name}}::Response &res) +{%- else %} +bool KortexDeviceManager::{{method.name}}(kortex_device_manager::{{method.name}}::Request &req, kortex_device_manager::{{method.name}}::Response &res) +{%- endif %} +{ + {%- set splitInputTypeName = method.input_type.split('.') -%} + {% set splitOutputTypeName = method.output_type.split('.') %} + {{splitInputTypeName[4]}} input; + {%- if not method.input_type.split('.')[4] == "Empty" %} + ToProtoData(req.input, &input); + {%- endif %} + {{splitOutputTypeName[4]}} output; + kortex_device_manager::KortexError result_error; + + try + { + {%- if not method.output_type.split('.')[4] == "Empty" %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + {%- if 'Topic' in method.name %} + {% set DetailedTypeName = splitInputTypeName[1:-1] %} + std::function< void ({% for word in DetailedTypeName %}{{word}}::{%- endfor -%}{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&KortexDeviceManager::cb_{{method.name}}, this, std::placeholders::_1); + output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(input); + {%- endif %} + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(); + {%- endif %} + {%- else %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + m_{{package.name|lower}}->{{method.name}}(input); + {%- else %} + m_{{package.name|lower}}->{{method.name}}(); + {%- endif %} + {%- endif %} + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + {%- if not method.output_type.split('.')[4] == "Empty" %} + ToRosData(output, res.output); + {%- endif %} + return true; +} +{%- if 'Topic' in method.name %} +void KortexDeviceManager::cb_{{method.name}}({% for word in DetailedTypeName %}{{word}}::{%- endfor -%}{{method.name|replace("Topic", "")}}Notification notif) +{ + kortex_device_manager::{{method.name|replace("Topic", "")}}Notification ros_msg; + ToRosData(notif, ros_msg); + m_pub_{{method.name}}.publish(ros_msg); +} +{%- endif %} +{% endfor -%} +{% endfor -%} \ No newline at end of file diff --git a/kortex_device_manager/templates/NodeServices.h.jinja2 b/kortex_device_manager/templates/NodeServices.h.jinja2 new file mode 100644 index 00000000..3176c06b --- /dev/null +++ b/kortex_device_manager/templates/NodeServices.h.jinja2 @@ -0,0 +1,99 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{packageName}}SERVICES_H_ +#define _KORTEX_{{packageName}}SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +{%- for package in detailedPackages %} +#include <{{package.filename}}.pb.h> +{%- endfor %} + +#include +#include + +#include +#include + +{%- for package in detailedPackages %} +{%- if package.HasRPC == 1 %} +#include <{{package.name}}ClientRpc.h> +{%- endif %} +{%- endfor %} +#include +#include + +{%- for package in detailedPackages %} +{%- for method in package.service.method %} +#include "kortex_device_manager/{{method.name}}.h" +{%- endfor %} +{%- endfor %} +#include "kortex_device_manager/KortexError.h" + +using namespace std; +using namespace Kinova::Api; +{%- for package in detailedPackages %} +using namespace {{package.namespace}}; +{%- endfor %} + +class KortexDeviceManager +{ + public: + KortexDeviceManager(char* ip, ros::NodeHandle& n); +{% for package in detailedPackages %} +{%- for method in package.service.method %} +{%- if 'Topic' in method.name %} + bool OnNotification{{method.name}}(kortex_device_manager::{{method.name}}::Request &req, kortex_device_manager::{{method.name}}::Response &res); + void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); +{%- else %} + bool {{method.name}}(kortex_device_manager::{{method.name}}::Request &req, kortex_device_manager::{{method.name}}::Response &res); +{%- endif %} +{%- endfor %} +{% endfor %} + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + {% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + {{package.name}}Client* m_{{package.name|lower}}; + {%- endif -%} + {% endfor %} + + SessionManager* m_SessionManager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + {%- for package in detailedPackages %} + {%- for method in package.service.method %} + {%- if 'Topic' in method.name %} + ros::Publisher m_pub_{{method.name}}; + {%- endif %} + {%- endfor %} + {%- endfor %} +}; +#endif + diff --git a/kortex_device_manager/templates/main.jinja2 b/kortex_device_manager/templates/main.jinja2 new file mode 100644 index 00000000..612a3662 --- /dev/null +++ b/kortex_device_manager/templates/main.jinja2 @@ -0,0 +1,49 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "math_util.h" + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "DeviceManager"); + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 1) + { + ROS_INFO("Connecting to IP = %s", argv[1]); + } + else + { + ROS_INFO("You need to provide an IP adresse as a parameter. ex: rosrun package node 192.168.1.1"); + ros::shutdown(); + return 0; + } + + KortexDeviceManager services_object(argv[1], n); + + {% for function in list_function -%} + ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &KortexDeviceManager::{{function}}, &services_object); + {% endfor %} + + ROS_INFO("Node's services initialized correctly."); + + ros::spin(); + + return 1; +} diff --git a/kortex_device_manager/templates/proto_converter.cpp.jinja2 b/kortex_device_manager/templates/proto_converter.cpp.jinja2 new file mode 100644 index 00000000..ac90acfd --- /dev/null +++ b/kortex_device_manager/templates/proto_converter.cpp.jinja2 @@ -0,0 +1,77 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentPackageName|lower}}_proto_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_proto_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToProtoData(kortex_device_manager::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") -%} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {%- if field.type == 11 %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); + } + {%- else %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name|lower}}.size(); i++) + { + output->add_{{field.name|lower}}(input.{{field.name|lower}}[i]); + } + {% endif -%} + {% else -%} + {%- if field.type == 11 %} + ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); + {%- elif field.type == 14 %}{# ENUM #} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); + {%- elif field.type == 12 %} + output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); + {%- else %} + output->set_{{field.name}}(input.{{field.name}}); + {%- endif -%} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + + {% if detailed_message.HasOneOf == "true" %} + + {% for field in detailed_message.message.field %} + {%- if field.HasField("oneof_index") -%} + if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) + { + {% if field.type == 11 -%} + ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} + output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- else %} + output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- endif %} + } + {% endif %} + {%- endfor -%} + {% endif %} + + return 0; +} +{% endfor %} diff --git a/kortex_device_manager/templates/proto_converter.h.jinja2 b/kortex_device_manager/templates/proto_converter.h.jinja2 new file mode 100644 index 00000000..b9b0c1c6 --- /dev/null +++ b/kortex_device_manager/templates/proto_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_device_manager/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToProtoData(kortex_device_manager::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_converter.cpp.jinja2 b/kortex_device_manager/templates/ros_converter.cpp.jinja2 new file mode 100644 index 00000000..8eb6f01e --- /dev/null +++ b/kortex_device_manager/templates/ros_converter.cpp.jinja2 @@ -0,0 +1,86 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentPackageName|lower}}_ros_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_ros_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_device_manager::{{detailed_message.message.name}} &output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") %} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {% if field.type == 11 %} + {%- set splitTypeName = field.type_name.split('.') -%} + output.{{field.name|lower}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + kortex_device_manager::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(i), temp); + output.{{field.name}}.push_back(temp); + } + {%- else %} + output.{{field.name}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); + } + {%- endif %} + {%- else %} + {%- if field.type == 11 %} + ToRosData(input.{{field.name}}(), output.{{field.name}}); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output.{{field.name}} = input.{{field.name}}(); + {%- elif field.type == 12 %} + output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); + {%- else %} + output.{{field.name}} = input.{{field.name}}(); + {%- endif %} + {%- endif %} + {%- endif %} + {%- endfor %} + + {% if detailed_message.HasOneOf == "true" %} + auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); + + switch(oneof_type) + { + {%- for field in detailed_message.message.field -%} + {%- if field.HasField("oneof_index") -%} + {%- set splitTypeName = field.type_name.split('.') %} + {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} + case {{detailed_message.message.name}}::k{{EnumName}}: + { + {%- if field.type == 11 %} + kortex_device_manager::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(), temp); + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); + {%- elif field.type == 14 %} + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); + {% endif %} + break; + } + {% endif %} + {%- endfor %} + } + {% endif -%} + + return 0; +} +{% endfor %} diff --git a/kortex_device_manager/templates/ros_converter.h.jinja2 b/kortex_device_manager/templates/ros_converter.h.jinja2 new file mode 100644 index 00000000..5f78c4d1 --- /dev/null +++ b/kortex_device_manager/templates/ros_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_device_manager/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_device_manager::{{detailed_message.message.name}} &output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_enum.jinja2 b/kortex_device_manager/templates/ros_enum.jinja2 new file mode 100644 index 00000000..164146fc --- /dev/null +++ b/kortex_device_manager/templates/ros_enum.jinja2 @@ -0,0 +1,3 @@ +{% for member in item.value %} +uint32 {{member.name}} = {{member.number}} +{% endfor %} diff --git a/kortex_device_manager/templates/ros_message.jinja2 b/kortex_device_manager/templates/ros_message.jinja2 new file mode 100644 index 00000000..746188b6 --- /dev/null +++ b/kortex_device_manager/templates/ros_message.jinja2 @@ -0,0 +1,44 @@ +{%- for member in item.field -%} +{%- if not member.HasField("oneof_index") -%} +{%- if member.type == 9 %} {# TYPE_STRING #} +string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 12 %} {# TYPE_BYTES #} +uint8[] {{member.name}} +{%- elif member.type == 1 %} {# TYPE_DOUBLE #} +float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 7 %} {# TYPE_FIXED32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 6 %} {# TYPE_FIXED64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 2 %} {# TYPE_FLOAT #} +float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 5 %} {# TYPE_INT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 3 %} {# TYPE_INT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 17 %} {# TYPE_SINT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 18 %} {# TYPE_SINT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 13 %} {# TYPE_UINT32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 4 %} {# TYPE_UINT64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 14 -%} {# TYPE_ENUM #} +{% set list1 = member.type_name.split('.') %} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 8 %} {# TYPE_BOOL #} +bool {{member.name}} +{%- elif member.type == 11 %}{# TYPE MESSAGE #} +{% set list1 = member.type_name.split('.') %} +{{list1[4]}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- if HasOneOf %} +{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} +{%- endif -%} \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_oneof.jinja2 b/kortex_device_manager/templates/ros_oneof.jinja2 new file mode 100644 index 00000000..4fac302a --- /dev/null +++ b/kortex_device_manager/templates/ros_oneof.jinja2 @@ -0,0 +1,9 @@ +{%- for member in item.field -%} +{% if member.HasField("oneof_index") %} +{% if member.type == 11 %} +{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} +{%- else -%} +uint32[] {{member.name}} +{%- endif -%} +{%- endif -%} +{% endfor %} \ No newline at end of file diff --git a/kortex_device_manager/templates/ros_service.jinja2 b/kortex_device_manager/templates/ros_service.jinja2 new file mode 100644 index 00000000..cc015cf8 --- /dev/null +++ b/kortex_device_manager/templates/ros_service.jinja2 @@ -0,0 +1,5 @@ +{% set split_input_type = item.input_type.split('.') %} +{%- set split_output_type = item.output_type.split('.') -%} +{{split_input_type[4]}} input +--- +{{split_output_type[4]}} output \ No newline at end of file diff --git a/kortex_driver/CMakeLists.txt b/kortex_driver/CMakeLists.txt new file mode 100644 index 00000000..c0d83b16 --- /dev/null +++ b/kortex_driver/CMakeLists.txt @@ -0,0 +1,39 @@ + +cmake_minimum_required(VERSION 2.8.3) +project(kortex_driver) + +add_compile_options(-std=c++11) +add_definitions(-D_OS_UNIX) + +## Find catkin and any catkin packages +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) + +file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") + +## Declare ROS messages and services +add_message_files(DIRECTORY msg) +add_message_files(DIRECTORY msg/non_generated) +add_service_files(DIRECTORY srv) +add_service_files(DIRECTORY srv/non_generated) + +## Generate added messages and services +generate_messages(DEPENDENCIES std_msgs) + +## Declare a catkin package +catkin_package() + +include_directories(include ${catkin_INCLUDE_DIRS}) +include_directories(include ${PROJECT_SOURCE_DIR}/src) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) +include_directories(include ${PROJECT_SOURCE_DIR}/src/util) + +link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) + +add_executable(${PROJECT_NAME} ${cpp_list}) + +target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} CppKinovaApi gcov) + +add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_gencpp) diff --git a/kortex_driver/RosGeneration.py b/kortex_driver/RosGeneration.py new file mode 100644 index 00000000..27a56cf7 --- /dev/null +++ b/kortex_driver/RosGeneration.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python + +import sys + +from google.protobuf.compiler import plugin_pb2 as plugin +from google.protobuf import json_format as json_f + +import jinja2 + +import itertools +import json +import types +import os +import sys + +from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto + +#Class that holds a protobuf message and some other details needed by the generator(jinja2 template). +class DetailedMessage: + def __init__(self, message=None): + self.message = message + self.HasOneOf = "false" + self.oneOfList = [] + +#Class that holds a protobuf service and some other details needed by the generator(jinja2 template). +class DetailedPackage: + def __init__(self, service=None): + self.name = "NoName" + self.service = service + +#JINJA2 function to render a file from a template. +def render(tpl_path, context): + path, filename = os.path.split(tpl_path) + return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) + +#Main plugin function +def generate_code(request, response): + + #The context is the object sent to the JINJA2 template + context = types.SimpleNamespace() + context.serviceVersion = 1 + + context.detailedPackages = [] + + MainFilePath = os.path.join(".", "src/main.cpp") + function_list = [] + fileIndex = 0 + + for proto_file in request.proto_file: + context.detailedPackages.append(DetailedPackage()) + context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] + context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] + context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") + context.detailedPackages[fileIndex].HasRPC = 0 + context.detailedPackages[fileIndex].HasMessage = 0 + + HeaderFilePath = os.path.join(".", "src/node.h") + CppFilePath = os.path.join(".", "src/node.cpp") + + package_name = str(proto_file.package) + + service_name = proto_file.package.split('.')[-1] + '/' + + #We lower the case to respect ROS coding standard style + CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) + CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) + + list_detailedMessage = [] + list_detailedMethod = [] + + # For every item in the current proto file + for item, package in traverse(proto_file): + context.HasOneOf = 0 + + if isinstance(item, EnumDescriptorProto): + context.item = item + + ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) + + with open(ros_enumPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) + #If this it a message + if isinstance(item, DescriptorProto): + tempMessage = DetailedMessage(item) + context.detailedPackages[fileIndex].HasMessage = 1 + + for member in item.field: + #If a member is part of a oneof, it will have this additional field + if member.HasField("oneof_index"): + context.HasOneOf = 1 + tempMessage.HasOneOf = "true" + else: + context.HasOneOf = 0 + tempMessage.HasOneOf = "false" + + context.item = item + + #If the proto file contains a ONEOF we need to generate a separate file to handle it. + if context.HasOneOf == 1: + + #This line gets the list of ONEOF that is in the current message. + oneOfList = item.ListFields()[-1][1] + + tempMessage.oneOfList = item.ListFields()[-1][1] + ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) + + with open(ros_oneofPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) + + + list_detailedMessage.append(tempMessage) + ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) + + #We call jinja2 to generate a ROS message. + with open(ros_messagePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) + + #If this is a service (A group of method) + if isinstance(item, ServiceDescriptorProto): + for idx, method in enumerate(item.method): + context.item = method + if "Topic" not in method.name: + function_list.append(method.name) + ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) + with open(ros_servicePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) + + context.detailedPackages[fileIndex].service = item + context.detailedPackages[fileIndex].HasRPC = 1 + + context.currentPackageName = context.detailedPackages[fileIndex].name + context.currentNamespace = proto_file.package.replace(".", "::") + context.currentFilename = context.detailedPackages[fileIndex].filename + context.item = list_detailedMessage + + if context.detailedPackages[fileIndex].HasMessage == 1: + #Wecall jinja2 to generate a prot/ROS converter for every protobuf message. + with open(CppProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) + with open(HeaderProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) + with open(CppRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) + with open(HeaderRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) + + fileIndex = fileIndex + 1 + + context.list_function = function_list + + #We jinja2 to generate the ROS node. + with open(HeaderFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) + with open(CppFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) + with open(MainFilePath, 'wt') as mainFile: + mainFile.write(render("./templates/main.jinja2", context.__dict__)) + +def traverse(proto_file): + #recursive function that browse a protobof item + def _traverse(package, items): + for item in items: + yield item, package + + if isinstance(item, DescriptorProto): + for enum in item.enum_type: + yield enum, package + + for nested in item.nested_type: + nested_package = package + item.name + + for nested_item in _traverse(nested, nested_package): + yield nested_item, nested_package + if isinstance(item, ServiceDescriptorProto): + for rpc in item.method: + yield rpc, package + + #return a list of everything found in the proto file + return itertools.chain( + _traverse(proto_file.package, proto_file.enum_type), + _traverse(proto_file.package, proto_file.message_type), + _traverse(proto_file.package, proto_file.service), + ) + +if __name__ == '__main__': + # Read request message from stdin + data = sys.stdin.buffer.read() + + # Parse request + request = plugin.CodeGeneratorRequest() + request.ParseFromString(data) + + # Create response + response = plugin.CodeGeneratorResponse() + + # Generate code + generate_code(request, response) + + # Serialise response message + output = response.SerializeToString() + + # Write to stdout + sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_driver/build/.gitignore b/kortex_driver/build/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/kortex_driver/kortex_driver.sh b/kortex_driver/kortex_driver.sh new file mode 100755 index 00000000..011eee96 --- /dev/null +++ b/kortex_driver/kortex_driver.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +python3 -u RosGeneration.py + diff --git a/kortex_driver/msg/Action.msg b/kortex_driver/msg/Action.msg new file mode 100644 index 00000000..3ef9cdef --- /dev/null +++ b/kortex_driver/msg/Action.msg @@ -0,0 +1,6 @@ + + +ActionHandle handle +string name +string application_data +Action_action_parameters oneof_action_parameters \ No newline at end of file diff --git a/kortex_driver/msg/ActionEvent.msg b/kortex_driver/msg/ActionEvent.msg new file mode 100644 index 00000000..b06938f2 --- /dev/null +++ b/kortex_driver/msg/ActionEvent.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_ACTION_EVENT = 0 + +uint32 ACTION_END = 1 + +uint32 ACTION_ABORT = 2 + +uint32 ACTION_PAUSE = 3 + +uint32 ACTION_START = 4 diff --git a/kortex_driver/msg/ActionExecutionState.msg b/kortex_driver/msg/ActionExecutionState.msg new file mode 100644 index 00000000..8737fa01 --- /dev/null +++ b/kortex_driver/msg/ActionExecutionState.msg @@ -0,0 +1,5 @@ + + +uint32 action_event + +ActionHandle handle \ No newline at end of file diff --git a/kortex_driver/msg/ActionHandle.msg b/kortex_driver/msg/ActionHandle.msg new file mode 100644 index 00000000..8cf5911e --- /dev/null +++ b/kortex_driver/msg/ActionHandle.msg @@ -0,0 +1,5 @@ + +uint32 identifier + +uint32 action_type +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/ActionList.msg b/kortex_driver/msg/ActionList.msg new file mode 100644 index 00000000..e8923a65 --- /dev/null +++ b/kortex_driver/msg/ActionList.msg @@ -0,0 +1,3 @@ + + +Action[] action_list \ No newline at end of file diff --git a/kortex_driver/msg/ActionNotification.msg b/kortex_driver/msg/ActionNotification.msg new file mode 100644 index 00000000..934e4528 --- /dev/null +++ b/kortex_driver/msg/ActionNotification.msg @@ -0,0 +1,13 @@ + + +uint32 action_event + +ActionHandle handle + +Timestamp timestamp + +UserProfileHandle user_handle + +uint32 abort_details + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ActionNotificationList.msg b/kortex_driver/msg/ActionNotificationList.msg new file mode 100644 index 00000000..cd2959a4 --- /dev/null +++ b/kortex_driver/msg/ActionNotificationList.msg @@ -0,0 +1,3 @@ + + +ActionNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ActionType.msg b/kortex_driver/msg/ActionType.msg new file mode 100644 index 00000000..a9159a07 --- /dev/null +++ b/kortex_driver/msg/ActionType.msg @@ -0,0 +1,34 @@ + +uint32 UNSPECIFIED_ACTION = 0 + +uint32 SEND_TWIST_COMMAND = 1 + +uint32 SEND_JOINT_SPEEDS = 4 + +uint32 REACH_POSE = 6 + +uint32 REACH_JOINT_ANGLES = 7 + +uint32 TOGGLE_ADMITTANCE_MODE = 13 + +uint32 SWITCH_CONTROL_MAPPING = 16 + +uint32 NAVIGATE_JOINTS = 17 + +uint32 NAVIGATE_MAPPINGS = 18 + +uint32 CHANGE_TWIST = 22 + +uint32 CHANGE_JOINT_SPEEDS = 23 + +uint32 APPLY_EMERGENCY_STOP = 28 + +uint32 CLEAR_FAULTS = 29 + +uint32 DELAY = 31 + +uint32 EXECUTE_ACTION = 32 + +uint32 SEND_GRIPPER_COMMAND = 33 + +uint32 STOP_ACTION = 35 diff --git a/kortex_driver/msg/Action_action_parameters.msg b/kortex_driver/msg/Action_action_parameters.msg new file mode 100644 index 00000000..63edadef --- /dev/null +++ b/kortex_driver/msg/Action_action_parameters.msg @@ -0,0 +1,30 @@ + + +TwistCommand[] send_twist_command + +JointSpeeds[] send_joint_speeds + +ConstrainedPose[] reach_pose + +ConstrainedJointAngles[] reach_joint_angles +uint32[] toggle_admittance_mode + +SwitchControlMapping[] switch_control_mapping +uint32[] navigate_joints +uint32[] navigate_mappings + +ChangeTwist[] change_twist + +ChangeJointSpeeds[] change_joint_speeds + +EmergencyStop[] apply_emergency_stop + +Faults[] clear_faults + +Delay[] delay + +ActionHandle[] execute_action + +GripperCommand[] send_gripper_command + +Stop[] stop_action \ No newline at end of file diff --git a/kortex_driver/msg/ActivateMapHandle.msg b/kortex_driver/msg/ActivateMapHandle.msg new file mode 100644 index 00000000..184513e9 --- /dev/null +++ b/kortex_driver/msg/ActivateMapHandle.msg @@ -0,0 +1,7 @@ + + +MappingHandle mapping_handle + +MapGroupHandle map_group_handle + +MapHandle map_handle \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorCommand.msg b/kortex_driver/msg/ActuatorCommand.msg new file mode 100644 index 00000000..a3d39bb4 --- /dev/null +++ b/kortex_driver/msg/ActuatorCommand.msg @@ -0,0 +1,7 @@ + +uint32 command_id +uint32 flags +float32 position +float32 velocity +float32 torque_joint +float32 current_motor \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorCustomData.msg b/kortex_driver/msg/ActuatorCustomData.msg new file mode 100644 index 00000000..1262a849 --- /dev/null +++ b/kortex_driver/msg/ActuatorCustomData.msg @@ -0,0 +1,18 @@ + +uint32 command_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorFeedback.msg b/kortex_driver/msg/ActuatorFeedback.msg new file mode 100644 index 00000000..0ce2e22c --- /dev/null +++ b/kortex_driver/msg/ActuatorFeedback.msg @@ -0,0 +1,15 @@ + +uint32 command_id +uint32 status_flags +uint32 jitter_comm +float32 position +float32 velocity +float32 torque +float32 current_motor +float32 voltage +float32 temperature_motor +float32 temperature_core +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/ActuatorInformation.msg b/kortex_driver/msg/ActuatorInformation.msg new file mode 100644 index 00000000..33727e06 --- /dev/null +++ b/kortex_driver/msg/ActuatorInformation.msg @@ -0,0 +1,2 @@ + +uint32 count \ No newline at end of file diff --git a/kortex_driver/msg/Admittance.msg b/kortex_driver/msg/Admittance.msg new file mode 100644 index 00000000..619ce458 --- /dev/null +++ b/kortex_driver/msg/Admittance.msg @@ -0,0 +1,3 @@ + + +uint32 admittance_mode \ No newline at end of file diff --git a/kortex_driver/msg/AdmittanceMode.msg b/kortex_driver/msg/AdmittanceMode.msg new file mode 100644 index 00000000..95037f23 --- /dev/null +++ b/kortex_driver/msg/AdmittanceMode.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_ADMITTANCE_MODE = 0 + +uint32 CARTESIAN = 1 + +uint32 JOINT = 2 + +uint32 NULL_SPACE = 3 + +uint32 DISABLED = 4 diff --git a/kortex_driver/msg/AdvancedSequenceHandle.msg b/kortex_driver/msg/AdvancedSequenceHandle.msg new file mode 100644 index 00000000..0a2bed61 --- /dev/null +++ b/kortex_driver/msg/AdvancedSequenceHandle.msg @@ -0,0 +1,4 @@ + + +SequenceHandle handle +bool in_loop \ No newline at end of file diff --git a/kortex_driver/msg/AppendActionInformation.msg b/kortex_driver/msg/AppendActionInformation.msg new file mode 100644 index 00000000..6e47fe18 --- /dev/null +++ b/kortex_driver/msg/AppendActionInformation.msg @@ -0,0 +1,5 @@ + + +SequenceHandle sequence_handle + +Action action \ No newline at end of file diff --git a/kortex_driver/msg/ArmState.msg b/kortex_driver/msg/ArmState.msg new file mode 100644 index 00000000..d85bd69d --- /dev/null +++ b/kortex_driver/msg/ArmState.msg @@ -0,0 +1,22 @@ + +uint32 UNSPECIFIED_ARM_STATE = 0 + +uint32 BASE_INITIALIZATION = 1 + +uint32 IDLE = 2 + +uint32 ARM_INITIALIZATION = 3 + +uint32 ARM_IN_FAULT = 4 + +uint32 ARM_MAINTENANCE = 5 + +uint32 ARM_SERVOING_LOW_LEVEL = 6 + +uint32 ARM_SERVOING_READY = 7 + +uint32 ARM_SERVOING_PLAYING_SEQUENCE = 8 + +uint32 ARM_SERVOING_MANUALLY_CONTROLLED = 9 + +uint32 RESERVED = 255 diff --git a/kortex_driver/msg/ArmStateInformation.msg b/kortex_driver/msg/ArmStateInformation.msg new file mode 100644 index 00000000..31839b05 --- /dev/null +++ b/kortex_driver/msg/ArmStateInformation.msg @@ -0,0 +1,5 @@ + + +uint32 active_state + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ArmStateNotification.msg b/kortex_driver/msg/ArmStateNotification.msg new file mode 100644 index 00000000..b5e1436f --- /dev/null +++ b/kortex_driver/msg/ArmStateNotification.msg @@ -0,0 +1,7 @@ + + +uint32 active_state + +Timestamp timestamp + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/BackupEvent.msg b/kortex_driver/msg/BackupEvent.msg new file mode 100644 index 00000000..28f21b35 --- /dev/null +++ b/kortex_driver/msg/BackupEvent.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_BACKUP_EVENT = 0 + +uint32 BACKUP_RESTORED = 1 + +uint32 BACKUP_UPLOADED = 2 diff --git a/kortex_driver/msg/BaseFeedback.msg b/kortex_driver/msg/BaseFeedback.msg new file mode 100644 index 00000000..10c3b325 --- /dev/null +++ b/kortex_driver/msg/BaseFeedback.msg @@ -0,0 +1,36 @@ + +uint32 active_state_connection_identifier + +uint32 active_state +float32 arm_voltage +float32 arm_current +float32 temperature_cpu +float32 temperature_ambient +float32 imu_acceleration_x +float32 imu_acceleration_y +float32 imu_acceleration_z +float32 imu_angular_velocity_x +float32 imu_angular_velocity_y +float32 imu_angular_velocity_z +float32 tool_pose_x +float32 tool_pose_y +float32 tool_pose_z +float32 tool_pose_theta_x +float32 tool_pose_theta_y +float32 tool_pose_theta_z +float32 tool_twist_linear_x +float32 tool_twist_linear_y +float32 tool_twist_linear_z +float32 tool_twist_angular_x +float32 tool_twist_angular_y +float32 tool_twist_angular_z +float32 tool_external_wrench_force_x +float32 tool_external_wrench_force_y +float32 tool_external_wrench_force_z +float32 tool_external_wrench_torque_x +float32 tool_external_wrench_torque_y +float32 tool_external_wrench_torque_z +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/CartesianLimitation.msg b/kortex_driver/msg/CartesianLimitation.msg new file mode 100644 index 00000000..d47b4fd5 --- /dev/null +++ b/kortex_driver/msg/CartesianLimitation.msg @@ -0,0 +1,5 @@ + + +uint32 type +float32 translation +float32 orientation \ No newline at end of file diff --git a/kortex_driver/msg/CartesianLimitationList.msg b/kortex_driver/msg/CartesianLimitationList.msg new file mode 100644 index 00000000..5ae6e2ab --- /dev/null +++ b/kortex_driver/msg/CartesianLimitationList.msg @@ -0,0 +1,3 @@ + + +CartesianLimitation[] limitations \ No newline at end of file diff --git a/kortex_driver/msg/CartesianReferenceFrame.msg b/kortex_driver/msg/CartesianReferenceFrame.msg new file mode 100644 index 00000000..b25dfb05 --- /dev/null +++ b/kortex_driver/msg/CartesianReferenceFrame.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_CARTESIAN_REFERENCE_FRAME = 0 + +uint32 MIXED = 1 + +uint32 TOOL = 2 diff --git a/kortex_driver/msg/CartesianReferenceFrameRequest.msg b/kortex_driver/msg/CartesianReferenceFrameRequest.msg new file mode 100644 index 00000000..9b0d748b --- /dev/null +++ b/kortex_driver/msg/CartesianReferenceFrameRequest.msg @@ -0,0 +1,3 @@ + + +uint32 reference_frame \ No newline at end of file diff --git a/kortex_driver/msg/CartesianSpeed.msg b/kortex_driver/msg/CartesianSpeed.msg new file mode 100644 index 00000000..7f4d31ee --- /dev/null +++ b/kortex_driver/msg/CartesianSpeed.msg @@ -0,0 +1,3 @@ + +float32 translation +float32 orientation \ No newline at end of file diff --git a/kortex_driver/msg/CartesianTrajectoryConstraint.msg b/kortex_driver/msg/CartesianTrajectoryConstraint.msg new file mode 100644 index 00000000..eb04b73e --- /dev/null +++ b/kortex_driver/msg/CartesianTrajectoryConstraint.msg @@ -0,0 +1,2 @@ + +CartesianTrajectoryConstraint_type oneof_type \ No newline at end of file diff --git a/kortex_driver/msg/CartesianTrajectoryConstraint_type.msg b/kortex_driver/msg/CartesianTrajectoryConstraint_type.msg new file mode 100644 index 00000000..5346af8c --- /dev/null +++ b/kortex_driver/msg/CartesianTrajectoryConstraint_type.msg @@ -0,0 +1,4 @@ + + +CartesianSpeed[] speed +uint32[] duration \ No newline at end of file diff --git a/kortex_driver/msg/ChangeJointSpeeds.msg b/kortex_driver/msg/ChangeJointSpeeds.msg new file mode 100644 index 00000000..c6f65586 --- /dev/null +++ b/kortex_driver/msg/ChangeJointSpeeds.msg @@ -0,0 +1,3 @@ + + +JointSpeeds joint_speeds \ No newline at end of file diff --git a/kortex_driver/msg/ChangeTwist.msg b/kortex_driver/msg/ChangeTwist.msg new file mode 100644 index 00000000..0c8b6d2d --- /dev/null +++ b/kortex_driver/msg/ChangeTwist.msg @@ -0,0 +1,3 @@ + +float32 linear +float32 angular \ No newline at end of file diff --git a/kortex_driver/msg/Command.msg b/kortex_driver/msg/Command.msg new file mode 100644 index 00000000..0e61a1d5 --- /dev/null +++ b/kortex_driver/msg/Command.msg @@ -0,0 +1,6 @@ + +uint32 frame_id + +ActuatorCommand[] actuators + +InterconnectCommand interconnect \ No newline at end of file diff --git a/kortex_driver/msg/CommunicationInterfaceConfiguration.msg b/kortex_driver/msg/CommunicationInterfaceConfiguration.msg new file mode 100644 index 00000000..9ff04314 --- /dev/null +++ b/kortex_driver/msg/CommunicationInterfaceConfiguration.msg @@ -0,0 +1,4 @@ + + +uint32 type +bool enable \ No newline at end of file diff --git a/kortex_driver/msg/ConfigurationChangeNotification.msg b/kortex_driver/msg/ConfigurationChangeNotification.msg new file mode 100644 index 00000000..40a0c973 --- /dev/null +++ b/kortex_driver/msg/ConfigurationChangeNotification.msg @@ -0,0 +1,9 @@ + + +uint32 event + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ConfigurationChangeNotificationList.msg b/kortex_driver/msg/ConfigurationChangeNotificationList.msg new file mode 100644 index 00000000..120fcbbc --- /dev/null +++ b/kortex_driver/msg/ConfigurationChangeNotificationList.msg @@ -0,0 +1,3 @@ + + +ConfigurationChangeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ConfigurationNotificationEvent.msg b/kortex_driver/msg/ConfigurationNotificationEvent.msg new file mode 100644 index 00000000..6614d7ea --- /dev/null +++ b/kortex_driver/msg/ConfigurationNotificationEvent.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_CONFIGURATION_EVENT = 0 + +uint32 UPDATE = 1 + +uint32 DELETE = 2 + +uint32 DELETE_ALL = 3 + +uint32 CREATE = 4 diff --git a/kortex_driver/msg/Connection.msg b/kortex_driver/msg/Connection.msg new file mode 100644 index 00000000..ca08b6c8 --- /dev/null +++ b/kortex_driver/msg/Connection.msg @@ -0,0 +1,5 @@ + + +UserProfileHandle user_handle +string connection_information +uint32 connection_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedJointAngle.msg b/kortex_driver/msg/ConstrainedJointAngle.msg new file mode 100644 index 00000000..25394c23 --- /dev/null +++ b/kortex_driver/msg/ConstrainedJointAngle.msg @@ -0,0 +1,5 @@ + +uint32 joint_identifier +float32 value + +JointTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedJointAngles.msg b/kortex_driver/msg/ConstrainedJointAngles.msg new file mode 100644 index 00000000..2d1c3a17 --- /dev/null +++ b/kortex_driver/msg/ConstrainedJointAngles.msg @@ -0,0 +1,5 @@ + + +JointAngles joint_angles + +JointTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedOrientation.msg b/kortex_driver/msg/ConstrainedOrientation.msg new file mode 100644 index 00000000..3d45805e --- /dev/null +++ b/kortex_driver/msg/ConstrainedOrientation.msg @@ -0,0 +1,5 @@ + + +Orientation target_orientation + +CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedPose.msg b/kortex_driver/msg/ConstrainedPose.msg new file mode 100644 index 00000000..4dc894f8 --- /dev/null +++ b/kortex_driver/msg/ConstrainedPose.msg @@ -0,0 +1,5 @@ + + +Pose target_pose + +CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ConstrainedPosition.msg b/kortex_driver/msg/ConstrainedPosition.msg new file mode 100644 index 00000000..64dec6fe --- /dev/null +++ b/kortex_driver/msg/ConstrainedPosition.msg @@ -0,0 +1,5 @@ + + +Position target_position + +CartesianTrajectoryConstraint constraint \ No newline at end of file diff --git a/kortex_driver/msg/ControlMode.msg b/kortex_driver/msg/ControlMode.msg new file mode 100644 index 00000000..7e5d154c --- /dev/null +++ b/kortex_driver/msg/ControlMode.msg @@ -0,0 +1,20 @@ + +uint32 UNSPECIFIED_CONTROL_MODE = 0 + +uint32 ANGULAR_JOYSTICK = 1 + +uint32 CARTESIAN_JOYSTICK = 2 + +uint32 VISION_JOYSTICK = 3 + +uint32 ANGULAR_TRAJECTORY = 4 + +uint32 CARTESIAN_TRAJECTORY = 5 + +uint32 CARTESIAN_ADMITTANCE = 6 + +uint32 JOINT_ADMITTANCE = 7 + +uint32 NULL_SPACE_ADMITTANCE = 8 + +uint32 IDLE = 13 diff --git a/kortex_driver/msg/ControlModeInformation.msg b/kortex_driver/msg/ControlModeInformation.msg new file mode 100644 index 00000000..bdde570c --- /dev/null +++ b/kortex_driver/msg/ControlModeInformation.msg @@ -0,0 +1,3 @@ + + +uint32 mode \ No newline at end of file diff --git a/kortex_driver/msg/ControlModeNotification.msg b/kortex_driver/msg/ControlModeNotification.msg new file mode 100644 index 00000000..aa8fae5b --- /dev/null +++ b/kortex_driver/msg/ControlModeNotification.msg @@ -0,0 +1,9 @@ + + +uint32 control_mode + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ControlModeNotificationList.msg b/kortex_driver/msg/ControlModeNotificationList.msg new file mode 100644 index 00000000..14938d84 --- /dev/null +++ b/kortex_driver/msg/ControlModeNotificationList.msg @@ -0,0 +1,3 @@ + + +ControlModeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ControllerBehavior.msg b/kortex_driver/msg/ControllerBehavior.msg new file mode 100644 index 00000000..cebfc841 --- /dev/null +++ b/kortex_driver/msg/ControllerBehavior.msg @@ -0,0 +1,12 @@ + +uint32 UNSPECIFIED_CONTROLLER_BEHAVIOR = 0 + +uint32 CONTROLLER_BUTTON_DOWN = 1 + +uint32 CONTROLLER_BUTTON_UP = 2 + +uint32 CONTROLLER_AXIS_POSITIVE = 3 + +uint32 CONTROLLER_AXIS_NEGATIVE = 4 + +uint32 CONTROLLER_BUTTON_CLICK = 5 diff --git a/kortex_driver/msg/ControllerElementEventType.msg b/kortex_driver/msg/ControllerElementEventType.msg new file mode 100644 index 00000000..47c3b0b3 --- /dev/null +++ b/kortex_driver/msg/ControllerElementEventType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_CONTROLLER_ELEMENT_EVENT = 0 + +uint32 AXIS_MOVED = 1 + +uint32 BUTTON_DOWN = 2 + +uint32 BUTTON_UP = 3 diff --git a/kortex_driver/msg/ControllerElementHandle.msg b/kortex_driver/msg/ControllerElementHandle.msg new file mode 100644 index 00000000..61946e5f --- /dev/null +++ b/kortex_driver/msg/ControllerElementHandle.msg @@ -0,0 +1,4 @@ + + +ControllerHandle controller_handle +ControllerElementHandle_identifier oneof_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerElementHandle_identifier.msg b/kortex_driver/msg/ControllerElementHandle_identifier.msg new file mode 100644 index 00000000..142ae973 --- /dev/null +++ b/kortex_driver/msg/ControllerElementHandle_identifier.msg @@ -0,0 +1,3 @@ + +uint32[] button +uint32[] axis \ No newline at end of file diff --git a/kortex_driver/msg/ControllerElementState.msg b/kortex_driver/msg/ControllerElementState.msg new file mode 100644 index 00000000..23fe0842 --- /dev/null +++ b/kortex_driver/msg/ControllerElementState.msg @@ -0,0 +1,6 @@ + + +ControllerElementHandle handle + +uint32 event_type +float32 axis_value \ No newline at end of file diff --git a/kortex_driver/msg/ControllerEvent.msg b/kortex_driver/msg/ControllerEvent.msg new file mode 100644 index 00000000..3921fb1c --- /dev/null +++ b/kortex_driver/msg/ControllerEvent.msg @@ -0,0 +1,6 @@ + + +uint32 input_type + +uint32 behavior +uint32 input_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerEventType.msg b/kortex_driver/msg/ControllerEventType.msg new file mode 100644 index 00000000..e72f156e --- /dev/null +++ b/kortex_driver/msg/ControllerEventType.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_CONTROLLER_EVENT = 0 + +uint32 CONTROLLER_DISCONNECTED = 1 + +uint32 CONTROLLER_CONNECTED = 2 diff --git a/kortex_driver/msg/ControllerHandle.msg b/kortex_driver/msg/ControllerHandle.msg new file mode 100644 index 00000000..96f814df --- /dev/null +++ b/kortex_driver/msg/ControllerHandle.msg @@ -0,0 +1,4 @@ + + +uint32 type +uint32 controller_identifier \ No newline at end of file diff --git a/kortex_driver/msg/ControllerInputType.msg b/kortex_driver/msg/ControllerInputType.msg new file mode 100644 index 00000000..7a448d50 --- /dev/null +++ b/kortex_driver/msg/ControllerInputType.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_CONTROLLER_INPUT_TYPE = 0 + +uint32 ANALOG = 1 + +uint32 DIGITAL = 2 diff --git a/kortex_driver/msg/ControllerList.msg b/kortex_driver/msg/ControllerList.msg new file mode 100644 index 00000000..d94f3f0b --- /dev/null +++ b/kortex_driver/msg/ControllerList.msg @@ -0,0 +1,3 @@ + + +ControllerHandle[] handles \ No newline at end of file diff --git a/kortex_driver/msg/ControllerNotification.msg b/kortex_driver/msg/ControllerNotification.msg new file mode 100644 index 00000000..771dca52 --- /dev/null +++ b/kortex_driver/msg/ControllerNotification.msg @@ -0,0 +1,7 @@ + + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ControllerNotificationList.msg b/kortex_driver/msg/ControllerNotificationList.msg new file mode 100644 index 00000000..33b1a336 --- /dev/null +++ b/kortex_driver/msg/ControllerNotificationList.msg @@ -0,0 +1,3 @@ + + +ControllerNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ControllerState.msg b/kortex_driver/msg/ControllerState.msg new file mode 100644 index 00000000..01ee23ac --- /dev/null +++ b/kortex_driver/msg/ControllerState.msg @@ -0,0 +1,5 @@ + + +ControllerHandle handle + +uint32 event_type \ No newline at end of file diff --git a/kortex_driver/msg/ControllerType.msg b/kortex_driver/msg/ControllerType.msg new file mode 100644 index 00000000..102c28c0 --- /dev/null +++ b/kortex_driver/msg/ControllerType.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_CONTROLLER_TYPE = 0 + +uint32 XBOX_CONTROLLER = 1 + +uint32 WRIST_CONTROLLER = 2 diff --git a/kortex_driver/msg/CustomData.msg b/kortex_driver/msg/CustomData.msg new file mode 100644 index 00000000..6714137a --- /dev/null +++ b/kortex_driver/msg/CustomData.msg @@ -0,0 +1,14 @@ + +uint32 frame_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 + +ActuatorCustomData[] actuators_custom_data + +InterconnectCustomData interconnect_custom_data \ No newline at end of file diff --git a/kortex_driver/msg/Delay.msg b/kortex_driver/msg/Delay.msg new file mode 100644 index 00000000..dbff7d1e --- /dev/null +++ b/kortex_driver/msg/Delay.msg @@ -0,0 +1,2 @@ + +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/DeviceHandle.msg b/kortex_driver/msg/DeviceHandle.msg new file mode 100644 index 00000000..49f84366 --- /dev/null +++ b/kortex_driver/msg/DeviceHandle.msg @@ -0,0 +1,5 @@ + + +uint32 device_type +uint32 device_identifier +uint32 order \ No newline at end of file diff --git a/kortex_driver/msg/DeviceTypes.msg b/kortex_driver/msg/DeviceTypes.msg new file mode 100644 index 00000000..5a55df07 --- /dev/null +++ b/kortex_driver/msg/DeviceTypes.msg @@ -0,0 +1,14 @@ + +uint32 UNSPECIFIED_DEVICE_TYPE = 0 + +uint32 BASE = 1 + +uint32 VISION = 2 + +uint32 BIG_ACTUATOR = 3 + +uint32 SMALL_ACTUATOR = 4 + +uint32 INTERCONNECT = 5 + +uint32 GRIPPER = 6 diff --git a/kortex_driver/msg/EmergencyStop.msg b/kortex_driver/msg/EmergencyStop.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_driver/msg/Empty.msg b/kortex_driver/msg/Empty.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_driver/msg/ErrorCodes.msg b/kortex_driver/msg/ErrorCodes.msg new file mode 100644 index 00000000..4b9872a6 --- /dev/null +++ b/kortex_driver/msg/ErrorCodes.msg @@ -0,0 +1,10 @@ + +uint32 SUCCESS = 0 + +uint32 ERROR_PROTOCOL_SERVER = 1 + +uint32 ERROR_PROTOCOL_CLIENT = 2 + +uint32 ERROR_DEVICE = 3 + +uint32 ERROR_INTERNAL = 4 diff --git a/kortex_driver/msg/EventIdSequenceInfoNotification.msg b/kortex_driver/msg/EventIdSequenceInfoNotification.msg new file mode 100644 index 00000000..e20013fa --- /dev/null +++ b/kortex_driver/msg/EventIdSequenceInfoNotification.msg @@ -0,0 +1,14 @@ + +uint32 UNSPECIFIED_SEQUENCE_EVENT = 0 + +uint32 END = 1 + +uint32 ABORT = 2 + +uint32 PAUSE = 3 + +uint32 TASK_START = 4 + +uint32 TASK_END = 5 + +uint32 START = 6 diff --git a/kortex_driver/msg/FactoryEvent.msg b/kortex_driver/msg/FactoryEvent.msg new file mode 100644 index 00000000..ec57bf79 --- /dev/null +++ b/kortex_driver/msg/FactoryEvent.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_FACTORY_EVENT = 0 + +uint32 FACTORY_DEFAULT_RESTORED = 1 + +uint32 NETWORK_FACTORY_DEFAULT_RESTORED = 2 diff --git a/kortex_driver/msg/FactoryNotification.msg b/kortex_driver/msg/FactoryNotification.msg new file mode 100644 index 00000000..40a0c973 --- /dev/null +++ b/kortex_driver/msg/FactoryNotification.msg @@ -0,0 +1,9 @@ + + +uint32 event + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/Faults.msg b/kortex_driver/msg/Faults.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_driver/msg/Feedback.msg b/kortex_driver/msg/Feedback.msg new file mode 100644 index 00000000..be1a6c3f --- /dev/null +++ b/kortex_driver/msg/Feedback.msg @@ -0,0 +1,8 @@ + +uint32 frame_id + +BaseFeedback base + +ActuatorFeedback[] actuators + +InterconnectFeedback interconnect \ No newline at end of file diff --git a/kortex_driver/msg/Finger.msg b/kortex_driver/msg/Finger.msg new file mode 100644 index 00000000..909fac72 --- /dev/null +++ b/kortex_driver/msg/Finger.msg @@ -0,0 +1,3 @@ + +uint32 finger_identifier +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/FullIPv4Configuration.msg b/kortex_driver/msg/FullIPv4Configuration.msg new file mode 100644 index 00000000..f364c6a3 --- /dev/null +++ b/kortex_driver/msg/FullIPv4Configuration.msg @@ -0,0 +1,5 @@ + + +NetworkHandle handle + +IPv4Configuration ipv4_configuration \ No newline at end of file diff --git a/kortex_driver/msg/FullUserProfile.msg b/kortex_driver/msg/FullUserProfile.msg new file mode 100644 index 00000000..22e198c2 --- /dev/null +++ b/kortex_driver/msg/FullUserProfile.msg @@ -0,0 +1,4 @@ + + +UserProfile user_profile +string password \ No newline at end of file diff --git a/kortex_driver/msg/GpioEvent.msg b/kortex_driver/msg/GpioEvent.msg new file mode 100644 index 00000000..4ac2edaf --- /dev/null +++ b/kortex_driver/msg/GpioEvent.msg @@ -0,0 +1,4 @@ + + +uint32 gpio_state +uint32 device_identifier \ No newline at end of file diff --git a/kortex_driver/msg/GpioState.msg b/kortex_driver/msg/GpioState.msg new file mode 100644 index 00000000..4249b74d --- /dev/null +++ b/kortex_driver/msg/GpioState.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_GPIO_STATE = 0 + +uint32 GPIO_OFF = 1 + +uint32 GPIO_PULSE = 2 + +uint32 GPIO_ON = 3 diff --git a/kortex_driver/msg/Gripper.msg b/kortex_driver/msg/Gripper.msg new file mode 100644 index 00000000..73be9791 --- /dev/null +++ b/kortex_driver/msg/Gripper.msg @@ -0,0 +1,3 @@ + + +Finger[] finger \ No newline at end of file diff --git a/kortex_driver/msg/GripperCommand.msg b/kortex_driver/msg/GripperCommand.msg new file mode 100644 index 00000000..d1d91df0 --- /dev/null +++ b/kortex_driver/msg/GripperCommand.msg @@ -0,0 +1,6 @@ + + +uint32 mode + +Gripper gripper +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/GripperMode.msg b/kortex_driver/msg/GripperMode.msg new file mode 100644 index 00000000..db6b7288 --- /dev/null +++ b/kortex_driver/msg/GripperMode.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_GRIPPER_MODE = 0 + +uint32 GRIPPER_FORCE = 1 + +uint32 GRIPPER_SPEED = 2 + +uint32 GRIPPER_POSITION = 3 diff --git a/kortex_driver/msg/GripperRequest.msg b/kortex_driver/msg/GripperRequest.msg new file mode 100644 index 00000000..bdde570c --- /dev/null +++ b/kortex_driver/msg/GripperRequest.msg @@ -0,0 +1,3 @@ + + +uint32 mode \ No newline at end of file diff --git a/kortex_driver/msg/IPv4Configuration.msg b/kortex_driver/msg/IPv4Configuration.msg new file mode 100644 index 00000000..dc0cd6a9 --- /dev/null +++ b/kortex_driver/msg/IPv4Configuration.msg @@ -0,0 +1,5 @@ + +uint32 ip_address +uint32 subnet_mask +uint32 default_gateway +bool dhcp_enabled \ No newline at end of file diff --git a/kortex_driver/msg/IPv4Information.msg b/kortex_driver/msg/IPv4Information.msg new file mode 100644 index 00000000..4e95c58c --- /dev/null +++ b/kortex_driver/msg/IPv4Information.msg @@ -0,0 +1,4 @@ + +uint32 ip_address +uint32 subnet_mask +uint32 default_gateway \ No newline at end of file diff --git a/kortex_driver/msg/InterconnectCommand.msg b/kortex_driver/msg/InterconnectCommand.msg new file mode 100644 index 00000000..1b29bef5 --- /dev/null +++ b/kortex_driver/msg/InterconnectCommand.msg @@ -0,0 +1,6 @@ + +uint32 command_id +uint32 flags +float32 position +float32 velocity +float32 force \ No newline at end of file diff --git a/kortex_driver/msg/InterconnectCustomData.msg b/kortex_driver/msg/InterconnectCustomData.msg new file mode 100644 index 00000000..1262a849 --- /dev/null +++ b/kortex_driver/msg/InterconnectCustomData.msg @@ -0,0 +1,18 @@ + +uint32 command_id +uint32 custom_data_0 +uint32 custom_data_1 +uint32 custom_data_2 +uint32 custom_data_3 +uint32 custom_data_4 +uint32 custom_data_5 +uint32 custom_data_6 +uint32 custom_data_7 +uint32 custom_data_8 +uint32 custom_data_9 +uint32 custom_data_10 +uint32 custom_data_11 +uint32 custom_data_12 +uint32 custom_data_13 +uint32 custom_data_14 +uint32 custom_data_15 \ No newline at end of file diff --git a/kortex_driver/msg/InterconnectFeedback.msg b/kortex_driver/msg/InterconnectFeedback.msg new file mode 100644 index 00000000..389a5921 --- /dev/null +++ b/kortex_driver/msg/InterconnectFeedback.msg @@ -0,0 +1,19 @@ + +uint32 command_id +uint32 status_flags +uint32 jitter_comm +float32 position +float32 velocity +float32 force +float32 imu_acceleration_x +float32 imu_acceleration_y +float32 imu_acceleration_z +float32 imu_angular_velocity_x +float32 imu_angular_velocity_y +float32 imu_angular_velocity_z +float32 voltage +float32 temperature_core +uint32 fault_bank_a +uint32 fault_bank_b +uint32 warning_bank_a +uint32 warning_bank_b \ No newline at end of file diff --git a/kortex_driver/msg/JointAngle.msg b/kortex_driver/msg/JointAngle.msg new file mode 100644 index 00000000..1b2a9d13 --- /dev/null +++ b/kortex_driver/msg/JointAngle.msg @@ -0,0 +1,3 @@ + +uint32 joint_identifier +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointAngles.msg b/kortex_driver/msg/JointAngles.msg new file mode 100644 index 00000000..fe457738 --- /dev/null +++ b/kortex_driver/msg/JointAngles.msg @@ -0,0 +1,3 @@ + + +JointAngle[] joint_angles \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitation.msg b/kortex_driver/msg/JointLimitation.msg new file mode 100644 index 00000000..b9636ff6 --- /dev/null +++ b/kortex_driver/msg/JointLimitation.msg @@ -0,0 +1,4 @@ + +uint32 device_identifier + +JointLimitationValue limitation_value \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitationTypeIdentifier.msg b/kortex_driver/msg/JointLimitationTypeIdentifier.msg new file mode 100644 index 00000000..64be2d43 --- /dev/null +++ b/kortex_driver/msg/JointLimitationTypeIdentifier.msg @@ -0,0 +1,4 @@ + +uint32 device_identifier + +uint32 type \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitationValue.msg b/kortex_driver/msg/JointLimitationValue.msg new file mode 100644 index 00000000..b096b246 --- /dev/null +++ b/kortex_driver/msg/JointLimitationValue.msg @@ -0,0 +1,4 @@ + + +uint32 type +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointLimitationValueList.msg b/kortex_driver/msg/JointLimitationValueList.msg new file mode 100644 index 00000000..a26fc963 --- /dev/null +++ b/kortex_driver/msg/JointLimitationValueList.msg @@ -0,0 +1,3 @@ + + +JointLimitationValue[] joint_limitation_values \ No newline at end of file diff --git a/kortex_driver/msg/JointNavigationDirection.msg b/kortex_driver/msg/JointNavigationDirection.msg new file mode 100644 index 00000000..274085ff --- /dev/null +++ b/kortex_driver/msg/JointNavigationDirection.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_JOINT_NAVIGATION_DIRECTION = 0 + +uint32 JOINT_NEXT = 1 + +uint32 JOINT_PREVIOUS = 2 diff --git a/kortex_driver/msg/JointSpeed.msg b/kortex_driver/msg/JointSpeed.msg new file mode 100644 index 00000000..bcf5540b --- /dev/null +++ b/kortex_driver/msg/JointSpeed.msg @@ -0,0 +1,4 @@ + +uint32 joint_identifier +float32 value +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/JointSpeeds.msg b/kortex_driver/msg/JointSpeeds.msg new file mode 100644 index 00000000..f5f77f4f --- /dev/null +++ b/kortex_driver/msg/JointSpeeds.msg @@ -0,0 +1,4 @@ + + +JointSpeed[] joint_speeds +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/JointTrajectoryConstraint.msg b/kortex_driver/msg/JointTrajectoryConstraint.msg new file mode 100644 index 00000000..b096b246 --- /dev/null +++ b/kortex_driver/msg/JointTrajectoryConstraint.msg @@ -0,0 +1,4 @@ + + +uint32 type +float32 value \ No newline at end of file diff --git a/kortex_driver/msg/JointTrajectoryConstraintType.msg b/kortex_driver/msg/JointTrajectoryConstraintType.msg new file mode 100644 index 00000000..22b33997 --- /dev/null +++ b/kortex_driver/msg/JointTrajectoryConstraintType.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_JOINT_CONSTRAINT = 0 + +uint32 JOINT_CONSTRAINT_DURATION = 1 + +uint32 JOINT_CONSTRAINT_SPEED = 2 diff --git a/kortex_driver/msg/LedState.msg b/kortex_driver/msg/LedState.msg new file mode 100644 index 00000000..93fc79a7 --- /dev/null +++ b/kortex_driver/msg/LedState.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_LED_STATE = 0 + +uint32 LED_OFF = 1 + +uint32 LED_PULSE = 2 + +uint32 LED_ON = 3 diff --git a/kortex_driver/msg/LimitationType.msg b/kortex_driver/msg/LimitationType.msg new file mode 100644 index 00000000..04f709c9 --- /dev/null +++ b/kortex_driver/msg/LimitationType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_LIMITATION = 0 + +uint32 FORCE_LIMITATION = 1 + +uint32 ACCELERATION_LIMITATION = 2 + +uint32 VELOCITY_LIMITATION = 3 diff --git a/kortex_driver/msg/LimitationTypeIdentifier.msg b/kortex_driver/msg/LimitationTypeIdentifier.msg new file mode 100644 index 00000000..9143f866 --- /dev/null +++ b/kortex_driver/msg/LimitationTypeIdentifier.msg @@ -0,0 +1,3 @@ + + +uint32 type \ No newline at end of file diff --git a/kortex_driver/msg/Map.msg b/kortex_driver/msg/Map.msg new file mode 100644 index 00000000..ca25171c --- /dev/null +++ b/kortex_driver/msg/Map.msg @@ -0,0 +1,6 @@ + + +MapHandle handle +string name + +MapElement[] elements \ No newline at end of file diff --git a/kortex_driver/msg/MapElement.msg b/kortex_driver/msg/MapElement.msg new file mode 100644 index 00000000..efa91ae5 --- /dev/null +++ b/kortex_driver/msg/MapElement.msg @@ -0,0 +1,5 @@ + + +MapEvent event + +Action action \ No newline at end of file diff --git a/kortex_driver/msg/MapEvent.msg b/kortex_driver/msg/MapEvent.msg new file mode 100644 index 00000000..269bbdaf --- /dev/null +++ b/kortex_driver/msg/MapEvent.msg @@ -0,0 +1,2 @@ + +string name \ No newline at end of file diff --git a/kortex_driver/msg/MapGroup.msg b/kortex_driver/msg/MapGroup.msg new file mode 100644 index 00000000..64f73094 --- /dev/null +++ b/kortex_driver/msg/MapGroup.msg @@ -0,0 +1,13 @@ + + +MapGroupHandle group_handle +string name + +MappingHandle related_mapping_handle + +MapGroupHandle parent_group_handle + +MapGroupHandle[] children_map_group_handles + +MapHandle[] map_handles +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/MapGroupHandle.msg b/kortex_driver/msg/MapGroupHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_driver/msg/MapGroupHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MapGroupList.msg b/kortex_driver/msg/MapGroupList.msg new file mode 100644 index 00000000..e2f32b1d --- /dev/null +++ b/kortex_driver/msg/MapGroupList.msg @@ -0,0 +1,3 @@ + + +MapGroup[] map_groups \ No newline at end of file diff --git a/kortex_driver/msg/MapHandle.msg b/kortex_driver/msg/MapHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_driver/msg/MapHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MapList.msg b/kortex_driver/msg/MapList.msg new file mode 100644 index 00000000..dbcc9900 --- /dev/null +++ b/kortex_driver/msg/MapList.msg @@ -0,0 +1,3 @@ + + +Map[] map_list \ No newline at end of file diff --git a/kortex_driver/msg/Mapping.msg b/kortex_driver/msg/Mapping.msg new file mode 100644 index 00000000..095a9350 --- /dev/null +++ b/kortex_driver/msg/Mapping.msg @@ -0,0 +1,14 @@ + + +MappingHandle handle +string name +uint32 controller_identifier + +MapGroupHandle active_map_group_handle + +MapGroupHandle[] map_group_handles + +MapHandle active_map_handle + +MapHandle[] map_handles +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/MappingHandle.msg b/kortex_driver/msg/MappingHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_driver/msg/MappingHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/MappingInfoNotification.msg b/kortex_driver/msg/MappingInfoNotification.msg new file mode 100644 index 00000000..b33d1de5 --- /dev/null +++ b/kortex_driver/msg/MappingInfoNotification.msg @@ -0,0 +1,10 @@ + +uint32 controller_identifier + +MapHandle active_map_handle + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/MappingInfoNotificationList.msg b/kortex_driver/msg/MappingInfoNotificationList.msg new file mode 100644 index 00000000..07fa3da4 --- /dev/null +++ b/kortex_driver/msg/MappingInfoNotificationList.msg @@ -0,0 +1,3 @@ + + +MappingInfoNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/MappingList.msg b/kortex_driver/msg/MappingList.msg new file mode 100644 index 00000000..b8ac2cce --- /dev/null +++ b/kortex_driver/msg/MappingList.msg @@ -0,0 +1,3 @@ + + +Mapping[] mappings \ No newline at end of file diff --git a/kortex_driver/msg/NavigationDirection.msg b/kortex_driver/msg/NavigationDirection.msg new file mode 100644 index 00000000..93f1c4c8 --- /dev/null +++ b/kortex_driver/msg/NavigationDirection.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_NAVIGATION_DIRECTION = 0 + +uint32 NEXT = 1 + +uint32 UP = 2 + +uint32 DOWN = 3 + +uint32 PREVIOUS = 4 diff --git a/kortex_driver/msg/NetworkEvent.msg b/kortex_driver/msg/NetworkEvent.msg new file mode 100644 index 00000000..217903d0 --- /dev/null +++ b/kortex_driver/msg/NetworkEvent.msg @@ -0,0 +1,22 @@ + +uint32 UNSPECIFIED_NETWORK_EVENT = 0 + +uint32 WIFI_CONNECTED = 1 + +uint32 WIFI_DISCONNECTED = 2 + +uint32 WIFI_SCAN_STARTED = 3 + +uint32 WIFI_SCAN_RESULTS = 4 + +uint32 WIFI_SCAN_FAILED = 5 + +uint32 WIFI_NOT_FOUND = 6 + +uint32 WIFI_ASSOC_REJECTED = 7 + +uint32 WIFI_AUTH_WRONG_KEY = 8 + +uint32 WIFI_AUTH_CONN_FAILED = 9 + +uint32 WIFI_AUTH_FAILED = 10 diff --git a/kortex_driver/msg/NetworkHandle.msg b/kortex_driver/msg/NetworkHandle.msg new file mode 100644 index 00000000..9143f866 --- /dev/null +++ b/kortex_driver/msg/NetworkHandle.msg @@ -0,0 +1,3 @@ + + +uint32 type \ No newline at end of file diff --git a/kortex_driver/msg/NetworkNotification.msg b/kortex_driver/msg/NetworkNotification.msg new file mode 100644 index 00000000..40a0c973 --- /dev/null +++ b/kortex_driver/msg/NetworkNotification.msg @@ -0,0 +1,9 @@ + + +uint32 event + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/NetworkNotificationList.msg b/kortex_driver/msg/NetworkNotificationList.msg new file mode 100644 index 00000000..49053108 --- /dev/null +++ b/kortex_driver/msg/NetworkNotificationList.msg @@ -0,0 +1,3 @@ + + +NetworkNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/NetworkType.msg b/kortex_driver/msg/NetworkType.msg new file mode 100644 index 00000000..ec8fc9c0 --- /dev/null +++ b/kortex_driver/msg/NetworkType.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_NETWORK_TYPE = 0 + +uint32 WIFI = 1 + +uint32 WIRED_ETHERNET = 2 diff --git a/kortex_driver/msg/NotificationHandle.msg b/kortex_driver/msg/NotificationHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_driver/msg/NotificationHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/NotificationOptions.msg b/kortex_driver/msg/NotificationOptions.msg new file mode 100644 index 00000000..6ff46842 --- /dev/null +++ b/kortex_driver/msg/NotificationOptions.msg @@ -0,0 +1,5 @@ + + +uint32 type +uint32 rate_m_sec +float32 threshold_value \ No newline at end of file diff --git a/kortex_driver/msg/NotificationType.msg b/kortex_driver/msg/NotificationType.msg new file mode 100644 index 00000000..79dd058c --- /dev/null +++ b/kortex_driver/msg/NotificationType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_NOTIFICATION_TYPE = 0 + +uint32 THRESHOLD = 1 + +uint32 FIX_RATE = 2 + +uint32 EVENT = 3 diff --git a/kortex_driver/msg/OperatingMode.msg b/kortex_driver/msg/OperatingMode.msg new file mode 100644 index 00000000..c2fc2bde --- /dev/null +++ b/kortex_driver/msg/OperatingMode.msg @@ -0,0 +1,16 @@ + +uint32 UNSPECIFIED_OPERATING_MODE = 0 + +uint32 MAINTENANCE_MODE = 1 + +uint32 UPDATE_MODE = 2 + +uint32 UPDATE_COMPLETED_MODE = 3 + +uint32 UPDATE_FAILED_MODE = 4 + +uint32 SHUTTING_DOWN_MODE = 5 + +uint32 RUN_MODE = 6 + +uint32 UPDATING_DEVICE_MODE = 7 diff --git a/kortex_driver/msg/OperatingModeInformation.msg b/kortex_driver/msg/OperatingModeInformation.msg new file mode 100644 index 00000000..8b769914 --- /dev/null +++ b/kortex_driver/msg/OperatingModeInformation.msg @@ -0,0 +1,5 @@ + + +uint32 operating_mode + +DeviceHandle device_handle \ No newline at end of file diff --git a/kortex_driver/msg/OperatingModeNotification.msg b/kortex_driver/msg/OperatingModeNotification.msg new file mode 100644 index 00000000..ecb91fc4 --- /dev/null +++ b/kortex_driver/msg/OperatingModeNotification.msg @@ -0,0 +1,11 @@ + + +uint32 operating_mode + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection + +DeviceHandle device_handle \ No newline at end of file diff --git a/kortex_driver/msg/OperatingModeNotificationList.msg b/kortex_driver/msg/OperatingModeNotificationList.msg new file mode 100644 index 00000000..18380ec0 --- /dev/null +++ b/kortex_driver/msg/OperatingModeNotificationList.msg @@ -0,0 +1,3 @@ + + +OperatingModeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/Orientation.msg b/kortex_driver/msg/Orientation.msg new file mode 100644 index 00000000..6f06d804 --- /dev/null +++ b/kortex_driver/msg/Orientation.msg @@ -0,0 +1,4 @@ + +float32 theta_x +float32 theta_y +float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/PasswordChange.msg b/kortex_driver/msg/PasswordChange.msg new file mode 100644 index 00000000..57ee47e3 --- /dev/null +++ b/kortex_driver/msg/PasswordChange.msg @@ -0,0 +1,5 @@ + + +UserProfileHandle handle +string old_password +string new_password \ No newline at end of file diff --git a/kortex_driver/msg/Permission.msg b/kortex_driver/msg/Permission.msg new file mode 100644 index 00000000..c5399e9c --- /dev/null +++ b/kortex_driver/msg/Permission.msg @@ -0,0 +1,8 @@ + +uint32 NO_PERMISSION = 0 + +uint32 READ_PERMISSION = 1 + +uint32 UPDATE_PERMISSION = 2 + +uint32 DELETE_PERMISSION = 4 diff --git a/kortex_driver/msg/Point.msg b/kortex_driver/msg/Point.msg new file mode 100644 index 00000000..78f07ff5 --- /dev/null +++ b/kortex_driver/msg/Point.msg @@ -0,0 +1,4 @@ + +float32 x +float32 y +float32 z \ No newline at end of file diff --git a/kortex_driver/msg/Pose.msg b/kortex_driver/msg/Pose.msg new file mode 100644 index 00000000..beddec03 --- /dev/null +++ b/kortex_driver/msg/Pose.msg @@ -0,0 +1,7 @@ + +float32 x +float32 y +float32 z +float32 theta_x +float32 theta_y +float32 theta_z \ No newline at end of file diff --git a/kortex_driver/msg/Position.msg b/kortex_driver/msg/Position.msg new file mode 100644 index 00000000..78f07ff5 --- /dev/null +++ b/kortex_driver/msg/Position.msg @@ -0,0 +1,4 @@ + +float32 x +float32 y +float32 z \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZone.msg b/kortex_driver/msg/ProtectionZone.msg new file mode 100644 index 00000000..5bf1b8e5 --- /dev/null +++ b/kortex_driver/msg/ProtectionZone.msg @@ -0,0 +1,12 @@ + + +ProtectionZoneHandle handle +string name +string application_data +bool is_enabled + +ZoneShape shape + +CartesianLimitation[] limitations + +CartesianLimitation[] envelope_limitations \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneEvent.msg b/kortex_driver/msg/ProtectionZoneEvent.msg new file mode 100644 index 00000000..382e487f --- /dev/null +++ b/kortex_driver/msg/ProtectionZoneEvent.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_PROTECTION_ZONE_EVENT = 0 + +uint32 REACHED = 1 + +uint32 ENTERED = 2 + +uint32 EXITED = 3 diff --git a/kortex_driver/msg/ProtectionZoneHandle.msg b/kortex_driver/msg/ProtectionZoneHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_driver/msg/ProtectionZoneHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneInformation.msg b/kortex_driver/msg/ProtectionZoneInformation.msg new file mode 100644 index 00000000..c117fb78 --- /dev/null +++ b/kortex_driver/msg/ProtectionZoneInformation.msg @@ -0,0 +1,3 @@ + + +uint32 event \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneList.msg b/kortex_driver/msg/ProtectionZoneList.msg new file mode 100644 index 00000000..978122e0 --- /dev/null +++ b/kortex_driver/msg/ProtectionZoneList.msg @@ -0,0 +1,3 @@ + + +ProtectionZone[] protection_zones \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneNotification.msg b/kortex_driver/msg/ProtectionZoneNotification.msg new file mode 100644 index 00000000..0535cb61 --- /dev/null +++ b/kortex_driver/msg/ProtectionZoneNotification.msg @@ -0,0 +1,11 @@ + + +uint32 event + +ProtectionZoneHandle handle + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ProtectionZoneNotificationList.msg b/kortex_driver/msg/ProtectionZoneNotificationList.msg new file mode 100644 index 00000000..8744bf04 --- /dev/null +++ b/kortex_driver/msg/ProtectionZoneNotificationList.msg @@ -0,0 +1,3 @@ + + +ProtectionZoneNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/Query.msg b/kortex_driver/msg/Query.msg new file mode 100644 index 00000000..b8c2a292 --- /dev/null +++ b/kortex_driver/msg/Query.msg @@ -0,0 +1,6 @@ + + +Timestamp start_timestamp + +Timestamp end_timestamp +string username \ No newline at end of file diff --git a/kortex_driver/msg/RequestedActionType.msg b/kortex_driver/msg/RequestedActionType.msg new file mode 100644 index 00000000..05c86522 --- /dev/null +++ b/kortex_driver/msg/RequestedActionType.msg @@ -0,0 +1,3 @@ + + +uint32 action_type \ No newline at end of file diff --git a/kortex_driver/msg/RobotEvent.msg b/kortex_driver/msg/RobotEvent.msg new file mode 100644 index 00000000..2174cd2d --- /dev/null +++ b/kortex_driver/msg/RobotEvent.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_ROBOT_EVENT = 0 + +uint32 ARM_CONNECTED = 1 + +uint32 ARM_DISCONNECTED = 2 + +uint32 TOOL_CONNECTED = 5 + +uint32 TOOL_DISCONNECTED = 6 diff --git a/kortex_driver/msg/RobotEventNotification.msg b/kortex_driver/msg/RobotEventNotification.msg new file mode 100644 index 00000000..dc2cfd1e --- /dev/null +++ b/kortex_driver/msg/RobotEventNotification.msg @@ -0,0 +1,11 @@ + + +uint32 event + +DeviceHandle handle + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/RobotEventNotificationList.msg b/kortex_driver/msg/RobotEventNotificationList.msg new file mode 100644 index 00000000..4ecd1889 --- /dev/null +++ b/kortex_driver/msg/RobotEventNotificationList.msg @@ -0,0 +1,3 @@ + + +RobotEventNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/RotationMatrix.msg b/kortex_driver/msg/RotationMatrix.msg new file mode 100644 index 00000000..70a31f14 --- /dev/null +++ b/kortex_driver/msg/RotationMatrix.msg @@ -0,0 +1,7 @@ + + +RotationMatrixRow row1 + +RotationMatrixRow row2 + +RotationMatrixRow row3 \ No newline at end of file diff --git a/kortex_driver/msg/RotationMatrixRow.msg b/kortex_driver/msg/RotationMatrixRow.msg new file mode 100644 index 00000000..39a30f92 --- /dev/null +++ b/kortex_driver/msg/RotationMatrixRow.msg @@ -0,0 +1,4 @@ + +float32 column1 +float32 column2 +float32 column3 \ No newline at end of file diff --git a/kortex_driver/msg/SafetyEvent.msg b/kortex_driver/msg/SafetyEvent.msg new file mode 100644 index 00000000..4c5bd430 --- /dev/null +++ b/kortex_driver/msg/SafetyEvent.msg @@ -0,0 +1,3 @@ + + +SafetyHandle safety_handle \ No newline at end of file diff --git a/kortex_driver/msg/SafetyHandle.msg b/kortex_driver/msg/SafetyHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_driver/msg/SafetyHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_driver/msg/SafetyIdentifier.msg b/kortex_driver/msg/SafetyIdentifier.msg new file mode 100644 index 00000000..1a9b56d4 --- /dev/null +++ b/kortex_driver/msg/SafetyIdentifier.msg @@ -0,0 +1,60 @@ + +uint32 UNSPECIFIED_BASE_SAFETY_IDENTIFIER = 0 + +uint32 FIRMWARE_UPDATE_FAILURE = 1 + +uint32 EXTERNAL_COMMUNICATION_ERROR = 2 + +uint32 MAXIMUM_AMBIENT_TEMPERATURE = 4 + +uint32 MAXIMUM_CORE_TEMPERATURE = 8 + +uint32 JOINT_FAULT = 16 + +uint32 CYCLIC_DATA_JITTER = 32 + +uint32 REACHED_MAXIMUM_EVENT_LOGS = 64 + +uint32 NO_KINEMATICS_SUPPORT = 128 + +uint32 ABOVE_MAXIMUM_DOF = 256 + +uint32 NETWORK_ERROR = 512 + +uint32 UNABLE_TO_REACH_POSE = 1024 + +uint32 JOINT_DETECTION_ERROR = 2048 + +uint32 NETWORK_INITIALIZATION_ERROR = 4096 + +uint32 MAXIMUM_CURRENT = 8192 + +uint32 MAXIMUM_VOLTAGE = 16384 + +uint32 MINIMUM_VOLTAGE = 32768 + +uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_VELOCITY = 65536 + +uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_VELOCITY = 131072 + +uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_ACCELERATION = 262144 + +uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_ACCELERATION = 524288 + +uint32 MAXIMUM_END_EFFECTOR_TRANSLATION_FORCE = 1048576 + +uint32 MAXIMUM_END_EFFECTOR_ORIENTATION_FORCE = 2097152 + +uint32 MAXIMUM_END_EFFECTOR_PAYLOAD = 4194304 + +uint32 EMERGENCY_STOP_ACTIVATED = 8388608 + +uint32 EMERGENCY_LINE_ACTIVATED = 16777216 + +uint32 INRUSH_CURRENT_LIMITER_FAULT = 33554432 + +uint32 NVRAM_CORRUPTED = 67108864 + +uint32 INCOMPATIBLE_FIRMWARE_VERSION = 134217728 + +uint32 POWERON_SELF_TEST_FAILURE = 268435456 diff --git a/kortex_driver/msg/SafetyNotification.msg b/kortex_driver/msg/SafetyNotification.msg new file mode 100644 index 00000000..36d88894 --- /dev/null +++ b/kortex_driver/msg/SafetyNotification.msg @@ -0,0 +1,11 @@ + + +SafetyHandle safety_handle + +uint32 value + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/SafetyNotificationList.msg b/kortex_driver/msg/SafetyNotificationList.msg new file mode 100644 index 00000000..95a25fef --- /dev/null +++ b/kortex_driver/msg/SafetyNotificationList.msg @@ -0,0 +1,3 @@ + + +SafetyNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/SafetyStatusValue.msg b/kortex_driver/msg/SafetyStatusValue.msg new file mode 100644 index 00000000..2ea80554 --- /dev/null +++ b/kortex_driver/msg/SafetyStatusValue.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED = 0 + +uint32 WARNING = 1 + +uint32 ERROR = 2 + +uint32 NORMAL = 3 diff --git a/kortex_driver/msg/Sequence.msg b/kortex_driver/msg/Sequence.msg new file mode 100644 index 00000000..5d5a38cf --- /dev/null +++ b/kortex_driver/msg/Sequence.msg @@ -0,0 +1,7 @@ + + +SequenceHandle handle +string name +string application_data + +SequenceTask[] tasks \ No newline at end of file diff --git a/kortex_driver/msg/SequenceHandle.msg b/kortex_driver/msg/SequenceHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_driver/msg/SequenceHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/SequenceInfoNotification.msg b/kortex_driver/msg/SequenceInfoNotification.msg new file mode 100644 index 00000000..c43d59d3 --- /dev/null +++ b/kortex_driver/msg/SequenceInfoNotification.msg @@ -0,0 +1,15 @@ + + +uint32 event_identifier + +SequenceHandle sequence_handle +uint32 task_index +uint32 group_identifier + +Timestamp timestamp + +UserProfileHandle user_handle + +uint32 abort_details + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/SequenceInfoNotificationList.msg b/kortex_driver/msg/SequenceInfoNotificationList.msg new file mode 100644 index 00000000..94ca3844 --- /dev/null +++ b/kortex_driver/msg/SequenceInfoNotificationList.msg @@ -0,0 +1,3 @@ + + +SequenceInfoNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/SequenceInformation.msg b/kortex_driver/msg/SequenceInformation.msg new file mode 100644 index 00000000..b85d43f4 --- /dev/null +++ b/kortex_driver/msg/SequenceInformation.msg @@ -0,0 +1,5 @@ + + +uint32 event_identifier +uint32 task_index +uint32 task_identifier \ No newline at end of file diff --git a/kortex_driver/msg/SequenceList.msg b/kortex_driver/msg/SequenceList.msg new file mode 100644 index 00000000..4b230f7a --- /dev/null +++ b/kortex_driver/msg/SequenceList.msg @@ -0,0 +1,3 @@ + + +Sequence[] sequence_list \ No newline at end of file diff --git a/kortex_driver/msg/SequenceTask.msg b/kortex_driver/msg/SequenceTask.msg new file mode 100644 index 00000000..9632764f --- /dev/null +++ b/kortex_driver/msg/SequenceTask.msg @@ -0,0 +1,5 @@ + +uint32 group_identifier + +Action action +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/SequenceTaskHandle.msg b/kortex_driver/msg/SequenceTaskHandle.msg new file mode 100644 index 00000000..d982d9f3 --- /dev/null +++ b/kortex_driver/msg/SequenceTaskHandle.msg @@ -0,0 +1,4 @@ + + +SequenceHandle sequence_handle +uint32 task_index \ No newline at end of file diff --git a/kortex_driver/msg/ServiceVersion.msg b/kortex_driver/msg/ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_driver/msg/ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_driver/msg/ServoingMode.msg b/kortex_driver/msg/ServoingMode.msg new file mode 100644 index 00000000..0456b3af --- /dev/null +++ b/kortex_driver/msg/ServoingMode.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_SERVOING_MODE = 0 + +uint32 MULTI_LEVEL_SERVOING = 1 + +uint32 SINGLE_LEVEL_SERVOING = 2 + +uint32 LOW_LEVEL_SERVOING = 3 + +uint32 BYPASS_SERVOING = 4 diff --git a/kortex_driver/msg/ServoingModeInformation.msg b/kortex_driver/msg/ServoingModeInformation.msg new file mode 100644 index 00000000..70b5dbc8 --- /dev/null +++ b/kortex_driver/msg/ServoingModeInformation.msg @@ -0,0 +1,3 @@ + + +uint32 servoing_mode \ No newline at end of file diff --git a/kortex_driver/msg/ServoingModeNotification.msg b/kortex_driver/msg/ServoingModeNotification.msg new file mode 100644 index 00000000..1519538b --- /dev/null +++ b/kortex_driver/msg/ServoingModeNotification.msg @@ -0,0 +1,9 @@ + + +uint32 servoing_mode + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/ServoingModeNotificationList.msg b/kortex_driver/msg/ServoingModeNotificationList.msg new file mode 100644 index 00000000..0fb0e599 --- /dev/null +++ b/kortex_driver/msg/ServoingModeNotificationList.msg @@ -0,0 +1,3 @@ + + +ServoingModeNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/ShapeType.msg b/kortex_driver/msg/ShapeType.msg new file mode 100644 index 00000000..cc4902fb --- /dev/null +++ b/kortex_driver/msg/ShapeType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_SHAPE = 0 + +uint32 CYLINDER = 1 + +uint32 SPHERE = 2 + +uint32 RECTANGULAR_PRISM = 3 diff --git a/kortex_driver/msg/SignalQuality.msg b/kortex_driver/msg/SignalQuality.msg new file mode 100644 index 00000000..fc5ddf18 --- /dev/null +++ b/kortex_driver/msg/SignalQuality.msg @@ -0,0 +1,12 @@ + +uint32 UNSPECIFIED_SIGNAL_QUALITY = 0 + +uint32 POOR = 1 + +uint32 FAIR = 2 + +uint32 GOOD = 3 + +uint32 EXCELLENT = 4 + +uint32 NONE = 5 diff --git a/kortex_driver/msg/SoundType.msg b/kortex_driver/msg/SoundType.msg new file mode 100644 index 00000000..cb95ecb2 --- /dev/null +++ b/kortex_driver/msg/SoundType.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_SOUND_TYPE = 0 + +uint32 BIP_SERIES = 1 + +uint32 SINGLE_BIP = 2 diff --git a/kortex_driver/msg/Ssid.msg b/kortex_driver/msg/Ssid.msg new file mode 100644 index 00000000..91ad8a05 --- /dev/null +++ b/kortex_driver/msg/Ssid.msg @@ -0,0 +1,2 @@ + +string identifier \ No newline at end of file diff --git a/kortex_driver/msg/Stop.msg b/kortex_driver/msg/Stop.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_driver/msg/SubErrorCodes.msg b/kortex_driver/msg/SubErrorCodes.msg new file mode 100644 index 00000000..b68ca3cd --- /dev/null +++ b/kortex_driver/msg/SubErrorCodes.msg @@ -0,0 +1,168 @@ + +uint32 SUB_SUCCESS = 0 + +uint32 FAILED = 1 + +uint32 UNIMPLEMENTED = 2 + +uint32 INVALID_PARAM = 3 + +uint32 UNSUPPORTED_SERVICE = 4 + +uint32 UNSUPPORTED_METHOD = 5 + +uint32 TOO_LARGE_ENCODED_FRAME_BUFFER = 6 + +uint32 FRAME_ENCODING_ERR = 7 + +uint32 FRAME_DECODING_ERR = 8 + +uint32 INCOMPATIBLE_HEADER_VERSION = 9 + +uint32 UNSUPPORTED_FRAME_TYPE = 10 + +uint32 UNREGISTERED_NOTIFICATION_RECEIVED = 11 + +uint32 INVALID_SESSION = 12 + +uint32 PAYLOAD_DECODING_ERR = 13 + +uint32 UNREGISTERED_FRAME_RECEIVED = 14 + +uint32 INVALID_PASSWORD = 15 + +uint32 USER_NOT_FOUND = 16 + +uint32 ENTITY_NOT_FOUND = 17 + +uint32 ROBOT_MOVEMENT_IN_PROGRESS = 18 + +uint32 ROBOT_NOT_MOVING = 19 + +uint32 NO_MORE_STORAGE_SPACE = 20 + +uint32 ROBOT_NOT_READY = 21 + +uint32 ROBOT_IN_FAULT = 22 + +uint32 ROBOT_IN_MAINTENANCE = 23 + +uint32 ROBOT_IN_UPDATE_MODE = 24 + +uint32 ROBOT_IN_EMERGENCY_STOP = 25 + +uint32 SINGLE_LEVEL_SERVOING = 26 + +uint32 LOW_LEVEL_SERVOING = 27 + +uint32 MAPPING_GROUP_NON_ROOT = 28 + +uint32 MAPPING_INVALID_GROUP = 29 + +uint32 MAPPING_INVALID_MAP = 30 + +uint32 MAP_GROUP_INVALID_MAP = 31 + +uint32 MAP_GROUP_INVALID_PARENT = 32 + +uint32 MAP_GROUP_INVALID_CHILD = 33 + +uint32 MAP_GROUP_INVALID_MOVE = 34 + +uint32 MAP_IN_USE = 35 + +uint32 WIFI_CONNECT_ERROR = 36 + +uint32 UNSUPPORTED_NETWORK_TYPE = 37 + +uint32 TOO_LARGE_ENCODED_PAYLOAD_BUFFER = 38 + +uint32 UPDATE_PERMISSION_DENIED = 39 + +uint32 DELETE_PERMISSION_DENIED = 40 + +uint32 DATABASE_ERROR = 41 + +uint32 UNSUPPORTED_OPTION = 42 + +uint32 UNSUPPORTED_RESOLUTION = 43 + +uint32 UNSUPPORTED_FRAME_RATE = 44 + +uint32 UNSUPPORTED_BIT_RATE = 45 + +uint32 UNSUPPORTED_ACTION = 46 + +uint32 UNSUPPORTED_FOCUS_ACTION = 47 + +uint32 VALUE_IS_ABOVE_MAXIMUM = 48 + +uint32 VALUE_IS_BELOW_MINIMUM = 49 + +uint32 DEVICE_DISCONNECTED = 50 + +uint32 DEVICE_NOT_READY = 51 + +uint32 INVALID_DEVICE = 52 + +uint32 SAFETY_THRESHOLD_REACHED = 53 + +uint32 INVALID_USER_SESSION_ACCESS = 54 + +uint32 CONTROL_MANUAL_STOP = 55 + +uint32 CONTROL_OUTSIDE_WORKSPACE = 56 + +uint32 CONTROL_ACTUATOR_COUNT_MISMATCH = 57 + +uint32 CONTROL_INVALID_DURATION = 58 + +uint32 CONTROL_INVALID_SPEED = 59 + +uint32 CONTROL_LARGE_SPEED = 60 + +uint32 CONTROL_INVALID_ACCELERATION = 61 + +uint32 CONTROL_INVALID_TIME_STEP = 62 + +uint32 CONTROL_LARGE_SIZE = 63 + +uint32 CONTROL_WRONG_MODE = 64 + +uint32 CONTROL_JOINT_POSITION_LIMIT = 65 + +uint32 CONTROL_NO_FILE_IN_MEMORY = 66 + +uint32 CONTROL_INDEX_OUT_OF_TRAJECTORY = 67 + +uint32 CONTROL_ALREADY_RUNNING = 68 + +uint32 CONTROL_WRONG_STARTING_POINT = 69 + +uint32 CONTROL_CARTESIAN_CANNOT_START = 70 + +uint32 CONTROL_UNDEFINED_CONSTRAINT = 71 + +uint32 CONTROL_UNINITIALIZED = 72 + +uint32 CONTROL_NO_ACTION = 73 + +uint32 CONTROL_UNDEFINED = 74 + +uint32 WRONG_SERVOING_MODE = 75 + +uint32 USERNAME_LENGTH_EXCEEDED = 100 + +uint32 FIRSTNAME_LENGTH_EXCEEDED = 101 + +uint32 LASTNAME_LENGTH_EXCEEDED = 102 + +uint32 PASSWORD_LENGTH_EXCEEDED = 103 + +uint32 USERNAME_ALREADY_EXISTS = 104 + +uint32 USERNAME_EMPTY = 105 + +uint32 PASSWORD_NOT_CHANGED = 106 + +uint32 MAXIMUM_USER_PROFILES_USED = 107 diff --git a/kortex_driver/msg/SwitchControlMapping.msg b/kortex_driver/msg/SwitchControlMapping.msg new file mode 100644 index 00000000..9fe33f79 --- /dev/null +++ b/kortex_driver/msg/SwitchControlMapping.msg @@ -0,0 +1,6 @@ + +uint32 controller_identifier + +MapGroupHandle map_group_handle + +MapHandle map_handle \ No newline at end of file diff --git a/kortex_driver/msg/SystemTime.msg b/kortex_driver/msg/SystemTime.msg new file mode 100644 index 00000000..28c8d69b --- /dev/null +++ b/kortex_driver/msg/SystemTime.msg @@ -0,0 +1,7 @@ + +uint32 sec +uint32 min +uint32 hour +uint32 mday +uint32 mon +uint32 year \ No newline at end of file diff --git a/kortex_driver/msg/Timeout.msg b/kortex_driver/msg/Timeout.msg new file mode 100644 index 00000000..3cf3925c --- /dev/null +++ b/kortex_driver/msg/Timeout.msg @@ -0,0 +1,2 @@ + +uint32 value \ No newline at end of file diff --git a/kortex_driver/msg/Timestamp.msg b/kortex_driver/msg/Timestamp.msg new file mode 100644 index 00000000..5e60508c --- /dev/null +++ b/kortex_driver/msg/Timestamp.msg @@ -0,0 +1,3 @@ + +uint32 sec +uint32 usec \ No newline at end of file diff --git a/kortex_driver/msg/TransformationMatrix.msg b/kortex_driver/msg/TransformationMatrix.msg new file mode 100644 index 00000000..4f70ae6a --- /dev/null +++ b/kortex_driver/msg/TransformationMatrix.msg @@ -0,0 +1,9 @@ + + +TransformationRow r0 + +TransformationRow r1 + +TransformationRow r2 + +TransformationRow r3 \ No newline at end of file diff --git a/kortex_driver/msg/TransformationRow.msg b/kortex_driver/msg/TransformationRow.msg new file mode 100644 index 00000000..b930b732 --- /dev/null +++ b/kortex_driver/msg/TransformationRow.msg @@ -0,0 +1,5 @@ + +float32 c0 +float32 c1 +float32 c2 +float32 c3 \ No newline at end of file diff --git a/kortex_driver/msg/Twist.msg b/kortex_driver/msg/Twist.msg new file mode 100644 index 00000000..856383d5 --- /dev/null +++ b/kortex_driver/msg/Twist.msg @@ -0,0 +1,7 @@ + +float32 linear_x +float32 linear_y +float32 linear_z +float32 angular_x +float32 angular_y +float32 angular_z \ No newline at end of file diff --git a/kortex_driver/msg/TwistCommand.msg b/kortex_driver/msg/TwistCommand.msg new file mode 100644 index 00000000..599db8e2 --- /dev/null +++ b/kortex_driver/msg/TwistCommand.msg @@ -0,0 +1,6 @@ + + +uint32 mode + +Twist twist +uint32 duration \ No newline at end of file diff --git a/kortex_driver/msg/TwistMode.msg b/kortex_driver/msg/TwistMode.msg new file mode 100644 index 00000000..086bad8c --- /dev/null +++ b/kortex_driver/msg/TwistMode.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_TWIST_MODE = 0 + +uint32 TWIST_TOOL_JOYSTICK = 1 + +uint32 TWIST_BASE_FRAME_JOYSTICK = 2 + +uint32 TWIST_CARTESIAN_JOYSTICK = 3 diff --git a/kortex_driver/msg/Unit.msg b/kortex_driver/msg/Unit.msg new file mode 100644 index 00000000..c019aeba --- /dev/null +++ b/kortex_driver/msg/Unit.msg @@ -0,0 +1,28 @@ + +uint32 UNSPECIFIED_UNIT = 0 + +uint32 CELSIUS = 1 + +uint32 AMPERE = 2 + +uint32 VOLT = 3 + +uint32 METER_PER_SECOND = 4 + +uint32 DEGREE_PER_SECOND = 5 + +uint32 METER_PER_SECOND_2 = 6 + +uint32 DEGREE_PER_SECOND_2 = 7 + +uint32 NEWTON = 8 + +uint32 NEWTON_METER = 9 + +uint32 KILOGRAM = 10 + +uint32 DEGREE = 11 + +uint32 TICK = 12 + +uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_driver/msg/UserEvent.msg b/kortex_driver/msg/UserEvent.msg new file mode 100644 index 00000000..84356e05 --- /dev/null +++ b/kortex_driver/msg/UserEvent.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_USER_EVENT = 0 + +uint32 LOGGED_OUT = 1 + +uint32 LOGGED_IN = 2 diff --git a/kortex_driver/msg/UserList.msg b/kortex_driver/msg/UserList.msg new file mode 100644 index 00000000..1b541bd8 --- /dev/null +++ b/kortex_driver/msg/UserList.msg @@ -0,0 +1,3 @@ + + +UserProfileHandle[] user_handles \ No newline at end of file diff --git a/kortex_driver/msg/UserNotification.msg b/kortex_driver/msg/UserNotification.msg new file mode 100644 index 00000000..667cd0f5 --- /dev/null +++ b/kortex_driver/msg/UserNotification.msg @@ -0,0 +1,11 @@ + + +uint32 user_event + +UserProfileHandle modified_user + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_driver/msg/UserNotificationList.msg b/kortex_driver/msg/UserNotificationList.msg new file mode 100644 index 00000000..f3967773 --- /dev/null +++ b/kortex_driver/msg/UserNotificationList.msg @@ -0,0 +1,3 @@ + + +UserNotification[] notifications \ No newline at end of file diff --git a/kortex_driver/msg/UserProfile.msg b/kortex_driver/msg/UserProfile.msg new file mode 100644 index 00000000..dcaa7b43 --- /dev/null +++ b/kortex_driver/msg/UserProfile.msg @@ -0,0 +1,7 @@ + + +UserProfileHandle handle +string username +string firstname +string lastname +string application_data \ No newline at end of file diff --git a/kortex_driver/msg/UserProfileHandle.msg b/kortex_driver/msg/UserProfileHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_driver/msg/UserProfileHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_driver/msg/UserProfileList.msg b/kortex_driver/msg/UserProfileList.msg new file mode 100644 index 00000000..e9f7fc40 --- /dev/null +++ b/kortex_driver/msg/UserProfileList.msg @@ -0,0 +1,3 @@ + + +UserProfile[] user_profiles \ No newline at end of file diff --git a/kortex_driver/msg/WifiConfiguration.msg b/kortex_driver/msg/WifiConfiguration.msg new file mode 100644 index 00000000..dae3b4e4 --- /dev/null +++ b/kortex_driver/msg/WifiConfiguration.msg @@ -0,0 +1,5 @@ + + +Ssid ssid +string security_key +bool connect_automatically \ No newline at end of file diff --git a/kortex_driver/msg/WifiConfigurationList.msg b/kortex_driver/msg/WifiConfigurationList.msg new file mode 100644 index 00000000..c2734e74 --- /dev/null +++ b/kortex_driver/msg/WifiConfigurationList.msg @@ -0,0 +1,3 @@ + + +WifiConfiguration[] wifi_configuration_list \ No newline at end of file diff --git a/kortex_driver/msg/WifiEncryptionType.msg b/kortex_driver/msg/WifiEncryptionType.msg new file mode 100644 index 00000000..29abf12d --- /dev/null +++ b/kortex_driver/msg/WifiEncryptionType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_ENCRYPTION = 0 + +uint32 AES_ENCRYPTION = 1 + +uint32 TKIP_ENCRYPTION = 2 + +uint32 WEP_ENCRYPTION = 4 diff --git a/kortex_driver/msg/WifiInformation.msg b/kortex_driver/msg/WifiInformation.msg new file mode 100644 index 00000000..8b1d3143 --- /dev/null +++ b/kortex_driver/msg/WifiInformation.msg @@ -0,0 +1,10 @@ + + +Ssid ssid +uint32 security_type +uint32 encryption_type + +uint32 signal_quality +int32 signal_strength +uint32 frequency +uint32 channel \ No newline at end of file diff --git a/kortex_driver/msg/WifiInformationList.msg b/kortex_driver/msg/WifiInformationList.msg new file mode 100644 index 00000000..e1f2114e --- /dev/null +++ b/kortex_driver/msg/WifiInformationList.msg @@ -0,0 +1,3 @@ + + +WifiInformation[] wifi_information_list \ No newline at end of file diff --git a/kortex_driver/msg/WifiSecurityType.msg b/kortex_driver/msg/WifiSecurityType.msg new file mode 100644 index 00000000..9f118bc3 --- /dev/null +++ b/kortex_driver/msg/WifiSecurityType.msg @@ -0,0 +1,10 @@ + +uint32 UNSPECIFIED_AUTHENTICATION = 0 + +uint32 WEP = 1 + +uint32 WPA2_PERSONAL = 2 + +uint32 WPA_PERSONAL = 4 + +uint32 NO_AUTHENTICATION = 8 diff --git a/kortex_driver/msg/Xbox360AnalogInputIdentifier.msg b/kortex_driver/msg/Xbox360AnalogInputIdentifier.msg new file mode 100644 index 00000000..6946dc3b --- /dev/null +++ b/kortex_driver/msg/Xbox360AnalogInputIdentifier.msg @@ -0,0 +1,14 @@ + +uint32 UNSPECIFIED_XBOX360_ANALOG = 0 + +uint32 XBOX360_THUMB_LEFT_X = 1 + +uint32 XBOX360_THUMB_LEFT_Y = 2 + +uint32 XBOX360_THUMB_RIGHT_X = 3 + +uint32 XBOX360_THUMB_RIGHT_Y = 4 + +uint32 XBOX360_TRIGGER_LEFT = 5 + +uint32 XBOX360_TRIGGER_RIGHT = 6 diff --git a/kortex_driver/msg/Xbox360DigitalInputIdentifier.msg b/kortex_driver/msg/Xbox360DigitalInputIdentifier.msg new file mode 100644 index 00000000..39e77204 --- /dev/null +++ b/kortex_driver/msg/Xbox360DigitalInputIdentifier.msg @@ -0,0 +1,30 @@ + +uint32 UNSPECIFIED_XBOX360_DIGITAL = 0 + +uint32 XBOX360_PAD_UP = 1 + +uint32 XBOX360_PAD_DOWN = 2 + +uint32 XBOX360_PAD_LEFT = 3 + +uint32 XBOX360_PAD_RIGHT = 4 + +uint32 XBOX360_FILE_BUTTON_START = 5 + +uint32 XBOX360_DOCUMENT_BUTTON_BACK = 6 + +uint32 XBOX360_LEFT_THUMB_BUTTON = 7 + +uint32 XBOX360_RIGHT_THUMB_BUTTON = 8 + +uint32 XBOX360_LEFT_SHOULDER = 9 + +uint32 XBOX360_RIGHT_SHOULDER = 10 + +uint32 XBOX360_BUTTON_A = 13 + +uint32 XBOX360_BUTTON_B = 14 + +uint32 XBOX360_BUTTON_X = 15 + +uint32 XBOX360_BUTTON_Y = 16 diff --git a/kortex_driver/msg/ZoneShape.msg b/kortex_driver/msg/ZoneShape.msg new file mode 100644 index 00000000..98d9ed62 --- /dev/null +++ b/kortex_driver/msg/ZoneShape.msg @@ -0,0 +1,9 @@ + + +uint32 shape_type + +Point origin + +RotationMatrix orientation +float32[] dimensions +float32 envelope_thickness \ No newline at end of file diff --git a/kortex_driver/msg/non_generated/ApiOptions.msg b/kortex_driver/msg/non_generated/ApiOptions.msg new file mode 100644 index 00000000..471fddd8 --- /dev/null +++ b/kortex_driver/msg/non_generated/ApiOptions.msg @@ -0,0 +1 @@ +uint32 timeout_ms \ No newline at end of file diff --git a/kortex_driver/msg/non_generated/KortexError.msg b/kortex_driver/msg/non_generated/KortexError.msg new file mode 100644 index 00000000..45392615 --- /dev/null +++ b/kortex_driver/msg/non_generated/KortexError.msg @@ -0,0 +1,3 @@ +string description +uint32 code +uint32 subCode \ No newline at end of file diff --git a/kortex_driver/package.xml b/kortex_driver/package.xml new file mode 100644 index 00000000..3a23ad1e --- /dev/null +++ b/kortex_driver/package.xml @@ -0,0 +1,30 @@ + + + kortex_driver + 1.0.0 + THe kortex package that act as a robot's driver. + + KINOVA + + BSD + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + message_generation + message_runtime + + + + + + + + diff --git a/kortex_driver/protos/Base.proto b/kortex_driver/protos/Base.proto new file mode 100644 index 00000000..15df5e47 --- /dev/null +++ b/kortex_driver/protos/Base.proto @@ -0,0 +1,1766 @@ +/** + * Base related messages. + * + */ +syntax = "proto3"; + +import public "Common.proto"; +import public "Errors.proto"; + +package Kinova.Api.Base; + +/** + * Service providing Base commands + */ +service Base {//@PROXY_ID=2 @ERROR=Kinova.Api.Error + + //Creates a User Profile + rpc CreateUserProfile (FullUserProfile) returns (Kinova.Api.Common.UserProfileHandle);//@RPC_ID=1 + + //Updates an existing User Profile + rpc UpdateUserProfile (UserProfile) returns (Kinova.Api.Common.Empty);//@RPC_ID=2 + + //Retrieves an existing User Profile + rpc ReadUserProfile (Kinova.Api.Common.UserProfileHandle) returns (UserProfile);//@RPC_ID=3 + + //Deletes an existing User Profile + rpc DeleteUserProfile (Kinova.Api.Common.UserProfileHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=4 + + //Retrieves all User Profiles + rpc ReadAllUserProfiles (Kinova.Api.Common.Empty) returns (UserProfileList);//@RPC_ID=5 + + //Retrieves the list of Usernames + rpc ReadAllUsers (Kinova.Api.Common.Empty) returns (UserList);//@RPC_ID=6 + + //Changes password of an existing user + rpc ChangePassword (PasswordChange) returns (Kinova.Api.Common.Empty);//@RPC_ID=7 + + //Creates a new Sequence + rpc CreateSequence (Sequence) returns (SequenceHandle);//@RPC_ID=8 + + //Updates an existing Sequence + rpc UpdateSequence (Sequence) returns (Kinova.Api.Common.Empty);//@RPC_ID=9 + + //Updates an existing Sequence + rpc ReadSequence (SequenceHandle) returns (Sequence);//@RPC_ID=10 + + //Deletes an existing sequence + rpc DeleteSequence (SequenceHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=11 + + //Retrieves all existing sequences + rpc ReadAllSequences (Kinova.Api.Common.Empty) returns (SequenceList);//@RPC_ID=12 + + //Deletes a specific task from the specified sequence + rpc DeleteSequenceTask (SequenceTaskHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=13 + + //Deletes all tasks from the specified sequence + rpc DeleteAllSequenceTasks (SequenceHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=14 + + //Plays an existing sequence + rpc PlaySequence (SequenceHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=15 + + //Plays an existing sequence with options + rpc PlayAdvancedSequence (AdvancedSequenceHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=16 + + //Stops execution of currently played sequence + rpc StopSequence (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=17 + + //Pauses execution of currently played sequence + rpc PauseSequence (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=18 + + //Resumes execution of currently paused sequence + rpc ResumeSequence (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=19 + + //Creates a Protection zone + rpc CreateProtectionZone (ProtectionZone) returns (ProtectionZoneHandle);//@RPC_ID=20 + + //Updates an existing Protection zone + rpc UpdateProtectionZone (ProtectionZone) returns (Kinova.Api.Common.Empty);//@RPC_ID=21 + + //Retrieve an existing protection zone + rpc ReadProtectionZone (ProtectionZoneHandle) returns (ProtectionZone);//@RPC_ID=22 + + //Deletes an existing protection zone + rpc DeleteProtectionZone (ProtectionZoneHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=23 + + //Retrieves all protection zones + rpc ReadAllProtectionZones (Kinova.Api.Common.Empty) returns (ProtectionZoneList);//@RPC_ID=24 + + //Creates a Mapping + rpc CreateMapping (Mapping) returns (MappingHandle);//@RPC_ID=26 + + //Retrieves an existing mapping + rpc ReadMapping (MappingHandle) returns (Mapping);//@RPC_ID=27 + + //Retrieves all mappings + rpc ReadAllMappings (Kinova.Api.Common.Empty) returns (MappingList);//@RPC_ID=30 + + //Creates a new map + rpc CreateMap (Map) returns (MapHandle);//@RPC_ID=36 + + //Retrieves all maps associated to the specified mapping + rpc ReadAllMaps (MappingHandle) returns (MapList);//@RPC_ID=40 + + //Makes the specified Map active within the specified Map group and Mapping + rpc ActivateMap (ActivateMapHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=41 + + //Creates an action + rpc CreateAction (Action) returns (ActionHandle);//@RPC_ID=42 + + //Retrieves an existing action + rpc ReadAction (ActionHandle) returns (Action);//@RPC_ID=43 + + //Retrieves all existing actions + rpc ReadAllActions (RequestedActionType) returns (ActionList);//@RPC_ID=44 + + //Deletes an existing action + rpc DeleteAction (ActionHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=45 + + //Update an existing action + rpc UpdateAction (Action) returns (Kinova.Api.Common.Empty);//@RPC_ID=46 + + //Asks the robot to executes the specified existing action + rpc ExecuteActionFromReference (ActionHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=47 + + //Asks the robot to execute the specified action + rpc ExecuteAction (Action) returns (Kinova.Api.Common.Empty);//@RPC_ID=48 + + //Pauses the execution of the currently executed action. ResumeAction can be invoked afterwards. + rpc PauseAction (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=49 + + //Stops the execution of the currently executed action. ResumeAction cannot be invoked afterwards. + rpc StopAction (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=50 + + //Resumes the execution of the currently paused action + rpc ResumeAction (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=51 + + //Retrieves the IPv4 network configuration for the specified Network adapter + rpc GetIPv4Configuration (NetworkHandle) returns (IPv4Configuration);//@RPC_ID=59 + + //Modifies the IPv4 network configuration for the specified Network adapter + rpc SetIPv4Configuration (FullIPv4Configuration) returns (Kinova.Api.Common.Empty);//@RPC_ID=60 + + //Enables (or disables) the specified communication interface + rpc SetCommunicationInterfaceEnable (CommunicationInterfaceConfiguration) returns (Kinova.Api.Common.Empty);//@RPC_ID=61 + + //Determines if the specified communication interface is enabled (or disabled) + rpc IsCommunicationInterfaceEnable (NetworkHandle) returns (CommunicationInterfaceConfiguration);//@RPC_ID=62 + + //Retrieves the list of available Wifi networks + rpc GetAvailableWifi (Kinova.Api.Common.Empty) returns (WifiInformationList);//@RPC_ID=63 + + //Retrieves information about a specific Wifi network + rpc GetWifiInformation (Ssid) returns (WifiInformation);//@RPC_ID=64 + + //Configures a specific Wifi network + rpc AddWifiConfiguration (WifiConfiguration) returns (Kinova.Api.Common.Empty);//@RPC_ID=65 + + //Deletes a specific Wifi network + rpc DeleteWifiConfiguration (Ssid) returns (Kinova.Api.Common.Empty);//@RPC_ID=66 + + //Retrieves the list of configured Wifi networks + rpc GetAllConfiguredWifis (Kinova.Api.Common.Empty) returns (WifiConfigurationList);//@RPC_ID=67 + + //Connects robot to specified Wifi network + rpc ConnectWifi (Ssid) returns (Kinova.Api.Common.Empty);//@RPC_ID=68 + + //Disconnects the robot from currently connected Wifi network + rpc DisconnectWifi (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=69 + + //Gets information about the connected Wifi network + rpc GetConnectedWifiInformation (Kinova.Api.Common.Empty) returns (WifiInformation);//@RPC_ID=70 + + //Unsubscribes client from receiving specified types of notifications + rpc Unsubscribe (Kinova.Api.Common.NotificationHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=97 @UNSUB + + //Subscribes to configuration change notifications + rpc ConfigurationChangeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=98 @PUB_SUB=ConfigurationChangeNotification + + //Subscribes to mapping information notifications + rpc MappingInfoTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=99 @PUB_SUB=MappingInfoNotification + + //Subscribes to control mode notifications + rpc ControlModeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=100 @PUB_SUB=ControlModeNotification + + //Subscribes to operating mode notifications + rpc OperatingModeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=101 @PUB_SUB=OperatingModeNotification + + //Subscribes to sequence information notifications + rpc SequenceInfoTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=102 @PUB_SUB=SequenceInfoNotification + + //Subscribes to protection zone notifications + rpc ProtectionZoneTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=103 @PUB_SUB=ProtectionZoneNotification + + //Subscribes to user notifications + rpc UserTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=104 @PUB_SUB=UserNotification + + //Subscribes to controller notifications + rpc ControllerTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=105 @PUB_SUB=ControllerNotification + + //Subscribes to action notifications + rpc ActionTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=106 @PUB_SUB=ActionNotification + + //Subscribes to robot event notifications + rpc RobotEventTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=107 @PUB_SUB=RobotEventNotification + + //Retrieves the forward kinematics that corresponds to specified transformation matrix + rpc GetFwdKinematics (Kinova.Api.Common.Empty) returns (TransformationMatrix);//@RPC_ID=108 + + //Reaches the specifed pose + rpc PlayCartesianTrajectory (ConstrainedPose) returns (Kinova.Api.Common.Empty);//@RPC_ID=109 + + //Reaches the specified position + rpc PlayCartesianTrajectoryPosition (ConstrainedPosition) returns (Kinova.Api.Common.Empty);//@RPC_ID=110 + + //Reaches the specified orientation + rpc PlayCartesianTrajectoryOrientation (ConstrainedOrientation) returns (Kinova.Api.Common.Empty);//@RPC_ID=111 + + //Pauses robot movement + rpc Pause (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=113 + + //Resumes robot movement + rpc Resume (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=114 + + //Retrieves the currently measured Pose, that is the position and orientation that the robot is currently in + rpc GetMeasuredCartesianPose (Kinova.Api.Common.Empty) returns (Pose);//@RPC_ID=115 + + //Retrieves the commanded cartesian pose + rpc GetCommandedCartesianPose (Kinova.Api.Common.Empty) returns (Pose);//@RPC_ID=116 + + //Retrieves the targeted cartesian pose + rpc GetTargetedCartesianPose (Kinova.Api.Common.Empty) returns (Pose);//@RPC_ID=117 + + //Sends a twist command + rpc SendTwistCommand (TwistCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=121 + + //Retrieves the currently measured Twist Command, that is the current linear and angular robot velocity + rpc GetMeasuredTwist (Kinova.Api.Common.Empty) returns (Twist);//@RPC_ID=122 + + //Retrieves the desired Twist Command + rpc GetCommandedTwist (Kinova.Api.Common.Empty) returns (Twist);//@RPC_ID=123 + + //Reaches the specified Joint angles + rpc PlayJointTrajectory (ConstrainedJointAngles) returns (Kinova.Api.Common.Empty);//@RPC_ID=124 + + //Reaches the specified Joint angle + rpc PlaySelectedJointTrajectory (ConstrainedJointAngle) returns (Kinova.Api.Common.Empty);//@RPC_ID=125 + + //Retrieves the currently measured joint angles, that is the current position of each joint + rpc GetMeasuredJointAngles (Kinova.Api.Common.Empty) returns (JointAngles);//@RPC_ID=126 + + //Retrieves the desired Joint angles Command + rpc GetCommandedJointAngles (Kinova.Api.Common.Empty) returns (JointAngles);//@RPC_ID=127 + + //Sends a joint speed command + rpc SendJointSpeedsCommmand (JointSpeeds) returns (Kinova.Api.Common.Empty);//@RPC_ID=132 + + //Sends a speed command for a specific joint + rpc SendSelectedJointSpeedCommand (JointSpeed) returns (Kinova.Api.Common.Empty);//@RPC_ID=133 + + //Retrieves the currently measured Joint speeds Command, that is the current speed of each joint + rpc GetMeasuredJointSpeeds (Kinova.Api.Common.Empty) returns (JointSpeeds);//@RPC_ID=134 + + //Retrieves the desired Joint speeds Command + rpc GetCommandedJointSpeeds (Kinova.Api.Common.Empty) returns (JointSpeeds);//@RPC_ID=135 + + //Sends a command to move the gripper + rpc SendGripperCommand (GripperCommand) returns (Kinova.Api.Common.Empty);//@RPC_ID=136 + + //Retrieves the current gripper movement, that is the current gripper position, force or speed + rpc GetMeasuredGripperMovement (GripperRequest) returns (Gripper);//@RPC_ID=137 + + //Retrieves the desired gripper Command + rpc GetCommandedGripperMovement (GripperRequest) returns (Gripper);//@RPC_ID=138 + + //Sets the robot in admittance mode + rpc SetAdmittance (Admittance) returns (Kinova.Api.Common.Empty);//@RPC_ID=139 + + //Defines the reference frame to use with Twist and Wrench commands + rpc SetTwistWrenchReferenceFrame (CartesianReferenceFrameRequest) returns (Kinova.Api.Common.Empty);//@RPC_ID=140 + + //sets a new operating mode. Only Maintenance, Update and Run mode are permitted + rpc SetOperatingMode (OperatingModeInformation) returns (Kinova.Api.Common.Empty);//@RPC_ID=141 + + //stops robot movement + rpc ApplyEmergencyStop (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=145 + + //resets robot stop. Robot is now permitted to move again + rpc ClearFaults (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=146 + + //retrieves currently active map associate to specified mapping. + rpc GetActiveMap (MappingHandle) returns (Kinova.Api.Common.Empty);//@RPC_ID=149 + + //retrieves current control mode + rpc GetControlMode (Kinova.Api.Common.Empty) returns (ControlModeInformation);//@RPC_ID=150 + + //retreieves current operating mode + rpc GetOperatingMode (Kinova.Api.Common.Empty) returns (OperatingModeInformation);//@RPC_ID=151 + + //sets the servoing mode + rpc SetServoingMode (ServoingModeInformation) returns (Kinova.Api.Common.Empty);//@RPC_ID=152 + + //retrieves current servoing mode + rpc GetServoingMode (Kinova.Api.Common.Empty) returns (ServoingModeInformation);//@RPC_ID=153 + + //Subscribes to servoing mode notifications + rpc ServoingModeTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=154 @PUB_SUB=ServoingModeNotification + + //retrieves the last sequence state + rpc GetSequenceState (SequenceHandle) returns (SequenceInformation);//@RPC_ID=156 + + //retrieves the last state of the robot versus the specified protection zone + rpc GetProtectionZoneState (ProtectionZoneHandle) returns (ProtectionZoneInformation);//@RPC_ID=157 + + //retrieves the action execution state + rpc GetActionExecutionState (Kinova.Api.Common.Empty) returns (ActionExecutionState);//@RPC_ID=158 + + //Deletes all configuration and put back factory content only (except Network settings) + rpc RestoreFactorySettings (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=160 + + //Puts back Network settings to their factory defaults and predefined users to default password + rpc RestoreNetworkFactorySettings (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=161 + + //allows to reboot robot + rpc Reboot (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=162 + + //Subscribes to factory notifications + rpc FactoryTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=164 @PUB_SUB=FactoryNotification + + //Retrieves the list of all connected controllers + rpc GetAllConnectedControllers (Kinova.Api.Common.Empty) returns (ControllerList);//@RPC_ID=166 + + //retrieves the state of a specific controller + rpc GetControllerState (ControllerHandle) returns (ControllerState);//@RPC_ID=167 + + //Retrieves the number of Actuators + rpc GetActuatorCount (Kinova.Api.Common.Empty) returns (ActuatorInformation);//@RPC_ID=171 + + //Initiates wifi scanning + rpc StartWifiScan (Kinova.Api.Common.Empty) returns (Kinova.Api.Common.Empty);//@RPC_ID=172 + + //Retrieves a configured Wifi network + rpc GetConfiguredWifi (Ssid) returns (WifiConfiguration);//@RPC_ID=173 + + //Subscribes to network event notifications + rpc NetworkTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=174 @PUB_SUB=NetworkNotification + + //Retrieves current arm state + rpc GetArmState (Kinova.Api.Common.Empty) returns (ArmStateInformation);//@RPC_ID=175 + + //Subscribes to arm state notifications + rpc ArmStateTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=176 @PUB_SUB=ArmStateNotification + + //Retrieves the IPv4 network information for the specified Network adapter + rpc GetIPv4Information (NetworkHandle) returns (IPv4Information);//@RPC_ID=177 +} + +enum ServiceVersion { + RESERVED_0 = 0; + CURRENT_VERSION = 1; // Current Version +} + +/** + * Message used to create a new User Profile in robot + */ +message FullUserProfile { + UserProfile user_profile = 1; //User Profile, which includes username + string password = 2; //User's password +} + +/** + * Information about a user + */ +message UserProfile { + Kinova.Api.Common.UserProfileHandle handle = 1; //User handle (no need to set it with CreateUserProfile() + string username = 2; // username, which is used to connect to robot (or login via Web App) + string firstname = 3; //user first name + string lastname = 4; //user last name + string application_data = 5; //other application data (used by Web App) +} + +/** + * List of user profiles + */ +message UserProfileList { + repeated UserProfile user_profiles = 1; //user profiles +} + +/** + * Message used to retrieve a list of users along with their username + */ +message UserList { + repeated Kinova.Api.Common.UserProfileHandle user_handles = 1; //user handles +} + +/** + * Message used to change a User's password + */ +message PasswordChange { + Kinova.Api.Common.UserProfileHandle handle = 1; // user handle + string old_password = 2; // current user's password + string new_password = 3; // new user's password +} + +/** + * Handle to an existing Sequence + */ +message SequenceHandle { + uint32 identifier = 1; //sequence identifier + fixed32 permission = 2; //must use 'Permission' enum +} + +/** + * Message used to pass options when executing a sequence + */ +message AdvancedSequenceHandle { + SequenceHandle handle = 1; // sequence handle + /** + * set to true to play the sequence in loop, false otherwise. When a sequence is executed in loop, it will automatically + * go back to first task within the sequence after completing execution of last task and continue execution forever + * unless the sequence is explicitely stopped + */ + bool in_loop = 2; +} + +/** + * Message used to delete a specific task within a sequence + */ +message SequenceTaskHandle { + SequenceHandle sequence_handle = 1; // sequence handle + uint32 task_index = 2; //specified task to delete within sequence +} + +/** + * Definition of a specific task within a sequence + */ +message SequenceTask { + uint32 group_identifier = 1; //specifies the order in which this task must be executed + Action action = 2; + string application_data = 3; //application data (used by Web App) +} + +/** + * Sequence definition + */ +message Sequence { + SequenceHandle handle = 1; //sequence handle + string name = 2; //sequence name + string application_data = 3; // application data (used by Web App) + repeated SequenceTask tasks = 4; // list of tasks that this sequence contains +} + +/** + * List of sequences + */ +message SequenceList { + repeated Sequence sequence_list = 1; //sequences +} + +//action to append an action to an existing trajectory (which can be already playing) +message AppendActionInformation { + SequenceHandle sequence_handle = 1; + Action action = 2; +} + +/** + * Action handle + */ +message ActionHandle { + uint32 identifier = 1; + ActionType action_type = 2; //allows to know the type of action that is affected (ex. on a notification) + fixed32 permission = 3; //must use 'Permission' enum +} + +message RequestedActionType { + ActionType action_type = 1; +} + +/** + * Definition of an Action + */ +message Action { + ActionHandle handle = 1; // action handle (useful when updating an existing action) + string name = 2; // action friendly name + string application_data = 3; // application data (used by Web App) + oneof action_parameters { + TwistCommand send_twist_command = 4; //action to control the robot in velocity + JointSpeeds send_joint_speeds = 7; //action to control each joint speed + ConstrainedPose reach_pose = 9; //action to reach a pose + ConstrainedJointAngles reach_joint_angles = 10; //action to reach a joint angles + AdmittanceMode toggle_admittance_mode = 16; //action to enable or disable the admittance mode + SwitchControlMapping switch_control_mapping = 19; //action to switch the active controller map + JointNavigationDirection navigate_joints = 20; //action to select the next actuator to control in a map + NavigationDirection navigate_mappings = 21; //action to select a different map + ChangeTwist change_twist = 25; //action to change twist + ChangeJointSpeeds change_joint_speeds = 26; //action to change the joint speeds per joint + EmergencyStop apply_emergency_stop = 31; //action to apply robot emergency stop + Faults clear_faults = 32; //action to clear faults. robot will be able to move is no more error safeties + Delay delay = 34; //action to apply a delay + ActionHandle execute_action = 35; //action to execute an existing action + GripperCommand send_gripper_command = 36; //action to execute a gripper movement + Stop stop_action = 38; //action to stop movement + } +} + +/** + * List of all supported action types + */ +enum ActionType { + UNSPECIFIED_ACTION = 0; //unspecified action type + SEND_TWIST_COMMAND = 1; //action to control the robot in velocity + SEND_JOINT_SPEEDS = 4; //action to control each joint speed + REACH_POSE = 6; //action to reach a pose + REACH_JOINT_ANGLES = 7; //action to reach a joint angles + TOGGLE_ADMITTANCE_MODE = 13; //action to enable or disable the admittance mode + SWITCH_CONTROL_MAPPING = 16; //action to switch the active controller map + NAVIGATE_JOINTS = 17; //action to select the next actuator to control from control mapping + NAVIGATE_MAPPINGS = 18; //action to select a different map + CHANGE_TWIST = 22; //action to change the twist + CHANGE_JOINT_SPEEDS = 23; //action to change the joint speeds per joint + APPLY_EMERGENCY_STOP = 28; //action to apply robot emergency stop + CLEAR_FAULTS = 29; //action to clear faults. robot will be able to move is no more error safeties + DELAY = 31; //action to apply a delay + EXECUTE_ACTION = 32; //action to execute an existing action + SEND_GRIPPER_COMMAND = 33; //action to execute a gripper command + STOP_ACTION = 35; // action to stop movement +} + +//action to switch the active controller map +message SwitchControlMapping { + uint32 controller_identifier = 1; + MapGroupHandle map_group_handle = 2; + MapHandle map_handle = 3; +} + +//action to change the maximum cartesian velocity +message ChangeTwist { + float linear = 1; + float angular = 2; +} + +//action to change the maximum angular velocity per joint +message ChangeJointSpeeds { + JointSpeeds joint_speeds = 1; +} + +//action to apply robot emergency stop +message EmergencyStop { +} + +//Faults message +message Faults { +} + +//action to apply a delay +message Delay { + uint32 duration = 1; +} + +//action to stop movement +message Stop { +} + +/** + * List of actions + */ +message ActionList { + repeated Action action_list = 1; +} + +/** + * Message to specify a timeout + */ +message Timeout { + uint32 value = 1; //timeout value +} + +/** + * Ssid handle + */ +message Ssid { + string identifier = 1; //SSID value +} + +/** + * Message to enable (or disable) a specific communication interface + */ +message CommunicationInterfaceConfiguration { + NetworkType type = 1; //network type + bool enable = 2; //true if network is enabled, false otherwise +} + +/** + * Message to identify the type of network + */ +enum NetworkType { + UNSPECIFIED_NETWORK_TYPE = 0; //unspecified network type + WIFI = 1; //Wifi network + WIRED_ETHERNET = 2; //wired Ethernet network +} + +/** + * Network handle + */ +message NetworkHandle { + NetworkType type = 1; //network type +} + +/** + * IPv4 configuration + */ +message IPv4Configuration { + uint32 ip_address = 1; //IPv4 address + uint32 subnet_mask = 2; //IPv4 subnet mask + uint32 default_gateway = 3; //Gateway IPv4 address + bool dhcp_enabled = 4; //set to true to use dhcp instead of static ip configuration +} + +/** + * IPv4 information + */ +message IPv4Information { + uint32 ip_address = 1; //IPv4 address + uint32 subnet_mask = 2; //IPv4 subnet mask + uint32 default_gateway = 3; //Gateway IPv4 address +} + +/** + * Message to specify the IPv4 configuration for a specific type of network + */ +message FullIPv4Configuration { + + NetworkHandle handle = 1; //network handle + IPv4Configuration ipv4_configuration = 2; //IPv4 configuration +} + + +/** + * Wifi Security type + */ +enum WifiSecurityType { + UNSPECIFIED_AUTHENTICATION = 0; //unspecified wifi security type + + WEP = 1; //WEP authentication required + WPA2_PERSONAL = 2; //WPA2 Personal authentication required + WPA_PERSONAL = 4; //WPA Personal authentication required + NO_AUTHENTICATION = 8; //no authentication required +} + +/** + * Wifi encryption type + */ +enum WifiEncryptionType { + + UNSPECIFIED_ENCRYPTION = 0; //unspecified wifi encryption type + AES_ENCRYPTION = 1; //AES encryption + TKIP_ENCRYPTION = 2; // TKIP encryption + WEP_ENCRYPTION = 4; //WEP encryption +} + +/** + * Signal quality + */ +enum SignalQuality { + + UNSPECIFIED_SIGNAL_QUALITY = 0; //unspecified signal quality + POOR = 1; //Poor signal quality + FAIR = 2; //Fair signal quality + GOOD = 3; //Good signal quality + EXCELLENT = 4; //Excellent signal quality + NONE = 5; //No signal +} + +/** + * Message to provide Information about a specific Wifi network + */ +message WifiInformation { + Ssid ssid = 1; //SSID + fixed32 security_type = 2; //Wifi Security type + fixed32 encryption_type = 3; //Wifi Encryption type + SignalQuality signal_quality = 4; //Wifi signal quality + int32 signal_strength = 5; //Wifi signal power in dBm + uint32 frequency = 6; //Wifi operating frequency (channel) in MHz + uint32 channel = 7; //Wifi operating channel +} + +/** + * Wifi information list + */ +message WifiInformationList { + repeated WifiInformation wifi_information_list = 1; //wifi informations +} + +/** + * Wifi Configuration + */ +message WifiConfiguration { + Ssid ssid = 1; // SSID + string security_key = 2; //security key to used when connecting to Wifi network + bool connect_automatically = 3; //set to true so robot automatically connects to this Wifi network at bootup, false otherwise +} + +/** + * Wifi configuration list + */ +message WifiConfigurationList { + repeated WifiConfiguration wifi_configuration_list = 1; //wifi configurations +} + +/** + * Protection zone handle + */ +message ProtectionZoneHandle { + uint32 identifier = 1; //protection zone identifier + fixed32 permission = 2; //must use 'Permission' enum +} + +/** + * Single rotation matrix row + */ +message RotationMatrixRow { + float column1 = 1; + float column2 = 2; + float column3 = 3; +} + +/** + * 3x3 rotation matrix + */ +message RotationMatrix { + RotationMatrixRow row1 = 1; //first rotation matrix row + RotationMatrixRow row2 = 2; // + RotationMatrixRow row3 = 3; +} + +/** + * Cartesian point + */ +message Point { + float x = 1; //x + float y = 2; //y + float z = 3; //z +} + +/** + * List of Protection zone shape types + */ +enum ShapeType { + UNSPECIFIED_SHAPE = 0; //unspecified shape type + CYLINDER = 1; + SPHERE = 2; + RECTANGULAR_PRISM = 3; +} + +/** + * Protection zone shape + */ +message ZoneShape { + ShapeType shape_type = 1; //shape type + Point origin = 2; //origin of the protection zone shape from reference + RotationMatrix orientation = 3; //rotation matrix to provide shape orientation + repeated float dimensions = 4; //shape size measurement. if rectangular prism: x, y and z dimensions. if cylinder: radius and height. if sphere: radius + float envelope_thickness = 5; //thickness of envelop around shape. The envelop is of same shape type as the shape at its center +} + +/** + * Protection zone configuration + */ +message ProtectionZone { + ProtectionZoneHandle handle = 1; //protection zone handle + string name = 2; //protection zone friendly name + string application_data = 3; //application data (used by Web App) + bool is_enabled = 4; //true if protection zone is enabled, false otherwise + ZoneShape shape = 5; //protection zone shape + repeated CartesianLimitation limitations = 6; //list of cartesian limitation (i.e. force) + repeated CartesianLimitation envelope_limitations = 7; //list of cartesian limitation of the envelop (i.e. velocity and force) +} + +/** + * list of protection zones + */ +message ProtectionZoneList { + repeated ProtectionZone protection_zones = 1; //protection zones +} + +/** + * List of limitation types + */ +enum LimitationType { + UNSPECIFIED_LIMITATION = 0; //unspecified limitation + FORCE_LIMITATION = 1; //force limitation + ACCELERATION_LIMITATION = 2; //acceleration limitation + VELOCITY_LIMITATION = 3; //velocity limitation +} + + +/** + * Limitation identifier + */ +message LimitationTypeIdentifier { + LimitationType type = 1; //limitation type +} + +/** + * Cartesian limitation configuration + */ +message CartesianLimitation { + LimitationType type = 1; //limitation type + float translation = 2; //translation limitation + float orientation = 3; //orientation limitation +} + +/** + * List of cartesian limitations + */ +message CartesianLimitationList { + repeated CartesianLimitation limitations = 1; //limitations +} + +/** + * Joint limitation + */ +message JointLimitationValue { + LimitationType type = 1; //limitation type + float value = 2; //limitation value +} + +/** + * List of joint limitations + */ +message JointLimitationValueList { + repeated JointLimitationValue joint_limitation_values = 1; //joint limitations +} + +/** + * Joint limitation + */ +message JointLimitation { + uint32 device_identifier = 1; //joint device identifier + JointLimitationValue limitation_value = 2; //joint limitation value +} + +/** + * message to specify a specific limitation type for a specific joint + */ +message JointLimitationTypeIdentifier { + uint32 device_identifier = 1; //joint device identifier + LimitationType type = 2; //joint limitation type +} + +/** + * Message to specify the parameters of a a event log query + */ +message Query { + Kinova.Api.Common.Timestamp start_timestamp = 1; //start timestamp (set to zero to specify it) + Kinova.Api.Common.Timestamp end_timestamp = 2; //end timestamp (set to zero to not specify it) + string username = 3; //queried username (set to "" to not specify it) +} + +/** + * Configuration events + */ +enum ConfigurationNotificationEvent { + + UNSPECIFIED_CONFIGURATION_EVENT = 0; //unspecified configuration event + UPDATE = 1; //delete configuration + DELETE = 2; //update configuration + DELETE_ALL = 3; //delete all configuration + CREATE = 4; //create configuration +} + +/** + * Message that contains a Configuration change event + */ +message ConfigurationChangeNotification { + ConfigurationNotificationEvent event = 1; //configuration event + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; //user that caused the configuration event + oneof configuration_change { + SequenceHandle sequence_handle = 4; + ActionHandle action_handle = 5; + MappingHandle mapping_handle = 6; + MapGroupHandle map_group_handle = 7; + MapHandle map_handle = 8; + Kinova.Api.Common.UserProfileHandle user_profile_handle = 9; + ProtectionZoneHandle protection_zone_handle = 10; + Kinova.Api.Common.SafetyHandle safety_handle = 11; + NetworkHandle network_handle = 12; + Ssid ssid = 14; + } + Kinova.Api.Common.Connection connection = 15; // connection that caused the configuration event +} + +/** + * Message that contains a Mapping information event + */ +message MappingInfoNotification { + uint32 controller_identifier = 1; //identifier of the controller + MapHandle active_map_handle = 2; + Kinova.Api.Common.Timestamp timestamp = 3; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 4; //user that caused the mapping information event + Kinova.Api.Common.Connection connection = 5; // connection that caused the mapping information event +} + +/** + * list of possible robot control modes + */ +enum ControlMode { + UNSPECIFIED_CONTROL_MODE = 0; //unspecified control mode + ANGULAR_JOYSTICK = 1; //angular joystick mode + CARTESIAN_JOYSTICK = 2; //cartesian joystick mode + VISION_JOYSTICK = 3; //vision joystick mode + ANGULAR_TRAJECTORY = 4; //angular trajectory mode + CARTESIAN_TRAJECTORY = 5; //cartesian trajectory mode + CARTESIAN_ADMITTANCE = 6; //cartesian admittance mode + JOINT_ADMITTANCE = 7; //joint admittance mode + NULL_SPACE_ADMITTANCE = 8; //null space mode + IDLE = 13; //Idle +}; + +message ControlModeInformation { + ControlMode mode = 1; +} + +/** + * Message that contains a Control mode event + */ +message ControlModeNotification { + ControlMode control_mode = 1; //new control mode + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; //user that caused the control mode event + Kinova.Api.Common.Connection connection = 4; // connection that caused the control mode event +} + +/** + * list of robot operating modes which are used to manage robot firmware upgrade + */ +enum OperatingMode { + UNSPECIFIED_OPERATING_MODE = 0; //unspecified operating mode + MAINTENANCE_MODE = 1; //robot in maintenance mode + UPDATE_MODE = 2; //robot waiting for upgrade package + UPDATE_COMPLETED_MODE = 3; //robot update successfully completed + UPDATE_FAILED_MODE = 4; //robot update failed + SHUTTING_DOWN_MODE = 5; //robot about to shutdown + RUN_MODE = 6; //robot properly running (or normal operation mode) + UPDATING_DEVICE_MODE = 7; //robot updating device +} + +// enum used to configure the servoing mode +enum ServoingMode { + UNSPECIFIED_SERVOING_MODE = 0; //unspecified servoing mode + MULTI_LEVEL_SERVOING = 1; //multi-level servoing + SINGLE_LEVEL_SERVOING = 2; //single-level servoing + LOW_LEVEL_SERVOING = 3; //low-level servoing + BYPASS_SERVOING = 4; //bypass mode +} + +message ServoingModeInformation { + ServoingMode servoing_mode = 1; +} + +message OperatingModeInformation { + OperatingMode operating_mode = 1; //operating mode + Kinova.Api.Common.DeviceHandle device_handle = 2; //device matching operating mode (if applicable) +} + +/** + * Message that contains Operating mode event + */ +message OperatingModeNotification { + OperatingMode operating_mode = 1; //new operating mode + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; //user that caused the Operating mode event + Kinova.Api.Common.Connection connection = 4; // connection that caused the Operating mode event + Kinova.Api.Common.DeviceHandle device_handle = 5; //device matching operating mode (if applicable) +} + +/** + * Message that contains Servoing mode event + */ +message ServoingModeNotification { + ServoingMode servoing_mode = 1; //new operating mode + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; //user that caused the Operating mode event + Kinova.Api.Common.Connection connection = 4; // connection that caused the Servoing mode event +} + +/** + * list of possible sequence event types + */ +enum EventIdSequenceInfoNotification { + + UNSPECIFIED_SEQUENCE_EVENT = 0; //unspecified sequence event + END = 1; //sequence end reached + ABORT = 2; //sequence aborted + PAUSE = 3; //sequence paused + TASK_START = 4; //sequence task started + TASK_END = 5; //sequence task ended + START = 6; //sequence started +} + +/** + * Message that contains Sequence information event + */ +message SequenceInfoNotification { + EventIdSequenceInfoNotification event_identifier = 1; //sequence event type + SequenceHandle sequence_handle = 2; + uint32 task_index = 3; //task index + uint32 group_identifier = 4; //specifies the order in which this task must be executed + Kinova.Api.Common.Timestamp timestamp = 5; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 6; //user that caused the sequence event + SubErrorCodes abort_details = 7; //details if event_identifier is equal to ABORT + Kinova.Api.Common.Connection connection = 8; // connection that caused the sequence event +} + + +message SequenceInformation { + EventIdSequenceInfoNotification event_identifier = 1; //sequence event type + uint32 task_index = 2; //task index + uint32 task_identifier = 3; //task identifier +} + +/** + * list of protection zone event types + */ +enum ProtectionZoneEvent { + UNSPECIFIED_PROTECTION_ZONE_EVENT = 0; + + REACHED = 1; //protection zone limit is reached + ENTERED = 2; //protection zone limit is entered + EXITED = 3; //protection zone limit is exited +}; + +/** + * Message that contains a protection zone event + */ +message ProtectionZoneNotification { + ProtectionZoneEvent event = 1; //event type + ProtectionZoneHandle handle = 2; + Kinova.Api.Common.Timestamp timestamp = 3; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 4; //user that caused the protection zone event to occur + Kinova.Api.Common.Connection connection = 5; // connection that caused the protection zone event to occur +} + +message ProtectionZoneInformation { + ProtectionZoneEvent event = 1; //event type +} + +/** + * List of User event types + */ +enum UserEvent { + UNSPECIFIED_USER_EVENT = 0; //unspecified user event + LOGGED_OUT = 1; //user logged out + LOGGED_IN = 2; //user logged in +}; + +/** + * Message that contains a User event + */ +message UserNotification { + UserEvent user_event = 1; //user event type + Kinova.Api.Common.UserProfileHandle modified_user = 2; //user profile that was modified + Kinova.Api.Common.Timestamp timestamp = 3; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 4; //user that caused the user profile event (i.e. user who changed the user profile) + Kinova.Api.Common.Connection connection = 5; // connection that caused the user profile event (i.e. user who changed the user profile) +} + +/** + * List of possible controller types + */ +enum ControllerType { + UNSPECIFIED_CONTROLLER_TYPE = 0; //unspecified controller type + XBOX_CONTROLLER = 1; //XBOX controller + WRIST_CONTROLLER = 2; //Wrist controller on Kinova Arm +} + +/** + * Handle on a specific controller + */ +message ControllerHandle { + ControllerType type = 1; //controller type + uint32 controller_identifier = 2; //controller identifier +} + +/** + * Handle on a specific button (or axis) of a controller + */ +message ControllerElementHandle { + ControllerHandle controller_handle = 1; //controller handle + oneof identifier { + uint32 button = 2; //button identifier (only set if 'button' controller event, otherwise zero) + uint32 axis = 3; //axis identifier (only set if 'axis' controller event, otherwise zero) + } +} + +/** + * Message that contains controller event + */ +message ControllerNotification { + + oneof state { + ControllerState controller_state = 1; + ControllerElementState controller_element = 2; + } + + Kinova.Api.Common.Timestamp timestamp = 3; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 4; //user that caused the controller event + Kinova.Api.Common.Connection connection = 5; // connection that caused the controller event +} + +/** + * Message that allows to retrieve a list of controller handles + */ +message ControllerList { + repeated ControllerHandle handles = 1; +} + +message ControllerState { + ControllerHandle handle = 1; + ControllerEventType event_type = 2; +} + +message ControllerElementState { + ControllerElementHandle handle = 1; //controller element + ControllerElementEventType event_type = 2; + float axis_value = 3; //axis value (set between -1.0 and +1.0); only set if 'axis' controller element, otherwise zero +} + +/** + * Controller event type + */ +enum ControllerEventType { + UNSPECIFIED_CONTROLLER_EVENT = 0; //unspecified controller event + CONTROLLER_DISCONNECTED = 1; //controller was disconnected + CONTROLLER_CONNECTED = 2; //controler was connected +} + + +/* + * Controller element event type + */ +enum ControllerElementEventType { + UNSPECIFIED_CONTROLLER_ELEMENT_EVENT = 0; //unspecified controller element event + AXIS_MOVED = 1; //controller axis moved + BUTTON_DOWN = 2; //controller button pressed + BUTTON_UP = 3; //controller button released +} + + + +/** + * Action event type + */ +enum ActionEvent { + UNSPECIFIED_ACTION_EVENT = 0; //unspecified action event + ACTION_END = 1; //Action execution end reached + ACTION_ABORT = 2; //Action execution aborted + ACTION_PAUSE = 3; //Action execution paused + ACTION_START = 4; //Action execution started +} + +/** + * Message that contains an Action event + */ +message ActionNotification { + ActionEvent action_event = 1; //Action event type + ActionHandle handle = 2; + Kinova.Api.Common.Timestamp timestamp = 3; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 4; //user that caused the action event + SubErrorCodes abort_details = 5; //details if action_event is equal to ACTION_ABORT + Kinova.Api.Common.Connection connection = 6; // connection that caused the action event + +} + +message ActionExecutionState { + ActionEvent action_event = 1; //Action event type + ActionHandle handle = 2; +} + +/** + * list of robot events + */ +enum RobotEvent { + + UNSPECIFIED_ROBOT_EVENT = 0; //unspecified robot event + ARM_CONNECTED = 1; //arm connected + ARM_DISCONNECTED = 2; //arm disconnected + TOOL_CONNECTED = 5; //tool connected to the end effector + TOOL_DISCONNECTED = 6; //tool disconnected from end effector +} + +/** + * Message that contains robot event + */ +message RobotEventNotification { + RobotEvent event = 1; //robot event type + Kinova.Api.Common.DeviceHandle handle = 2; //identifier of the hardware device connected or disconnected + Kinova.Api.Common.Timestamp timestamp = 3; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 4; //user that caused the robot event to occur + Kinova.Api.Common.Connection connection = 6; // connection that caused the robot event to occur +} + +/** + * list of backup events + */ +enum BackupEvent { + UNSPECIFIED_BACKUP_EVENT = 0; //unspecified backup event + BACKUP_RESTORED = 1; //configuration backup restored + BACKUP_UPLOADED = 2; //configuration backup uploaded on robot +} + +/** + * list of factory events + */ +enum FactoryEvent { + UNSPECIFIED_FACTORY_EVENT = 0; //unspecified factory event + FACTORY_DEFAULT_RESTORED = 1; // factory defaults restored on robot + NETWORK_FACTORY_DEFAULT_RESTORED = 2; //network factory defaults restored on robot +} + +/** + * Message that contains a factory event + */ +message FactoryNotification { + FactoryEvent event = 1; + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; //user that caused the factory event to occur + Kinova.Api.Common.Connection connection = 4; // connection that caused the factory event to occur +} + +/** + * list of network events + */ +enum NetworkEvent { + UNSPECIFIED_NETWORK_EVENT = 0; //unspecified network event + WIFI_CONNECTED = 1; //WiFi connected + WIFI_DISCONNECTED = 2; //Wifi Disconnected + WIFI_SCAN_STARTED = 3; //Wifi scan was initiated + WIFI_SCAN_RESULTS = 4; //Wifi scan results are available + WIFI_SCAN_FAILED = 5; //Wifi scan failed + WIFI_NOT_FOUND = 6; //Wifi selected network not found + WIFI_ASSOC_REJECTED = 7; //Wifi AP rejected association + WIFI_AUTH_WRONG_KEY = 8; //Wifi wrong PSK supplied + WIFI_AUTH_CONN_FAILED = 9; //Wifi connection failure during auth + WIFI_AUTH_FAILED = 10; //Wifi authentication failure +} + +/** + * Message that contains a network event + */ +message NetworkNotification { + NetworkEvent event = 1; + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.UserProfileHandle user_handle = 3; //user that caused the network event to occur + Kinova.Api.Common.Connection connection = 4; // connection that caused the network event to occur +} + +/** + * list of configuration change notifications + */ +message ConfigurationChangeNotificationList { + repeated ConfigurationChangeNotification notifications = 1; //notifications +} + +/** + * list of Mapping information notifications + */ +message MappingInfoNotificationList { + repeated MappingInfoNotification notifications = 1; //notifications +} + +/** + * list of Control mode notifications + */ +message ControlModeNotificationList { + repeated ControlModeNotification notifications = 1; //notifications +} + +/** + * list of Operating mode notifications + */ +message OperatingModeNotificationList { + repeated OperatingModeNotification notifications = 1; //notifications +} + +/** + * list of Servoing mode notifications + */ +message ServoingModeNotificationList { + repeated ServoingModeNotification notifications = 1; //notifications +} + +/** + * list of Sequence information notifications + */ +message SequenceInfoNotificationList { + repeated SequenceInfoNotification notifications = 1; //notifications +} + +/** + * list of Protection zone notifications + */ +message ProtectionZoneNotificationList { + repeated ProtectionZoneNotification notifications = 1; //notifications +} + +/** + * list of User notifications + */ +message UserNotificationList { + repeated UserNotification notifications = 1; //notifications +} + +/** + * list of safety notifications + */ +message SafetyNotificationList { + repeated Kinova.Api.Common.SafetyNotification notifications = 1; //notifications +} + +/** + * list of controller notifications + */ +message ControllerNotificationList { + repeated ControllerNotification notifications = 1; //notifications +} + +/** + * list of Action notifications + */ +message ActionNotificationList { + repeated ActionNotification notifications = 1; //notifications +} + +/** + * list of Robot event notifications + */ +message RobotEventNotificationList { + repeated RobotEventNotification notifications = 1; //notifications +} + +/** + * list of Network event notifications + */ +message NetworkNotificationList { + repeated NetworkNotification notifications = 1; //notifications +} + +/** + * Mapping handle + */ +message MappingHandle { + uint32 identifier = 1; //mapping identifier + fixed32 permission = 2; //must use 'Permission' enum +} + +/** + * list of possible controller input types + */ +enum ControllerInputType { + UNSPECIFIED_CONTROLLER_INPUT_TYPE = 0; + ANALOG = 1; //axis + DIGITAL = 2; //button +} + +/** + * List of possible controller input behaviors + */ +enum ControllerBehavior { + UNSPECIFIED_CONTROLLER_BEHAVIOR = 0; + CONTROLLER_BUTTON_DOWN = 1; //pushing button down + CONTROLLER_BUTTON_UP = 2; //releasing button + CONTROLLER_AXIS_POSITIVE = 3; //positive axis movement + CONTROLLER_AXIS_NEGATIVE = 4; //negative axis movement + CONTROLLER_BUTTON_CLICK = 5; //button down and up within X msec +} + +message SafetyEvent { + Kinova.Api.Common.SafetyHandle safety_handle = 1; +} + +message ControllerEvent { + ControllerInputType input_type = 1; + ControllerBehavior behavior = 2; + uint32 input_identifier = 3; +} + +message GpioEvent { + GpioState gpio_state = 1; + uint32 device_identifier = 2; +} + +/** + * List of Map events + */ +message MapEvent { + oneof events { + SafetyEvent safety_event = 1; + GpioEvent gpio_event = 2; + ControllerEvent controller_event = 3; + } + string name = 4;//event friendly name +} + +/** + * message to associate an event to an action + */ +message MapElement { + MapEvent event = 1; + Action action = 2; +} + +message ActivateMapHandle { + MappingHandle mapping_handle = 1; + MapGroupHandle map_group_handle = 2; + MapHandle map_handle = 3; +} + +message Map { + MapHandle handle = 1; //not set on createMap call + string name = 2; + repeated MapElement elements = 3; +} + +message MapHandle { + uint32 identifier = 1; + fixed32 permission = 2; //must use 'Permission' enum +} + +message MapList { + repeated Map map_list = 1; +} + +message MapGroupHandle { + uint32 identifier = 1; + fixed32 permission = 2; //must use 'Permission' enum +} + +message MapGroup { + MapGroupHandle group_handle = 1; //not set on createMapGroup call + string name = 2; + MappingHandle related_mapping_handle = 3; + MapGroupHandle parent_group_handle = 4; + repeated MapGroupHandle children_map_group_handles = 5; + repeated MapHandle map_handles = 6; + string application_data = 7; +} + +message MapGroupList { + repeated MapGroup map_groups = 1; +} + +message Mapping { + MappingHandle handle = 1; //not set on createMapping call + string name = 2; + uint32 controller_identifier = 3; + MapGroupHandle active_map_group_handle = 4; + repeated MapGroupHandle map_group_handles = 5; + MapHandle active_map_handle = 6; + repeated MapHandle map_handles = 7; + string application_data = 8; +} + +message MappingList { + repeated Mapping mappings = 1; +} + +enum SafetyIdentifier { + UNSPECIFIED_BASE_SAFETY_IDENTIFIER = 0; //0x0 + FIRMWARE_UPDATE_FAILURE = 1; //0x1 + EXTERNAL_COMMUNICATION_ERROR = 2; //0x2 + MAXIMUM_AMBIENT_TEMPERATURE = 4; //0x4 + MAXIMUM_CORE_TEMPERATURE = 8; //0x8 + JOINT_FAULT = 16; //0x10 + CYCLIC_DATA_JITTER = 32; //0x20 + REACHED_MAXIMUM_EVENT_LOGS = 64; //0x40 + NO_KINEMATICS_SUPPORT = 128; //0x80 + ABOVE_MAXIMUM_DOF = 256; //0x100 + NETWORK_ERROR = 512; //0x200 + UNABLE_TO_REACH_POSE = 1024; //0x400 + JOINT_DETECTION_ERROR = 2048; //0x800 + NETWORK_INITIALIZATION_ERROR = 4096; //0x1000 + MAXIMUM_CURRENT = 8192; //0x2000 + MAXIMUM_VOLTAGE = 16384; //0x4000 + MINIMUM_VOLTAGE = 32768; //0x8000 + MAXIMUM_END_EFFECTOR_TRANSLATION_VELOCITY = 65536; //0x10000 + MAXIMUM_END_EFFECTOR_ORIENTATION_VELOCITY = 131072; //0x20000 + MAXIMUM_END_EFFECTOR_TRANSLATION_ACCELERATION = 262144; //0x40000 + MAXIMUM_END_EFFECTOR_ORIENTATION_ACCELERATION = 524288; //0x80000 + MAXIMUM_END_EFFECTOR_TRANSLATION_FORCE = 1048576; //0x100000 + MAXIMUM_END_EFFECTOR_ORIENTATION_FORCE = 2097152; //0x200000 + MAXIMUM_END_EFFECTOR_PAYLOAD = 4194304; //0x400000 + EMERGENCY_STOP_ACTIVATED = 8388608; //0x800000 + EMERGENCY_LINE_ACTIVATED = 16777216; //0x1000000 + INRUSH_CURRENT_LIMITER_FAULT = 33554432; //0x2000000 + NVRAM_CORRUPTED = 67108864; //0x4000000 + INCOMPATIBLE_FIRMWARE_VERSION = 134217728; //0x8000000 + POWERON_SELF_TEST_FAILURE = 268435456; //0x10000000 +} + +message TransformationMatrix { + TransformationRow r0 = 1; + TransformationRow r1 = 2; + TransformationRow r2 = 3; + TransformationRow r3 = 4; +} + +message TransformationRow { + float c0 = 1; + float c1 = 2; + float c2 = 3; + float c3 = 4; +} + +message Pose { + float x = 1; + float y = 2; + float z = 3; + float theta_x = 4; + float theta_y = 5; + float theta_z = 6; +} + +message Position { + float x = 1; + float y = 2; + float z = 3; +} + +message Orientation { + float theta_x = 1; + float theta_y = 2; + float theta_z = 3; +} + +enum JointTrajectoryConstraintType { + UNSPECIFIED_JOINT_CONSTRAINT = 0; + JOINT_CONSTRAINT_DURATION = 1; + JOINT_CONSTRAINT_SPEED = 2; +} + +message CartesianSpeed { + float translation = 1; + float orientation = 2; +} + +message CartesianTrajectoryConstraint { + oneof type { + CartesianSpeed speed = 1; + float duration = 2; + } +} + +message JointTrajectoryConstraint { + JointTrajectoryConstraintType type = 1; + float value = 2; +} + +enum TwistMode { + UNSPECIFIED_TWIST_MODE = 0; + TWIST_TOOL_JOYSTICK = 1; + TWIST_BASE_FRAME_JOYSTICK = 2; + TWIST_CARTESIAN_JOYSTICK = 3; +} + +message Twist { + float linear_x = 1; + float linear_y = 2; + float linear_z = 3; + float angular_x = 4; + float angular_y = 5; + float angular_z = 6; +} + +message Admittance { + AdmittanceMode admittance_mode = 1; +} + +enum AdmittanceMode { + UNSPECIFIED_ADMITTANCE_MODE = 0; + CARTESIAN = 1; + JOINT = 2; + NULL_SPACE = 3; + DISABLED = 4; +} + +message CartesianReferenceFrameRequest { + CartesianReferenceFrame reference_frame = 1; +} + +enum CartesianReferenceFrame { + UNSPECIFIED_CARTESIAN_REFERENCE_FRAME = 0; + MIXED = 1; // translation = base, orientation = tool + TOOL = 2; // translation = tool, orientation = tool +} + +message ConstrainedPose { + Pose target_pose = 1; + CartesianTrajectoryConstraint constraint = 2; +} + +message ConstrainedPosition { + Position target_position = 1; + CartesianTrajectoryConstraint constraint = 2; +} + +message ConstrainedOrientation { + Orientation target_orientation = 1; + CartesianTrajectoryConstraint constraint = 2; +} + +message TwistCommand { + TwistMode mode = 1; + Twist twist = 2; + uint32 duration = 3; //if not 0, allows to set a limit in seconds to the TwistCommand +} + +message ConstrainedJointAngles { + JointAngles joint_angles = 1; + JointTrajectoryConstraint constraint = 2; +} + +message ConstrainedJointAngle { + uint32 joint_identifier = 1; + float value = 2; + JointTrajectoryConstraint constraint = 3; +} + +message JointAngles { + repeated JointAngle joint_angles = 1; +} + +message JointAngle { + uint32 joint_identifier = 1; + float value = 2; +} + +message JointSpeeds { + repeated JointSpeed joint_speeds = 1; + uint32 duration = 2; //if not 0, allows to set a limit in seconds to the JointsSpeed +} + +message JointSpeed { + uint32 joint_identifier = 1; + float value = 2; + uint32 duration = 3; //if not 0, allows to set a limit in seconds to the JointsSpeed +} + +enum GripperMode { + UNSPECIFIED_GRIPPER_MODE = 0; + GRIPPER_FORCE = 1; + GRIPPER_SPEED = 2; + GRIPPER_POSITION = 3; +} + +message GripperCommand { + GripperMode mode = 1; + //in position, admissible values for each finger is between 0...+1.0, where 0 is closed ans 1.0 is fully open + //in speed or torque, admissible values for each finger is between -1.0 and +1.0, where +1.0 corresponds + //to maximum opening speed and -1.0 corresponds to maximum closing speed + Gripper gripper = 2; + uint32 duration = 3;//if not 0, allows to set a limit in seconds to the GripperCommand +} + +message GripperRequest { + GripperMode mode = 1; +} + +message Gripper { + repeated Finger finger = 1; +} + +message Finger { + uint32 finger_identifier = 1; + float value = 2; +} + +enum NavigationDirection { + UNSPECIFIED_NAVIGATION_DIRECTION = 0; + NEXT = 1; + UP = 2; + DOWN = 3; + PREVIOUS = 4; +} + +enum JointNavigationDirection { + UNSPECIFIED_JOINT_NAVIGATION_DIRECTION = 0; + JOINT_NEXT = 1; + JOINT_PREVIOUS = 2; +} + +enum SoundType { + UNSPECIFIED_SOUND_TYPE = 0; + BIP_SERIES = 1; + SINGLE_BIP = 2; +} + +enum LedState { + UNSPECIFIED_LED_STATE = 0; + LED_OFF = 1; + LED_PULSE = 2; + LED_ON = 3; +} + +enum GpioState { + UNSPECIFIED_GPIO_STATE = 0; + GPIO_OFF = 1; + GPIO_PULSE = 2; + GPIO_ON = 3; +} + +message SystemTime { + uint32 sec = 1; //seconds after the minute(0-59) + uint32 min = 2; //minutes after the hour (0-59) + uint32 hour = 3;//hours since mignight (0-23) + uint32 mday = 4;//day of the month (1-31) + uint32 mon = 5; //months since January (0-11) + uint32 year = 6;//years since 1900 +} + +enum Xbox360DigitalInputIdentifier { + UNSPECIFIED_XBOX360_DIGITAL = 0; + XBOX360_PAD_UP = 1; + XBOX360_PAD_DOWN = 2; + XBOX360_PAD_LEFT = 3; + XBOX360_PAD_RIGHT = 4; + XBOX360_FILE_BUTTON_START = 5; + XBOX360_DOCUMENT_BUTTON_BACK = 6; + XBOX360_LEFT_THUMB_BUTTON = 7; + XBOX360_RIGHT_THUMB_BUTTON = 8; + XBOX360_LEFT_SHOULDER = 9; + XBOX360_RIGHT_SHOULDER = 10; + XBOX360_BUTTON_A = 13; + XBOX360_BUTTON_B = 14; + XBOX360_BUTTON_X = 15; + XBOX360_BUTTON_Y = 16; +} + +enum Xbox360AnalogInputIdentifier { + UNSPECIFIED_XBOX360_ANALOG = 0; + XBOX360_THUMB_LEFT_X = 1; + XBOX360_THUMB_LEFT_Y = 2; + XBOX360_THUMB_RIGHT_X = 3; + XBOX360_THUMB_RIGHT_Y = 4; + XBOX360_TRIGGER_LEFT = 5; + XBOX360_TRIGGER_RIGHT = 6; +} + +message ActuatorInformation { + uint32 count = 1; +} + +message ArmStateInformation { + Kinova.Api.Common.ArmState active_state = 1; + Kinova.Api.Common.Connection connection = 2; //connection information of the last processed command which triggered an arm state change +} + +/** + * Message that contains a arm state event + */ + message ArmStateNotification { + Kinova.Api.Common.ArmState active_state = 1; //new arm state + Kinova.Api.Common.Timestamp timestamp = 2; //event timestamp + Kinova.Api.Common.Connection connection = 3; //connection that caused the arm state event +} + diff --git a/kortex_driver/protos/BaseCyclic.proto b/kortex_driver/protos/BaseCyclic.proto new file mode 100644 index 00000000..31dc504c --- /dev/null +++ b/kortex_driver/protos/BaseCyclic.proto @@ -0,0 +1,195 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.BaseCyclic; + +service BaseCyclic { //@PROXY_ID=3 @ERROR=Kinova.Api.Error + rpc Refresh (Command) returns (Feedback); //@RPC_ID=1 + rpc RefreshCommand (Command) returns (Kinova.Api.Common.Empty); //@RPC_ID=2 + rpc RefreshFeedback (Kinova.Api.Common.Empty) returns (Feedback); //@RPC_ID=3 + rpc RefreshCustomData (CustomData) returns (CustomData); //@RPC_ID=4 +} + +enum ServiceVersion +{ + RESERVED_0 = 0; // Reserved + CURRENT_VERSION = 1; // Current Version +} + +//copied from ActuatorCyclic.proto +message ActuatorCommand +{ + fixed32 command_id = 1; // Command ID (first 2 bytes : device ID, last 2 bytes : sequence number) + fixed32 flags = 2; // Flags + float position = 3; // Desired position of the actuator in degrees + float velocity = 4; // Desired velocity of the actuator in degrees per second + float torque_joint = 5; // Desired torque of the actuator in Newton*meters + float current_motor = 6; // Desired current of the motor in Amperes +} + +//copied from InterconnectCyclic.proto +message InterconnectCommand +{ + fixed32 command_id = 1; // Command ID (first 2 bytes : device ID, last 2 bytes : sequence number) + fixed32 flags = 2; // Flags + float position = 3; // Desired position of the gripper fingers in percentage (0-100%) + float velocity = 4; // Desired velocity of the gripper fingers in percentage (0-100%) + float force = 5; // Desired force of the gripper fingers in percentage (0-100%) +} + +//copied from ActuatorCyclic.proto +message ActuatorFeedback +{ + fixed32 command_id = 1; // Command ID (first 2 bytes : device ID, last 2 bytes : sequence number) + fixed32 status_flags = 2; // Status flags + fixed32 jitter_comm = 3; // Jitter from the communication in microseconds + float position = 4; // Position of the actuator in degrees + float velocity = 5; // Velocity of the actuator in degrees per second + float torque = 6; // Torque of the actuator in Newton*meters + float current_motor = 7; // Current of the motor in Amperes + float voltage = 8; // Voltage of the main board in Volts + float temperature_motor = 9; // Motor temperature (average of the three (3) temperatures) + float temperature_core = 10; // Microcontroller temperature in degrees celsius + fixed32 fault_bank_a = 11; // Fault bank A + fixed32 fault_bank_b = 12; // Fault bank B + fixed32 warning_bank_a = 13; // Warning bank A + fixed32 warning_bank_b = 14; // Warning bank B +} + +//copied from InterconnectCyclic.proto +message InterconnectFeedback +{ + fixed32 command_id = 1; // Command ID (first 2 bytes : device ID, last 2 bytes : sequence number) + fixed32 status_flags = 2; // Status flags + fixed32 jitter_comm = 3; // Jitter from the communication in microseconds + float position = 4; // Position of the gripper fingers in percentage (0-100%) + float velocity = 5; // Velocity of the gripper fingers in percentage (0-100%) + float force = 6; // Force of the gripper fingers in percentage (0-100%) + float imu_acceleration_x = 7; // IMU Measured acceleration (X-Axis) of the interconnect in Meter / Second ^ squared + float imu_acceleration_y = 8; // IMU Measured acceleration (Y-Axis) of the interconnect in Meter / Second ^ squared + float imu_acceleration_z = 9; // IMU Measured acceleration (Z-Axis) of the interconnect in Meter / Second ^ squared + float imu_angular_velocity_x = 10; // IMU Measured angular velocity (X-Axis) of the interconnect in Degree / Second + float imu_angular_velocity_y = 11; // IMU Measured angular velocity (Y-Axis) of the interconnect in Degree / Second + float imu_angular_velocity_z = 12; // IMU Measured angular velocity (Z-Axis) of the interconnect in Degree / Second + float voltage = 13; // Voltage of the main board in Volt + float temperature_core = 14; // Microcontroller temperature in degree celsius + fixed32 fault_bank_a = 15; // Fault bank A + fixed32 fault_bank_b = 16; // Fault bank B + fixed32 warning_bank_a = 17; // Warning bank A + fixed32 warning_bank_b = 18; // Warning bank B +} + + +//copied from ActuatorCyclic.proto +message ActuatorCustomData +{ + fixed32 command_id = 1; // Command ID (first 2 bytes : device ID, last 2 bytes : sequence number) + fixed32 custom_data_0 = 2; // Custom data word 0 + fixed32 custom_data_1 = 3; // Custom data word 1 + fixed32 custom_data_2 = 4; // Custom data word 2 + fixed32 custom_data_3 = 5; // Custom data word 3 + fixed32 custom_data_4 = 6; // Custom data word 4 + fixed32 custom_data_5 = 7; // Custom data word 5 + fixed32 custom_data_6 = 8; // Custom data word 6 + fixed32 custom_data_7 = 9; // Custom data word 7 + fixed32 custom_data_8 = 10; // Custom data word 8 + fixed32 custom_data_9 = 11; // Custom data word 9 + fixed32 custom_data_10 = 12; // Custom data word 10 + fixed32 custom_data_11 = 13; // Custom data word 11 + fixed32 custom_data_12 = 14; // Custom data word 12 + fixed32 custom_data_13 = 15; // Custom data word 13 + fixed32 custom_data_14 = 16; // Custom data word 14 + fixed32 custom_data_15 = 17; // Custom data word 15 +} + +//copied from InterconnectCyclic.proto +message InterconnectCustomData +{ + fixed32 command_id = 1; // Command ID (first 2 bytes : device ID, last 2 bytes : sequence number) + fixed32 custom_data_0 = 2; // Custom data word 0 + fixed32 custom_data_1 = 3; // Custom data word 1 + fixed32 custom_data_2 = 4; // Custom data word 2 + fixed32 custom_data_3 = 5; // Custom data word 3 + fixed32 custom_data_4 = 6; // Custom data word 4 + fixed32 custom_data_5 = 7; // Custom data word 5 + fixed32 custom_data_6 = 8; // Custom data word 6 + fixed32 custom_data_7 = 9; // Custom data word 7 + fixed32 custom_data_8 = 10; // Custom data word 8 + fixed32 custom_data_9 = 11; // Custom data word 9 + fixed32 custom_data_10 = 12; // Custom data word 10 + fixed32 custom_data_11 = 13; // Custom data word 11 + fixed32 custom_data_12 = 14; // Custom data word 12 + fixed32 custom_data_13 = 15; // Custom data word 13 + fixed32 custom_data_14 = 16; // Custom data word 14 + fixed32 custom_data_15 = 17; // Custom data word 15 +} + +message BaseFeedback +{ + uint32 active_state_connection_identifier= 1; // Connection identifier of the last processed command which triggered an arm state change + Kinova.Api.Common.ArmState active_state = 2; // Active state of the arm + float arm_voltage = 3; // Arm current in Volts + float arm_current = 4; // Arm voltage in Amperes + float temperature_cpu = 5; // CPU temperature in degree Celcius + float temperature_ambient = 6; // Ambient temperature in degree Celcius + float imu_acceleration_x = 7; // IMU Measured acceleration (X-Axis) of the base in meter per second squared + float imu_acceleration_y = 8; // IMU Measured acceleration (Y-Axis) of the base in meter per second squared + float imu_acceleration_z = 9; // IMU Measured acceleration (Z-Axis) of the base in meter per second squared + float imu_angular_velocity_x = 10; // IMU Measured angular velocity (X-Axis) of the base in degree per second + float imu_angular_velocity_y = 11; // IMU Measured angular velocity (Y-Axis) of the base in degree per second + float imu_angular_velocity_z = 12; // IMU Measured angular velocity (Z-Axis) of the base in degree per second + float tool_pose_x = 13; // Measured cartesian position (X-Axis) of the End Effector (EE) in meter + float tool_pose_y = 14; // Measured cartesian position (Y-Axis) of the End Effector (EE) in meter + float tool_pose_z = 15; // Measured cartesian position (Z-Axis) of the End Effector (EE) in meter + float tool_pose_theta_x = 16; // Measured cartesian orientation (X-Axis) of the End Effector (EE) in degree + float tool_pose_theta_y = 17; // Measured cartesian orientation (Y-Axis) of the End Effector (EE) in degree + float tool_pose_theta_z = 18; // Measured cartesian orientation (Z-Axis) of the End Effector (EE) in degree + float tool_twist_linear_x = 19; // Measured cartesian linear velocity (X-Axis) of the End Effector (EE) in meter + float tool_twist_linear_y = 20; // Measured cartesian linear velocity (Y-Axis) of the End Effector (EE) in meter + float tool_twist_linear_z = 21; // Measured cartesian linear velocity (Z-Axis) of the End Effector (EE) in meter + float tool_twist_angular_x = 22; // Measured cartesian angular velocity (X-Axis) of the End Effector (EE) in degree per second + float tool_twist_angular_y = 23; // Measured cartesian angular velocity (Y-Axis) of the End Effector (EE) in degree per second + float tool_twist_angular_z = 24; // Measured cartesian angular velocity (Z-Axis) of the End Effector (EE) in degree per second + float tool_external_wrench_force_x = 25; // Calculated force in X-Axis from external wrench float in Newton + float tool_external_wrench_force_y = 26; // Calculated force in Y-Axis from external wrench float in Newton + float tool_external_wrench_force_z = 27; // Calculated force in Z-Axis from external wrench float in Newton + float tool_external_wrench_torque_x = 28; // Calculated torque about X-axis from external wrench float in Newton * Meter + float tool_external_wrench_torque_y = 29; // Calculated torque about Y-axis from external wrench float in Newton * Meter + float tool_external_wrench_torque_z = 30; // Calculated torque about Z-axis from external wrench float in Newton * Meter + fixed32 fault_bank_a = 31; // The Arm Fault flags bank A (0 if no fault) see Base.SafetyIdentifier + fixed32 fault_bank_b = 32; // The Arm Fault flags bank B (0 if no fault) see Base.SafetyIdentifier + fixed32 warning_bank_a = 33; // The Arm Warning flags bank A (0 if no warning) see Base.SafetyIdentifier + fixed32 warning_bank_b = 34; // The Arm Warning flags bank B (0 if no warning) see Base.SafetyIdentifier +} + +// Custom development data, content varies according to debug needs +message CustomData +{ + fixed32 frame_id = 1; // Frame ID + fixed32 custom_data_0 = 2; // Custom data word 0 + fixed32 custom_data_1 = 3; // Custom data word 1 + fixed32 custom_data_2 = 4; // Custom data word 2 + fixed32 custom_data_3 = 5; // Custom data word 3 + fixed32 custom_data_4 = 6; // Custom data word 4 + fixed32 custom_data_5 = 7; // Custom data word 5 + fixed32 custom_data_6 = 8; // Custom data word 6 + fixed32 custom_data_7 = 9; // Custom data word 7 + repeated ActuatorCustomData actuators_custom_data = 10; // Actuator custom data (repeated) + InterconnectCustomData interconnect_custom_data = 11; // Interconnect custom data +} + +message Command +{ + fixed32 frame_id = 1; // Frame ID + repeated ActuatorCommand actuators = 2; // Actuator command (repeated) + InterconnectCommand interconnect = 3; // Interconnect command +} + +message Feedback +{ + fixed32 frame_id = 1; // Frame ID + BaseFeedback base = 2; // Base feedback + repeated ActuatorFeedback actuators = 3; // Actuator feedback + InterconnectFeedback interconnect = 4; // Interconnect feedback +} diff --git a/kortex_driver/protos/Common.options b/kortex_driver/protos/Common.options new file mode 100644 index 00000000..5f3020ab --- /dev/null +++ b/kortex_driver/protos/Common.options @@ -0,0 +1,4 @@ +Kinova.Api.Common.DeviceTypes long_names:false +Kinova.Api.Common.SafetyStatusValue long_names:false +Kinova.Api.Common.NotificationType long_names:false +Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_driver/protos/Common.proto b/kortex_driver/protos/Common.proto new file mode 100644 index 00000000..50f762ec --- /dev/null +++ b/kortex_driver/protos/Common.proto @@ -0,0 +1,152 @@ +syntax = "proto3"; + +package Kinova.Api.Common; + +/** + * list of possible device types + */ +enum DeviceTypes { + UNSPECIFIED_DEVICE_TYPE = 0; + BASE = 1; + VISION = 2; + BIG_ACTUATOR = 3; + SMALL_ACTUATOR = 4; + INTERCONNECT = 5; + GRIPPER = 6; +} + +/** +* Message contains information about a device - device type, device identifier, and the order of the device within the robot +*/ +message DeviceHandle { + DeviceTypes device_type = 1; + uint32 device_identifier = 2; // Unique device identifier (used with other services) + uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation +} + +/** + * list of possible safety statuses + */ +enum SafetyStatusValue { + UNSPECIFIED = 0; + WARNING = 1; //warning safety reached + ERROR = 2; //error safety reached + NORMAL = 3; //safety is off +} + +/** + * Enumeration used as bitfields wih permission field + */ +enum Permission { + NO_PERMISSION = 0; + READ_PERMISSION = 1; //refers to a user's capability to read the entity + UPDATE_PERMISSION = 2;//refers to a user's capability to write or modify the entity + DELETE_PERMISSION = 4; //refers to a user's capability to delete the entity +} + +/** + * list of notification types + */ +enum NotificationType { + UNSPECIFIED_NOTIFICATION_TYPE = 0; + THRESHOLD = 1; + FIX_RATE = 2; + EVENT = 3; //Event type. Only this one is supported for now +} + +/** + * list of units used throughout API methods + */ +enum Unit { + UNSPECIFIED_UNIT = 0; + CELSIUS = 1; + AMPERE = 2; + VOLT = 3; + METER_PER_SECOND = 4; + DEGREE_PER_SECOND = 5; + METER_PER_SECOND_2 = 6; + DEGREE_PER_SECOND_2 = 7; + NEWTON = 8; + NEWTON_METER =9; + KILOGRAM = 10; + DEGREE = 11; + TICK = 12; + DEGREE_PER_MILLISECOND = 13; +} + +/** + * Message used when no information needs to be exchanged between client application and robot, and vice versa + */ +message Empty { +} + +/** + * Notification options + */ +message NotificationOptions { + NotificationType type = 1; //type of notification + uint32 rate_m_sec = 2; + float threshold_value = 3; +} + +/** + * Handle to a safety + */ +message SafetyHandle { + uint32 identifier = 1; +} + +/** + * Handle to a notification + */ +message NotificationHandle { + uint32 identifier = 1; +} + +/** + * Message that contains a Safety event + */ +message SafetyNotification { + SafetyHandle safety_handle = 1; //safety handle + SafetyStatusValue value = 2; //new safety status + Timestamp timestamp = 3; //event timestamp + UserProfileHandle user_handle = 4; //user that caused the safety event + Connection connection = 5; // connection that caused the safety event +} + +/** + * Timestamp based on epoch + */ +message Timestamp { + uint32 sec = 1; //epoch in seconds since 1970 + uint32 usec = 2;//microseconds after the second (0-999999) +} + +/** + * Handle to an existing User Profile. + */ +message UserProfileHandle { + uint32 identifier = 1; //User profile identifier + fixed32 permission = 2; //must use 'Permission' as bitwise +} + +message Connection { + UserProfileHandle user_handle = 1; //user profile handle, or set to zero if no user logged in + string connection_information = 2; //connection info (ex. IP address with port number) + uint32 connection_identifier = 3; //connection identifier +} + +enum ArmState +{ + UNSPECIFIED_ARM_STATE = 0; + BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection + IDLE = 2; + ARM_INITIALIZATION = 3; + ARM_IN_FAULT = 4; + ARM_MAINTENANCE = 5; + ARM_SERVOING_LOW_LEVEL = 6; + ARM_SERVOING_READY = 7; + ARM_SERVOING_PLAYING_SEQUENCE = 8; + ARM_SERVOING_MANUALLY_CONTROLLED = 9; + RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly +} \ No newline at end of file diff --git a/kortex_driver/protos/Errors.options b/kortex_driver/protos/Errors.options new file mode 100644 index 00000000..6b230f88 --- /dev/null +++ b/kortex_driver/protos/Errors.options @@ -0,0 +1,2 @@ +Kinova.Api.ErrorCodes long_names:false +Kinova.Api.SubErrorCodes long_names:false diff --git a/kortex_driver/protos/Errors.proto b/kortex_driver/protos/Errors.proto new file mode 100644 index 00000000..6296884c --- /dev/null +++ b/kortex_driver/protos/Errors.proto @@ -0,0 +1,118 @@ +syntax = "proto3"; + +package Kinova.Api; + + +enum ErrorCodes { + SUCCESS = 0; //no errors + ERROR_PROTOCOL_SERVER = 1; //protocol server errors + ERROR_PROTOCOL_CLIENT = 2; //protocol client errors + ERROR_DEVICE = 3; //device errors + ERROR_INTERNAL = 4; //internal errors +} + +enum SubErrorCodes { + + SUB_SUCCESS = 0; //no sub errors + FAILED = 1; //failed method + UNIMPLEMENTED = 2; //unimplemented method + INVALID_PARAM = 3; //invalid parameter + + UNSUPPORTED_SERVICE = 4; //service not recognized + UNSUPPORTED_METHOD = 5; //method not recognized + TOO_LARGE_ENCODED_FRAME_BUFFER = 6; //encoded frame bigger than what transport permits + FRAME_ENCODING_ERR = 7; //unable to encode frame + FRAME_DECODING_ERR = 8; //unable to decode frame + INCOMPATIBLE_HEADER_VERSION = 9; //frame header version differs from what is expected and is considered incompatible + UNSUPPORTED_FRAME_TYPE = 10; //unrecognized frame type + UNREGISTERED_NOTIFICATION_RECEIVED = 11;//server receiving unregistered notification + INVALID_SESSION = 12; //session not recognized + PAYLOAD_DECODING_ERR = 13; //unable to decode payload + UNREGISTERED_FRAME_RECEIVED = 14; //client received a response for which it did not send an RPC call + + INVALID_PASSWORD = 15; //password does not match specified user + USER_NOT_FOUND = 16; //unrecognized user + + ENTITY_NOT_FOUND = 17; //cannot find entity + + ROBOT_MOVEMENT_IN_PROGRESS = 18; //robot refuses new control command because robot movement in progress + ROBOT_NOT_MOVING = 19; //robot refuses stop command because robot is not moving + + NO_MORE_STORAGE_SPACE = 20; //Unable to execute because no more storage + + ROBOT_NOT_READY = 21; //robot initialization is not complete + ROBOT_IN_FAULT = 22; //robot in fault + ROBOT_IN_MAINTENANCE = 23; //robot in maintenance + ROBOT_IN_UPDATE_MODE = 24; //robot in update + ROBOT_IN_EMERGENCY_STOP = 25; //robot in emergency stop state + + SINGLE_LEVEL_SERVOING = 26; //robot is in single level servoing mode + LOW_LEVEL_SERVOING = 27; //robot is in low level servoing mode + + MAPPING_GROUP_NON_ROOT = 28; //trying to add a non-root MapGroup to Mapping + MAPPING_INVALID_GROUP = 29; //trying to add an invalid or non-existent MapGroup to Mapping + MAPPING_INVALID_MAP = 30; //trying to add an invalid or non-existent Map to Mapping + MAP_GROUP_INVALID_MAP = 31; //trying to add an invalid or non-existent Map to MapGroup + MAP_GROUP_INVALID_PARENT = 32; //trying to add a MapGroup under an invalid parent + MAP_GROUP_INVALID_CHILD = 33; //trying to add an invalid or non-existent to MapGroup + MAP_GROUP_INVALID_MOVE = 34; //trying to change a MapGroup's parent: move not supported + MAP_IN_USE = 35; //deleting a Map used in a Mapping or MapGroup + + WIFI_CONNECT_ERROR = 36; //unable to connect to specified Wifi network + UNSUPPORTED_NETWORK_TYPE = 37; //unsupported network type + TOO_LARGE_ENCODED_PAYLOAD_BUFFER = 38; //encoded payload bigger than what transport permits + + UPDATE_PERMISSION_DENIED = 39; // attempting update command on non-updatable entity + DELETE_PERMISSION_DENIED = 40; // attempting delete command on non-deletable entity + DATABASE_ERROR = 41; // internal DB error + + UNSUPPORTED_OPTION = 42; // option not supported + UNSUPPORTED_RESOLUTION = 43; // resolution not supported + UNSUPPORTED_FRAME_RATE = 44; // frame rate not supported + UNSUPPORTED_BIT_RATE = 45; // bit rate not supported + UNSUPPORTED_ACTION = 46; // action not supported (generic, when an action is not supported for a particular item) + UNSUPPORTED_FOCUS_ACTION = 47; // focus action not supported + VALUE_IS_ABOVE_MAXIMUM = 48; // specified value is above the supported maximum + VALUE_IS_BELOW_MINIMUM = 49; // specified value is below the supported minimum + + DEVICE_DISCONNECTED = 50; // device is not connected + DEVICE_NOT_READY = 51; // device is not ready + + INVALID_DEVICE = 52; // device id is invalid during bridging + + SAFETY_THRESHOLD_REACHED = 53; // safety threshold is reached therefore safety is on + + INVALID_USER_SESSION_ACCESS = 54; // service or function access not allowed: out of session or level access + + CONTROL_MANUAL_STOP = 55; // Manually stopped sequence or action + CONTROL_OUTSIDE_WORKSPACE = 56; // Cartesian Position Commanded is outside Robot Workspace + CONTROL_ACTUATOR_COUNT_MISMATCH = 57; // Number of constraint sent does not correspond to number of actuator (ex: joint speed) + CONTROL_INVALID_DURATION = 58; // Duration constraint is too short. The robot would need out of limit speeds/accelerations to reach this duration. + CONTROL_INVALID_SPEED = 59; // Speed Constraint is negative + CONTROL_LARGE_SPEED = 60; // Speed Constraint is too high (exceed speed limit of leads to high acceleration) + CONTROL_INVALID_ACCELERATION = 61; // Speed Constraint is too high Or Duration constraint too short and leads to high acceleration + CONTROL_INVALID_TIME_STEP = 62; // Refresh rate is smaller than the duration of the trajectory + CONTROL_LARGE_SIZE = 63; // Duration of the trajectory is more than 100s. The length of the trajectory is limited to 100000 points to avoid saturating the Base memory + CONTROL_WRONG_MODE = 64; // Control Mode is not a Trajectory Mode + CONTROL_JOINT_POSITION_LIMIT = 65; // The commanded configuration contains at least one actuator which is out of its physical limits + CONTROL_NO_FILE_IN_MEMORY = 66; // Trajectory is not computed and try to be started + CONTROL_INDEX_OUT_OF_TRAJECTORY = 67; // Attempting to read a point of the trajectory with an index higher than the number of point in trajectory point list + CONTROL_ALREADY_RUNNING = 68; // Trajectory is already running + CONTROL_WRONG_STARTING_POINT = 69; // Robot is not on the first point of the trajectory when we try to start the trajectory. This can happen if there is a motion between the moment when trajectory is computed and when it is started + CONTROL_CARTESIAN_CANNOT_START = 70; // Cannot start + CONTROL_UNDEFINED_CONSTRAINT = 71; // Kontrol Library is not initialized + CONTROL_UNINITIALIZED = 72; // Contraint sent is not defined + CONTROL_NO_ACTION = 73; // Action does not exist + CONTROL_UNDEFINED = 74; // Undefined error + + WRONG_SERVOING_MODE = 75; //robot is in not in the right servoing mode + + USERNAME_LENGTH_EXCEEDED = 100; // User profile username length exceeds maximum allowed length + FIRSTNAME_LENGTH_EXCEEDED = 101; // User profile first name length exceeds maximum allowed length + LASTNAME_LENGTH_EXCEEDED = 102; // User profile last name length exceeds maximum allowed length + PASSWORD_LENGTH_EXCEEDED = 103; // User profile password length exceeds maximum allowed length + USERNAME_ALREADY_EXISTS = 104; // User profile username already in use by another profile + USERNAME_EMPTY = 105; // User profile empty username not allowed + PASSWORD_NOT_CHANGED = 106; // Change password both passwords are the same + MAXIMUM_USER_PROFILES_USED = 107; // Maximum number of user profiles in use +} diff --git a/kortex_driver/readme.md b/kortex_driver/readme.md new file mode 100644 index 00000000..14a32602 --- /dev/null +++ b/kortex_driver/readme.md @@ -0,0 +1,107 @@ + +# Kortex Driver + + + +1. [Content](#content) + 1. [build](#build) + 1. [msg](#msg) + 1. [non_generated](#non_generated) + 1. [protos](#protos) + 1. [src](#src) + 1. [srv](#srv) + 1. [non_generated](#non_generated-1) + 1. [templates](#templates) +1. [How to start the node](#how-to-start-the-node) +1. [Generation](#generation) + + + + + +## Content + +### build +This folder's only purpose is to exist as a temp folder during the generation. It should not be used. + +### msg +This folder contains every custom message used by the node **kortex\_driver**. All the .msg files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .msg files used by the node **kortex\_driver**. + +| MSG | Description | +|:---:|:---:| +| ApiOptions.msg | A set of option that is supported by the Kortex API. It is used with the service SetApiOptions. For now there is only one option called tiemout_ms and it lets the user set a timeout value on every next service call. | +| KortexError.msg | Describe the topic /KortexError. Every service call of the node kortex_driver will publish in /KortexError everytime the Kortex API returns an error. | + + +### protos +This folder contains the protobuf files from where the MSG, SRV and sources files are generated. The content of this folder should not be modified. + +### src +This folder contains all the generated source files needed to build the node. The content of this folder should not be modified. + +### srv +This folder contains every custom service used by the node **kortex\_driver**. All the .srv files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .srv files used by the node **kortex\_driver**. + +| SRV | Description | +|:---:|:---:| +| SetApiOptions.srv | It modifies the api options of the Kortex API. Once this service is called, the options set will affect every future call to the node. | +| SetDeviceID.srv | It modifies the target device (device routing feature) of the node. The default value is 0.| + + +### templates +This folder contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the [Generation](#generation) section. + +| JINJA2 files | Description | +|:---:|:---:| +| main.jinja2 | Use to generate src/main.cpp | +| NodeServices.cpp.jinja2 | Use to generate src/node.cpp | +| NodeServices.h.jinja2 | Use to generate src/node.h | +| proto_converterCPP.jinja2 | Use to generate every src/*_proto\_converter.cpp files | +| proto_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_converterCPP.jinja2 | Use to generate every src/*_ros\_converter.cpp files | +| ros_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_enum.jinja2 | Use to generate every msg/*.msg files that represent a protobuf enum | +| ros_message.jinja2 | Use to generate every msg/*.msg files that represent a protobuf message | +| ros_oneof.jinja2 | Use to generate every msg/*.msg files that represent a protobuf oneof | +| ros_service.jinja2 | Use to generate every msg/*.msg files that represent a protobuf RPC | + + +## How to start the node + +rosrun kortex\_driver kortex\_driver 192.168.1.10 100 + +In the command above, you would be running the kortex_driver node on an Gen3 robot with an IP address of 192.168.1.10. The cyclic data would be refreshed at 100 Hz. + + +## Generation +

      +The generation process is based on a custom protoc plugin. Basically, most of the generation process is in the Python file RosGeneration.py located at the package root folder. Before launching the generation make sure you have the python module Jinja2 installed on your computer. +

      + +To launch the generation of this package: + +1. Open a terminal window. +1. Browse the root of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_driver/ +1. Make sure that the file kortex_driver.sh can be executed. If not then chmod +x kortex_driver.sh +1. Run this command: protoc --plugin=protoc-gen-custom=kortex_driver.sh -I./protos/ --custom_out=./build ./protos/\*.prot +1. The result of the generation should be on thos folder: + * /src + * /msg + * /srv + diff --git a/kortex_driver/src/base_proto_converter.cpp b/kortex_driver/src/base_proto_converter.cpp new file mode 100644 index 00000000..146830e7 --- /dev/null +++ b/kortex_driver/src/base_proto_converter.cpp @@ -0,0 +1,1227 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "base_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_driver::FullUserProfile input, FullUserProfile *output) +{ + ToProtoData(input.user_profile, output->mutable_user_profile()); + output->set_password(input.password); + + return 0; +} +int ToProtoData(kortex_driver::UserProfile input, UserProfile *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_username(input.username); + output->set_firstname(input.firstname); + output->set_lastname(input.lastname); + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::UserProfileList input, UserProfileList *output) +{ + output->clear_user_profiles(); + for(int i = 0; i < input.user_profiles.size(); i++) + { + ToProtoData(input.user_profiles[i], output->add_user_profiles()); + } + + return 0; +} +int ToProtoData(kortex_driver::UserList input, UserList *output) +{ + output->clear_user_handles(); + for(int i = 0; i < input.user_handles.size(); i++) + { + ToProtoData(input.user_handles[i], output->add_user_handles()); + } + + return 0; +} +int ToProtoData(kortex_driver::PasswordChange input, PasswordChange *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_old_password(input.old_password); + output->set_new_password(input.new_password); + + return 0; +} +int ToProtoData(kortex_driver::SequenceHandle input, SequenceHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::AdvancedSequenceHandle input, AdvancedSequenceHandle *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_in_loop(input.in_loop); + + return 0; +} +int ToProtoData(kortex_driver::SequenceTaskHandle input, SequenceTaskHandle *output) +{ + ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); + output->set_task_index(input.task_index); + + return 0; +} +int ToProtoData(kortex_driver::SequenceTask input, SequenceTask *output) +{ + output->set_group_identifier(input.group_identifier); + ToProtoData(input.action, output->mutable_action()); + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::Sequence input, Sequence *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_application_data(input.application_data); + output->clear_tasks(); + for(int i = 0; i < input.tasks.size(); i++) + { + ToProtoData(input.tasks[i], output->add_tasks()); + } + + return 0; +} +int ToProtoData(kortex_driver::SequenceList input, SequenceList *output) +{ + output->clear_sequence_list(); + for(int i = 0; i < input.sequence_list.size(); i++) + { + ToProtoData(input.sequence_list[i], output->add_sequence_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::AppendActionInformation input, AppendActionInformation *output) +{ + ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); + ToProtoData(input.action, output->mutable_action()); + + return 0; +} +int ToProtoData(kortex_driver::ActionHandle input, ActionHandle *output) +{ + output->set_identifier(input.identifier); + output->set_action_type((Kinova::Api::Base::ActionType)input.action_type); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::RequestedActionType input, RequestedActionType *output) +{ + output->set_action_type((Kinova::Api::Base::ActionType)input.action_type); + + return 0; +} +int ToProtoData(kortex_driver::Action input, Action *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_application_data(input.application_data); + + if(input.oneof_action_parameters.send_twist_command.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_twist_command[0], output->mutable_send_twist_command()); + } + if(input.oneof_action_parameters.send_joint_speeds.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_joint_speeds[0], output->mutable_send_joint_speeds()); + } + if(input.oneof_action_parameters.reach_pose.size() > 0) + { + ToProtoData(input.oneof_action_parameters.reach_pose[0], output->mutable_reach_pose()); + } + if(input.oneof_action_parameters.reach_joint_angles.size() > 0) + { + ToProtoData(input.oneof_action_parameters.reach_joint_angles[0], output->mutable_reach_joint_angles()); + } + if(input.oneof_action_parameters.toggle_admittance_mode.size() > 0) + { + output->set_toggle_admittance_mode((AdmittanceMode)input.oneof_action_parameters.toggle_admittance_mode[0]); + } + if(input.oneof_action_parameters.switch_control_mapping.size() > 0) + { + ToProtoData(input.oneof_action_parameters.switch_control_mapping[0], output->mutable_switch_control_mapping()); + } + if(input.oneof_action_parameters.navigate_joints.size() > 0) + { + output->set_navigate_joints((JointNavigationDirection)input.oneof_action_parameters.navigate_joints[0]); + } + if(input.oneof_action_parameters.navigate_mappings.size() > 0) + { + output->set_navigate_mappings((NavigationDirection)input.oneof_action_parameters.navigate_mappings[0]); + } + if(input.oneof_action_parameters.change_twist.size() > 0) + { + ToProtoData(input.oneof_action_parameters.change_twist[0], output->mutable_change_twist()); + } + if(input.oneof_action_parameters.change_joint_speeds.size() > 0) + { + ToProtoData(input.oneof_action_parameters.change_joint_speeds[0], output->mutable_change_joint_speeds()); + } + if(input.oneof_action_parameters.apply_emergency_stop.size() > 0) + { + ToProtoData(input.oneof_action_parameters.apply_emergency_stop[0], output->mutable_apply_emergency_stop()); + } + if(input.oneof_action_parameters.clear_faults.size() > 0) + { + ToProtoData(input.oneof_action_parameters.clear_faults[0], output->mutable_clear_faults()); + } + if(input.oneof_action_parameters.delay.size() > 0) + { + ToProtoData(input.oneof_action_parameters.delay[0], output->mutable_delay()); + } + if(input.oneof_action_parameters.execute_action.size() > 0) + { + ToProtoData(input.oneof_action_parameters.execute_action[0], output->mutable_execute_action()); + } + if(input.oneof_action_parameters.send_gripper_command.size() > 0) + { + ToProtoData(input.oneof_action_parameters.send_gripper_command[0], output->mutable_send_gripper_command()); + } + if(input.oneof_action_parameters.stop_action.size() > 0) + { + ToProtoData(input.oneof_action_parameters.stop_action[0], output->mutable_stop_action()); + } + + + return 0; +} +int ToProtoData(kortex_driver::SwitchControlMapping input, SwitchControlMapping *output) +{ + output->set_controller_identifier(input.controller_identifier); + ToProtoData(input.map_group_handle, output->mutable_map_group_handle()); + ToProtoData(input.map_handle, output->mutable_map_handle()); + + return 0; +} +int ToProtoData(kortex_driver::ChangeTwist input, ChangeTwist *output) +{ + output->set_linear(input.linear); + output->set_angular(input.angular); + + return 0; +} +int ToProtoData(kortex_driver::ChangeJointSpeeds input, ChangeJointSpeeds *output) +{ + ToProtoData(input.joint_speeds, output->mutable_joint_speeds()); + + return 0; +} +int ToProtoData(kortex_driver::EmergencyStop input, EmergencyStop *output) +{ + + return 0; +} +int ToProtoData(kortex_driver::Faults input, Faults *output) +{ + + return 0; +} +int ToProtoData(kortex_driver::Delay input, Delay *output) +{ + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::Stop input, Stop *output) +{ + + return 0; +} +int ToProtoData(kortex_driver::ActionList input, ActionList *output) +{ + output->clear_action_list(); + for(int i = 0; i < input.action_list.size(); i++) + { + ToProtoData(input.action_list[i], output->add_action_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::Timeout input, Timeout *output) +{ + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::Ssid input, Ssid *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::CommunicationInterfaceConfiguration input, CommunicationInterfaceConfiguration *output) +{ + output->set_type((Kinova::Api::Base::NetworkType)input.type); + output->set_enable(input.enable); + + return 0; +} +int ToProtoData(kortex_driver::NetworkHandle input, NetworkHandle *output) +{ + output->set_type((Kinova::Api::Base::NetworkType)input.type); + + return 0; +} +int ToProtoData(kortex_driver::IPv4Configuration input, IPv4Configuration *output) +{ + output->set_ip_address(input.ip_address); + output->set_subnet_mask(input.subnet_mask); + output->set_default_gateway(input.default_gateway); + output->set_dhcp_enabled(input.dhcp_enabled); + + return 0; +} +int ToProtoData(kortex_driver::IPv4Information input, IPv4Information *output) +{ + output->set_ip_address(input.ip_address); + output->set_subnet_mask(input.subnet_mask); + output->set_default_gateway(input.default_gateway); + + return 0; +} +int ToProtoData(kortex_driver::FullIPv4Configuration input, FullIPv4Configuration *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.ipv4_configuration, output->mutable_ipv4_configuration()); + + return 0; +} +int ToProtoData(kortex_driver::WifiInformation input, WifiInformation *output) +{ + ToProtoData(input.ssid, output->mutable_ssid()); + output->set_security_type(input.security_type); + output->set_encryption_type(input.encryption_type); + output->set_signal_quality((Kinova::Api::Base::SignalQuality)input.signal_quality); + output->set_signal_strength(input.signal_strength); + output->set_frequency(input.frequency); + output->set_channel(input.channel); + + return 0; +} +int ToProtoData(kortex_driver::WifiInformationList input, WifiInformationList *output) +{ + output->clear_wifi_information_list(); + for(int i = 0; i < input.wifi_information_list.size(); i++) + { + ToProtoData(input.wifi_information_list[i], output->add_wifi_information_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::WifiConfiguration input, WifiConfiguration *output) +{ + ToProtoData(input.ssid, output->mutable_ssid()); + output->set_security_key(input.security_key); + output->set_connect_automatically(input.connect_automatically); + + return 0; +} +int ToProtoData(kortex_driver::WifiConfigurationList input, WifiConfigurationList *output) +{ + output->clear_wifi_configuration_list(); + for(int i = 0; i < input.wifi_configuration_list.size(); i++) + { + ToProtoData(input.wifi_configuration_list[i], output->add_wifi_configuration_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneHandle input, ProtectionZoneHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::RotationMatrixRow input, RotationMatrixRow *output) +{ + output->set_column1(input.column1); + output->set_column2(input.column2); + output->set_column3(input.column3); + + return 0; +} +int ToProtoData(kortex_driver::RotationMatrix input, RotationMatrix *output) +{ + ToProtoData(input.row1, output->mutable_row1()); + ToProtoData(input.row2, output->mutable_row2()); + ToProtoData(input.row3, output->mutable_row3()); + + return 0; +} +int ToProtoData(kortex_driver::Point input, Point *output) +{ + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + + return 0; +} +int ToProtoData(kortex_driver::ZoneShape input, ZoneShape *output) +{ + output->set_shape_type((Kinova::Api::Base::ShapeType)input.shape_type); + ToProtoData(input.origin, output->mutable_origin()); + ToProtoData(input.orientation, output->mutable_orientation()); + output->clear_dimensions(); + for(int i = 0; i < input.dimensions.size(); i++) + { + output->add_dimensions(input.dimensions[i]); + } + + output->set_envelope_thickness(input.envelope_thickness); + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZone input, ProtectionZone *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_application_data(input.application_data); + output->set_is_enabled(input.is_enabled); + ToProtoData(input.shape, output->mutable_shape()); + output->clear_limitations(); + for(int i = 0; i < input.limitations.size(); i++) + { + ToProtoData(input.limitations[i], output->add_limitations()); + } + output->clear_envelope_limitations(); + for(int i = 0; i < input.envelope_limitations.size(); i++) + { + ToProtoData(input.envelope_limitations[i], output->add_envelope_limitations()); + } + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneList input, ProtectionZoneList *output) +{ + output->clear_protection_zones(); + for(int i = 0; i < input.protection_zones.size(); i++) + { + ToProtoData(input.protection_zones[i], output->add_protection_zones()); + } + + return 0; +} +int ToProtoData(kortex_driver::LimitationTypeIdentifier input, LimitationTypeIdentifier *output) +{ + output->set_type((Kinova::Api::Base::LimitationType)input.type); + + return 0; +} +int ToProtoData(kortex_driver::CartesianLimitation input, CartesianLimitation *output) +{ + output->set_type((Kinova::Api::Base::LimitationType)input.type); + output->set_translation(input.translation); + output->set_orientation(input.orientation); + + return 0; +} +int ToProtoData(kortex_driver::CartesianLimitationList input, CartesianLimitationList *output) +{ + output->clear_limitations(); + for(int i = 0; i < input.limitations.size(); i++) + { + ToProtoData(input.limitations[i], output->add_limitations()); + } + + return 0; +} +int ToProtoData(kortex_driver::JointLimitationValue input, JointLimitationValue *output) +{ + output->set_type((Kinova::Api::Base::LimitationType)input.type); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::JointLimitationValueList input, JointLimitationValueList *output) +{ + output->clear_joint_limitation_values(); + for(int i = 0; i < input.joint_limitation_values.size(); i++) + { + ToProtoData(input.joint_limitation_values[i], output->add_joint_limitation_values()); + } + + return 0; +} +int ToProtoData(kortex_driver::JointLimitation input, JointLimitation *output) +{ + output->set_device_identifier(input.device_identifier); + ToProtoData(input.limitation_value, output->mutable_limitation_value()); + + return 0; +} +int ToProtoData(kortex_driver::JointLimitationTypeIdentifier input, JointLimitationTypeIdentifier *output) +{ + output->set_device_identifier(input.device_identifier); + output->set_type((Kinova::Api::Base::LimitationType)input.type); + + return 0; +} +int ToProtoData(kortex_driver::Query input, Query *output) +{ + ToProtoData(input.start_timestamp, output->mutable_start_timestamp()); + ToProtoData(input.end_timestamp, output->mutable_end_timestamp()); + output->set_username(input.username); + + return 0; +} +int ToProtoData(kortex_driver::ConfigurationChangeNotification input, ConfigurationChangeNotification *output) +{ + output->set_event((Kinova::Api::Base::ConfigurationNotificationEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::MappingInfoNotification input, MappingInfoNotification *output) +{ + output->set_controller_identifier(input.controller_identifier); + ToProtoData(input.active_map_handle, output->mutable_active_map_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ControlModeInformation input, ControlModeInformation *output) +{ + output->set_mode((Kinova::Api::Base::ControlMode)input.mode); + + return 0; +} +int ToProtoData(kortex_driver::ControlModeNotification input, ControlModeNotification *output) +{ + output->set_control_mode((Kinova::Api::Base::ControlMode)input.control_mode); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ServoingModeInformation input, ServoingModeInformation *output) +{ + output->set_servoing_mode((Kinova::Api::Base::ServoingMode)input.servoing_mode); + + return 0; +} +int ToProtoData(kortex_driver::OperatingModeInformation input, OperatingModeInformation *output) +{ + output->set_operating_mode((Kinova::Api::Base::OperatingMode)input.operating_mode); + ToProtoData(input.device_handle, output->mutable_device_handle()); + + return 0; +} +int ToProtoData(kortex_driver::OperatingModeNotification input, OperatingModeNotification *output) +{ + output->set_operating_mode((Kinova::Api::Base::OperatingMode)input.operating_mode); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + ToProtoData(input.device_handle, output->mutable_device_handle()); + + return 0; +} +int ToProtoData(kortex_driver::ServoingModeNotification input, ServoingModeNotification *output) +{ + output->set_servoing_mode((Kinova::Api::Base::ServoingMode)input.servoing_mode); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::SequenceInfoNotification input, SequenceInfoNotification *output) +{ + output->set_event_identifier((Kinova::Api::Base::EventIdSequenceInfoNotification)input.event_identifier); + ToProtoData(input.sequence_handle, output->mutable_sequence_handle()); + output->set_task_index(input.task_index); + output->set_group_identifier(input.group_identifier); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_abort_details((Kinova::Api::SubErrorCodes)input.abort_details); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::SequenceInformation input, SequenceInformation *output) +{ + output->set_event_identifier((Kinova::Api::Base::EventIdSequenceInfoNotification)input.event_identifier); + output->set_task_index(input.task_index); + output->set_task_identifier(input.task_identifier); + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneNotification input, ProtectionZoneNotification *output) +{ + output->set_event((Kinova::Api::Base::ProtectionZoneEvent)input.event); + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneInformation input, ProtectionZoneInformation *output) +{ + output->set_event((Kinova::Api::Base::ProtectionZoneEvent)input.event); + + return 0; +} +int ToProtoData(kortex_driver::UserNotification input, UserNotification *output) +{ + output->set_user_event((Kinova::Api::Base::UserEvent)input.user_event); + ToProtoData(input.modified_user, output->mutable_modified_user()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ControllerHandle input, ControllerHandle *output) +{ + output->set_type((Kinova::Api::Base::ControllerType)input.type); + output->set_controller_identifier(input.controller_identifier); + + return 0; +} +int ToProtoData(kortex_driver::ControllerElementHandle input, ControllerElementHandle *output) +{ + ToProtoData(input.controller_handle, output->mutable_controller_handle()); + + if(input.oneof_identifier.button.size() > 0) + { + + output->set_button(input.oneof_identifier.button[0]); + } + if(input.oneof_identifier.axis.size() > 0) + { + + output->set_axis(input.oneof_identifier.axis[0]); + } + + + return 0; +} +int ToProtoData(kortex_driver::ControllerNotification input, ControllerNotification *output) +{ + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ControllerList input, ControllerList *output) +{ + output->clear_handles(); + for(int i = 0; i < input.handles.size(); i++) + { + ToProtoData(input.handles[i], output->add_handles()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControllerState input, ControllerState *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_event_type((Kinova::Api::Base::ControllerEventType)input.event_type); + + return 0; +} +int ToProtoData(kortex_driver::ControllerElementState input, ControllerElementState *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_event_type((Kinova::Api::Base::ControllerElementEventType)input.event_type); + output->set_axis_value(input.axis_value); + + return 0; +} +int ToProtoData(kortex_driver::ActionNotification input, ActionNotification *output) +{ + output->set_action_event((Kinova::Api::Base::ActionEvent)input.action_event); + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_abort_details((Kinova::Api::SubErrorCodes)input.abort_details); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ActionExecutionState input, ActionExecutionState *output) +{ + output->set_action_event((Kinova::Api::Base::ActionEvent)input.action_event); + ToProtoData(input.handle, output->mutable_handle()); + + return 0; +} +int ToProtoData(kortex_driver::RobotEventNotification input, RobotEventNotification *output) +{ + output->set_event((Kinova::Api::Base::RobotEvent)input.event); + ToProtoData(input.handle, output->mutable_handle()); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::FactoryNotification input, FactoryNotification *output) +{ + output->set_event((Kinova::Api::Base::FactoryEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::NetworkNotification input, NetworkNotification *output) +{ + output->set_event((Kinova::Api::Base::NetworkEvent)input.event); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ConfigurationChangeNotificationList input, ConfigurationChangeNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::MappingInfoNotificationList input, MappingInfoNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControlModeNotificationList input, ControlModeNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::OperatingModeNotificationList input, OperatingModeNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ServoingModeNotificationList input, ServoingModeNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::SequenceInfoNotificationList input, SequenceInfoNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ProtectionZoneNotificationList input, ProtectionZoneNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::UserNotificationList input, UserNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::SafetyNotificationList input, SafetyNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ControllerNotificationList input, ControllerNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::ActionNotificationList input, ActionNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::RobotEventNotificationList input, RobotEventNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::NetworkNotificationList input, NetworkNotificationList *output) +{ + output->clear_notifications(); + for(int i = 0; i < input.notifications.size(); i++) + { + ToProtoData(input.notifications[i], output->add_notifications()); + } + + return 0; +} +int ToProtoData(kortex_driver::MappingHandle input, MappingHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::SafetyEvent input, SafetyEvent *output) +{ + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + + return 0; +} +int ToProtoData(kortex_driver::ControllerEvent input, ControllerEvent *output) +{ + output->set_input_type((Kinova::Api::Base::ControllerInputType)input.input_type); + output->set_behavior((Kinova::Api::Base::ControllerBehavior)input.behavior); + output->set_input_identifier(input.input_identifier); + + return 0; +} +int ToProtoData(kortex_driver::GpioEvent input, GpioEvent *output) +{ + output->set_gpio_state((Kinova::Api::Base::GpioState)input.gpio_state); + output->set_device_identifier(input.device_identifier); + + return 0; +} +int ToProtoData(kortex_driver::MapEvent input, MapEvent *output) +{ + output->set_name(input.name); + + return 0; +} +int ToProtoData(kortex_driver::MapElement input, MapElement *output) +{ + ToProtoData(input.event, output->mutable_event()); + ToProtoData(input.action, output->mutable_action()); + + return 0; +} +int ToProtoData(kortex_driver::ActivateMapHandle input, ActivateMapHandle *output) +{ + ToProtoData(input.mapping_handle, output->mutable_mapping_handle()); + ToProtoData(input.map_group_handle, output->mutable_map_group_handle()); + ToProtoData(input.map_handle, output->mutable_map_handle()); + + return 0; +} +int ToProtoData(kortex_driver::Map input, Map *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->clear_elements(); + for(int i = 0; i < input.elements.size(); i++) + { + ToProtoData(input.elements[i], output->add_elements()); + } + + return 0; +} +int ToProtoData(kortex_driver::MapHandle input, MapHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::MapList input, MapList *output) +{ + output->clear_map_list(); + for(int i = 0; i < input.map_list.size(); i++) + { + ToProtoData(input.map_list[i], output->add_map_list()); + } + + return 0; +} +int ToProtoData(kortex_driver::MapGroupHandle input, MapGroupHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::MapGroup input, MapGroup *output) +{ + ToProtoData(input.group_handle, output->mutable_group_handle()); + output->set_name(input.name); + ToProtoData(input.related_mapping_handle, output->mutable_related_mapping_handle()); + ToProtoData(input.parent_group_handle, output->mutable_parent_group_handle()); + output->clear_children_map_group_handles(); + for(int i = 0; i < input.children_map_group_handles.size(); i++) + { + ToProtoData(input.children_map_group_handles[i], output->add_children_map_group_handles()); + } + output->clear_map_handles(); + for(int i = 0; i < input.map_handles.size(); i++) + { + ToProtoData(input.map_handles[i], output->add_map_handles()); + } + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::MapGroupList input, MapGroupList *output) +{ + output->clear_map_groups(); + for(int i = 0; i < input.map_groups.size(); i++) + { + ToProtoData(input.map_groups[i], output->add_map_groups()); + } + + return 0; +} +int ToProtoData(kortex_driver::Mapping input, Mapping *output) +{ + ToProtoData(input.handle, output->mutable_handle()); + output->set_name(input.name); + output->set_controller_identifier(input.controller_identifier); + ToProtoData(input.active_map_group_handle, output->mutable_active_map_group_handle()); + output->clear_map_group_handles(); + for(int i = 0; i < input.map_group_handles.size(); i++) + { + ToProtoData(input.map_group_handles[i], output->add_map_group_handles()); + } + ToProtoData(input.active_map_handle, output->mutable_active_map_handle()); + output->clear_map_handles(); + for(int i = 0; i < input.map_handles.size(); i++) + { + ToProtoData(input.map_handles[i], output->add_map_handles()); + } + output->set_application_data(input.application_data); + + return 0; +} +int ToProtoData(kortex_driver::MappingList input, MappingList *output) +{ + output->clear_mappings(); + for(int i = 0; i < input.mappings.size(); i++) + { + ToProtoData(input.mappings[i], output->add_mappings()); + } + + return 0; +} +int ToProtoData(kortex_driver::TransformationMatrix input, TransformationMatrix *output) +{ + ToProtoData(input.r0, output->mutable_r0()); + ToProtoData(input.r1, output->mutable_r1()); + ToProtoData(input.r2, output->mutable_r2()); + ToProtoData(input.r3, output->mutable_r3()); + + return 0; +} +int ToProtoData(kortex_driver::TransformationRow input, TransformationRow *output) +{ + output->set_c0(input.c0); + output->set_c1(input.c1); + output->set_c2(input.c2); + output->set_c3(input.c3); + + return 0; +} +int ToProtoData(kortex_driver::Pose input, Pose *output) +{ + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + output->set_theta_x(input.theta_x); + output->set_theta_y(input.theta_y); + output->set_theta_z(input.theta_z); + + return 0; +} +int ToProtoData(kortex_driver::Position input, Position *output) +{ + output->set_x(input.x); + output->set_y(input.y); + output->set_z(input.z); + + return 0; +} +int ToProtoData(kortex_driver::Orientation input, Orientation *output) +{ + output->set_theta_x(input.theta_x); + output->set_theta_y(input.theta_y); + output->set_theta_z(input.theta_z); + + return 0; +} +int ToProtoData(kortex_driver::CartesianSpeed input, CartesianSpeed *output) +{ + output->set_translation(input.translation); + output->set_orientation(input.orientation); + + return 0; +} +int ToProtoData(kortex_driver::CartesianTrajectoryConstraint input, CartesianTrajectoryConstraint *output) +{ + + if(input.oneof_type.speed.size() > 0) + { + ToProtoData(input.oneof_type.speed[0], output->mutable_speed()); + } + if(input.oneof_type.duration.size() > 0) + { + + output->set_duration(input.oneof_type.duration[0]); + } + + + return 0; +} +int ToProtoData(kortex_driver::JointTrajectoryConstraint input, JointTrajectoryConstraint *output) +{ + output->set_type((Kinova::Api::Base::JointTrajectoryConstraintType)input.type); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::Twist input, Twist *output) +{ + output->set_linear_x(input.linear_x); + output->set_linear_y(input.linear_y); + output->set_linear_z(input.linear_z); + output->set_angular_x(input.angular_x); + output->set_angular_y(input.angular_y); + output->set_angular_z(input.angular_z); + + return 0; +} +int ToProtoData(kortex_driver::Admittance input, Admittance *output) +{ + output->set_admittance_mode((Kinova::Api::Base::AdmittanceMode)input.admittance_mode); + + return 0; +} +int ToProtoData(kortex_driver::CartesianReferenceFrameRequest input, CartesianReferenceFrameRequest *output) +{ + output->set_reference_frame((Kinova::Api::Base::CartesianReferenceFrame)input.reference_frame); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedPose input, ConstrainedPose *output) +{ + ToProtoData(input.target_pose, output->mutable_target_pose()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedPosition input, ConstrainedPosition *output) +{ + ToProtoData(input.target_position, output->mutable_target_position()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedOrientation input, ConstrainedOrientation *output) +{ + ToProtoData(input.target_orientation, output->mutable_target_orientation()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::TwistCommand input, TwistCommand *output) +{ + output->set_mode((Kinova::Api::Base::TwistMode)input.mode); + ToProtoData(input.twist, output->mutable_twist()); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedJointAngles input, ConstrainedJointAngles *output) +{ + ToProtoData(input.joint_angles, output->mutable_joint_angles()); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::ConstrainedJointAngle input, ConstrainedJointAngle *output) +{ + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + ToProtoData(input.constraint, output->mutable_constraint()); + + return 0; +} +int ToProtoData(kortex_driver::JointAngles input, JointAngles *output) +{ + output->clear_joint_angles(); + for(int i = 0; i < input.joint_angles.size(); i++) + { + ToProtoData(input.joint_angles[i], output->add_joint_angles()); + } + + return 0; +} +int ToProtoData(kortex_driver::JointAngle input, JointAngle *output) +{ + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::JointSpeeds input, JointSpeeds *output) +{ + output->clear_joint_speeds(); + for(int i = 0; i < input.joint_speeds.size(); i++) + { + ToProtoData(input.joint_speeds[i], output->add_joint_speeds()); + } + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::JointSpeed input, JointSpeed *output) +{ + output->set_joint_identifier(input.joint_identifier); + output->set_value(input.value); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::GripperCommand input, GripperCommand *output) +{ + output->set_mode((Kinova::Api::Base::GripperMode)input.mode); + ToProtoData(input.gripper, output->mutable_gripper()); + output->set_duration(input.duration); + + return 0; +} +int ToProtoData(kortex_driver::GripperRequest input, GripperRequest *output) +{ + output->set_mode((Kinova::Api::Base::GripperMode)input.mode); + + return 0; +} +int ToProtoData(kortex_driver::Gripper input, Gripper *output) +{ + output->clear_finger(); + for(int i = 0; i < input.finger.size(); i++) + { + ToProtoData(input.finger[i], output->add_finger()); + } + + return 0; +} +int ToProtoData(kortex_driver::Finger input, Finger *output) +{ + output->set_finger_identifier(input.finger_identifier); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_driver::SystemTime input, SystemTime *output) +{ + output->set_sec(input.sec); + output->set_min(input.min); + output->set_hour(input.hour); + output->set_mday(input.mday); + output->set_mon(input.mon); + output->set_year(input.year); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorInformation input, ActuatorInformation *output) +{ + output->set_count(input.count); + + return 0; +} +int ToProtoData(kortex_driver::ArmStateInformation input, ArmStateInformation *output) +{ + output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::ArmStateNotification input, ArmStateNotification *output) +{ + output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} diff --git a/kortex_driver/src/base_proto_converter.h b/kortex_driver/src/base_proto_converter.h new file mode 100644 index 00000000..5c4d0e89 --- /dev/null +++ b/kortex_driver/src/base_proto_converter.h @@ -0,0 +1,308 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BasePROTO_CONVERTER_H_ +#define _KORTEX_BasePROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_driver/FullUserProfile.h" +#include "kortex_driver/UserProfile.h" +#include "kortex_driver/UserProfileList.h" +#include "kortex_driver/UserList.h" +#include "kortex_driver/PasswordChange.h" +#include "kortex_driver/SequenceHandle.h" +#include "kortex_driver/AdvancedSequenceHandle.h" +#include "kortex_driver/SequenceTaskHandle.h" +#include "kortex_driver/SequenceTask.h" +#include "kortex_driver/Sequence.h" +#include "kortex_driver/SequenceList.h" +#include "kortex_driver/AppendActionInformation.h" +#include "kortex_driver/ActionHandle.h" +#include "kortex_driver/RequestedActionType.h" +#include "kortex_driver/Action.h" +#include "kortex_driver/SwitchControlMapping.h" +#include "kortex_driver/ChangeTwist.h" +#include "kortex_driver/ChangeJointSpeeds.h" +#include "kortex_driver/EmergencyStop.h" +#include "kortex_driver/Faults.h" +#include "kortex_driver/Delay.h" +#include "kortex_driver/Stop.h" +#include "kortex_driver/ActionList.h" +#include "kortex_driver/Timeout.h" +#include "kortex_driver/Ssid.h" +#include "kortex_driver/CommunicationInterfaceConfiguration.h" +#include "kortex_driver/NetworkHandle.h" +#include "kortex_driver/IPv4Configuration.h" +#include "kortex_driver/IPv4Information.h" +#include "kortex_driver/FullIPv4Configuration.h" +#include "kortex_driver/WifiInformation.h" +#include "kortex_driver/WifiInformationList.h" +#include "kortex_driver/WifiConfiguration.h" +#include "kortex_driver/WifiConfigurationList.h" +#include "kortex_driver/ProtectionZoneHandle.h" +#include "kortex_driver/RotationMatrixRow.h" +#include "kortex_driver/RotationMatrix.h" +#include "kortex_driver/Point.h" +#include "kortex_driver/ZoneShape.h" +#include "kortex_driver/ProtectionZone.h" +#include "kortex_driver/ProtectionZoneList.h" +#include "kortex_driver/LimitationTypeIdentifier.h" +#include "kortex_driver/CartesianLimitation.h" +#include "kortex_driver/CartesianLimitationList.h" +#include "kortex_driver/JointLimitationValue.h" +#include "kortex_driver/JointLimitationValueList.h" +#include "kortex_driver/JointLimitation.h" +#include "kortex_driver/JointLimitationTypeIdentifier.h" +#include "kortex_driver/Query.h" +#include "kortex_driver/ConfigurationChangeNotification.h" +#include "kortex_driver/MappingInfoNotification.h" +#include "kortex_driver/ControlModeInformation.h" +#include "kortex_driver/ControlModeNotification.h" +#include "kortex_driver/ServoingModeInformation.h" +#include "kortex_driver/OperatingModeInformation.h" +#include "kortex_driver/OperatingModeNotification.h" +#include "kortex_driver/ServoingModeNotification.h" +#include "kortex_driver/SequenceInfoNotification.h" +#include "kortex_driver/SequenceInformation.h" +#include "kortex_driver/ProtectionZoneNotification.h" +#include "kortex_driver/ProtectionZoneInformation.h" +#include "kortex_driver/UserNotification.h" +#include "kortex_driver/ControllerHandle.h" +#include "kortex_driver/ControllerElementHandle.h" +#include "kortex_driver/ControllerNotification.h" +#include "kortex_driver/ControllerList.h" +#include "kortex_driver/ControllerState.h" +#include "kortex_driver/ControllerElementState.h" +#include "kortex_driver/ActionNotification.h" +#include "kortex_driver/ActionExecutionState.h" +#include "kortex_driver/RobotEventNotification.h" +#include "kortex_driver/FactoryNotification.h" +#include "kortex_driver/NetworkNotification.h" +#include "kortex_driver/ConfigurationChangeNotificationList.h" +#include "kortex_driver/MappingInfoNotificationList.h" +#include "kortex_driver/ControlModeNotificationList.h" +#include "kortex_driver/OperatingModeNotificationList.h" +#include "kortex_driver/ServoingModeNotificationList.h" +#include "kortex_driver/SequenceInfoNotificationList.h" +#include "kortex_driver/ProtectionZoneNotificationList.h" +#include "kortex_driver/UserNotificationList.h" +#include "kortex_driver/SafetyNotificationList.h" +#include "kortex_driver/ControllerNotificationList.h" +#include "kortex_driver/ActionNotificationList.h" +#include "kortex_driver/RobotEventNotificationList.h" +#include "kortex_driver/NetworkNotificationList.h" +#include "kortex_driver/MappingHandle.h" +#include "kortex_driver/SafetyEvent.h" +#include "kortex_driver/ControllerEvent.h" +#include "kortex_driver/GpioEvent.h" +#include "kortex_driver/MapEvent.h" +#include "kortex_driver/MapElement.h" +#include "kortex_driver/ActivateMapHandle.h" +#include "kortex_driver/Map.h" +#include "kortex_driver/MapHandle.h" +#include "kortex_driver/MapList.h" +#include "kortex_driver/MapGroupHandle.h" +#include "kortex_driver/MapGroup.h" +#include "kortex_driver/MapGroupList.h" +#include "kortex_driver/Mapping.h" +#include "kortex_driver/MappingList.h" +#include "kortex_driver/TransformationMatrix.h" +#include "kortex_driver/TransformationRow.h" +#include "kortex_driver/Pose.h" +#include "kortex_driver/Position.h" +#include "kortex_driver/Orientation.h" +#include "kortex_driver/CartesianSpeed.h" +#include "kortex_driver/CartesianTrajectoryConstraint.h" +#include "kortex_driver/JointTrajectoryConstraint.h" +#include "kortex_driver/Twist.h" +#include "kortex_driver/Admittance.h" +#include "kortex_driver/CartesianReferenceFrameRequest.h" +#include "kortex_driver/ConstrainedPose.h" +#include "kortex_driver/ConstrainedPosition.h" +#include "kortex_driver/ConstrainedOrientation.h" +#include "kortex_driver/TwistCommand.h" +#include "kortex_driver/ConstrainedJointAngles.h" +#include "kortex_driver/ConstrainedJointAngle.h" +#include "kortex_driver/JointAngles.h" +#include "kortex_driver/JointAngle.h" +#include "kortex_driver/JointSpeeds.h" +#include "kortex_driver/JointSpeed.h" +#include "kortex_driver/GripperCommand.h" +#include "kortex_driver/GripperRequest.h" +#include "kortex_driver/Gripper.h" +#include "kortex_driver/Finger.h" +#include "kortex_driver/SystemTime.h" +#include "kortex_driver/ActuatorInformation.h" +#include "kortex_driver/ArmStateInformation.h" +#include "kortex_driver/ArmStateNotification.h" + + +using namespace Kinova::Api::Base; + +int ToProtoData(kortex_driver::FullUserProfile intput, FullUserProfile *output); +int ToProtoData(kortex_driver::UserProfile intput, UserProfile *output); +int ToProtoData(kortex_driver::UserProfileList intput, UserProfileList *output); +int ToProtoData(kortex_driver::UserList intput, UserList *output); +int ToProtoData(kortex_driver::PasswordChange intput, PasswordChange *output); +int ToProtoData(kortex_driver::SequenceHandle intput, SequenceHandle *output); +int ToProtoData(kortex_driver::AdvancedSequenceHandle intput, AdvancedSequenceHandle *output); +int ToProtoData(kortex_driver::SequenceTaskHandle intput, SequenceTaskHandle *output); +int ToProtoData(kortex_driver::SequenceTask intput, SequenceTask *output); +int ToProtoData(kortex_driver::Sequence intput, Sequence *output); +int ToProtoData(kortex_driver::SequenceList intput, SequenceList *output); +int ToProtoData(kortex_driver::AppendActionInformation intput, AppendActionInformation *output); +int ToProtoData(kortex_driver::ActionHandle intput, ActionHandle *output); +int ToProtoData(kortex_driver::RequestedActionType intput, RequestedActionType *output); +int ToProtoData(kortex_driver::Action intput, Action *output); +int ToProtoData(kortex_driver::SwitchControlMapping intput, SwitchControlMapping *output); +int ToProtoData(kortex_driver::ChangeTwist intput, ChangeTwist *output); +int ToProtoData(kortex_driver::ChangeJointSpeeds intput, ChangeJointSpeeds *output); +int ToProtoData(kortex_driver::EmergencyStop intput, EmergencyStop *output); +int ToProtoData(kortex_driver::Faults intput, Faults *output); +int ToProtoData(kortex_driver::Delay intput, Delay *output); +int ToProtoData(kortex_driver::Stop intput, Stop *output); +int ToProtoData(kortex_driver::ActionList intput, ActionList *output); +int ToProtoData(kortex_driver::Timeout intput, Timeout *output); +int ToProtoData(kortex_driver::Ssid intput, Ssid *output); +int ToProtoData(kortex_driver::CommunicationInterfaceConfiguration intput, CommunicationInterfaceConfiguration *output); +int ToProtoData(kortex_driver::NetworkHandle intput, NetworkHandle *output); +int ToProtoData(kortex_driver::IPv4Configuration intput, IPv4Configuration *output); +int ToProtoData(kortex_driver::IPv4Information intput, IPv4Information *output); +int ToProtoData(kortex_driver::FullIPv4Configuration intput, FullIPv4Configuration *output); +int ToProtoData(kortex_driver::WifiInformation intput, WifiInformation *output); +int ToProtoData(kortex_driver::WifiInformationList intput, WifiInformationList *output); +int ToProtoData(kortex_driver::WifiConfiguration intput, WifiConfiguration *output); +int ToProtoData(kortex_driver::WifiConfigurationList intput, WifiConfigurationList *output); +int ToProtoData(kortex_driver::ProtectionZoneHandle intput, ProtectionZoneHandle *output); +int ToProtoData(kortex_driver::RotationMatrixRow intput, RotationMatrixRow *output); +int ToProtoData(kortex_driver::RotationMatrix intput, RotationMatrix *output); +int ToProtoData(kortex_driver::Point intput, Point *output); +int ToProtoData(kortex_driver::ZoneShape intput, ZoneShape *output); +int ToProtoData(kortex_driver::ProtectionZone intput, ProtectionZone *output); +int ToProtoData(kortex_driver::ProtectionZoneList intput, ProtectionZoneList *output); +int ToProtoData(kortex_driver::LimitationTypeIdentifier intput, LimitationTypeIdentifier *output); +int ToProtoData(kortex_driver::CartesianLimitation intput, CartesianLimitation *output); +int ToProtoData(kortex_driver::CartesianLimitationList intput, CartesianLimitationList *output); +int ToProtoData(kortex_driver::JointLimitationValue intput, JointLimitationValue *output); +int ToProtoData(kortex_driver::JointLimitationValueList intput, JointLimitationValueList *output); +int ToProtoData(kortex_driver::JointLimitation intput, JointLimitation *output); +int ToProtoData(kortex_driver::JointLimitationTypeIdentifier intput, JointLimitationTypeIdentifier *output); +int ToProtoData(kortex_driver::Query intput, Query *output); +int ToProtoData(kortex_driver::ConfigurationChangeNotification intput, ConfigurationChangeNotification *output); +int ToProtoData(kortex_driver::MappingInfoNotification intput, MappingInfoNotification *output); +int ToProtoData(kortex_driver::ControlModeInformation intput, ControlModeInformation *output); +int ToProtoData(kortex_driver::ControlModeNotification intput, ControlModeNotification *output); +int ToProtoData(kortex_driver::ServoingModeInformation intput, ServoingModeInformation *output); +int ToProtoData(kortex_driver::OperatingModeInformation intput, OperatingModeInformation *output); +int ToProtoData(kortex_driver::OperatingModeNotification intput, OperatingModeNotification *output); +int ToProtoData(kortex_driver::ServoingModeNotification intput, ServoingModeNotification *output); +int ToProtoData(kortex_driver::SequenceInfoNotification intput, SequenceInfoNotification *output); +int ToProtoData(kortex_driver::SequenceInformation intput, SequenceInformation *output); +int ToProtoData(kortex_driver::ProtectionZoneNotification intput, ProtectionZoneNotification *output); +int ToProtoData(kortex_driver::ProtectionZoneInformation intput, ProtectionZoneInformation *output); +int ToProtoData(kortex_driver::UserNotification intput, UserNotification *output); +int ToProtoData(kortex_driver::ControllerHandle intput, ControllerHandle *output); +int ToProtoData(kortex_driver::ControllerElementHandle intput, ControllerElementHandle *output); +int ToProtoData(kortex_driver::ControllerNotification intput, ControllerNotification *output); +int ToProtoData(kortex_driver::ControllerList intput, ControllerList *output); +int ToProtoData(kortex_driver::ControllerState intput, ControllerState *output); +int ToProtoData(kortex_driver::ControllerElementState intput, ControllerElementState *output); +int ToProtoData(kortex_driver::ActionNotification intput, ActionNotification *output); +int ToProtoData(kortex_driver::ActionExecutionState intput, ActionExecutionState *output); +int ToProtoData(kortex_driver::RobotEventNotification intput, RobotEventNotification *output); +int ToProtoData(kortex_driver::FactoryNotification intput, FactoryNotification *output); +int ToProtoData(kortex_driver::NetworkNotification intput, NetworkNotification *output); +int ToProtoData(kortex_driver::ConfigurationChangeNotificationList intput, ConfigurationChangeNotificationList *output); +int ToProtoData(kortex_driver::MappingInfoNotificationList intput, MappingInfoNotificationList *output); +int ToProtoData(kortex_driver::ControlModeNotificationList intput, ControlModeNotificationList *output); +int ToProtoData(kortex_driver::OperatingModeNotificationList intput, OperatingModeNotificationList *output); +int ToProtoData(kortex_driver::ServoingModeNotificationList intput, ServoingModeNotificationList *output); +int ToProtoData(kortex_driver::SequenceInfoNotificationList intput, SequenceInfoNotificationList *output); +int ToProtoData(kortex_driver::ProtectionZoneNotificationList intput, ProtectionZoneNotificationList *output); +int ToProtoData(kortex_driver::UserNotificationList intput, UserNotificationList *output); +int ToProtoData(kortex_driver::SafetyNotificationList intput, SafetyNotificationList *output); +int ToProtoData(kortex_driver::ControllerNotificationList intput, ControllerNotificationList *output); +int ToProtoData(kortex_driver::ActionNotificationList intput, ActionNotificationList *output); +int ToProtoData(kortex_driver::RobotEventNotificationList intput, RobotEventNotificationList *output); +int ToProtoData(kortex_driver::NetworkNotificationList intput, NetworkNotificationList *output); +int ToProtoData(kortex_driver::MappingHandle intput, MappingHandle *output); +int ToProtoData(kortex_driver::SafetyEvent intput, SafetyEvent *output); +int ToProtoData(kortex_driver::ControllerEvent intput, ControllerEvent *output); +int ToProtoData(kortex_driver::GpioEvent intput, GpioEvent *output); +int ToProtoData(kortex_driver::MapEvent intput, MapEvent *output); +int ToProtoData(kortex_driver::MapElement intput, MapElement *output); +int ToProtoData(kortex_driver::ActivateMapHandle intput, ActivateMapHandle *output); +int ToProtoData(kortex_driver::Map intput, Map *output); +int ToProtoData(kortex_driver::MapHandle intput, MapHandle *output); +int ToProtoData(kortex_driver::MapList intput, MapList *output); +int ToProtoData(kortex_driver::MapGroupHandle intput, MapGroupHandle *output); +int ToProtoData(kortex_driver::MapGroup intput, MapGroup *output); +int ToProtoData(kortex_driver::MapGroupList intput, MapGroupList *output); +int ToProtoData(kortex_driver::Mapping intput, Mapping *output); +int ToProtoData(kortex_driver::MappingList intput, MappingList *output); +int ToProtoData(kortex_driver::TransformationMatrix intput, TransformationMatrix *output); +int ToProtoData(kortex_driver::TransformationRow intput, TransformationRow *output); +int ToProtoData(kortex_driver::Pose intput, Pose *output); +int ToProtoData(kortex_driver::Position intput, Position *output); +int ToProtoData(kortex_driver::Orientation intput, Orientation *output); +int ToProtoData(kortex_driver::CartesianSpeed intput, CartesianSpeed *output); +int ToProtoData(kortex_driver::CartesianTrajectoryConstraint intput, CartesianTrajectoryConstraint *output); +int ToProtoData(kortex_driver::JointTrajectoryConstraint intput, JointTrajectoryConstraint *output); +int ToProtoData(kortex_driver::Twist intput, Twist *output); +int ToProtoData(kortex_driver::Admittance intput, Admittance *output); +int ToProtoData(kortex_driver::CartesianReferenceFrameRequest intput, CartesianReferenceFrameRequest *output); +int ToProtoData(kortex_driver::ConstrainedPose intput, ConstrainedPose *output); +int ToProtoData(kortex_driver::ConstrainedPosition intput, ConstrainedPosition *output); +int ToProtoData(kortex_driver::ConstrainedOrientation intput, ConstrainedOrientation *output); +int ToProtoData(kortex_driver::TwistCommand intput, TwistCommand *output); +int ToProtoData(kortex_driver::ConstrainedJointAngles intput, ConstrainedJointAngles *output); +int ToProtoData(kortex_driver::ConstrainedJointAngle intput, ConstrainedJointAngle *output); +int ToProtoData(kortex_driver::JointAngles intput, JointAngles *output); +int ToProtoData(kortex_driver::JointAngle intput, JointAngle *output); +int ToProtoData(kortex_driver::JointSpeeds intput, JointSpeeds *output); +int ToProtoData(kortex_driver::JointSpeed intput, JointSpeed *output); +int ToProtoData(kortex_driver::GripperCommand intput, GripperCommand *output); +int ToProtoData(kortex_driver::GripperRequest intput, GripperRequest *output); +int ToProtoData(kortex_driver::Gripper intput, Gripper *output); +int ToProtoData(kortex_driver::Finger intput, Finger *output); +int ToProtoData(kortex_driver::SystemTime intput, SystemTime *output); +int ToProtoData(kortex_driver::ActuatorInformation intput, ActuatorInformation *output); +int ToProtoData(kortex_driver::ArmStateInformation intput, ArmStateInformation *output); +int ToProtoData(kortex_driver::ArmStateNotification intput, ArmStateNotification *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/src/base_ros_converter.cpp b/kortex_driver/src/base_ros_converter.cpp new file mode 100644 index 00000000..c25b3da9 --- /dev/null +++ b/kortex_driver/src/base_ros_converter.cpp @@ -0,0 +1,1378 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "base_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(FullUserProfile input, kortex_driver::FullUserProfile &output) +{ + ToRosData(input.user_profile(), output.user_profile); + output.password = input.password(); + + return 0; +} +int ToRosData(UserProfile input, kortex_driver::UserProfile &output) +{ + ToRosData(input.handle(), output.handle); + output.username = input.username(); + output.firstname = input.firstname(); + output.lastname = input.lastname(); + output.application_data = input.application_data(); + + return 0; +} +int ToRosData(UserProfileList input, kortex_driver::UserProfileList &output) +{ + output.user_profiles.clear(); + for(int i = 0; i < input.user_profiles_size(); i++) + { + kortex_driver::UserProfile temp; + ToRosData(input.user_profiles(i), temp); + output.user_profiles.push_back(temp); + } + + return 0; +} +int ToRosData(UserList input, kortex_driver::UserList &output) +{ + output.user_handles.clear(); + for(int i = 0; i < input.user_handles_size(); i++) + { + kortex_driver::UserProfileHandle temp; + ToRosData(input.user_handles(i), temp); + output.user_handles.push_back(temp); + } + + return 0; +} +int ToRosData(PasswordChange input, kortex_driver::PasswordChange &output) +{ + ToRosData(input.handle(), output.handle); + output.old_password = input.old_password(); + output.new_password = input.new_password(); + + return 0; +} +int ToRosData(SequenceHandle input, kortex_driver::SequenceHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(AdvancedSequenceHandle input, kortex_driver::AdvancedSequenceHandle &output) +{ + ToRosData(input.handle(), output.handle); + output.in_loop = input.in_loop(); + + return 0; +} +int ToRosData(SequenceTaskHandle input, kortex_driver::SequenceTaskHandle &output) +{ + ToRosData(input.sequence_handle(), output.sequence_handle); + output.task_index = input.task_index(); + + return 0; +} +int ToRosData(SequenceTask input, kortex_driver::SequenceTask &output) +{ + output.group_identifier = input.group_identifier(); + ToRosData(input.action(), output.action); + output.application_data = input.application_data(); + + return 0; +} +int ToRosData(Sequence input, kortex_driver::Sequence &output) +{ + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.application_data = input.application_data(); + output.tasks.clear(); + for(int i = 0; i < input.tasks_size(); i++) + { + kortex_driver::SequenceTask temp; + ToRosData(input.tasks(i), temp); + output.tasks.push_back(temp); + } + + return 0; +} +int ToRosData(SequenceList input, kortex_driver::SequenceList &output) +{ + output.sequence_list.clear(); + for(int i = 0; i < input.sequence_list_size(); i++) + { + kortex_driver::Sequence temp; + ToRosData(input.sequence_list(i), temp); + output.sequence_list.push_back(temp); + } + + return 0; +} +int ToRosData(AppendActionInformation input, kortex_driver::AppendActionInformation &output) +{ + ToRosData(input.sequence_handle(), output.sequence_handle); + ToRosData(input.action(), output.action); + + return 0; +} +int ToRosData(ActionHandle input, kortex_driver::ActionHandle &output) +{ + output.identifier = input.identifier(); + output.action_type = input.action_type(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(RequestedActionType input, kortex_driver::RequestedActionType &output) +{ + output.action_type = input.action_type(); + + return 0; +} +int ToRosData(Action input, kortex_driver::Action &output) +{ + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.application_data = input.application_data(); + + + auto oneof_type = input.action_parameters_case(); + + switch(oneof_type) + { + case Action::kSendTwistCommand: + { + kortex_driver::TwistCommand temp; + ToRosData(input.send_twist_command(), temp); + output.oneof_action_parameters.send_twist_command.push_back(temp); + break; + } + + case Action::kSendJointSpeeds: + { + kortex_driver::JointSpeeds temp; + ToRosData(input.send_joint_speeds(), temp); + output.oneof_action_parameters.send_joint_speeds.push_back(temp); + break; + } + + case Action::kReachPose: + { + kortex_driver::ConstrainedPose temp; + ToRosData(input.reach_pose(), temp); + output.oneof_action_parameters.reach_pose.push_back(temp); + break; + } + + case Action::kReachJointAngles: + { + kortex_driver::ConstrainedJointAngles temp; + ToRosData(input.reach_joint_angles(), temp); + output.oneof_action_parameters.reach_joint_angles.push_back(temp); + break; + } + + case Action::kToggleAdmittanceMode: + { + output.oneof_action_parameters.toggle_admittance_mode.push_back(input.toggle_admittance_mode()); + + break; + } + + case Action::kSwitchControlMapping: + { + kortex_driver::SwitchControlMapping temp; + ToRosData(input.switch_control_mapping(), temp); + output.oneof_action_parameters.switch_control_mapping.push_back(temp); + break; + } + + case Action::kNavigateJoints: + { + output.oneof_action_parameters.navigate_joints.push_back(input.navigate_joints()); + + break; + } + + case Action::kNavigateMappings: + { + output.oneof_action_parameters.navigate_mappings.push_back(input.navigate_mappings()); + + break; + } + + case Action::kChangeTwist: + { + kortex_driver::ChangeTwist temp; + ToRosData(input.change_twist(), temp); + output.oneof_action_parameters.change_twist.push_back(temp); + break; + } + + case Action::kChangeJointSpeeds: + { + kortex_driver::ChangeJointSpeeds temp; + ToRosData(input.change_joint_speeds(), temp); + output.oneof_action_parameters.change_joint_speeds.push_back(temp); + break; + } + + case Action::kApplyEmergencyStop: + { + kortex_driver::EmergencyStop temp; + ToRosData(input.apply_emergency_stop(), temp); + output.oneof_action_parameters.apply_emergency_stop.push_back(temp); + break; + } + + case Action::kClearFaults: + { + kortex_driver::Faults temp; + ToRosData(input.clear_faults(), temp); + output.oneof_action_parameters.clear_faults.push_back(temp); + break; + } + + case Action::kDelay: + { + kortex_driver::Delay temp; + ToRosData(input.delay(), temp); + output.oneof_action_parameters.delay.push_back(temp); + break; + } + + case Action::kExecuteAction: + { + kortex_driver::ActionHandle temp; + ToRosData(input.execute_action(), temp); + output.oneof_action_parameters.execute_action.push_back(temp); + break; + } + + case Action::kSendGripperCommand: + { + kortex_driver::GripperCommand temp; + ToRosData(input.send_gripper_command(), temp); + output.oneof_action_parameters.send_gripper_command.push_back(temp); + break; + } + + case Action::kStopAction: + { + kortex_driver::Stop temp; + ToRosData(input.stop_action(), temp); + output.oneof_action_parameters.stop_action.push_back(temp); + break; + } + + } + return 0; +} +int ToRosData(SwitchControlMapping input, kortex_driver::SwitchControlMapping &output) +{ + output.controller_identifier = input.controller_identifier(); + ToRosData(input.map_group_handle(), output.map_group_handle); + ToRosData(input.map_handle(), output.map_handle); + + return 0; +} +int ToRosData(ChangeTwist input, kortex_driver::ChangeTwist &output) +{ + output.linear = input.linear(); + output.angular = input.angular(); + + return 0; +} +int ToRosData(ChangeJointSpeeds input, kortex_driver::ChangeJointSpeeds &output) +{ + ToRosData(input.joint_speeds(), output.joint_speeds); + + return 0; +} +int ToRosData(EmergencyStop input, kortex_driver::EmergencyStop &output) +{ + + return 0; +} +int ToRosData(Faults input, kortex_driver::Faults &output) +{ + + return 0; +} +int ToRosData(Delay input, kortex_driver::Delay &output) +{ + output.duration = input.duration(); + + return 0; +} +int ToRosData(Stop input, kortex_driver::Stop &output) +{ + + return 0; +} +int ToRosData(ActionList input, kortex_driver::ActionList &output) +{ + output.action_list.clear(); + for(int i = 0; i < input.action_list_size(); i++) + { + kortex_driver::Action temp; + ToRosData(input.action_list(i), temp); + output.action_list.push_back(temp); + } + + return 0; +} +int ToRosData(Timeout input, kortex_driver::Timeout &output) +{ + output.value = input.value(); + + return 0; +} +int ToRosData(Ssid input, kortex_driver::Ssid &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(CommunicationInterfaceConfiguration input, kortex_driver::CommunicationInterfaceConfiguration &output) +{ + output.type = input.type(); + output.enable = input.enable(); + + return 0; +} +int ToRosData(NetworkHandle input, kortex_driver::NetworkHandle &output) +{ + output.type = input.type(); + + return 0; +} +int ToRosData(IPv4Configuration input, kortex_driver::IPv4Configuration &output) +{ + output.ip_address = input.ip_address(); + output.subnet_mask = input.subnet_mask(); + output.default_gateway = input.default_gateway(); + output.dhcp_enabled = input.dhcp_enabled(); + + return 0; +} +int ToRosData(IPv4Information input, kortex_driver::IPv4Information &output) +{ + output.ip_address = input.ip_address(); + output.subnet_mask = input.subnet_mask(); + output.default_gateway = input.default_gateway(); + + return 0; +} +int ToRosData(FullIPv4Configuration input, kortex_driver::FullIPv4Configuration &output) +{ + ToRosData(input.handle(), output.handle); + ToRosData(input.ipv4_configuration(), output.ipv4_configuration); + + return 0; +} +int ToRosData(WifiInformation input, kortex_driver::WifiInformation &output) +{ + ToRosData(input.ssid(), output.ssid); + output.security_type = input.security_type(); + output.encryption_type = input.encryption_type(); + output.signal_quality = input.signal_quality(); + output.signal_strength = input.signal_strength(); + output.frequency = input.frequency(); + output.channel = input.channel(); + + return 0; +} +int ToRosData(WifiInformationList input, kortex_driver::WifiInformationList &output) +{ + output.wifi_information_list.clear(); + for(int i = 0; i < input.wifi_information_list_size(); i++) + { + kortex_driver::WifiInformation temp; + ToRosData(input.wifi_information_list(i), temp); + output.wifi_information_list.push_back(temp); + } + + return 0; +} +int ToRosData(WifiConfiguration input, kortex_driver::WifiConfiguration &output) +{ + ToRosData(input.ssid(), output.ssid); + output.security_key = input.security_key(); + output.connect_automatically = input.connect_automatically(); + + return 0; +} +int ToRosData(WifiConfigurationList input, kortex_driver::WifiConfigurationList &output) +{ + output.wifi_configuration_list.clear(); + for(int i = 0; i < input.wifi_configuration_list_size(); i++) + { + kortex_driver::WifiConfiguration temp; + ToRosData(input.wifi_configuration_list(i), temp); + output.wifi_configuration_list.push_back(temp); + } + + return 0; +} +int ToRosData(ProtectionZoneHandle input, kortex_driver::ProtectionZoneHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(RotationMatrixRow input, kortex_driver::RotationMatrixRow &output) +{ + output.column1 = input.column1(); + output.column2 = input.column2(); + output.column3 = input.column3(); + + return 0; +} +int ToRosData(RotationMatrix input, kortex_driver::RotationMatrix &output) +{ + ToRosData(input.row1(), output.row1); + ToRosData(input.row2(), output.row2); + ToRosData(input.row3(), output.row3); + + return 0; +} +int ToRosData(Point input, kortex_driver::Point &output) +{ + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + + return 0; +} +int ToRosData(ZoneShape input, kortex_driver::ZoneShape &output) +{ + output.shape_type = input.shape_type(); + ToRosData(input.origin(), output.origin); + ToRosData(input.orientation(), output.orientation); + + output.dimensions.clear(); + for(int i = 0; i < input.dimensions_size(); i++) + { + output.dimensions.push_back(input.dimensions(i)); + } + output.envelope_thickness = input.envelope_thickness(); + + return 0; +} +int ToRosData(ProtectionZone input, kortex_driver::ProtectionZone &output) +{ + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.application_data = input.application_data(); + output.is_enabled = input.is_enabled(); + ToRosData(input.shape(), output.shape); + output.limitations.clear(); + for(int i = 0; i < input.limitations_size(); i++) + { + kortex_driver::CartesianLimitation temp; + ToRosData(input.limitations(i), temp); + output.limitations.push_back(temp); + } + output.envelope_limitations.clear(); + for(int i = 0; i < input.envelope_limitations_size(); i++) + { + kortex_driver::CartesianLimitation temp; + ToRosData(input.envelope_limitations(i), temp); + output.envelope_limitations.push_back(temp); + } + + return 0; +} +int ToRosData(ProtectionZoneList input, kortex_driver::ProtectionZoneList &output) +{ + output.protection_zones.clear(); + for(int i = 0; i < input.protection_zones_size(); i++) + { + kortex_driver::ProtectionZone temp; + ToRosData(input.protection_zones(i), temp); + output.protection_zones.push_back(temp); + } + + return 0; +} +int ToRosData(LimitationTypeIdentifier input, kortex_driver::LimitationTypeIdentifier &output) +{ + output.type = input.type(); + + return 0; +} +int ToRosData(CartesianLimitation input, kortex_driver::CartesianLimitation &output) +{ + output.type = input.type(); + output.translation = input.translation(); + output.orientation = input.orientation(); + + return 0; +} +int ToRosData(CartesianLimitationList input, kortex_driver::CartesianLimitationList &output) +{ + output.limitations.clear(); + for(int i = 0; i < input.limitations_size(); i++) + { + kortex_driver::CartesianLimitation temp; + ToRosData(input.limitations(i), temp); + output.limitations.push_back(temp); + } + + return 0; +} +int ToRosData(JointLimitationValue input, kortex_driver::JointLimitationValue &output) +{ + output.type = input.type(); + output.value = input.value(); + + return 0; +} +int ToRosData(JointLimitationValueList input, kortex_driver::JointLimitationValueList &output) +{ + output.joint_limitation_values.clear(); + for(int i = 0; i < input.joint_limitation_values_size(); i++) + { + kortex_driver::JointLimitationValue temp; + ToRosData(input.joint_limitation_values(i), temp); + output.joint_limitation_values.push_back(temp); + } + + return 0; +} +int ToRosData(JointLimitation input, kortex_driver::JointLimitation &output) +{ + output.device_identifier = input.device_identifier(); + ToRosData(input.limitation_value(), output.limitation_value); + + return 0; +} +int ToRosData(JointLimitationTypeIdentifier input, kortex_driver::JointLimitationTypeIdentifier &output) +{ + output.device_identifier = input.device_identifier(); + output.type = input.type(); + + return 0; +} +int ToRosData(Query input, kortex_driver::Query &output) +{ + ToRosData(input.start_timestamp(), output.start_timestamp); + ToRosData(input.end_timestamp(), output.end_timestamp); + output.username = input.username(); + + return 0; +} +int ToRosData(ConfigurationChangeNotification input, kortex_driver::ConfigurationChangeNotification &output) +{ + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(MappingInfoNotification input, kortex_driver::MappingInfoNotification &output) +{ + output.controller_identifier = input.controller_identifier(); + ToRosData(input.active_map_handle(), output.active_map_handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ControlModeInformation input, kortex_driver::ControlModeInformation &output) +{ + output.mode = input.mode(); + + return 0; +} +int ToRosData(ControlModeNotification input, kortex_driver::ControlModeNotification &output) +{ + output.control_mode = input.control_mode(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ServoingModeInformation input, kortex_driver::ServoingModeInformation &output) +{ + output.servoing_mode = input.servoing_mode(); + + return 0; +} +int ToRosData(OperatingModeInformation input, kortex_driver::OperatingModeInformation &output) +{ + output.operating_mode = input.operating_mode(); + ToRosData(input.device_handle(), output.device_handle); + + return 0; +} +int ToRosData(OperatingModeNotification input, kortex_driver::OperatingModeNotification &output) +{ + output.operating_mode = input.operating_mode(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + ToRosData(input.device_handle(), output.device_handle); + + return 0; +} +int ToRosData(ServoingModeNotification input, kortex_driver::ServoingModeNotification &output) +{ + output.servoing_mode = input.servoing_mode(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(SequenceInfoNotification input, kortex_driver::SequenceInfoNotification &output) +{ + output.event_identifier = input.event_identifier(); + ToRosData(input.sequence_handle(), output.sequence_handle); + output.task_index = input.task_index(); + output.group_identifier = input.group_identifier(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + output.abort_details = input.abort_details(); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(SequenceInformation input, kortex_driver::SequenceInformation &output) +{ + output.event_identifier = input.event_identifier(); + output.task_index = input.task_index(); + output.task_identifier = input.task_identifier(); + + return 0; +} +int ToRosData(ProtectionZoneNotification input, kortex_driver::ProtectionZoneNotification &output) +{ + output.event = input.event(); + ToRosData(input.handle(), output.handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ProtectionZoneInformation input, kortex_driver::ProtectionZoneInformation &output) +{ + output.event = input.event(); + + return 0; +} +int ToRosData(UserNotification input, kortex_driver::UserNotification &output) +{ + output.user_event = input.user_event(); + ToRosData(input.modified_user(), output.modified_user); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ControllerHandle input, kortex_driver::ControllerHandle &output) +{ + output.type = input.type(); + output.controller_identifier = input.controller_identifier(); + + return 0; +} +int ToRosData(ControllerElementHandle input, kortex_driver::ControllerElementHandle &output) +{ + ToRosData(input.controller_handle(), output.controller_handle); + + + auto oneof_type = input.identifier_case(); + + switch(oneof_type) + { + case ControllerElementHandle::kButton: + { + break; + } + + case ControllerElementHandle::kAxis: + { + break; + } + + } + return 0; +} +int ToRosData(ControllerNotification input, kortex_driver::ControllerNotification &output) +{ + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ControllerList input, kortex_driver::ControllerList &output) +{ + output.handles.clear(); + for(int i = 0; i < input.handles_size(); i++) + { + kortex_driver::ControllerHandle temp; + ToRosData(input.handles(i), temp); + output.handles.push_back(temp); + } + + return 0; +} +int ToRosData(ControllerState input, kortex_driver::ControllerState &output) +{ + ToRosData(input.handle(), output.handle); + output.event_type = input.event_type(); + + return 0; +} +int ToRosData(ControllerElementState input, kortex_driver::ControllerElementState &output) +{ + ToRosData(input.handle(), output.handle); + output.event_type = input.event_type(); + output.axis_value = input.axis_value(); + + return 0; +} +int ToRosData(ActionNotification input, kortex_driver::ActionNotification &output) +{ + output.action_event = input.action_event(); + ToRosData(input.handle(), output.handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + output.abort_details = input.abort_details(); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ActionExecutionState input, kortex_driver::ActionExecutionState &output) +{ + output.action_event = input.action_event(); + ToRosData(input.handle(), output.handle); + + return 0; +} +int ToRosData(RobotEventNotification input, kortex_driver::RobotEventNotification &output) +{ + output.event = input.event(); + ToRosData(input.handle(), output.handle); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(FactoryNotification input, kortex_driver::FactoryNotification &output) +{ + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(NetworkNotification input, kortex_driver::NetworkNotification &output) +{ + output.event = input.event(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ConfigurationChangeNotificationList input, kortex_driver::ConfigurationChangeNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ConfigurationChangeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(MappingInfoNotificationList input, kortex_driver::MappingInfoNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::MappingInfoNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(ControlModeNotificationList input, kortex_driver::ControlModeNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ControlModeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(OperatingModeNotificationList input, kortex_driver::OperatingModeNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::OperatingModeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(ServoingModeNotificationList input, kortex_driver::ServoingModeNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ServoingModeNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(SequenceInfoNotificationList input, kortex_driver::SequenceInfoNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::SequenceInfoNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(ProtectionZoneNotificationList input, kortex_driver::ProtectionZoneNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ProtectionZoneNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(UserNotificationList input, kortex_driver::UserNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::UserNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(SafetyNotificationList input, kortex_driver::SafetyNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::SafetyNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(ControllerNotificationList input, kortex_driver::ControllerNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ControllerNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(ActionNotificationList input, kortex_driver::ActionNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::ActionNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(RobotEventNotificationList input, kortex_driver::RobotEventNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::RobotEventNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(NetworkNotificationList input, kortex_driver::NetworkNotificationList &output) +{ + output.notifications.clear(); + for(int i = 0; i < input.notifications_size(); i++) + { + kortex_driver::NetworkNotification temp; + ToRosData(input.notifications(i), temp); + output.notifications.push_back(temp); + } + + return 0; +} +int ToRosData(MappingHandle input, kortex_driver::MappingHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(SafetyEvent input, kortex_driver::SafetyEvent &output) +{ + ToRosData(input.safety_handle(), output.safety_handle); + + return 0; +} +int ToRosData(ControllerEvent input, kortex_driver::ControllerEvent &output) +{ + output.input_type = input.input_type(); + output.behavior = input.behavior(); + output.input_identifier = input.input_identifier(); + + return 0; +} +int ToRosData(GpioEvent input, kortex_driver::GpioEvent &output) +{ + output.gpio_state = input.gpio_state(); + output.device_identifier = input.device_identifier(); + + return 0; +} +int ToRosData(MapEvent input, kortex_driver::MapEvent &output) +{ + output.name = input.name(); + + return 0; +} +int ToRosData(MapElement input, kortex_driver::MapElement &output) +{ + ToRosData(input.event(), output.event); + ToRosData(input.action(), output.action); + + return 0; +} +int ToRosData(ActivateMapHandle input, kortex_driver::ActivateMapHandle &output) +{ + ToRosData(input.mapping_handle(), output.mapping_handle); + ToRosData(input.map_group_handle(), output.map_group_handle); + ToRosData(input.map_handle(), output.map_handle); + + return 0; +} +int ToRosData(Map input, kortex_driver::Map &output) +{ + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.elements.clear(); + for(int i = 0; i < input.elements_size(); i++) + { + kortex_driver::MapElement temp; + ToRosData(input.elements(i), temp); + output.elements.push_back(temp); + } + + return 0; +} +int ToRosData(MapHandle input, kortex_driver::MapHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(MapList input, kortex_driver::MapList &output) +{ + output.map_list.clear(); + for(int i = 0; i < input.map_list_size(); i++) + { + kortex_driver::Map temp; + ToRosData(input.map_list(i), temp); + output.map_list.push_back(temp); + } + + return 0; +} +int ToRosData(MapGroupHandle input, kortex_driver::MapGroupHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(MapGroup input, kortex_driver::MapGroup &output) +{ + ToRosData(input.group_handle(), output.group_handle); + output.name = input.name(); + ToRosData(input.related_mapping_handle(), output.related_mapping_handle); + ToRosData(input.parent_group_handle(), output.parent_group_handle); + output.children_map_group_handles.clear(); + for(int i = 0; i < input.children_map_group_handles_size(); i++) + { + kortex_driver::MapGroupHandle temp; + ToRosData(input.children_map_group_handles(i), temp); + output.children_map_group_handles.push_back(temp); + } + output.map_handles.clear(); + for(int i = 0; i < input.map_handles_size(); i++) + { + kortex_driver::MapHandle temp; + ToRosData(input.map_handles(i), temp); + output.map_handles.push_back(temp); + } + output.application_data = input.application_data(); + + return 0; +} +int ToRosData(MapGroupList input, kortex_driver::MapGroupList &output) +{ + output.map_groups.clear(); + for(int i = 0; i < input.map_groups_size(); i++) + { + kortex_driver::MapGroup temp; + ToRosData(input.map_groups(i), temp); + output.map_groups.push_back(temp); + } + + return 0; +} +int ToRosData(Mapping input, kortex_driver::Mapping &output) +{ + ToRosData(input.handle(), output.handle); + output.name = input.name(); + output.controller_identifier = input.controller_identifier(); + ToRosData(input.active_map_group_handle(), output.active_map_group_handle); + output.map_group_handles.clear(); + for(int i = 0; i < input.map_group_handles_size(); i++) + { + kortex_driver::MapGroupHandle temp; + ToRosData(input.map_group_handles(i), temp); + output.map_group_handles.push_back(temp); + } + ToRosData(input.active_map_handle(), output.active_map_handle); + output.map_handles.clear(); + for(int i = 0; i < input.map_handles_size(); i++) + { + kortex_driver::MapHandle temp; + ToRosData(input.map_handles(i), temp); + output.map_handles.push_back(temp); + } + output.application_data = input.application_data(); + + return 0; +} +int ToRosData(MappingList input, kortex_driver::MappingList &output) +{ + output.mappings.clear(); + for(int i = 0; i < input.mappings_size(); i++) + { + kortex_driver::Mapping temp; + ToRosData(input.mappings(i), temp); + output.mappings.push_back(temp); + } + + return 0; +} +int ToRosData(TransformationMatrix input, kortex_driver::TransformationMatrix &output) +{ + ToRosData(input.r0(), output.r0); + ToRosData(input.r1(), output.r1); + ToRosData(input.r2(), output.r2); + ToRosData(input.r3(), output.r3); + + return 0; +} +int ToRosData(TransformationRow input, kortex_driver::TransformationRow &output) +{ + output.c0 = input.c0(); + output.c1 = input.c1(); + output.c2 = input.c2(); + output.c3 = input.c3(); + + return 0; +} +int ToRosData(Pose input, kortex_driver::Pose &output) +{ + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + output.theta_x = input.theta_x(); + output.theta_y = input.theta_y(); + output.theta_z = input.theta_z(); + + return 0; +} +int ToRosData(Position input, kortex_driver::Position &output) +{ + output.x = input.x(); + output.y = input.y(); + output.z = input.z(); + + return 0; +} +int ToRosData(Orientation input, kortex_driver::Orientation &output) +{ + output.theta_x = input.theta_x(); + output.theta_y = input.theta_y(); + output.theta_z = input.theta_z(); + + return 0; +} +int ToRosData(CartesianSpeed input, kortex_driver::CartesianSpeed &output) +{ + output.translation = input.translation(); + output.orientation = input.orientation(); + + return 0; +} +int ToRosData(CartesianTrajectoryConstraint input, kortex_driver::CartesianTrajectoryConstraint &output) +{ + + + auto oneof_type = input.type_case(); + + switch(oneof_type) + { + case CartesianTrajectoryConstraint::kSpeed: + { + kortex_driver::CartesianSpeed temp; + ToRosData(input.speed(), temp); + output.oneof_type.speed.push_back(temp); + break; + } + + case CartesianTrajectoryConstraint::kDuration: + { + break; + } + + } + return 0; +} +int ToRosData(JointTrajectoryConstraint input, kortex_driver::JointTrajectoryConstraint &output) +{ + output.type = input.type(); + output.value = input.value(); + + return 0; +} +int ToRosData(Twist input, kortex_driver::Twist &output) +{ + output.linear_x = input.linear_x(); + output.linear_y = input.linear_y(); + output.linear_z = input.linear_z(); + output.angular_x = input.angular_x(); + output.angular_y = input.angular_y(); + output.angular_z = input.angular_z(); + + return 0; +} +int ToRosData(Admittance input, kortex_driver::Admittance &output) +{ + output.admittance_mode = input.admittance_mode(); + + return 0; +} +int ToRosData(CartesianReferenceFrameRequest input, kortex_driver::CartesianReferenceFrameRequest &output) +{ + output.reference_frame = input.reference_frame(); + + return 0; +} +int ToRosData(ConstrainedPose input, kortex_driver::ConstrainedPose &output) +{ + ToRosData(input.target_pose(), output.target_pose); + ToRosData(input.constraint(), output.constraint); + + return 0; +} +int ToRosData(ConstrainedPosition input, kortex_driver::ConstrainedPosition &output) +{ + ToRosData(input.target_position(), output.target_position); + ToRosData(input.constraint(), output.constraint); + + return 0; +} +int ToRosData(ConstrainedOrientation input, kortex_driver::ConstrainedOrientation &output) +{ + ToRosData(input.target_orientation(), output.target_orientation); + ToRosData(input.constraint(), output.constraint); + + return 0; +} +int ToRosData(TwistCommand input, kortex_driver::TwistCommand &output) +{ + output.mode = input.mode(); + ToRosData(input.twist(), output.twist); + output.duration = input.duration(); + + return 0; +} +int ToRosData(ConstrainedJointAngles input, kortex_driver::ConstrainedJointAngles &output) +{ + ToRosData(input.joint_angles(), output.joint_angles); + ToRosData(input.constraint(), output.constraint); + + return 0; +} +int ToRosData(ConstrainedJointAngle input, kortex_driver::ConstrainedJointAngle &output) +{ + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + ToRosData(input.constraint(), output.constraint); + + return 0; +} +int ToRosData(JointAngles input, kortex_driver::JointAngles &output) +{ + output.joint_angles.clear(); + for(int i = 0; i < input.joint_angles_size(); i++) + { + kortex_driver::JointAngle temp; + ToRosData(input.joint_angles(i), temp); + output.joint_angles.push_back(temp); + } + + return 0; +} +int ToRosData(JointAngle input, kortex_driver::JointAngle &output) +{ + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + + return 0; +} +int ToRosData(JointSpeeds input, kortex_driver::JointSpeeds &output) +{ + output.joint_speeds.clear(); + for(int i = 0; i < input.joint_speeds_size(); i++) + { + kortex_driver::JointSpeed temp; + ToRosData(input.joint_speeds(i), temp); + output.joint_speeds.push_back(temp); + } + output.duration = input.duration(); + + return 0; +} +int ToRosData(JointSpeed input, kortex_driver::JointSpeed &output) +{ + output.joint_identifier = input.joint_identifier(); + output.value = input.value(); + output.duration = input.duration(); + + return 0; +} +int ToRosData(GripperCommand input, kortex_driver::GripperCommand &output) +{ + output.mode = input.mode(); + ToRosData(input.gripper(), output.gripper); + output.duration = input.duration(); + + return 0; +} +int ToRosData(GripperRequest input, kortex_driver::GripperRequest &output) +{ + output.mode = input.mode(); + + return 0; +} +int ToRosData(Gripper input, kortex_driver::Gripper &output) +{ + output.finger.clear(); + for(int i = 0; i < input.finger_size(); i++) + { + kortex_driver::Finger temp; + ToRosData(input.finger(i), temp); + output.finger.push_back(temp); + } + + return 0; +} +int ToRosData(Finger input, kortex_driver::Finger &output) +{ + output.finger_identifier = input.finger_identifier(); + output.value = input.value(); + + return 0; +} +int ToRosData(SystemTime input, kortex_driver::SystemTime &output) +{ + output.sec = input.sec(); + output.min = input.min(); + output.hour = input.hour(); + output.mday = input.mday(); + output.mon = input.mon(); + output.year = input.year(); + + return 0; +} +int ToRosData(ActuatorInformation input, kortex_driver::ActuatorInformation &output) +{ + output.count = input.count(); + + return 0; +} +int ToRosData(ArmStateInformation input, kortex_driver::ArmStateInformation &output) +{ + output.active_state = input.active_state(); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(ArmStateNotification input, kortex_driver::ArmStateNotification &output) +{ + output.active_state = input.active_state(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.connection(), output.connection); + + return 0; +} diff --git a/kortex_driver/src/base_ros_converter.h b/kortex_driver/src/base_ros_converter.h new file mode 100644 index 00000000..4e46986b --- /dev/null +++ b/kortex_driver/src/base_ros_converter.h @@ -0,0 +1,308 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BaseROS_CONVERTER_H_ +#define _KORTEX_BaseROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_driver/FullUserProfile.h" +#include "kortex_driver/UserProfile.h" +#include "kortex_driver/UserProfileList.h" +#include "kortex_driver/UserList.h" +#include "kortex_driver/PasswordChange.h" +#include "kortex_driver/SequenceHandle.h" +#include "kortex_driver/AdvancedSequenceHandle.h" +#include "kortex_driver/SequenceTaskHandle.h" +#include "kortex_driver/SequenceTask.h" +#include "kortex_driver/Sequence.h" +#include "kortex_driver/SequenceList.h" +#include "kortex_driver/AppendActionInformation.h" +#include "kortex_driver/ActionHandle.h" +#include "kortex_driver/RequestedActionType.h" +#include "kortex_driver/Action.h" +#include "kortex_driver/SwitchControlMapping.h" +#include "kortex_driver/ChangeTwist.h" +#include "kortex_driver/ChangeJointSpeeds.h" +#include "kortex_driver/EmergencyStop.h" +#include "kortex_driver/Faults.h" +#include "kortex_driver/Delay.h" +#include "kortex_driver/Stop.h" +#include "kortex_driver/ActionList.h" +#include "kortex_driver/Timeout.h" +#include "kortex_driver/Ssid.h" +#include "kortex_driver/CommunicationInterfaceConfiguration.h" +#include "kortex_driver/NetworkHandle.h" +#include "kortex_driver/IPv4Configuration.h" +#include "kortex_driver/IPv4Information.h" +#include "kortex_driver/FullIPv4Configuration.h" +#include "kortex_driver/WifiInformation.h" +#include "kortex_driver/WifiInformationList.h" +#include "kortex_driver/WifiConfiguration.h" +#include "kortex_driver/WifiConfigurationList.h" +#include "kortex_driver/ProtectionZoneHandle.h" +#include "kortex_driver/RotationMatrixRow.h" +#include "kortex_driver/RotationMatrix.h" +#include "kortex_driver/Point.h" +#include "kortex_driver/ZoneShape.h" +#include "kortex_driver/ProtectionZone.h" +#include "kortex_driver/ProtectionZoneList.h" +#include "kortex_driver/LimitationTypeIdentifier.h" +#include "kortex_driver/CartesianLimitation.h" +#include "kortex_driver/CartesianLimitationList.h" +#include "kortex_driver/JointLimitationValue.h" +#include "kortex_driver/JointLimitationValueList.h" +#include "kortex_driver/JointLimitation.h" +#include "kortex_driver/JointLimitationTypeIdentifier.h" +#include "kortex_driver/Query.h" +#include "kortex_driver/ConfigurationChangeNotification.h" +#include "kortex_driver/MappingInfoNotification.h" +#include "kortex_driver/ControlModeInformation.h" +#include "kortex_driver/ControlModeNotification.h" +#include "kortex_driver/ServoingModeInformation.h" +#include "kortex_driver/OperatingModeInformation.h" +#include "kortex_driver/OperatingModeNotification.h" +#include "kortex_driver/ServoingModeNotification.h" +#include "kortex_driver/SequenceInfoNotification.h" +#include "kortex_driver/SequenceInformation.h" +#include "kortex_driver/ProtectionZoneNotification.h" +#include "kortex_driver/ProtectionZoneInformation.h" +#include "kortex_driver/UserNotification.h" +#include "kortex_driver/ControllerHandle.h" +#include "kortex_driver/ControllerElementHandle.h" +#include "kortex_driver/ControllerNotification.h" +#include "kortex_driver/ControllerList.h" +#include "kortex_driver/ControllerState.h" +#include "kortex_driver/ControllerElementState.h" +#include "kortex_driver/ActionNotification.h" +#include "kortex_driver/ActionExecutionState.h" +#include "kortex_driver/RobotEventNotification.h" +#include "kortex_driver/FactoryNotification.h" +#include "kortex_driver/NetworkNotification.h" +#include "kortex_driver/ConfigurationChangeNotificationList.h" +#include "kortex_driver/MappingInfoNotificationList.h" +#include "kortex_driver/ControlModeNotificationList.h" +#include "kortex_driver/OperatingModeNotificationList.h" +#include "kortex_driver/ServoingModeNotificationList.h" +#include "kortex_driver/SequenceInfoNotificationList.h" +#include "kortex_driver/ProtectionZoneNotificationList.h" +#include "kortex_driver/UserNotificationList.h" +#include "kortex_driver/SafetyNotificationList.h" +#include "kortex_driver/ControllerNotificationList.h" +#include "kortex_driver/ActionNotificationList.h" +#include "kortex_driver/RobotEventNotificationList.h" +#include "kortex_driver/NetworkNotificationList.h" +#include "kortex_driver/MappingHandle.h" +#include "kortex_driver/SafetyEvent.h" +#include "kortex_driver/ControllerEvent.h" +#include "kortex_driver/GpioEvent.h" +#include "kortex_driver/MapEvent.h" +#include "kortex_driver/MapElement.h" +#include "kortex_driver/ActivateMapHandle.h" +#include "kortex_driver/Map.h" +#include "kortex_driver/MapHandle.h" +#include "kortex_driver/MapList.h" +#include "kortex_driver/MapGroupHandle.h" +#include "kortex_driver/MapGroup.h" +#include "kortex_driver/MapGroupList.h" +#include "kortex_driver/Mapping.h" +#include "kortex_driver/MappingList.h" +#include "kortex_driver/TransformationMatrix.h" +#include "kortex_driver/TransformationRow.h" +#include "kortex_driver/Pose.h" +#include "kortex_driver/Position.h" +#include "kortex_driver/Orientation.h" +#include "kortex_driver/CartesianSpeed.h" +#include "kortex_driver/CartesianTrajectoryConstraint.h" +#include "kortex_driver/JointTrajectoryConstraint.h" +#include "kortex_driver/Twist.h" +#include "kortex_driver/Admittance.h" +#include "kortex_driver/CartesianReferenceFrameRequest.h" +#include "kortex_driver/ConstrainedPose.h" +#include "kortex_driver/ConstrainedPosition.h" +#include "kortex_driver/ConstrainedOrientation.h" +#include "kortex_driver/TwistCommand.h" +#include "kortex_driver/ConstrainedJointAngles.h" +#include "kortex_driver/ConstrainedJointAngle.h" +#include "kortex_driver/JointAngles.h" +#include "kortex_driver/JointAngle.h" +#include "kortex_driver/JointSpeeds.h" +#include "kortex_driver/JointSpeed.h" +#include "kortex_driver/GripperCommand.h" +#include "kortex_driver/GripperRequest.h" +#include "kortex_driver/Gripper.h" +#include "kortex_driver/Finger.h" +#include "kortex_driver/SystemTime.h" +#include "kortex_driver/ActuatorInformation.h" +#include "kortex_driver/ArmStateInformation.h" +#include "kortex_driver/ArmStateNotification.h" + + +using namespace Kinova::Api::Base; + +int ToRosData(FullUserProfile input, kortex_driver::FullUserProfile &output); +int ToRosData(UserProfile input, kortex_driver::UserProfile &output); +int ToRosData(UserProfileList input, kortex_driver::UserProfileList &output); +int ToRosData(UserList input, kortex_driver::UserList &output); +int ToRosData(PasswordChange input, kortex_driver::PasswordChange &output); +int ToRosData(SequenceHandle input, kortex_driver::SequenceHandle &output); +int ToRosData(AdvancedSequenceHandle input, kortex_driver::AdvancedSequenceHandle &output); +int ToRosData(SequenceTaskHandle input, kortex_driver::SequenceTaskHandle &output); +int ToRosData(SequenceTask input, kortex_driver::SequenceTask &output); +int ToRosData(Sequence input, kortex_driver::Sequence &output); +int ToRosData(SequenceList input, kortex_driver::SequenceList &output); +int ToRosData(AppendActionInformation input, kortex_driver::AppendActionInformation &output); +int ToRosData(ActionHandle input, kortex_driver::ActionHandle &output); +int ToRosData(RequestedActionType input, kortex_driver::RequestedActionType &output); +int ToRosData(Action input, kortex_driver::Action &output); +int ToRosData(SwitchControlMapping input, kortex_driver::SwitchControlMapping &output); +int ToRosData(ChangeTwist input, kortex_driver::ChangeTwist &output); +int ToRosData(ChangeJointSpeeds input, kortex_driver::ChangeJointSpeeds &output); +int ToRosData(EmergencyStop input, kortex_driver::EmergencyStop &output); +int ToRosData(Faults input, kortex_driver::Faults &output); +int ToRosData(Delay input, kortex_driver::Delay &output); +int ToRosData(Stop input, kortex_driver::Stop &output); +int ToRosData(ActionList input, kortex_driver::ActionList &output); +int ToRosData(Timeout input, kortex_driver::Timeout &output); +int ToRosData(Ssid input, kortex_driver::Ssid &output); +int ToRosData(CommunicationInterfaceConfiguration input, kortex_driver::CommunicationInterfaceConfiguration &output); +int ToRosData(NetworkHandle input, kortex_driver::NetworkHandle &output); +int ToRosData(IPv4Configuration input, kortex_driver::IPv4Configuration &output); +int ToRosData(IPv4Information input, kortex_driver::IPv4Information &output); +int ToRosData(FullIPv4Configuration input, kortex_driver::FullIPv4Configuration &output); +int ToRosData(WifiInformation input, kortex_driver::WifiInformation &output); +int ToRosData(WifiInformationList input, kortex_driver::WifiInformationList &output); +int ToRosData(WifiConfiguration input, kortex_driver::WifiConfiguration &output); +int ToRosData(WifiConfigurationList input, kortex_driver::WifiConfigurationList &output); +int ToRosData(ProtectionZoneHandle input, kortex_driver::ProtectionZoneHandle &output); +int ToRosData(RotationMatrixRow input, kortex_driver::RotationMatrixRow &output); +int ToRosData(RotationMatrix input, kortex_driver::RotationMatrix &output); +int ToRosData(Point input, kortex_driver::Point &output); +int ToRosData(ZoneShape input, kortex_driver::ZoneShape &output); +int ToRosData(ProtectionZone input, kortex_driver::ProtectionZone &output); +int ToRosData(ProtectionZoneList input, kortex_driver::ProtectionZoneList &output); +int ToRosData(LimitationTypeIdentifier input, kortex_driver::LimitationTypeIdentifier &output); +int ToRosData(CartesianLimitation input, kortex_driver::CartesianLimitation &output); +int ToRosData(CartesianLimitationList input, kortex_driver::CartesianLimitationList &output); +int ToRosData(JointLimitationValue input, kortex_driver::JointLimitationValue &output); +int ToRosData(JointLimitationValueList input, kortex_driver::JointLimitationValueList &output); +int ToRosData(JointLimitation input, kortex_driver::JointLimitation &output); +int ToRosData(JointLimitationTypeIdentifier input, kortex_driver::JointLimitationTypeIdentifier &output); +int ToRosData(Query input, kortex_driver::Query &output); +int ToRosData(ConfigurationChangeNotification input, kortex_driver::ConfigurationChangeNotification &output); +int ToRosData(MappingInfoNotification input, kortex_driver::MappingInfoNotification &output); +int ToRosData(ControlModeInformation input, kortex_driver::ControlModeInformation &output); +int ToRosData(ControlModeNotification input, kortex_driver::ControlModeNotification &output); +int ToRosData(ServoingModeInformation input, kortex_driver::ServoingModeInformation &output); +int ToRosData(OperatingModeInformation input, kortex_driver::OperatingModeInformation &output); +int ToRosData(OperatingModeNotification input, kortex_driver::OperatingModeNotification &output); +int ToRosData(ServoingModeNotification input, kortex_driver::ServoingModeNotification &output); +int ToRosData(SequenceInfoNotification input, kortex_driver::SequenceInfoNotification &output); +int ToRosData(SequenceInformation input, kortex_driver::SequenceInformation &output); +int ToRosData(ProtectionZoneNotification input, kortex_driver::ProtectionZoneNotification &output); +int ToRosData(ProtectionZoneInformation input, kortex_driver::ProtectionZoneInformation &output); +int ToRosData(UserNotification input, kortex_driver::UserNotification &output); +int ToRosData(ControllerHandle input, kortex_driver::ControllerHandle &output); +int ToRosData(ControllerElementHandle input, kortex_driver::ControllerElementHandle &output); +int ToRosData(ControllerNotification input, kortex_driver::ControllerNotification &output); +int ToRosData(ControllerList input, kortex_driver::ControllerList &output); +int ToRosData(ControllerState input, kortex_driver::ControllerState &output); +int ToRosData(ControllerElementState input, kortex_driver::ControllerElementState &output); +int ToRosData(ActionNotification input, kortex_driver::ActionNotification &output); +int ToRosData(ActionExecutionState input, kortex_driver::ActionExecutionState &output); +int ToRosData(RobotEventNotification input, kortex_driver::RobotEventNotification &output); +int ToRosData(FactoryNotification input, kortex_driver::FactoryNotification &output); +int ToRosData(NetworkNotification input, kortex_driver::NetworkNotification &output); +int ToRosData(ConfigurationChangeNotificationList input, kortex_driver::ConfigurationChangeNotificationList &output); +int ToRosData(MappingInfoNotificationList input, kortex_driver::MappingInfoNotificationList &output); +int ToRosData(ControlModeNotificationList input, kortex_driver::ControlModeNotificationList &output); +int ToRosData(OperatingModeNotificationList input, kortex_driver::OperatingModeNotificationList &output); +int ToRosData(ServoingModeNotificationList input, kortex_driver::ServoingModeNotificationList &output); +int ToRosData(SequenceInfoNotificationList input, kortex_driver::SequenceInfoNotificationList &output); +int ToRosData(ProtectionZoneNotificationList input, kortex_driver::ProtectionZoneNotificationList &output); +int ToRosData(UserNotificationList input, kortex_driver::UserNotificationList &output); +int ToRosData(SafetyNotificationList input, kortex_driver::SafetyNotificationList &output); +int ToRosData(ControllerNotificationList input, kortex_driver::ControllerNotificationList &output); +int ToRosData(ActionNotificationList input, kortex_driver::ActionNotificationList &output); +int ToRosData(RobotEventNotificationList input, kortex_driver::RobotEventNotificationList &output); +int ToRosData(NetworkNotificationList input, kortex_driver::NetworkNotificationList &output); +int ToRosData(MappingHandle input, kortex_driver::MappingHandle &output); +int ToRosData(SafetyEvent input, kortex_driver::SafetyEvent &output); +int ToRosData(ControllerEvent input, kortex_driver::ControllerEvent &output); +int ToRosData(GpioEvent input, kortex_driver::GpioEvent &output); +int ToRosData(MapEvent input, kortex_driver::MapEvent &output); +int ToRosData(MapElement input, kortex_driver::MapElement &output); +int ToRosData(ActivateMapHandle input, kortex_driver::ActivateMapHandle &output); +int ToRosData(Map input, kortex_driver::Map &output); +int ToRosData(MapHandle input, kortex_driver::MapHandle &output); +int ToRosData(MapList input, kortex_driver::MapList &output); +int ToRosData(MapGroupHandle input, kortex_driver::MapGroupHandle &output); +int ToRosData(MapGroup input, kortex_driver::MapGroup &output); +int ToRosData(MapGroupList input, kortex_driver::MapGroupList &output); +int ToRosData(Mapping input, kortex_driver::Mapping &output); +int ToRosData(MappingList input, kortex_driver::MappingList &output); +int ToRosData(TransformationMatrix input, kortex_driver::TransformationMatrix &output); +int ToRosData(TransformationRow input, kortex_driver::TransformationRow &output); +int ToRosData(Pose input, kortex_driver::Pose &output); +int ToRosData(Position input, kortex_driver::Position &output); +int ToRosData(Orientation input, kortex_driver::Orientation &output); +int ToRosData(CartesianSpeed input, kortex_driver::CartesianSpeed &output); +int ToRosData(CartesianTrajectoryConstraint input, kortex_driver::CartesianTrajectoryConstraint &output); +int ToRosData(JointTrajectoryConstraint input, kortex_driver::JointTrajectoryConstraint &output); +int ToRosData(Twist input, kortex_driver::Twist &output); +int ToRosData(Admittance input, kortex_driver::Admittance &output); +int ToRosData(CartesianReferenceFrameRequest input, kortex_driver::CartesianReferenceFrameRequest &output); +int ToRosData(ConstrainedPose input, kortex_driver::ConstrainedPose &output); +int ToRosData(ConstrainedPosition input, kortex_driver::ConstrainedPosition &output); +int ToRosData(ConstrainedOrientation input, kortex_driver::ConstrainedOrientation &output); +int ToRosData(TwistCommand input, kortex_driver::TwistCommand &output); +int ToRosData(ConstrainedJointAngles input, kortex_driver::ConstrainedJointAngles &output); +int ToRosData(ConstrainedJointAngle input, kortex_driver::ConstrainedJointAngle &output); +int ToRosData(JointAngles input, kortex_driver::JointAngles &output); +int ToRosData(JointAngle input, kortex_driver::JointAngle &output); +int ToRosData(JointSpeeds input, kortex_driver::JointSpeeds &output); +int ToRosData(JointSpeed input, kortex_driver::JointSpeed &output); +int ToRosData(GripperCommand input, kortex_driver::GripperCommand &output); +int ToRosData(GripperRequest input, kortex_driver::GripperRequest &output); +int ToRosData(Gripper input, kortex_driver::Gripper &output); +int ToRosData(Finger input, kortex_driver::Finger &output); +int ToRosData(SystemTime input, kortex_driver::SystemTime &output); +int ToRosData(ActuatorInformation input, kortex_driver::ActuatorInformation &output); +int ToRosData(ArmStateInformation input, kortex_driver::ArmStateInformation &output); +int ToRosData(ArmStateNotification input, kortex_driver::ArmStateNotification &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/src/basecyclic_proto_converter.cpp b/kortex_driver/src/basecyclic_proto_converter.cpp new file mode 100644 index 00000000..b4e14bb8 --- /dev/null +++ b/kortex_driver/src/basecyclic_proto_converter.cpp @@ -0,0 +1,212 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "basecyclic_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_driver::ActuatorCommand input, ActuatorCommand *output) +{ + output->set_command_id(input.command_id); + output->set_flags(input.flags); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_torque_joint(input.torque_joint); + output->set_current_motor(input.current_motor); + + return 0; +} +int ToProtoData(kortex_driver::InterconnectCommand input, InterconnectCommand *output) +{ + output->set_command_id(input.command_id); + output->set_flags(input.flags); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_force(input.force); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorFeedback input, ActuatorFeedback *output) +{ + output->set_command_id(input.command_id); + output->set_status_flags(input.status_flags); + output->set_jitter_comm(input.jitter_comm); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_torque(input.torque); + output->set_current_motor(input.current_motor); + output->set_voltage(input.voltage); + output->set_temperature_motor(input.temperature_motor); + output->set_temperature_core(input.temperature_core); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + + return 0; +} +int ToProtoData(kortex_driver::InterconnectFeedback input, InterconnectFeedback *output) +{ + output->set_command_id(input.command_id); + output->set_status_flags(input.status_flags); + output->set_jitter_comm(input.jitter_comm); + output->set_position(input.position); + output->set_velocity(input.velocity); + output->set_force(input.force); + output->set_imu_acceleration_x(input.imu_acceleration_x); + output->set_imu_acceleration_y(input.imu_acceleration_y); + output->set_imu_acceleration_z(input.imu_acceleration_z); + output->set_imu_angular_velocity_x(input.imu_angular_velocity_x); + output->set_imu_angular_velocity_y(input.imu_angular_velocity_y); + output->set_imu_angular_velocity_z(input.imu_angular_velocity_z); + output->set_voltage(input.voltage); + output->set_temperature_core(input.temperature_core); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + + return 0; +} +int ToProtoData(kortex_driver::ActuatorCustomData input, ActuatorCustomData *output) +{ + output->set_command_id(input.command_id); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->set_custom_data_8(input.custom_data_8); + output->set_custom_data_9(input.custom_data_9); + output->set_custom_data_10(input.custom_data_10); + output->set_custom_data_11(input.custom_data_11); + output->set_custom_data_12(input.custom_data_12); + output->set_custom_data_13(input.custom_data_13); + output->set_custom_data_14(input.custom_data_14); + output->set_custom_data_15(input.custom_data_15); + + return 0; +} +int ToProtoData(kortex_driver::InterconnectCustomData input, InterconnectCustomData *output) +{ + output->set_command_id(input.command_id); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->set_custom_data_8(input.custom_data_8); + output->set_custom_data_9(input.custom_data_9); + output->set_custom_data_10(input.custom_data_10); + output->set_custom_data_11(input.custom_data_11); + output->set_custom_data_12(input.custom_data_12); + output->set_custom_data_13(input.custom_data_13); + output->set_custom_data_14(input.custom_data_14); + output->set_custom_data_15(input.custom_data_15); + + return 0; +} +int ToProtoData(kortex_driver::BaseFeedback input, BaseFeedback *output) +{ + output->set_active_state_connection_identifier(input.active_state_connection_identifier); + output->set_active_state((Kinova::Api::Common::ArmState)input.active_state); + output->set_arm_voltage(input.arm_voltage); + output->set_arm_current(input.arm_current); + output->set_temperature_cpu(input.temperature_cpu); + output->set_temperature_ambient(input.temperature_ambient); + output->set_imu_acceleration_x(input.imu_acceleration_x); + output->set_imu_acceleration_y(input.imu_acceleration_y); + output->set_imu_acceleration_z(input.imu_acceleration_z); + output->set_imu_angular_velocity_x(input.imu_angular_velocity_x); + output->set_imu_angular_velocity_y(input.imu_angular_velocity_y); + output->set_imu_angular_velocity_z(input.imu_angular_velocity_z); + output->set_tool_pose_x(input.tool_pose_x); + output->set_tool_pose_y(input.tool_pose_y); + output->set_tool_pose_z(input.tool_pose_z); + output->set_tool_pose_theta_x(input.tool_pose_theta_x); + output->set_tool_pose_theta_y(input.tool_pose_theta_y); + output->set_tool_pose_theta_z(input.tool_pose_theta_z); + output->set_tool_twist_linear_x(input.tool_twist_linear_x); + output->set_tool_twist_linear_y(input.tool_twist_linear_y); + output->set_tool_twist_linear_z(input.tool_twist_linear_z); + output->set_tool_twist_angular_x(input.tool_twist_angular_x); + output->set_tool_twist_angular_y(input.tool_twist_angular_y); + output->set_tool_twist_angular_z(input.tool_twist_angular_z); + output->set_tool_external_wrench_force_x(input.tool_external_wrench_force_x); + output->set_tool_external_wrench_force_y(input.tool_external_wrench_force_y); + output->set_tool_external_wrench_force_z(input.tool_external_wrench_force_z); + output->set_tool_external_wrench_torque_x(input.tool_external_wrench_torque_x); + output->set_tool_external_wrench_torque_y(input.tool_external_wrench_torque_y); + output->set_tool_external_wrench_torque_z(input.tool_external_wrench_torque_z); + output->set_fault_bank_a(input.fault_bank_a); + output->set_fault_bank_b(input.fault_bank_b); + output->set_warning_bank_a(input.warning_bank_a); + output->set_warning_bank_b(input.warning_bank_b); + + return 0; +} +int ToProtoData(kortex_driver::CustomData input, CustomData *output) +{ + output->set_frame_id(input.frame_id); + output->set_custom_data_0(input.custom_data_0); + output->set_custom_data_1(input.custom_data_1); + output->set_custom_data_2(input.custom_data_2); + output->set_custom_data_3(input.custom_data_3); + output->set_custom_data_4(input.custom_data_4); + output->set_custom_data_5(input.custom_data_5); + output->set_custom_data_6(input.custom_data_6); + output->set_custom_data_7(input.custom_data_7); + output->clear_actuators_custom_data(); + for(int i = 0; i < input.actuators_custom_data.size(); i++) + { + ToProtoData(input.actuators_custom_data[i], output->add_actuators_custom_data()); + } + ToProtoData(input.interconnect_custom_data, output->mutable_interconnect_custom_data()); + + return 0; +} +int ToProtoData(kortex_driver::Command input, Command *output) +{ + output->set_frame_id(input.frame_id); + output->clear_actuators(); + for(int i = 0; i < input.actuators.size(); i++) + { + ToProtoData(input.actuators[i], output->add_actuators()); + } + ToProtoData(input.interconnect, output->mutable_interconnect()); + + return 0; +} +int ToProtoData(kortex_driver::Feedback input, Feedback *output) +{ + output->set_frame_id(input.frame_id); + ToProtoData(input.base, output->mutable_base()); + output->clear_actuators(); + for(int i = 0; i < input.actuators.size(); i++) + { + ToProtoData(input.actuators[i], output->add_actuators()); + } + ToProtoData(input.interconnect, output->mutable_interconnect()); + + return 0; +} diff --git a/kortex_driver/src/basecyclic_proto_converter.h b/kortex_driver/src/basecyclic_proto_converter.h new file mode 100644 index 00000000..1dc3d079 --- /dev/null +++ b/kortex_driver/src/basecyclic_proto_converter.h @@ -0,0 +1,68 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BaseCyclicPROTO_CONVERTER_H_ +#define _KORTEX_BaseCyclicPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_driver/ActuatorCommand.h" +#include "kortex_driver/InterconnectCommand.h" +#include "kortex_driver/ActuatorFeedback.h" +#include "kortex_driver/InterconnectFeedback.h" +#include "kortex_driver/ActuatorCustomData.h" +#include "kortex_driver/InterconnectCustomData.h" +#include "kortex_driver/BaseFeedback.h" +#include "kortex_driver/CustomData.h" +#include "kortex_driver/Command.h" +#include "kortex_driver/Feedback.h" + + +using namespace Kinova::Api::BaseCyclic; + +int ToProtoData(kortex_driver::ActuatorCommand intput, ActuatorCommand *output); +int ToProtoData(kortex_driver::InterconnectCommand intput, InterconnectCommand *output); +int ToProtoData(kortex_driver::ActuatorFeedback intput, ActuatorFeedback *output); +int ToProtoData(kortex_driver::InterconnectFeedback intput, InterconnectFeedback *output); +int ToProtoData(kortex_driver::ActuatorCustomData intput, ActuatorCustomData *output); +int ToProtoData(kortex_driver::InterconnectCustomData intput, InterconnectCustomData *output); +int ToProtoData(kortex_driver::BaseFeedback intput, BaseFeedback *output); +int ToProtoData(kortex_driver::CustomData intput, CustomData *output); +int ToProtoData(kortex_driver::Command intput, Command *output); +int ToProtoData(kortex_driver::Feedback intput, Feedback *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/src/basecyclic_ros_converter.cpp b/kortex_driver/src/basecyclic_ros_converter.cpp new file mode 100644 index 00000000..5283ee52 --- /dev/null +++ b/kortex_driver/src/basecyclic_ros_converter.cpp @@ -0,0 +1,218 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "basecyclic_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(ActuatorCommand input, kortex_driver::ActuatorCommand &output) +{ + output.command_id = input.command_id(); + output.flags = input.flags(); + output.position = input.position(); + output.velocity = input.velocity(); + output.torque_joint = input.torque_joint(); + output.current_motor = input.current_motor(); + + return 0; +} +int ToRosData(InterconnectCommand input, kortex_driver::InterconnectCommand &output) +{ + output.command_id = input.command_id(); + output.flags = input.flags(); + output.position = input.position(); + output.velocity = input.velocity(); + output.force = input.force(); + + return 0; +} +int ToRosData(ActuatorFeedback input, kortex_driver::ActuatorFeedback &output) +{ + output.command_id = input.command_id(); + output.status_flags = input.status_flags(); + output.jitter_comm = input.jitter_comm(); + output.position = input.position(); + output.velocity = input.velocity(); + output.torque = input.torque(); + output.current_motor = input.current_motor(); + output.voltage = input.voltage(); + output.temperature_motor = input.temperature_motor(); + output.temperature_core = input.temperature_core(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + + return 0; +} +int ToRosData(InterconnectFeedback input, kortex_driver::InterconnectFeedback &output) +{ + output.command_id = input.command_id(); + output.status_flags = input.status_flags(); + output.jitter_comm = input.jitter_comm(); + output.position = input.position(); + output.velocity = input.velocity(); + output.force = input.force(); + output.imu_acceleration_x = input.imu_acceleration_x(); + output.imu_acceleration_y = input.imu_acceleration_y(); + output.imu_acceleration_z = input.imu_acceleration_z(); + output.imu_angular_velocity_x = input.imu_angular_velocity_x(); + output.imu_angular_velocity_y = input.imu_angular_velocity_y(); + output.imu_angular_velocity_z = input.imu_angular_velocity_z(); + output.voltage = input.voltage(); + output.temperature_core = input.temperature_core(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + + return 0; +} +int ToRosData(ActuatorCustomData input, kortex_driver::ActuatorCustomData &output) +{ + output.command_id = input.command_id(); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.custom_data_8 = input.custom_data_8(); + output.custom_data_9 = input.custom_data_9(); + output.custom_data_10 = input.custom_data_10(); + output.custom_data_11 = input.custom_data_11(); + output.custom_data_12 = input.custom_data_12(); + output.custom_data_13 = input.custom_data_13(); + output.custom_data_14 = input.custom_data_14(); + output.custom_data_15 = input.custom_data_15(); + + return 0; +} +int ToRosData(InterconnectCustomData input, kortex_driver::InterconnectCustomData &output) +{ + output.command_id = input.command_id(); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.custom_data_8 = input.custom_data_8(); + output.custom_data_9 = input.custom_data_9(); + output.custom_data_10 = input.custom_data_10(); + output.custom_data_11 = input.custom_data_11(); + output.custom_data_12 = input.custom_data_12(); + output.custom_data_13 = input.custom_data_13(); + output.custom_data_14 = input.custom_data_14(); + output.custom_data_15 = input.custom_data_15(); + + return 0; +} +int ToRosData(BaseFeedback input, kortex_driver::BaseFeedback &output) +{ + output.active_state_connection_identifier = input.active_state_connection_identifier(); + output.active_state = input.active_state(); + output.arm_voltage = input.arm_voltage(); + output.arm_current = input.arm_current(); + output.temperature_cpu = input.temperature_cpu(); + output.temperature_ambient = input.temperature_ambient(); + output.imu_acceleration_x = input.imu_acceleration_x(); + output.imu_acceleration_y = input.imu_acceleration_y(); + output.imu_acceleration_z = input.imu_acceleration_z(); + output.imu_angular_velocity_x = input.imu_angular_velocity_x(); + output.imu_angular_velocity_y = input.imu_angular_velocity_y(); + output.imu_angular_velocity_z = input.imu_angular_velocity_z(); + output.tool_pose_x = input.tool_pose_x(); + output.tool_pose_y = input.tool_pose_y(); + output.tool_pose_z = input.tool_pose_z(); + output.tool_pose_theta_x = input.tool_pose_theta_x(); + output.tool_pose_theta_y = input.tool_pose_theta_y(); + output.tool_pose_theta_z = input.tool_pose_theta_z(); + output.tool_twist_linear_x = input.tool_twist_linear_x(); + output.tool_twist_linear_y = input.tool_twist_linear_y(); + output.tool_twist_linear_z = input.tool_twist_linear_z(); + output.tool_twist_angular_x = input.tool_twist_angular_x(); + output.tool_twist_angular_y = input.tool_twist_angular_y(); + output.tool_twist_angular_z = input.tool_twist_angular_z(); + output.tool_external_wrench_force_x = input.tool_external_wrench_force_x(); + output.tool_external_wrench_force_y = input.tool_external_wrench_force_y(); + output.tool_external_wrench_force_z = input.tool_external_wrench_force_z(); + output.tool_external_wrench_torque_x = input.tool_external_wrench_torque_x(); + output.tool_external_wrench_torque_y = input.tool_external_wrench_torque_y(); + output.tool_external_wrench_torque_z = input.tool_external_wrench_torque_z(); + output.fault_bank_a = input.fault_bank_a(); + output.fault_bank_b = input.fault_bank_b(); + output.warning_bank_a = input.warning_bank_a(); + output.warning_bank_b = input.warning_bank_b(); + + return 0; +} +int ToRosData(CustomData input, kortex_driver::CustomData &output) +{ + output.frame_id = input.frame_id(); + output.custom_data_0 = input.custom_data_0(); + output.custom_data_1 = input.custom_data_1(); + output.custom_data_2 = input.custom_data_2(); + output.custom_data_3 = input.custom_data_3(); + output.custom_data_4 = input.custom_data_4(); + output.custom_data_5 = input.custom_data_5(); + output.custom_data_6 = input.custom_data_6(); + output.custom_data_7 = input.custom_data_7(); + output.actuators_custom_data.clear(); + for(int i = 0; i < input.actuators_custom_data_size(); i++) + { + kortex_driver::ActuatorCustomData temp; + ToRosData(input.actuators_custom_data(i), temp); + output.actuators_custom_data.push_back(temp); + } + ToRosData(input.interconnect_custom_data(), output.interconnect_custom_data); + + return 0; +} +int ToRosData(Command input, kortex_driver::Command &output) +{ + output.frame_id = input.frame_id(); + output.actuators.clear(); + for(int i = 0; i < input.actuators_size(); i++) + { + kortex_driver::ActuatorCommand temp; + ToRosData(input.actuators(i), temp); + output.actuators.push_back(temp); + } + ToRosData(input.interconnect(), output.interconnect); + + return 0; +} +int ToRosData(Feedback input, kortex_driver::Feedback &output) +{ + output.frame_id = input.frame_id(); + ToRosData(input.base(), output.base); + output.actuators.clear(); + for(int i = 0; i < input.actuators_size(); i++) + { + kortex_driver::ActuatorFeedback temp; + ToRosData(input.actuators(i), temp); + output.actuators.push_back(temp); + } + ToRosData(input.interconnect(), output.interconnect); + + return 0; +} diff --git a/kortex_driver/src/basecyclic_ros_converter.h b/kortex_driver/src/basecyclic_ros_converter.h new file mode 100644 index 00000000..b4ab4bc7 --- /dev/null +++ b/kortex_driver/src/basecyclic_ros_converter.h @@ -0,0 +1,68 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_BaseCyclicROS_CONVERTER_H_ +#define _KORTEX_BaseCyclicROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_driver/ActuatorCommand.h" +#include "kortex_driver/InterconnectCommand.h" +#include "kortex_driver/ActuatorFeedback.h" +#include "kortex_driver/InterconnectFeedback.h" +#include "kortex_driver/ActuatorCustomData.h" +#include "kortex_driver/InterconnectCustomData.h" +#include "kortex_driver/BaseFeedback.h" +#include "kortex_driver/CustomData.h" +#include "kortex_driver/Command.h" +#include "kortex_driver/Feedback.h" + + +using namespace Kinova::Api::BaseCyclic; + +int ToRosData(ActuatorCommand input, kortex_driver::ActuatorCommand &output); +int ToRosData(InterconnectCommand input, kortex_driver::InterconnectCommand &output); +int ToRosData(ActuatorFeedback input, kortex_driver::ActuatorFeedback &output); +int ToRosData(InterconnectFeedback input, kortex_driver::InterconnectFeedback &output); +int ToRosData(ActuatorCustomData input, kortex_driver::ActuatorCustomData &output); +int ToRosData(InterconnectCustomData input, kortex_driver::InterconnectCustomData &output); +int ToRosData(BaseFeedback input, kortex_driver::BaseFeedback &output); +int ToRosData(CustomData input, kortex_driver::CustomData &output); +int ToRosData(Command input, kortex_driver::Command &output); +int ToRosData(Feedback input, kortex_driver::Feedback &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/src/common_proto_converter.cpp b/kortex_driver/src/common_proto_converter.cpp new file mode 100644 index 00000000..6741b645 --- /dev/null +++ b/kortex_driver/src/common_proto_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_driver::DeviceHandle input, DeviceHandle *output) +{ + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + output->set_device_identifier(input.device_identifier); + output->set_order(input.order); + + return 0; +} +int ToProtoData(kortex_driver::Empty input, Empty *output) +{ + + return 0; +} +int ToProtoData(kortex_driver::NotificationOptions input, NotificationOptions *output) +{ + output->set_type((Kinova::Api::Common::NotificationType)input.type); + output->set_rate_m_sec(input.rate_m_sec); + output->set_threshold_value(input.threshold_value); + + return 0; +} +int ToProtoData(kortex_driver::SafetyHandle input, SafetyHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::NotificationHandle input, NotificationHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_driver::SafetyNotification input, SafetyNotification *output) +{ + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_driver::Timestamp input, Timestamp *output) +{ + output->set_sec(input.sec); + output->set_usec(input.usec); + + return 0; +} +int ToProtoData(kortex_driver::UserProfileHandle input, UserProfileHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_driver::Connection input, Connection *output) +{ + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_connection_information(input.connection_information); + output->set_connection_identifier(input.connection_identifier); + + return 0; +} diff --git a/kortex_driver/src/common_proto_converter.h b/kortex_driver/src/common_proto_converter.h new file mode 100644 index 00000000..469401e7 --- /dev/null +++ b/kortex_driver/src/common_proto_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ +#define _KORTEX_CommonPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_driver/DeviceHandle.h" +#include "kortex_driver/Empty.h" +#include "kortex_driver/NotificationOptions.h" +#include "kortex_driver/SafetyHandle.h" +#include "kortex_driver/NotificationHandle.h" +#include "kortex_driver/SafetyNotification.h" +#include "kortex_driver/Timestamp.h" +#include "kortex_driver/UserProfileHandle.h" +#include "kortex_driver/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToProtoData(kortex_driver::DeviceHandle intput, DeviceHandle *output); +int ToProtoData(kortex_driver::Empty intput, Empty *output); +int ToProtoData(kortex_driver::NotificationOptions intput, NotificationOptions *output); +int ToProtoData(kortex_driver::SafetyHandle intput, SafetyHandle *output); +int ToProtoData(kortex_driver::NotificationHandle intput, NotificationHandle *output); +int ToProtoData(kortex_driver::SafetyNotification intput, SafetyNotification *output); +int ToProtoData(kortex_driver::Timestamp intput, Timestamp *output); +int ToProtoData(kortex_driver::UserProfileHandle intput, UserProfileHandle *output); +int ToProtoData(kortex_driver::Connection intput, Connection *output); + +#endif \ No newline at end of file diff --git a/kortex_driver/src/common_ros_converter.cpp b/kortex_driver/src/common_ros_converter.cpp new file mode 100644 index 00000000..6cc1bcaf --- /dev/null +++ b/kortex_driver/src/common_ros_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_ros_converter.h" + + +int ToRosData(DeviceHandle input, kortex_driver::DeviceHandle &output) +{ + output.device_type = input.device_type(); + output.device_identifier = input.device_identifier(); + output.order = input.order(); + + return 0; +} +int ToRosData(Empty input, kortex_driver::Empty &output) +{ + + return 0; +} +int ToRosData(NotificationOptions input, kortex_driver::NotificationOptions &output) +{ + output.type = input.type(); + output.rate_m_sec = input.rate_m_sec(); + output.threshold_value = input.threshold_value(); + + return 0; +} +int ToRosData(SafetyHandle input, kortex_driver::SafetyHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(NotificationHandle input, kortex_driver::NotificationHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(SafetyNotification input, kortex_driver::SafetyNotification &output) +{ + ToRosData(input.safety_handle(), output.safety_handle); + output.value = input.value(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(Timestamp input, kortex_driver::Timestamp &output) +{ + output.sec = input.sec(); + output.usec = input.usec(); + + return 0; +} +int ToRosData(UserProfileHandle input, kortex_driver::UserProfileHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(Connection input, kortex_driver::Connection &output) +{ + ToRosData(input.user_handle(), output.user_handle); + output.connection_information = input.connection_information(); + output.connection_identifier = input.connection_identifier(); + + return 0; +} diff --git a/kortex_driver/src/common_ros_converter.h b/kortex_driver/src/common_ros_converter.h new file mode 100644 index 00000000..1ea3e9ad --- /dev/null +++ b/kortex_driver/src/common_ros_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonROS_CONVERTER_H_ +#define _KORTEX_CommonROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_driver/DeviceHandle.h" +#include "kortex_driver/Empty.h" +#include "kortex_driver/NotificationOptions.h" +#include "kortex_driver/SafetyHandle.h" +#include "kortex_driver/NotificationHandle.h" +#include "kortex_driver/SafetyNotification.h" +#include "kortex_driver/Timestamp.h" +#include "kortex_driver/UserProfileHandle.h" +#include "kortex_driver/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToRosData(DeviceHandle input, kortex_driver::DeviceHandle &output); +int ToRosData(Empty input, kortex_driver::Empty &output); +int ToRosData(NotificationOptions input, kortex_driver::NotificationOptions &output); +int ToRosData(SafetyHandle input, kortex_driver::SafetyHandle &output); +int ToRosData(NotificationHandle input, kortex_driver::NotificationHandle &output); +int ToRosData(SafetyNotification input, kortex_driver::SafetyNotification &output); +int ToRosData(Timestamp input, kortex_driver::Timestamp &output); +int ToRosData(UserProfileHandle input, kortex_driver::UserProfileHandle &output); +int ToRosData(Connection input, kortex_driver::Connection &output); + +#endif \ No newline at end of file diff --git a/kortex_driver/src/main.cpp b/kortex_driver/src/main.cpp new file mode 100644 index 00000000..f6b77c4d --- /dev/null +++ b/kortex_driver/src/main.cpp @@ -0,0 +1,261 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "math_util.h" + +#include +#include + +#define JOINT_COUNT 7 + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "BaseServices"); + + uint32_t cyclic_data_rate = 100; + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 2) + { + ROS_INFO("Connecting to IP = %s - node refresh rate = %s", argv[1], argv[2]); + + //Converting the second parameter(the cyclic rate) to an unsigned int variable. + stringstream tempRate; + tempRate << argv[2]; + tempRate >> cyclic_data_rate; + if(tempRate.fail() || tempRate.bad()) + { + ROS_INFO("ERROR - Bad error rate, shutting down the node..."); + ros::shutdown(); + return 0; + } + } + else + { + ROS_INFO("You need to provide an IP adresse as the first parameter and a cycle rate(Hertz) as the second parameter. ex: rosrun package node 192.168.1.1 100"); + ros::shutdown(); + return 0; + } + + BaseServices services_object(argv[1], n); + + ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &BaseServices::SetDeviceID, &services_object); + + ros::ServiceServer serviceRefresh = n.advertiseService("Refresh", &BaseServices::Refresh, &services_object); + ros::ServiceServer serviceRefreshCommand = n.advertiseService("RefreshCommand", &BaseServices::RefreshCommand, &services_object); + ros::ServiceServer serviceRefreshFeedback = n.advertiseService("RefreshFeedback", &BaseServices::RefreshFeedback, &services_object); + ros::ServiceServer serviceRefreshCustomData = n.advertiseService("RefreshCustomData", &BaseServices::RefreshCustomData, &services_object); + ros::ServiceServer serviceCreateUserProfile = n.advertiseService("CreateUserProfile", &BaseServices::CreateUserProfile, &services_object); + ros::ServiceServer serviceUpdateUserProfile = n.advertiseService("UpdateUserProfile", &BaseServices::UpdateUserProfile, &services_object); + ros::ServiceServer serviceReadUserProfile = n.advertiseService("ReadUserProfile", &BaseServices::ReadUserProfile, &services_object); + ros::ServiceServer serviceDeleteUserProfile = n.advertiseService("DeleteUserProfile", &BaseServices::DeleteUserProfile, &services_object); + ros::ServiceServer serviceReadAllUserProfiles = n.advertiseService("ReadAllUserProfiles", &BaseServices::ReadAllUserProfiles, &services_object); + ros::ServiceServer serviceReadAllUsers = n.advertiseService("ReadAllUsers", &BaseServices::ReadAllUsers, &services_object); + ros::ServiceServer serviceChangePassword = n.advertiseService("ChangePassword", &BaseServices::ChangePassword, &services_object); + ros::ServiceServer serviceCreateSequence = n.advertiseService("CreateSequence", &BaseServices::CreateSequence, &services_object); + ros::ServiceServer serviceUpdateSequence = n.advertiseService("UpdateSequence", &BaseServices::UpdateSequence, &services_object); + ros::ServiceServer serviceReadSequence = n.advertiseService("ReadSequence", &BaseServices::ReadSequence, &services_object); + ros::ServiceServer serviceDeleteSequence = n.advertiseService("DeleteSequence", &BaseServices::DeleteSequence, &services_object); + ros::ServiceServer serviceReadAllSequences = n.advertiseService("ReadAllSequences", &BaseServices::ReadAllSequences, &services_object); + ros::ServiceServer serviceDeleteSequenceTask = n.advertiseService("DeleteSequenceTask", &BaseServices::DeleteSequenceTask, &services_object); + ros::ServiceServer serviceDeleteAllSequenceTasks = n.advertiseService("DeleteAllSequenceTasks", &BaseServices::DeleteAllSequenceTasks, &services_object); + ros::ServiceServer servicePlaySequence = n.advertiseService("PlaySequence", &BaseServices::PlaySequence, &services_object); + ros::ServiceServer servicePlayAdvancedSequence = n.advertiseService("PlayAdvancedSequence", &BaseServices::PlayAdvancedSequence, &services_object); + ros::ServiceServer serviceStopSequence = n.advertiseService("StopSequence", &BaseServices::StopSequence, &services_object); + ros::ServiceServer servicePauseSequence = n.advertiseService("PauseSequence", &BaseServices::PauseSequence, &services_object); + ros::ServiceServer serviceResumeSequence = n.advertiseService("ResumeSequence", &BaseServices::ResumeSequence, &services_object); + ros::ServiceServer serviceCreateProtectionZone = n.advertiseService("CreateProtectionZone", &BaseServices::CreateProtectionZone, &services_object); + ros::ServiceServer serviceUpdateProtectionZone = n.advertiseService("UpdateProtectionZone", &BaseServices::UpdateProtectionZone, &services_object); + ros::ServiceServer serviceReadProtectionZone = n.advertiseService("ReadProtectionZone", &BaseServices::ReadProtectionZone, &services_object); + ros::ServiceServer serviceDeleteProtectionZone = n.advertiseService("DeleteProtectionZone", &BaseServices::DeleteProtectionZone, &services_object); + ros::ServiceServer serviceReadAllProtectionZones = n.advertiseService("ReadAllProtectionZones", &BaseServices::ReadAllProtectionZones, &services_object); + ros::ServiceServer serviceCreateMapping = n.advertiseService("CreateMapping", &BaseServices::CreateMapping, &services_object); + ros::ServiceServer serviceReadMapping = n.advertiseService("ReadMapping", &BaseServices::ReadMapping, &services_object); + ros::ServiceServer serviceReadAllMappings = n.advertiseService("ReadAllMappings", &BaseServices::ReadAllMappings, &services_object); + ros::ServiceServer serviceCreateMap = n.advertiseService("CreateMap", &BaseServices::CreateMap, &services_object); + ros::ServiceServer serviceReadAllMaps = n.advertiseService("ReadAllMaps", &BaseServices::ReadAllMaps, &services_object); + ros::ServiceServer serviceActivateMap = n.advertiseService("ActivateMap", &BaseServices::ActivateMap, &services_object); + ros::ServiceServer serviceCreateAction = n.advertiseService("CreateAction", &BaseServices::CreateAction, &services_object); + ros::ServiceServer serviceReadAction = n.advertiseService("ReadAction", &BaseServices::ReadAction, &services_object); + ros::ServiceServer serviceReadAllActions = n.advertiseService("ReadAllActions", &BaseServices::ReadAllActions, &services_object); + ros::ServiceServer serviceDeleteAction = n.advertiseService("DeleteAction", &BaseServices::DeleteAction, &services_object); + ros::ServiceServer serviceUpdateAction = n.advertiseService("UpdateAction", &BaseServices::UpdateAction, &services_object); + ros::ServiceServer serviceExecuteActionFromReference = n.advertiseService("ExecuteActionFromReference", &BaseServices::ExecuteActionFromReference, &services_object); + ros::ServiceServer serviceExecuteAction = n.advertiseService("ExecuteAction", &BaseServices::ExecuteAction, &services_object); + ros::ServiceServer servicePauseAction = n.advertiseService("PauseAction", &BaseServices::PauseAction, &services_object); + ros::ServiceServer serviceStopAction = n.advertiseService("StopAction", &BaseServices::StopAction, &services_object); + ros::ServiceServer serviceResumeAction = n.advertiseService("ResumeAction", &BaseServices::ResumeAction, &services_object); + ros::ServiceServer serviceGetIPv4Configuration = n.advertiseService("GetIPv4Configuration", &BaseServices::GetIPv4Configuration, &services_object); + ros::ServiceServer serviceSetIPv4Configuration = n.advertiseService("SetIPv4Configuration", &BaseServices::SetIPv4Configuration, &services_object); + ros::ServiceServer serviceSetCommunicationInterfaceEnable = n.advertiseService("SetCommunicationInterfaceEnable", &BaseServices::SetCommunicationInterfaceEnable, &services_object); + ros::ServiceServer serviceIsCommunicationInterfaceEnable = n.advertiseService("IsCommunicationInterfaceEnable", &BaseServices::IsCommunicationInterfaceEnable, &services_object); + ros::ServiceServer serviceGetAvailableWifi = n.advertiseService("GetAvailableWifi", &BaseServices::GetAvailableWifi, &services_object); + ros::ServiceServer serviceGetWifiInformation = n.advertiseService("GetWifiInformation", &BaseServices::GetWifiInformation, &services_object); + ros::ServiceServer serviceAddWifiConfiguration = n.advertiseService("AddWifiConfiguration", &BaseServices::AddWifiConfiguration, &services_object); + ros::ServiceServer serviceDeleteWifiConfiguration = n.advertiseService("DeleteWifiConfiguration", &BaseServices::DeleteWifiConfiguration, &services_object); + ros::ServiceServer serviceGetAllConfiguredWifis = n.advertiseService("GetAllConfiguredWifis", &BaseServices::GetAllConfiguredWifis, &services_object); + ros::ServiceServer serviceConnectWifi = n.advertiseService("ConnectWifi", &BaseServices::ConnectWifi, &services_object); + ros::ServiceServer serviceDisconnectWifi = n.advertiseService("DisconnectWifi", &BaseServices::DisconnectWifi, &services_object); + ros::ServiceServer serviceGetConnectedWifiInformation = n.advertiseService("GetConnectedWifiInformation", &BaseServices::GetConnectedWifiInformation, &services_object); + ros::ServiceServer serviceUnsubscribe = n.advertiseService("Unsubscribe", &BaseServices::Unsubscribe, &services_object); + ros::ServiceServer serviceGetFwdKinematics = n.advertiseService("GetFwdKinematics", &BaseServices::GetFwdKinematics, &services_object); + ros::ServiceServer servicePlayCartesianTrajectory = n.advertiseService("PlayCartesianTrajectory", &BaseServices::PlayCartesianTrajectory, &services_object); + ros::ServiceServer servicePlayCartesianTrajectoryPosition = n.advertiseService("PlayCartesianTrajectoryPosition", &BaseServices::PlayCartesianTrajectoryPosition, &services_object); + ros::ServiceServer servicePlayCartesianTrajectoryOrientation = n.advertiseService("PlayCartesianTrajectoryOrientation", &BaseServices::PlayCartesianTrajectoryOrientation, &services_object); + ros::ServiceServer servicePause = n.advertiseService("Pause", &BaseServices::Pause, &services_object); + ros::ServiceServer serviceResume = n.advertiseService("Resume", &BaseServices::Resume, &services_object); + ros::ServiceServer serviceGetMeasuredCartesianPose = n.advertiseService("GetMeasuredCartesianPose", &BaseServices::GetMeasuredCartesianPose, &services_object); + ros::ServiceServer serviceGetCommandedCartesianPose = n.advertiseService("GetCommandedCartesianPose", &BaseServices::GetCommandedCartesianPose, &services_object); + ros::ServiceServer serviceGetTargetedCartesianPose = n.advertiseService("GetTargetedCartesianPose", &BaseServices::GetTargetedCartesianPose, &services_object); + ros::ServiceServer serviceSendTwistCommand = n.advertiseService("SendTwistCommand", &BaseServices::SendTwistCommand, &services_object); + ros::ServiceServer serviceGetMeasuredTwist = n.advertiseService("GetMeasuredTwist", &BaseServices::GetMeasuredTwist, &services_object); + ros::ServiceServer serviceGetCommandedTwist = n.advertiseService("GetCommandedTwist", &BaseServices::GetCommandedTwist, &services_object); + ros::ServiceServer servicePlayJointTrajectory = n.advertiseService("PlayJointTrajectory", &BaseServices::PlayJointTrajectory, &services_object); + ros::ServiceServer servicePlaySelectedJointTrajectory = n.advertiseService("PlaySelectedJointTrajectory", &BaseServices::PlaySelectedJointTrajectory, &services_object); + ros::ServiceServer serviceGetMeasuredJointAngles = n.advertiseService("GetMeasuredJointAngles", &BaseServices::GetMeasuredJointAngles, &services_object); + ros::ServiceServer serviceGetCommandedJointAngles = n.advertiseService("GetCommandedJointAngles", &BaseServices::GetCommandedJointAngles, &services_object); + ros::ServiceServer serviceSendJointSpeedsCommmand = n.advertiseService("SendJointSpeedsCommmand", &BaseServices::SendJointSpeedsCommmand, &services_object); + ros::ServiceServer serviceSendSelectedJointSpeedCommand = n.advertiseService("SendSelectedJointSpeedCommand", &BaseServices::SendSelectedJointSpeedCommand, &services_object); + ros::ServiceServer serviceGetMeasuredJointSpeeds = n.advertiseService("GetMeasuredJointSpeeds", &BaseServices::GetMeasuredJointSpeeds, &services_object); + ros::ServiceServer serviceGetCommandedJointSpeeds = n.advertiseService("GetCommandedJointSpeeds", &BaseServices::GetCommandedJointSpeeds, &services_object); + ros::ServiceServer serviceSendGripperCommand = n.advertiseService("SendGripperCommand", &BaseServices::SendGripperCommand, &services_object); + ros::ServiceServer serviceGetMeasuredGripperMovement = n.advertiseService("GetMeasuredGripperMovement", &BaseServices::GetMeasuredGripperMovement, &services_object); + ros::ServiceServer serviceGetCommandedGripperMovement = n.advertiseService("GetCommandedGripperMovement", &BaseServices::GetCommandedGripperMovement, &services_object); + ros::ServiceServer serviceSetAdmittance = n.advertiseService("SetAdmittance", &BaseServices::SetAdmittance, &services_object); + ros::ServiceServer serviceSetTwistWrenchReferenceFrame = n.advertiseService("SetTwistWrenchReferenceFrame", &BaseServices::SetTwistWrenchReferenceFrame, &services_object); + ros::ServiceServer serviceSetOperatingMode = n.advertiseService("SetOperatingMode", &BaseServices::SetOperatingMode, &services_object); + ros::ServiceServer serviceApplyEmergencyStop = n.advertiseService("ApplyEmergencyStop", &BaseServices::ApplyEmergencyStop, &services_object); + ros::ServiceServer serviceClearFaults = n.advertiseService("ClearFaults", &BaseServices::ClearFaults, &services_object); + ros::ServiceServer serviceGetActiveMap = n.advertiseService("GetActiveMap", &BaseServices::GetActiveMap, &services_object); + ros::ServiceServer serviceGetControlMode = n.advertiseService("GetControlMode", &BaseServices::GetControlMode, &services_object); + ros::ServiceServer serviceGetOperatingMode = n.advertiseService("GetOperatingMode", &BaseServices::GetOperatingMode, &services_object); + ros::ServiceServer serviceSetServoingMode = n.advertiseService("SetServoingMode", &BaseServices::SetServoingMode, &services_object); + ros::ServiceServer serviceGetServoingMode = n.advertiseService("GetServoingMode", &BaseServices::GetServoingMode, &services_object); + ros::ServiceServer serviceGetSequenceState = n.advertiseService("GetSequenceState", &BaseServices::GetSequenceState, &services_object); + ros::ServiceServer serviceGetProtectionZoneState = n.advertiseService("GetProtectionZoneState", &BaseServices::GetProtectionZoneState, &services_object); + ros::ServiceServer serviceGetActionExecutionState = n.advertiseService("GetActionExecutionState", &BaseServices::GetActionExecutionState, &services_object); + ros::ServiceServer serviceRestoreFactorySettings = n.advertiseService("RestoreFactorySettings", &BaseServices::RestoreFactorySettings, &services_object); + ros::ServiceServer serviceRestoreNetworkFactorySettings = n.advertiseService("RestoreNetworkFactorySettings", &BaseServices::RestoreNetworkFactorySettings, &services_object); + ros::ServiceServer serviceReboot = n.advertiseService("Reboot", &BaseServices::Reboot, &services_object); + ros::ServiceServer serviceGetAllConnectedControllers = n.advertiseService("GetAllConnectedControllers", &BaseServices::GetAllConnectedControllers, &services_object); + ros::ServiceServer serviceGetControllerState = n.advertiseService("GetControllerState", &BaseServices::GetControllerState, &services_object); + ros::ServiceServer serviceGetActuatorCount = n.advertiseService("GetActuatorCount", &BaseServices::GetActuatorCount, &services_object); + ros::ServiceServer serviceStartWifiScan = n.advertiseService("StartWifiScan", &BaseServices::StartWifiScan, &services_object); + ros::ServiceServer serviceGetConfiguredWifi = n.advertiseService("GetConfiguredWifi", &BaseServices::GetConfiguredWifi, &services_object); + ros::ServiceServer serviceGetArmState = n.advertiseService("GetArmState", &BaseServices::GetArmState, &services_object); + ros::ServiceServer serviceGetIPv4Information = n.advertiseService("GetIPv4Information", &BaseServices::GetIPv4Information, &services_object); + + + ROS_INFO("Node's services initialized correctly."); + + ros::Publisher pub_base_feedback = n.advertise("base_feedback", 1000); + ros::Publisher pub_joint_state = n.advertise("base_feedback/joint_state", 1000); + + kortex_driver::Feedback base_feedback; + kortex_driver::RefreshFeedback::Request req; + kortex_driver::RefreshFeedback::Response res; + + sensor_msgs::JointState joint_state; + + ros::Rate rate(cyclic_data_rate); // 100 hz + while (!ros::isShuttingDown()) + { + services_object.RefreshFeedback(req, res); + + base_feedback.frame_id = res.output.frame_id; + + base_feedback.base.arm_voltage = res.output.base.arm_voltage; + base_feedback.base.arm_current = res.output.base.arm_current; + base_feedback.base.temperature_cpu = res.output.base.temperature_cpu; + base_feedback.base.temperature_ambient = res.output.base.temperature_ambient; + base_feedback.base.imu_acceleration_x = res.output.base.imu_acceleration_x; + base_feedback.base.imu_acceleration_y = res.output.base.imu_acceleration_y; + base_feedback.base.imu_acceleration_z = res.output.base.imu_acceleration_z; + base_feedback.base.imu_angular_velocity_x = res.output.base.imu_angular_velocity_x; + base_feedback.base.imu_angular_velocity_y = res.output.base.imu_angular_velocity_y; + base_feedback.base.imu_angular_velocity_z = res.output.base.imu_angular_velocity_z; + base_feedback.base.tool_pose_x = res.output.base.tool_pose_x; + base_feedback.base.tool_pose_y = res.output.base.tool_pose_y; + base_feedback.base.tool_pose_z = res.output.base.tool_pose_z; + base_feedback.base.tool_pose_theta_x = res.output.base.tool_pose_theta_x; + base_feedback.base.tool_pose_theta_y = res.output.base.tool_pose_theta_y; + base_feedback.base.tool_pose_theta_z = res.output.base.tool_pose_theta_z; + base_feedback.base.tool_external_wrench_force_x = res.output.base.tool_external_wrench_force_x; + base_feedback.base.tool_external_wrench_force_y = res.output.base.tool_external_wrench_force_y; + base_feedback.base.tool_external_wrench_force_z = res.output.base.tool_external_wrench_force_z; + base_feedback.base.tool_external_wrench_torque_x = res.output.base.tool_external_wrench_torque_x; + base_feedback.base.tool_external_wrench_torque_y = res.output.base.tool_external_wrench_torque_y; + base_feedback.base.tool_external_wrench_torque_z = res.output.base.tool_external_wrench_torque_z; + base_feedback.base.fault_bank_a = res.output.base.fault_bank_a; + base_feedback.base.fault_bank_b = res.output.base.fault_bank_b; + base_feedback.base.warning_bank_a = res.output.base.warning_bank_a; + base_feedback.base.warning_bank_b = res.output.base.warning_bank_b; + + base_feedback.actuators.clear(); + + joint_state.position.resize(JOINT_COUNT); + joint_state.velocity.resize(JOINT_COUNT); + joint_state.effort.resize(JOINT_COUNT); + joint_state.name.resize(JOINT_COUNT); + + for(int i = 0; i < JOINT_COUNT; i++) + { + kortex_driver::ActuatorFeedback temp; + + temp.status_flags = res.output.actuators[i].status_flags; + temp.jitter_comm = res.output.actuators[i].jitter_comm; + temp.position = res.output.actuators[i].position; + temp.velocity = res.output.actuators[i].velocity; + temp.torque = res.output.actuators[i].torque; + temp.current_motor = res.output.actuators[i].current_motor; + temp.voltage = res.output.actuators[i].voltage; + temp.temperature_motor = res.output.actuators[i].temperature_motor; + temp.temperature_core = res.output.actuators[i].temperature_core; + temp.fault_bank_a = res.output.actuators[i].fault_bank_a; + temp.fault_bank_b = res.output.actuators[i].fault_bank_b; + temp.warning_bank_a = res.output.actuators[i].warning_bank_a; + temp.warning_bank_b = res.output.actuators[i].warning_bank_b; + + base_feedback.actuators.push_back(temp); + + joint_state.name[i] = "Actuator" + std::to_string(i + 1); + joint_state.position[i] = TO_RAD(res.output.actuators[i].position); + joint_state.velocity[i] = TO_RAD(res.output.actuators[i].velocity); + joint_state.effort[i] = res.output.actuators[i].torque; + } + base_feedback.interconnect.position = res.output.interconnect.position; + + + + joint_state.header.stamp = ros::Time::now(); + joint_state.header.frame_id = std::to_string(res.output.frame_id); + + pub_base_feedback.publish(base_feedback); + pub_joint_state.publish(joint_state); + + + ros::spinOnce(); + + + + rate.sleep(); + } + + return 1; +} \ No newline at end of file diff --git a/kortex_driver/src/node.cpp b/kortex_driver/src/node.cpp new file mode 100644 index 00000000..b2c31a73 --- /dev/null +++ b/kortex_driver/src/node.cpp @@ -0,0 +1,3945 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "common_ros_converter.h" +#include "common_proto_converter.h" +#include "basecyclic_ros_converter.h" +#include "basecyclic_proto_converter.h" + +#include "base_ros_converter.h" +#include "base_proto_converter.h" +BaseServices::BaseServices(char* ip, ros::NodeHandle& n) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + m_CurrentDeviceID = 0; + m_apiOptions.timeout_ms = 3000; + + m_basecyclic = new BaseCyclic::BaseCyclicClient(m_router); + m_base = new Base::BaseClient(m_router);m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + std::cout << "\nSession Created\n"; + + m_pub_Error = m_n.advertise("KortexError", 1000); + m_pub_ConfigurationChangeTopic = m_n.advertise("ConfigurationChangeTopic", 1000); + m_pub_MappingInfoTopic = m_n.advertise("MappingInfoTopic", 1000); + m_pub_ControlModeTopic = m_n.advertise("ControlModeTopic", 1000); + m_pub_OperatingModeTopic = m_n.advertise("OperatingModeTopic", 1000); + m_pub_SequenceInfoTopic = m_n.advertise("SequenceInfoTopic", 1000); + m_pub_ProtectionZoneTopic = m_n.advertise("ProtectionZoneTopic", 1000); + m_pub_UserTopic = m_n.advertise("UserTopic", 1000); + m_pub_ControllerTopic = m_n.advertise("ControllerTopic", 1000); + m_pub_ActionTopic = m_n.advertise("ActionTopic", 1000); + m_pub_RobotEventTopic = m_n.advertise("RobotEventTopic", 1000); + m_pub_ServoingModeTopic = m_n.advertise("ServoingModeTopic", 1000); + m_pub_FactoryTopic = m_n.advertise("FactoryTopic", 1000); + m_pub_NetworkTopic = m_n.advertise("NetworkTopic", 1000); + m_pub_ArmStateTopic = m_n.advertise("ArmStateTopic", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +bool BaseServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_CurrentDeviceID = req.device_id; + + return true; +} + +bool BaseServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_apiOptions.timeout_ms = req.input.timeout_ms; + + return true; +} + + + + +bool BaseServices::Refresh(kortex_driver::Refresh::Request &req, kortex_driver::Refresh::Response &res) +{ + Command input; + ToProtoData(req.input, &input); + Feedback output; + kortex_driver::KortexError result_error; + + try + { + output = m_basecyclic->Refresh(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::RefreshCommand(kortex_driver::RefreshCommand::Request &req, kortex_driver::RefreshCommand::Response &res) +{ + Command input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_basecyclic->RefreshCommand(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::RefreshFeedback(kortex_driver::RefreshFeedback::Request &req, kortex_driver::RefreshFeedback::Response &res) +{ + Empty input; + Feedback output; + kortex_driver::KortexError result_error; + + try + { + output = m_basecyclic->RefreshFeedback(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::RefreshCustomData(kortex_driver::RefreshCustomData::Request &req, kortex_driver::RefreshCustomData::Response &res) +{ + CustomData input; + ToProtoData(req.input, &input); + CustomData output; + kortex_driver::KortexError result_error; + + try + { + output = m_basecyclic->RefreshCustomData(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + + + +bool BaseServices::CreateUserProfile(kortex_driver::CreateUserProfile::Request &req, kortex_driver::CreateUserProfile::Response &res) +{ + FullUserProfile input; + ToProtoData(req.input, &input); + UserProfileHandle output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateUserProfile(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateUserProfile(kortex_driver::UpdateUserProfile::Request &req, kortex_driver::UpdateUserProfile::Response &res) +{ + UserProfile input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateUserProfile(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ReadUserProfile(kortex_driver::ReadUserProfile::Request &req, kortex_driver::ReadUserProfile::Response &res) +{ + UserProfileHandle input; + ToProtoData(req.input, &input); + UserProfile output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadUserProfile(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteUserProfile(kortex_driver::DeleteUserProfile::Request &req, kortex_driver::DeleteUserProfile::Response &res) +{ + UserProfileHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteUserProfile(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ReadAllUserProfiles(kortex_driver::ReadAllUserProfiles::Request &req, kortex_driver::ReadAllUserProfiles::Response &res) +{ + Empty input; + UserProfileList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllUserProfiles(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllUsers(kortex_driver::ReadAllUsers::Request &req, kortex_driver::ReadAllUsers::Response &res) +{ + Empty input; + UserList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllUsers(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ChangePassword(kortex_driver::ChangePassword::Request &req, kortex_driver::ChangePassword::Response &res) +{ + PasswordChange input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ChangePassword(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::CreateSequence(kortex_driver::CreateSequence::Request &req, kortex_driver::CreateSequence::Response &res) +{ + Sequence input; + ToProtoData(req.input, &input); + SequenceHandle output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateSequence(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateSequence(kortex_driver::UpdateSequence::Request &req, kortex_driver::UpdateSequence::Response &res) +{ + Sequence input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateSequence(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ReadSequence(kortex_driver::ReadSequence::Request &req, kortex_driver::ReadSequence::Response &res) +{ + SequenceHandle input; + ToProtoData(req.input, &input); + Sequence output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadSequence(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteSequence(kortex_driver::DeleteSequence::Request &req, kortex_driver::DeleteSequence::Response &res) +{ + SequenceHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteSequence(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ReadAllSequences(kortex_driver::ReadAllSequences::Request &req, kortex_driver::ReadAllSequences::Response &res) +{ + Empty input; + SequenceList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllSequences(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteSequenceTask(kortex_driver::DeleteSequenceTask::Request &req, kortex_driver::DeleteSequenceTask::Response &res) +{ + SequenceTaskHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteSequenceTask(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::DeleteAllSequenceTasks(kortex_driver::DeleteAllSequenceTasks::Request &req, kortex_driver::DeleteAllSequenceTasks::Response &res) +{ + SequenceHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteAllSequenceTasks(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PlaySequence(kortex_driver::PlaySequence::Request &req, kortex_driver::PlaySequence::Response &res) +{ + SequenceHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlaySequence(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PlayAdvancedSequence(kortex_driver::PlayAdvancedSequence::Request &req, kortex_driver::PlayAdvancedSequence::Response &res) +{ + AdvancedSequenceHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlayAdvancedSequence(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::StopSequence(kortex_driver::StopSequence::Request &req, kortex_driver::StopSequence::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->StopSequence(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PauseSequence(kortex_driver::PauseSequence::Request &req, kortex_driver::PauseSequence::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PauseSequence(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ResumeSequence(kortex_driver::ResumeSequence::Request &req, kortex_driver::ResumeSequence::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ResumeSequence(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::CreateProtectionZone(kortex_driver::CreateProtectionZone::Request &req, kortex_driver::CreateProtectionZone::Response &res) +{ + ProtectionZone input; + ToProtoData(req.input, &input); + ProtectionZoneHandle output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateProtectionZone(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::UpdateProtectionZone(kortex_driver::UpdateProtectionZone::Request &req, kortex_driver::UpdateProtectionZone::Response &res) +{ + ProtectionZone input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateProtectionZone(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ReadProtectionZone(kortex_driver::ReadProtectionZone::Request &req, kortex_driver::ReadProtectionZone::Response &res) +{ + ProtectionZoneHandle input; + ToProtoData(req.input, &input); + ProtectionZone output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadProtectionZone(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteProtectionZone(kortex_driver::DeleteProtectionZone::Request &req, kortex_driver::DeleteProtectionZone::Response &res) +{ + ProtectionZoneHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteProtectionZone(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ReadAllProtectionZones(kortex_driver::ReadAllProtectionZones::Request &req, kortex_driver::ReadAllProtectionZones::Response &res) +{ + Empty input; + ProtectionZoneList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllProtectionZones(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::CreateMapping(kortex_driver::CreateMapping::Request &req, kortex_driver::CreateMapping::Response &res) +{ + Mapping input; + ToProtoData(req.input, &input); + MappingHandle output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateMapping(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadMapping(kortex_driver::ReadMapping::Request &req, kortex_driver::ReadMapping::Response &res) +{ + MappingHandle input; + ToProtoData(req.input, &input); + Mapping output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadMapping(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllMappings(kortex_driver::ReadAllMappings::Request &req, kortex_driver::ReadAllMappings::Response &res) +{ + Empty input; + MappingList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllMappings(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::CreateMap(kortex_driver::CreateMap::Request &req, kortex_driver::CreateMap::Response &res) +{ + Map input; + ToProtoData(req.input, &input); + MapHandle output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateMap(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllMaps(kortex_driver::ReadAllMaps::Request &req, kortex_driver::ReadAllMaps::Response &res) +{ + MappingHandle input; + ToProtoData(req.input, &input); + MapList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllMaps(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ActivateMap(kortex_driver::ActivateMap::Request &req, kortex_driver::ActivateMap::Response &res) +{ + ActivateMapHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ActivateMap(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::CreateAction(kortex_driver::CreateAction::Request &req, kortex_driver::CreateAction::Response &res) +{ + Action input; + ToProtoData(req.input, &input); + ActionHandle output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->CreateAction(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAction(kortex_driver::ReadAction::Request &req, kortex_driver::ReadAction::Response &res) +{ + ActionHandle input; + ToProtoData(req.input, &input); + Action output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAction(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ReadAllActions(kortex_driver::ReadAllActions::Request &req, kortex_driver::ReadAllActions::Response &res) +{ + RequestedActionType input; + ToProtoData(req.input, &input); + ActionList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->ReadAllActions(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::DeleteAction(kortex_driver::DeleteAction::Request &req, kortex_driver::DeleteAction::Response &res) +{ + ActionHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteAction(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::UpdateAction(kortex_driver::UpdateAction::Request &req, kortex_driver::UpdateAction::Response &res) +{ + Action input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->UpdateAction(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ExecuteActionFromReference(kortex_driver::ExecuteActionFromReference::Request &req, kortex_driver::ExecuteActionFromReference::Response &res) +{ + ActionHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ExecuteActionFromReference(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ExecuteAction(kortex_driver::ExecuteAction::Request &req, kortex_driver::ExecuteAction::Response &res) +{ + Action input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ExecuteAction(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PauseAction(kortex_driver::PauseAction::Request &req, kortex_driver::PauseAction::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PauseAction(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::StopAction(kortex_driver::StopAction::Request &req, kortex_driver::StopAction::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->StopAction(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ResumeAction(kortex_driver::ResumeAction::Request &req, kortex_driver::ResumeAction::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ResumeAction(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetIPv4Configuration(kortex_driver::GetIPv4Configuration::Request &req, kortex_driver::GetIPv4Configuration::Response &res) +{ + NetworkHandle input; + ToProtoData(req.input, &input); + IPv4Configuration output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetIPv4Configuration(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetIPv4Configuration(kortex_driver::SetIPv4Configuration::Request &req, kortex_driver::SetIPv4Configuration::Response &res) +{ + FullIPv4Configuration input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SetIPv4Configuration(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::SetCommunicationInterfaceEnable(kortex_driver::SetCommunicationInterfaceEnable::Request &req, kortex_driver::SetCommunicationInterfaceEnable::Response &res) +{ + CommunicationInterfaceConfiguration input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SetCommunicationInterfaceEnable(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::IsCommunicationInterfaceEnable(kortex_driver::IsCommunicationInterfaceEnable::Request &req, kortex_driver::IsCommunicationInterfaceEnable::Response &res) +{ + NetworkHandle input; + ToProtoData(req.input, &input); + CommunicationInterfaceConfiguration output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->IsCommunicationInterfaceEnable(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetAvailableWifi(kortex_driver::GetAvailableWifi::Request &req, kortex_driver::GetAvailableWifi::Response &res) +{ + Empty input; + WifiInformationList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAvailableWifi(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetWifiInformation(kortex_driver::GetWifiInformation::Request &req, kortex_driver::GetWifiInformation::Response &res) +{ + Ssid input; + ToProtoData(req.input, &input); + WifiInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetWifiInformation(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::AddWifiConfiguration(kortex_driver::AddWifiConfiguration::Request &req, kortex_driver::AddWifiConfiguration::Response &res) +{ + WifiConfiguration input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->AddWifiConfiguration(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::DeleteWifiConfiguration(kortex_driver::DeleteWifiConfiguration::Request &req, kortex_driver::DeleteWifiConfiguration::Response &res) +{ + Ssid input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DeleteWifiConfiguration(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetAllConfiguredWifis(kortex_driver::GetAllConfiguredWifis::Request &req, kortex_driver::GetAllConfiguredWifis::Response &res) +{ + Empty input; + WifiConfigurationList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllConfiguredWifis(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::ConnectWifi(kortex_driver::ConnectWifi::Request &req, kortex_driver::ConnectWifi::Response &res) +{ + Ssid input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ConnectWifi(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::DisconnectWifi(kortex_driver::DisconnectWifi::Request &req, kortex_driver::DisconnectWifi::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->DisconnectWifi(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetConnectedWifiInformation(kortex_driver::GetConnectedWifiInformation::Request &req, kortex_driver::GetConnectedWifiInformation::Response &res) +{ + Empty input; + WifiInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetConnectedWifiInformation(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::Unsubscribe(kortex_driver::Unsubscribe::Request &req, kortex_driver::Unsubscribe::Response &res) +{ + NotificationHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->Unsubscribe(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::OnNotificationConfigurationChangeTopic(kortex_driver::ConfigurationChangeTopic::Request &req, kortex_driver::ConfigurationChangeTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ConfigurationChangeNotification) > callback = std::bind(&BaseServices::cb_ConfigurationChangeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationConfigurationChangeTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ConfigurationChangeTopic(Base::ConfigurationChangeNotification notif) +{ + kortex_driver::ConfigurationChangeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ConfigurationChangeTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationMappingInfoTopic(kortex_driver::MappingInfoTopic::Request &req, kortex_driver::MappingInfoTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::MappingInfoNotification) > callback = std::bind(&BaseServices::cb_MappingInfoTopic, this, std::placeholders::_1); + output = m_base->OnNotificationMappingInfoTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_MappingInfoTopic(Base::MappingInfoNotification notif) +{ + kortex_driver::MappingInfoNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_MappingInfoTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationControlModeTopic(kortex_driver::ControlModeTopic::Request &req, kortex_driver::ControlModeTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ControlModeNotification) > callback = std::bind(&BaseServices::cb_ControlModeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationControlModeTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ControlModeTopic(Base::ControlModeNotification notif) +{ + kortex_driver::ControlModeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ControlModeTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationOperatingModeTopic(kortex_driver::OperatingModeTopic::Request &req, kortex_driver::OperatingModeTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::OperatingModeNotification) > callback = std::bind(&BaseServices::cb_OperatingModeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationOperatingModeTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_OperatingModeTopic(Base::OperatingModeNotification notif) +{ + kortex_driver::OperatingModeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_OperatingModeTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationSequenceInfoTopic(kortex_driver::SequenceInfoTopic::Request &req, kortex_driver::SequenceInfoTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::SequenceInfoNotification) > callback = std::bind(&BaseServices::cb_SequenceInfoTopic, this, std::placeholders::_1); + output = m_base->OnNotificationSequenceInfoTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_SequenceInfoTopic(Base::SequenceInfoNotification notif) +{ + kortex_driver::SequenceInfoNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_SequenceInfoTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationProtectionZoneTopic(kortex_driver::ProtectionZoneTopic::Request &req, kortex_driver::ProtectionZoneTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ProtectionZoneNotification) > callback = std::bind(&BaseServices::cb_ProtectionZoneTopic, this, std::placeholders::_1); + output = m_base->OnNotificationProtectionZoneTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ProtectionZoneTopic(Base::ProtectionZoneNotification notif) +{ + kortex_driver::ProtectionZoneNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ProtectionZoneTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationUserTopic(kortex_driver::UserTopic::Request &req, kortex_driver::UserTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::UserNotification) > callback = std::bind(&BaseServices::cb_UserTopic, this, std::placeholders::_1); + output = m_base->OnNotificationUserTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_UserTopic(Base::UserNotification notif) +{ + kortex_driver::UserNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_UserTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationControllerTopic(kortex_driver::ControllerTopic::Request &req, kortex_driver::ControllerTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ControllerNotification) > callback = std::bind(&BaseServices::cb_ControllerTopic, this, std::placeholders::_1); + output = m_base->OnNotificationControllerTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ControllerTopic(Base::ControllerNotification notif) +{ + kortex_driver::ControllerNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ControllerTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationActionTopic(kortex_driver::ActionTopic::Request &req, kortex_driver::ActionTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ActionNotification) > callback = std::bind(&BaseServices::cb_ActionTopic, this, std::placeholders::_1); + output = m_base->OnNotificationActionTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ActionTopic(Base::ActionNotification notif) +{ + kortex_driver::ActionNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ActionTopic.publish(ros_msg); +} + +bool BaseServices::OnNotificationRobotEventTopic(kortex_driver::RobotEventTopic::Request &req, kortex_driver::RobotEventTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::RobotEventNotification) > callback = std::bind(&BaseServices::cb_RobotEventTopic, this, std::placeholders::_1); + output = m_base->OnNotificationRobotEventTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_RobotEventTopic(Base::RobotEventNotification notif) +{ + kortex_driver::RobotEventNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_RobotEventTopic.publish(ros_msg); +} + +bool BaseServices::GetFwdKinematics(kortex_driver::GetFwdKinematics::Request &req, kortex_driver::GetFwdKinematics::Response &res) +{ + Empty input; + TransformationMatrix output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetFwdKinematics(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::PlayCartesianTrajectory(kortex_driver::PlayCartesianTrajectory::Request &req, kortex_driver::PlayCartesianTrajectory::Response &res) +{ + ConstrainedPose input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlayCartesianTrajectory(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PlayCartesianTrajectoryPosition(kortex_driver::PlayCartesianTrajectoryPosition::Request &req, kortex_driver::PlayCartesianTrajectoryPosition::Response &res) +{ + ConstrainedPosition input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlayCartesianTrajectoryPosition(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PlayCartesianTrajectoryOrientation(kortex_driver::PlayCartesianTrajectoryOrientation::Request &req, kortex_driver::PlayCartesianTrajectoryOrientation::Response &res) +{ + ConstrainedOrientation input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlayCartesianTrajectoryOrientation(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::Pause(kortex_driver::Pause::Request &req, kortex_driver::Pause::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->Pause(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::Resume(kortex_driver::Resume::Request &req, kortex_driver::Resume::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->Resume(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetMeasuredCartesianPose(kortex_driver::GetMeasuredCartesianPose::Request &req, kortex_driver::GetMeasuredCartesianPose::Response &res) +{ + Empty input; + Pose output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredCartesianPose(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetCommandedCartesianPose(kortex_driver::GetCommandedCartesianPose::Request &req, kortex_driver::GetCommandedCartesianPose::Response &res) +{ + Empty input; + Pose output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetCommandedCartesianPose(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetTargetedCartesianPose(kortex_driver::GetTargetedCartesianPose::Request &req, kortex_driver::GetTargetedCartesianPose::Response &res) +{ + Empty input; + Pose output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetTargetedCartesianPose(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SendTwistCommand(kortex_driver::SendTwistCommand::Request &req, kortex_driver::SendTwistCommand::Response &res) +{ + TwistCommand input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SendTwistCommand(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetMeasuredTwist(kortex_driver::GetMeasuredTwist::Request &req, kortex_driver::GetMeasuredTwist::Response &res) +{ + Empty input; + Twist output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredTwist(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetCommandedTwist(kortex_driver::GetCommandedTwist::Request &req, kortex_driver::GetCommandedTwist::Response &res) +{ + Empty input; + Twist output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetCommandedTwist(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::PlayJointTrajectory(kortex_driver::PlayJointTrajectory::Request &req, kortex_driver::PlayJointTrajectory::Response &res) +{ + ConstrainedJointAngles input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlayJointTrajectory(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::PlaySelectedJointTrajectory(kortex_driver::PlaySelectedJointTrajectory::Request &req, kortex_driver::PlaySelectedJointTrajectory::Response &res) +{ + ConstrainedJointAngle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->PlaySelectedJointTrajectory(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetMeasuredJointAngles(kortex_driver::GetMeasuredJointAngles::Request &req, kortex_driver::GetMeasuredJointAngles::Response &res) +{ + Empty input; + JointAngles output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredJointAngles(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetCommandedJointAngles(kortex_driver::GetCommandedJointAngles::Request &req, kortex_driver::GetCommandedJointAngles::Response &res) +{ + Empty input; + JointAngles output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetCommandedJointAngles(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SendJointSpeedsCommmand(kortex_driver::SendJointSpeedsCommmand::Request &req, kortex_driver::SendJointSpeedsCommmand::Response &res) +{ + JointSpeeds input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SendJointSpeedsCommmand(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::SendSelectedJointSpeedCommand(kortex_driver::SendSelectedJointSpeedCommand::Request &req, kortex_driver::SendSelectedJointSpeedCommand::Response &res) +{ + JointSpeed input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SendSelectedJointSpeedCommand(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetMeasuredJointSpeeds(kortex_driver::GetMeasuredJointSpeeds::Request &req, kortex_driver::GetMeasuredJointSpeeds::Response &res) +{ + Empty input; + JointSpeeds output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredJointSpeeds(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetCommandedJointSpeeds(kortex_driver::GetCommandedJointSpeeds::Request &req, kortex_driver::GetCommandedJointSpeeds::Response &res) +{ + Empty input; + JointSpeeds output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetCommandedJointSpeeds(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SendGripperCommand(kortex_driver::SendGripperCommand::Request &req, kortex_driver::SendGripperCommand::Response &res) +{ + GripperCommand input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SendGripperCommand(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetMeasuredGripperMovement(kortex_driver::GetMeasuredGripperMovement::Request &req, kortex_driver::GetMeasuredGripperMovement::Response &res) +{ + GripperRequest input; + ToProtoData(req.input, &input); + Gripper output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetMeasuredGripperMovement(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetCommandedGripperMovement(kortex_driver::GetCommandedGripperMovement::Request &req, kortex_driver::GetCommandedGripperMovement::Response &res) +{ + GripperRequest input; + ToProtoData(req.input, &input); + Gripper output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetCommandedGripperMovement(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetAdmittance(kortex_driver::SetAdmittance::Request &req, kortex_driver::SetAdmittance::Response &res) +{ + Admittance input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SetAdmittance(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::SetTwistWrenchReferenceFrame(kortex_driver::SetTwistWrenchReferenceFrame::Request &req, kortex_driver::SetTwistWrenchReferenceFrame::Response &res) +{ + CartesianReferenceFrameRequest input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SetTwistWrenchReferenceFrame(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::SetOperatingMode(kortex_driver::SetOperatingMode::Request &req, kortex_driver::SetOperatingMode::Response &res) +{ + OperatingModeInformation input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SetOperatingMode(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ApplyEmergencyStop(kortex_driver::ApplyEmergencyStop::Request &req, kortex_driver::ApplyEmergencyStop::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ApplyEmergencyStop(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::ClearFaults(kortex_driver::ClearFaults::Request &req, kortex_driver::ClearFaults::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->ClearFaults(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetActiveMap(kortex_driver::GetActiveMap::Request &req, kortex_driver::GetActiveMap::Response &res) +{ + MappingHandle input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->GetActiveMap(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetControlMode(kortex_driver::GetControlMode::Request &req, kortex_driver::GetControlMode::Response &res) +{ + Empty input; + ControlModeInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetControlMode(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetOperatingMode(kortex_driver::GetOperatingMode::Request &req, kortex_driver::GetOperatingMode::Response &res) +{ + Empty input; + OperatingModeInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetOperatingMode(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::SetServoingMode(kortex_driver::SetServoingMode::Request &req, kortex_driver::SetServoingMode::Response &res) +{ + ServoingModeInformation input; + ToProtoData(req.input, &input); + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->SetServoingMode(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetServoingMode(kortex_driver::GetServoingMode::Request &req, kortex_driver::GetServoingMode::Response &res) +{ + Empty input; + ServoingModeInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetServoingMode(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::OnNotificationServoingModeTopic(kortex_driver::ServoingModeTopic::Request &req, kortex_driver::ServoingModeTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ServoingModeNotification) > callback = std::bind(&BaseServices::cb_ServoingModeTopic, this, std::placeholders::_1); + output = m_base->OnNotificationServoingModeTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ServoingModeTopic(Base::ServoingModeNotification notif) +{ + kortex_driver::ServoingModeNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ServoingModeTopic.publish(ros_msg); +} + +bool BaseServices::GetSequenceState(kortex_driver::GetSequenceState::Request &req, kortex_driver::GetSequenceState::Response &res) +{ + SequenceHandle input; + ToProtoData(req.input, &input); + SequenceInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetSequenceState(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetProtectionZoneState(kortex_driver::GetProtectionZoneState::Request &req, kortex_driver::GetProtectionZoneState::Response &res) +{ + ProtectionZoneHandle input; + ToProtoData(req.input, &input); + ProtectionZoneInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetProtectionZoneState(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetActionExecutionState(kortex_driver::GetActionExecutionState::Request &req, kortex_driver::GetActionExecutionState::Response &res) +{ + Empty input; + ActionExecutionState output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetActionExecutionState(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::RestoreFactorySettings(kortex_driver::RestoreFactorySettings::Request &req, kortex_driver::RestoreFactorySettings::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->RestoreFactorySettings(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::RestoreNetworkFactorySettings(kortex_driver::RestoreNetworkFactorySettings::Request &req, kortex_driver::RestoreNetworkFactorySettings::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->RestoreNetworkFactorySettings(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::Reboot(kortex_driver::Reboot::Request &req, kortex_driver::Reboot::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->Reboot(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::OnNotificationFactoryTopic(kortex_driver::FactoryTopic::Request &req, kortex_driver::FactoryTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::FactoryNotification) > callback = std::bind(&BaseServices::cb_FactoryTopic, this, std::placeholders::_1); + output = m_base->OnNotificationFactoryTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_FactoryTopic(Base::FactoryNotification notif) +{ + kortex_driver::FactoryNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_FactoryTopic.publish(ros_msg); +} + +bool BaseServices::GetAllConnectedControllers(kortex_driver::GetAllConnectedControllers::Request &req, kortex_driver::GetAllConnectedControllers::Response &res) +{ + Empty input; + ControllerList output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetAllConnectedControllers(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetControllerState(kortex_driver::GetControllerState::Request &req, kortex_driver::GetControllerState::Response &res) +{ + ControllerHandle input; + ToProtoData(req.input, &input); + ControllerState output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetControllerState(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::GetActuatorCount(kortex_driver::GetActuatorCount::Request &req, kortex_driver::GetActuatorCount::Response &res) +{ + Empty input; + ActuatorInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetActuatorCount(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::StartWifiScan(kortex_driver::StartWifiScan::Request &req, kortex_driver::StartWifiScan::Response &res) +{ + Empty input; + Empty output; + kortex_driver::KortexError result_error; + + try + { + m_base->StartWifiScan(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool BaseServices::GetConfiguredWifi(kortex_driver::GetConfiguredWifi::Request &req, kortex_driver::GetConfiguredWifi::Response &res) +{ + Ssid input; + ToProtoData(req.input, &input); + WifiConfiguration output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetConfiguredWifi(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::OnNotificationNetworkTopic(kortex_driver::NetworkTopic::Request &req, kortex_driver::NetworkTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::NetworkNotification) > callback = std::bind(&BaseServices::cb_NetworkTopic, this, std::placeholders::_1); + output = m_base->OnNotificationNetworkTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_NetworkTopic(Base::NetworkNotification notif) +{ + kortex_driver::NetworkNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_NetworkTopic.publish(ros_msg); +} + +bool BaseServices::GetArmState(kortex_driver::GetArmState::Request &req, kortex_driver::GetArmState::Response &res) +{ + Empty input; + ArmStateInformation output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetArmState(m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool BaseServices::OnNotificationArmStateTopic(kortex_driver::ArmStateTopic::Request &req, kortex_driver::ArmStateTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_driver::KortexError result_error; + + try + { + std::function< void (Base::ArmStateNotification) > callback = std::bind(&BaseServices::cb_ArmStateTopic, this, std::placeholders::_1); + output = m_base->OnNotificationArmStateTopic(callback, input); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void BaseServices::cb_ArmStateTopic(Base::ArmStateNotification notif) +{ + kortex_driver::ArmStateNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_ArmStateTopic.publish(ros_msg); +} + +bool BaseServices::GetIPv4Information(kortex_driver::GetIPv4Information::Request &req, kortex_driver::GetIPv4Information::Response &res) +{ + NetworkHandle input; + ToProtoData(req.input, &input); + IPv4Information output; + kortex_driver::KortexError result_error; + + try + { + output = m_base->GetIPv4Information(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_driver/src/node.h b/kortex_driver/src/node.h new file mode 100644 index 00000000..6de66a03 --- /dev/null +++ b/kortex_driver/src/node.h @@ -0,0 +1,345 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_SERVICES_H_ +#define _KORTEX_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include +#include "kortex_driver/Refresh.h" +#include "kortex_driver/RefreshCommand.h" +#include "kortex_driver/RefreshFeedback.h" +#include "kortex_driver/RefreshCustomData.h" +#include "kortex_driver/CreateUserProfile.h" +#include "kortex_driver/UpdateUserProfile.h" +#include "kortex_driver/ReadUserProfile.h" +#include "kortex_driver/DeleteUserProfile.h" +#include "kortex_driver/ReadAllUserProfiles.h" +#include "kortex_driver/ReadAllUsers.h" +#include "kortex_driver/ChangePassword.h" +#include "kortex_driver/CreateSequence.h" +#include "kortex_driver/UpdateSequence.h" +#include "kortex_driver/ReadSequence.h" +#include "kortex_driver/DeleteSequence.h" +#include "kortex_driver/ReadAllSequences.h" +#include "kortex_driver/DeleteSequenceTask.h" +#include "kortex_driver/DeleteAllSequenceTasks.h" +#include "kortex_driver/PlaySequence.h" +#include "kortex_driver/PlayAdvancedSequence.h" +#include "kortex_driver/StopSequence.h" +#include "kortex_driver/PauseSequence.h" +#include "kortex_driver/ResumeSequence.h" +#include "kortex_driver/CreateProtectionZone.h" +#include "kortex_driver/UpdateProtectionZone.h" +#include "kortex_driver/ReadProtectionZone.h" +#include "kortex_driver/DeleteProtectionZone.h" +#include "kortex_driver/ReadAllProtectionZones.h" +#include "kortex_driver/CreateMapping.h" +#include "kortex_driver/ReadMapping.h" +#include "kortex_driver/ReadAllMappings.h" +#include "kortex_driver/CreateMap.h" +#include "kortex_driver/ReadAllMaps.h" +#include "kortex_driver/ActivateMap.h" +#include "kortex_driver/CreateAction.h" +#include "kortex_driver/ReadAction.h" +#include "kortex_driver/ReadAllActions.h" +#include "kortex_driver/DeleteAction.h" +#include "kortex_driver/UpdateAction.h" +#include "kortex_driver/ExecuteActionFromReference.h" +#include "kortex_driver/ExecuteAction.h" +#include "kortex_driver/PauseAction.h" +#include "kortex_driver/StopAction.h" +#include "kortex_driver/ResumeAction.h" +#include "kortex_driver/GetIPv4Configuration.h" +#include "kortex_driver/SetIPv4Configuration.h" +#include "kortex_driver/SetCommunicationInterfaceEnable.h" +#include "kortex_driver/IsCommunicationInterfaceEnable.h" +#include "kortex_driver/GetAvailableWifi.h" +#include "kortex_driver/GetWifiInformation.h" +#include "kortex_driver/AddWifiConfiguration.h" +#include "kortex_driver/DeleteWifiConfiguration.h" +#include "kortex_driver/GetAllConfiguredWifis.h" +#include "kortex_driver/ConnectWifi.h" +#include "kortex_driver/DisconnectWifi.h" +#include "kortex_driver/GetConnectedWifiInformation.h" +#include "kortex_driver/Unsubscribe.h" +#include "kortex_driver/ConfigurationChangeTopic.h" +#include "kortex_driver/MappingInfoTopic.h" +#include "kortex_driver/ControlModeTopic.h" +#include "kortex_driver/OperatingModeTopic.h" +#include "kortex_driver/SequenceInfoTopic.h" +#include "kortex_driver/ProtectionZoneTopic.h" +#include "kortex_driver/UserTopic.h" +#include "kortex_driver/ControllerTopic.h" +#include "kortex_driver/ActionTopic.h" +#include "kortex_driver/RobotEventTopic.h" +#include "kortex_driver/GetFwdKinematics.h" +#include "kortex_driver/PlayCartesianTrajectory.h" +#include "kortex_driver/PlayCartesianTrajectoryPosition.h" +#include "kortex_driver/PlayCartesianTrajectoryOrientation.h" +#include "kortex_driver/Pause.h" +#include "kortex_driver/Resume.h" +#include "kortex_driver/GetMeasuredCartesianPose.h" +#include "kortex_driver/GetCommandedCartesianPose.h" +#include "kortex_driver/GetTargetedCartesianPose.h" +#include "kortex_driver/SendTwistCommand.h" +#include "kortex_driver/GetMeasuredTwist.h" +#include "kortex_driver/GetCommandedTwist.h" +#include "kortex_driver/PlayJointTrajectory.h" +#include "kortex_driver/PlaySelectedJointTrajectory.h" +#include "kortex_driver/GetMeasuredJointAngles.h" +#include "kortex_driver/GetCommandedJointAngles.h" +#include "kortex_driver/SendJointSpeedsCommmand.h" +#include "kortex_driver/SendSelectedJointSpeedCommand.h" +#include "kortex_driver/GetMeasuredJointSpeeds.h" +#include "kortex_driver/GetCommandedJointSpeeds.h" +#include "kortex_driver/SendGripperCommand.h" +#include "kortex_driver/GetMeasuredGripperMovement.h" +#include "kortex_driver/GetCommandedGripperMovement.h" +#include "kortex_driver/SetAdmittance.h" +#include "kortex_driver/SetTwistWrenchReferenceFrame.h" +#include "kortex_driver/SetOperatingMode.h" +#include "kortex_driver/ApplyEmergencyStop.h" +#include "kortex_driver/ClearFaults.h" +#include "kortex_driver/GetActiveMap.h" +#include "kortex_driver/GetControlMode.h" +#include "kortex_driver/GetOperatingMode.h" +#include "kortex_driver/SetServoingMode.h" +#include "kortex_driver/GetServoingMode.h" +#include "kortex_driver/ServoingModeTopic.h" +#include "kortex_driver/GetSequenceState.h" +#include "kortex_driver/GetProtectionZoneState.h" +#include "kortex_driver/GetActionExecutionState.h" +#include "kortex_driver/RestoreFactorySettings.h" +#include "kortex_driver/RestoreNetworkFactorySettings.h" +#include "kortex_driver/Reboot.h" +#include "kortex_driver/FactoryTopic.h" +#include "kortex_driver/GetAllConnectedControllers.h" +#include "kortex_driver/GetControllerState.h" +#include "kortex_driver/GetActuatorCount.h" +#include "kortex_driver/StartWifiScan.h" +#include "kortex_driver/GetConfiguredWifi.h" +#include "kortex_driver/NetworkTopic.h" +#include "kortex_driver/GetArmState.h" +#include "kortex_driver/ArmStateTopic.h" +#include "kortex_driver/GetIPv4Information.h" +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" + +#include "kortex_driver/ApiOptions.h" + +using namespace std; +using namespace Kinova::Api; +using namespace Kinova::Api::Common; +using namespace Kinova::Api::BaseCyclic; +using namespace Kinova::Api; +using namespace Kinova::Api::Base; + +class BaseServices +{ + public: + BaseServices(char* ip, ros::NodeHandle& n); + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); + + + bool Refresh(kortex_driver::Refresh::Request &req, kortex_driver::Refresh::Response &res); + bool RefreshCommand(kortex_driver::RefreshCommand::Request &req, kortex_driver::RefreshCommand::Response &res); + bool RefreshFeedback(kortex_driver::RefreshFeedback::Request &req, kortex_driver::RefreshFeedback::Response &res); + bool RefreshCustomData(kortex_driver::RefreshCustomData::Request &req, kortex_driver::RefreshCustomData::Response &res); + + + bool CreateUserProfile(kortex_driver::CreateUserProfile::Request &req, kortex_driver::CreateUserProfile::Response &res); + bool UpdateUserProfile(kortex_driver::UpdateUserProfile::Request &req, kortex_driver::UpdateUserProfile::Response &res); + bool ReadUserProfile(kortex_driver::ReadUserProfile::Request &req, kortex_driver::ReadUserProfile::Response &res); + bool DeleteUserProfile(kortex_driver::DeleteUserProfile::Request &req, kortex_driver::DeleteUserProfile::Response &res); + bool ReadAllUserProfiles(kortex_driver::ReadAllUserProfiles::Request &req, kortex_driver::ReadAllUserProfiles::Response &res); + bool ReadAllUsers(kortex_driver::ReadAllUsers::Request &req, kortex_driver::ReadAllUsers::Response &res); + bool ChangePassword(kortex_driver::ChangePassword::Request &req, kortex_driver::ChangePassword::Response &res); + bool CreateSequence(kortex_driver::CreateSequence::Request &req, kortex_driver::CreateSequence::Response &res); + bool UpdateSequence(kortex_driver::UpdateSequence::Request &req, kortex_driver::UpdateSequence::Response &res); + bool ReadSequence(kortex_driver::ReadSequence::Request &req, kortex_driver::ReadSequence::Response &res); + bool DeleteSequence(kortex_driver::DeleteSequence::Request &req, kortex_driver::DeleteSequence::Response &res); + bool ReadAllSequences(kortex_driver::ReadAllSequences::Request &req, kortex_driver::ReadAllSequences::Response &res); + bool DeleteSequenceTask(kortex_driver::DeleteSequenceTask::Request &req, kortex_driver::DeleteSequenceTask::Response &res); + bool DeleteAllSequenceTasks(kortex_driver::DeleteAllSequenceTasks::Request &req, kortex_driver::DeleteAllSequenceTasks::Response &res); + bool PlaySequence(kortex_driver::PlaySequence::Request &req, kortex_driver::PlaySequence::Response &res); + bool PlayAdvancedSequence(kortex_driver::PlayAdvancedSequence::Request &req, kortex_driver::PlayAdvancedSequence::Response &res); + bool StopSequence(kortex_driver::StopSequence::Request &req, kortex_driver::StopSequence::Response &res); + bool PauseSequence(kortex_driver::PauseSequence::Request &req, kortex_driver::PauseSequence::Response &res); + bool ResumeSequence(kortex_driver::ResumeSequence::Request &req, kortex_driver::ResumeSequence::Response &res); + bool CreateProtectionZone(kortex_driver::CreateProtectionZone::Request &req, kortex_driver::CreateProtectionZone::Response &res); + bool UpdateProtectionZone(kortex_driver::UpdateProtectionZone::Request &req, kortex_driver::UpdateProtectionZone::Response &res); + bool ReadProtectionZone(kortex_driver::ReadProtectionZone::Request &req, kortex_driver::ReadProtectionZone::Response &res); + bool DeleteProtectionZone(kortex_driver::DeleteProtectionZone::Request &req, kortex_driver::DeleteProtectionZone::Response &res); + bool ReadAllProtectionZones(kortex_driver::ReadAllProtectionZones::Request &req, kortex_driver::ReadAllProtectionZones::Response &res); + bool CreateMapping(kortex_driver::CreateMapping::Request &req, kortex_driver::CreateMapping::Response &res); + bool ReadMapping(kortex_driver::ReadMapping::Request &req, kortex_driver::ReadMapping::Response &res); + bool ReadAllMappings(kortex_driver::ReadAllMappings::Request &req, kortex_driver::ReadAllMappings::Response &res); + bool CreateMap(kortex_driver::CreateMap::Request &req, kortex_driver::CreateMap::Response &res); + bool ReadAllMaps(kortex_driver::ReadAllMaps::Request &req, kortex_driver::ReadAllMaps::Response &res); + bool ActivateMap(kortex_driver::ActivateMap::Request &req, kortex_driver::ActivateMap::Response &res); + bool CreateAction(kortex_driver::CreateAction::Request &req, kortex_driver::CreateAction::Response &res); + bool ReadAction(kortex_driver::ReadAction::Request &req, kortex_driver::ReadAction::Response &res); + bool ReadAllActions(kortex_driver::ReadAllActions::Request &req, kortex_driver::ReadAllActions::Response &res); + bool DeleteAction(kortex_driver::DeleteAction::Request &req, kortex_driver::DeleteAction::Response &res); + bool UpdateAction(kortex_driver::UpdateAction::Request &req, kortex_driver::UpdateAction::Response &res); + bool ExecuteActionFromReference(kortex_driver::ExecuteActionFromReference::Request &req, kortex_driver::ExecuteActionFromReference::Response &res); + bool ExecuteAction(kortex_driver::ExecuteAction::Request &req, kortex_driver::ExecuteAction::Response &res); + bool PauseAction(kortex_driver::PauseAction::Request &req, kortex_driver::PauseAction::Response &res); + bool StopAction(kortex_driver::StopAction::Request &req, kortex_driver::StopAction::Response &res); + bool ResumeAction(kortex_driver::ResumeAction::Request &req, kortex_driver::ResumeAction::Response &res); + bool GetIPv4Configuration(kortex_driver::GetIPv4Configuration::Request &req, kortex_driver::GetIPv4Configuration::Response &res); + bool SetIPv4Configuration(kortex_driver::SetIPv4Configuration::Request &req, kortex_driver::SetIPv4Configuration::Response &res); + bool SetCommunicationInterfaceEnable(kortex_driver::SetCommunicationInterfaceEnable::Request &req, kortex_driver::SetCommunicationInterfaceEnable::Response &res); + bool IsCommunicationInterfaceEnable(kortex_driver::IsCommunicationInterfaceEnable::Request &req, kortex_driver::IsCommunicationInterfaceEnable::Response &res); + bool GetAvailableWifi(kortex_driver::GetAvailableWifi::Request &req, kortex_driver::GetAvailableWifi::Response &res); + bool GetWifiInformation(kortex_driver::GetWifiInformation::Request &req, kortex_driver::GetWifiInformation::Response &res); + bool AddWifiConfiguration(kortex_driver::AddWifiConfiguration::Request &req, kortex_driver::AddWifiConfiguration::Response &res); + bool DeleteWifiConfiguration(kortex_driver::DeleteWifiConfiguration::Request &req, kortex_driver::DeleteWifiConfiguration::Response &res); + bool GetAllConfiguredWifis(kortex_driver::GetAllConfiguredWifis::Request &req, kortex_driver::GetAllConfiguredWifis::Response &res); + bool ConnectWifi(kortex_driver::ConnectWifi::Request &req, kortex_driver::ConnectWifi::Response &res); + bool DisconnectWifi(kortex_driver::DisconnectWifi::Request &req, kortex_driver::DisconnectWifi::Response &res); + bool GetConnectedWifiInformation(kortex_driver::GetConnectedWifiInformation::Request &req, kortex_driver::GetConnectedWifiInformation::Response &res); + bool Unsubscribe(kortex_driver::Unsubscribe::Request &req, kortex_driver::Unsubscribe::Response &res); + bool OnNotificationConfigurationChangeTopic(kortex_driver::ConfigurationChangeTopic::Request &req, kortex_driver::ConfigurationChangeTopic::Response &res); + void cb_ConfigurationChangeTopic(ConfigurationChangeNotification notif); + bool OnNotificationMappingInfoTopic(kortex_driver::MappingInfoTopic::Request &req, kortex_driver::MappingInfoTopic::Response &res); + void cb_MappingInfoTopic(MappingInfoNotification notif); + bool OnNotificationControlModeTopic(kortex_driver::ControlModeTopic::Request &req, kortex_driver::ControlModeTopic::Response &res); + void cb_ControlModeTopic(ControlModeNotification notif); + bool OnNotificationOperatingModeTopic(kortex_driver::OperatingModeTopic::Request &req, kortex_driver::OperatingModeTopic::Response &res); + void cb_OperatingModeTopic(OperatingModeNotification notif); + bool OnNotificationSequenceInfoTopic(kortex_driver::SequenceInfoTopic::Request &req, kortex_driver::SequenceInfoTopic::Response &res); + void cb_SequenceInfoTopic(SequenceInfoNotification notif); + bool OnNotificationProtectionZoneTopic(kortex_driver::ProtectionZoneTopic::Request &req, kortex_driver::ProtectionZoneTopic::Response &res); + void cb_ProtectionZoneTopic(ProtectionZoneNotification notif); + bool OnNotificationUserTopic(kortex_driver::UserTopic::Request &req, kortex_driver::UserTopic::Response &res); + void cb_UserTopic(UserNotification notif); + bool OnNotificationControllerTopic(kortex_driver::ControllerTopic::Request &req, kortex_driver::ControllerTopic::Response &res); + void cb_ControllerTopic(ControllerNotification notif); + bool OnNotificationActionTopic(kortex_driver::ActionTopic::Request &req, kortex_driver::ActionTopic::Response &res); + void cb_ActionTopic(ActionNotification notif); + bool OnNotificationRobotEventTopic(kortex_driver::RobotEventTopic::Request &req, kortex_driver::RobotEventTopic::Response &res); + void cb_RobotEventTopic(RobotEventNotification notif); + bool GetFwdKinematics(kortex_driver::GetFwdKinematics::Request &req, kortex_driver::GetFwdKinematics::Response &res); + bool PlayCartesianTrajectory(kortex_driver::PlayCartesianTrajectory::Request &req, kortex_driver::PlayCartesianTrajectory::Response &res); + bool PlayCartesianTrajectoryPosition(kortex_driver::PlayCartesianTrajectoryPosition::Request &req, kortex_driver::PlayCartesianTrajectoryPosition::Response &res); + bool PlayCartesianTrajectoryOrientation(kortex_driver::PlayCartesianTrajectoryOrientation::Request &req, kortex_driver::PlayCartesianTrajectoryOrientation::Response &res); + bool Pause(kortex_driver::Pause::Request &req, kortex_driver::Pause::Response &res); + bool Resume(kortex_driver::Resume::Request &req, kortex_driver::Resume::Response &res); + bool GetMeasuredCartesianPose(kortex_driver::GetMeasuredCartesianPose::Request &req, kortex_driver::GetMeasuredCartesianPose::Response &res); + bool GetCommandedCartesianPose(kortex_driver::GetCommandedCartesianPose::Request &req, kortex_driver::GetCommandedCartesianPose::Response &res); + bool GetTargetedCartesianPose(kortex_driver::GetTargetedCartesianPose::Request &req, kortex_driver::GetTargetedCartesianPose::Response &res); + bool SendTwistCommand(kortex_driver::SendTwistCommand::Request &req, kortex_driver::SendTwistCommand::Response &res); + bool GetMeasuredTwist(kortex_driver::GetMeasuredTwist::Request &req, kortex_driver::GetMeasuredTwist::Response &res); + bool GetCommandedTwist(kortex_driver::GetCommandedTwist::Request &req, kortex_driver::GetCommandedTwist::Response &res); + bool PlayJointTrajectory(kortex_driver::PlayJointTrajectory::Request &req, kortex_driver::PlayJointTrajectory::Response &res); + bool PlaySelectedJointTrajectory(kortex_driver::PlaySelectedJointTrajectory::Request &req, kortex_driver::PlaySelectedJointTrajectory::Response &res); + bool GetMeasuredJointAngles(kortex_driver::GetMeasuredJointAngles::Request &req, kortex_driver::GetMeasuredJointAngles::Response &res); + bool GetCommandedJointAngles(kortex_driver::GetCommandedJointAngles::Request &req, kortex_driver::GetCommandedJointAngles::Response &res); + bool SendJointSpeedsCommmand(kortex_driver::SendJointSpeedsCommmand::Request &req, kortex_driver::SendJointSpeedsCommmand::Response &res); + bool SendSelectedJointSpeedCommand(kortex_driver::SendSelectedJointSpeedCommand::Request &req, kortex_driver::SendSelectedJointSpeedCommand::Response &res); + bool GetMeasuredJointSpeeds(kortex_driver::GetMeasuredJointSpeeds::Request &req, kortex_driver::GetMeasuredJointSpeeds::Response &res); + bool GetCommandedJointSpeeds(kortex_driver::GetCommandedJointSpeeds::Request &req, kortex_driver::GetCommandedJointSpeeds::Response &res); + bool SendGripperCommand(kortex_driver::SendGripperCommand::Request &req, kortex_driver::SendGripperCommand::Response &res); + bool GetMeasuredGripperMovement(kortex_driver::GetMeasuredGripperMovement::Request &req, kortex_driver::GetMeasuredGripperMovement::Response &res); + bool GetCommandedGripperMovement(kortex_driver::GetCommandedGripperMovement::Request &req, kortex_driver::GetCommandedGripperMovement::Response &res); + bool SetAdmittance(kortex_driver::SetAdmittance::Request &req, kortex_driver::SetAdmittance::Response &res); + bool SetTwistWrenchReferenceFrame(kortex_driver::SetTwistWrenchReferenceFrame::Request &req, kortex_driver::SetTwistWrenchReferenceFrame::Response &res); + bool SetOperatingMode(kortex_driver::SetOperatingMode::Request &req, kortex_driver::SetOperatingMode::Response &res); + bool ApplyEmergencyStop(kortex_driver::ApplyEmergencyStop::Request &req, kortex_driver::ApplyEmergencyStop::Response &res); + bool ClearFaults(kortex_driver::ClearFaults::Request &req, kortex_driver::ClearFaults::Response &res); + bool GetActiveMap(kortex_driver::GetActiveMap::Request &req, kortex_driver::GetActiveMap::Response &res); + bool GetControlMode(kortex_driver::GetControlMode::Request &req, kortex_driver::GetControlMode::Response &res); + bool GetOperatingMode(kortex_driver::GetOperatingMode::Request &req, kortex_driver::GetOperatingMode::Response &res); + bool SetServoingMode(kortex_driver::SetServoingMode::Request &req, kortex_driver::SetServoingMode::Response &res); + bool GetServoingMode(kortex_driver::GetServoingMode::Request &req, kortex_driver::GetServoingMode::Response &res); + bool OnNotificationServoingModeTopic(kortex_driver::ServoingModeTopic::Request &req, kortex_driver::ServoingModeTopic::Response &res); + void cb_ServoingModeTopic(ServoingModeNotification notif); + bool GetSequenceState(kortex_driver::GetSequenceState::Request &req, kortex_driver::GetSequenceState::Response &res); + bool GetProtectionZoneState(kortex_driver::GetProtectionZoneState::Request &req, kortex_driver::GetProtectionZoneState::Response &res); + bool GetActionExecutionState(kortex_driver::GetActionExecutionState::Request &req, kortex_driver::GetActionExecutionState::Response &res); + bool RestoreFactorySettings(kortex_driver::RestoreFactorySettings::Request &req, kortex_driver::RestoreFactorySettings::Response &res); + bool RestoreNetworkFactorySettings(kortex_driver::RestoreNetworkFactorySettings::Request &req, kortex_driver::RestoreNetworkFactorySettings::Response &res); + bool Reboot(kortex_driver::Reboot::Request &req, kortex_driver::Reboot::Response &res); + bool OnNotificationFactoryTopic(kortex_driver::FactoryTopic::Request &req, kortex_driver::FactoryTopic::Response &res); + void cb_FactoryTopic(FactoryNotification notif); + bool GetAllConnectedControllers(kortex_driver::GetAllConnectedControllers::Request &req, kortex_driver::GetAllConnectedControllers::Response &res); + bool GetControllerState(kortex_driver::GetControllerState::Request &req, kortex_driver::GetControllerState::Response &res); + bool GetActuatorCount(kortex_driver::GetActuatorCount::Request &req, kortex_driver::GetActuatorCount::Response &res); + bool StartWifiScan(kortex_driver::StartWifiScan::Request &req, kortex_driver::StartWifiScan::Response &res); + bool GetConfiguredWifi(kortex_driver::GetConfiguredWifi::Request &req, kortex_driver::GetConfiguredWifi::Response &res); + bool OnNotificationNetworkTopic(kortex_driver::NetworkTopic::Request &req, kortex_driver::NetworkTopic::Response &res); + void cb_NetworkTopic(NetworkNotification notif); + bool GetArmState(kortex_driver::GetArmState::Request &req, kortex_driver::GetArmState::Response &res); + bool OnNotificationArmStateTopic(kortex_driver::ArmStateTopic::Request &req, kortex_driver::ArmStateTopic::Response &res); + void cb_ArmStateTopic(ArmStateNotification notif); + bool GetIPv4Information(kortex_driver::GetIPv4Information::Request &req, kortex_driver::GetIPv4Information::Response &res); + + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + + BaseCyclicClient* m_basecyclic; + BaseClient* m_base; + uint32_t m_CurrentDeviceID; + RouterClientSendOptions m_apiOptions; + + SessionManager* m_SessionManager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_ConfigurationChangeTopic; + ros::Publisher m_pub_MappingInfoTopic; + ros::Publisher m_pub_ControlModeTopic; + ros::Publisher m_pub_OperatingModeTopic; + ros::Publisher m_pub_SequenceInfoTopic; + ros::Publisher m_pub_ProtectionZoneTopic; + ros::Publisher m_pub_UserTopic; + ros::Publisher m_pub_ControllerTopic; + ros::Publisher m_pub_ActionTopic; + ros::Publisher m_pub_RobotEventTopic; + ros::Publisher m_pub_ServoingModeTopic; + ros::Publisher m_pub_FactoryTopic; + ros::Publisher m_pub_NetworkTopic; + ros::Publisher m_pub_ArmStateTopic; +}; +#endif diff --git a/kortex_driver/src/util/diagnostic.h b/kortex_driver/src/util/diagnostic.h new file mode 100644 index 00000000..cfcedd90 --- /dev/null +++ b/kortex_driver/src/util/diagnostic.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +#include + +struct kortex_error +{ + int error_code; + std::string description; +}; \ No newline at end of file diff --git a/kortex_driver/src/util/math_util.h b/kortex_driver/src/util/math_util.h new file mode 100644 index 00000000..cd4daeb3 --- /dev/null +++ b/kortex_driver/src/util/math_util.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ + +#include + +#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_driver/srv/ActionTopic.srv b/kortex_driver/srv/ActionTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ActionTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/ActivateMap.srv b/kortex_driver/srv/ActivateMap.srv new file mode 100644 index 00000000..e6b9a564 --- /dev/null +++ b/kortex_driver/srv/ActivateMap.srv @@ -0,0 +1,3 @@ +ActivateMapHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/AddWifiConfiguration.srv b/kortex_driver/srv/AddWifiConfiguration.srv new file mode 100644 index 00000000..48a3c358 --- /dev/null +++ b/kortex_driver/srv/AddWifiConfiguration.srv @@ -0,0 +1,3 @@ +WifiConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ApplyEmergencyStop.srv b/kortex_driver/srv/ApplyEmergencyStop.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/ApplyEmergencyStop.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ArmStateTopic.srv b/kortex_driver/srv/ArmStateTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ArmStateTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/ChangePassword.srv b/kortex_driver/srv/ChangePassword.srv new file mode 100644 index 00000000..f9fceed1 --- /dev/null +++ b/kortex_driver/srv/ChangePassword.srv @@ -0,0 +1,3 @@ +PasswordChange input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ClearFaults.srv b/kortex_driver/srv/ClearFaults.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/ClearFaults.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ConfigurationChangeTopic.srv b/kortex_driver/srv/ConfigurationChangeTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ConfigurationChangeTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/ConnectWifi.srv b/kortex_driver/srv/ConnectWifi.srv new file mode 100644 index 00000000..4e1a65aa --- /dev/null +++ b/kortex_driver/srv/ConnectWifi.srv @@ -0,0 +1,3 @@ +Ssid input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ControlModeTopic.srv b/kortex_driver/srv/ControlModeTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ControlModeTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/ControllerTopic.srv b/kortex_driver/srv/ControllerTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ControllerTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/CreateAction.srv b/kortex_driver/srv/CreateAction.srv new file mode 100644 index 00000000..25d11dab --- /dev/null +++ b/kortex_driver/srv/CreateAction.srv @@ -0,0 +1,3 @@ +Action input +--- +ActionHandle output \ No newline at end of file diff --git a/kortex_driver/srv/CreateMap.srv b/kortex_driver/srv/CreateMap.srv new file mode 100644 index 00000000..93c9e1d4 --- /dev/null +++ b/kortex_driver/srv/CreateMap.srv @@ -0,0 +1,3 @@ +Map input +--- +MapHandle output \ No newline at end of file diff --git a/kortex_driver/srv/CreateMapping.srv b/kortex_driver/srv/CreateMapping.srv new file mode 100644 index 00000000..241110bf --- /dev/null +++ b/kortex_driver/srv/CreateMapping.srv @@ -0,0 +1,3 @@ +Mapping input +--- +MappingHandle output \ No newline at end of file diff --git a/kortex_driver/srv/CreateProtectionZone.srv b/kortex_driver/srv/CreateProtectionZone.srv new file mode 100644 index 00000000..12c649ab --- /dev/null +++ b/kortex_driver/srv/CreateProtectionZone.srv @@ -0,0 +1,3 @@ +ProtectionZone input +--- +ProtectionZoneHandle output \ No newline at end of file diff --git a/kortex_driver/srv/CreateSequence.srv b/kortex_driver/srv/CreateSequence.srv new file mode 100644 index 00000000..884f87c6 --- /dev/null +++ b/kortex_driver/srv/CreateSequence.srv @@ -0,0 +1,3 @@ +Sequence input +--- +SequenceHandle output \ No newline at end of file diff --git a/kortex_driver/srv/CreateUserProfile.srv b/kortex_driver/srv/CreateUserProfile.srv new file mode 100644 index 00000000..9b5dbd6b --- /dev/null +++ b/kortex_driver/srv/CreateUserProfile.srv @@ -0,0 +1,3 @@ +FullUserProfile input +--- +UserProfileHandle output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteAction.srv b/kortex_driver/srv/DeleteAction.srv new file mode 100644 index 00000000..6668d04d --- /dev/null +++ b/kortex_driver/srv/DeleteAction.srv @@ -0,0 +1,3 @@ +ActionHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteAllSequenceTasks.srv b/kortex_driver/srv/DeleteAllSequenceTasks.srv new file mode 100644 index 00000000..00e870c4 --- /dev/null +++ b/kortex_driver/srv/DeleteAllSequenceTasks.srv @@ -0,0 +1,3 @@ +SequenceHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteProtectionZone.srv b/kortex_driver/srv/DeleteProtectionZone.srv new file mode 100644 index 00000000..bc933b51 --- /dev/null +++ b/kortex_driver/srv/DeleteProtectionZone.srv @@ -0,0 +1,3 @@ +ProtectionZoneHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteSequence.srv b/kortex_driver/srv/DeleteSequence.srv new file mode 100644 index 00000000..00e870c4 --- /dev/null +++ b/kortex_driver/srv/DeleteSequence.srv @@ -0,0 +1,3 @@ +SequenceHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteSequenceTask.srv b/kortex_driver/srv/DeleteSequenceTask.srv new file mode 100644 index 00000000..b4170eb4 --- /dev/null +++ b/kortex_driver/srv/DeleteSequenceTask.srv @@ -0,0 +1,3 @@ +SequenceTaskHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteUserProfile.srv b/kortex_driver/srv/DeleteUserProfile.srv new file mode 100644 index 00000000..e5c214e4 --- /dev/null +++ b/kortex_driver/srv/DeleteUserProfile.srv @@ -0,0 +1,3 @@ +UserProfileHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DeleteWifiConfiguration.srv b/kortex_driver/srv/DeleteWifiConfiguration.srv new file mode 100644 index 00000000..4e1a65aa --- /dev/null +++ b/kortex_driver/srv/DeleteWifiConfiguration.srv @@ -0,0 +1,3 @@ +Ssid input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/DisconnectWifi.srv b/kortex_driver/srv/DisconnectWifi.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/DisconnectWifi.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ExecuteAction.srv b/kortex_driver/srv/ExecuteAction.srv new file mode 100644 index 00000000..c74f1249 --- /dev/null +++ b/kortex_driver/srv/ExecuteAction.srv @@ -0,0 +1,3 @@ +Action input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ExecuteActionFromReference.srv b/kortex_driver/srv/ExecuteActionFromReference.srv new file mode 100644 index 00000000..6668d04d --- /dev/null +++ b/kortex_driver/srv/ExecuteActionFromReference.srv @@ -0,0 +1,3 @@ +ActionHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/FactoryTopic.srv b/kortex_driver/srv/FactoryTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/FactoryTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/GetActionExecutionState.srv b/kortex_driver/srv/GetActionExecutionState.srv new file mode 100644 index 00000000..32c9d22d --- /dev/null +++ b/kortex_driver/srv/GetActionExecutionState.srv @@ -0,0 +1,3 @@ +Empty input +--- +ActionExecutionState output \ No newline at end of file diff --git a/kortex_driver/srv/GetActiveMap.srv b/kortex_driver/srv/GetActiveMap.srv new file mode 100644 index 00000000..ea8df28a --- /dev/null +++ b/kortex_driver/srv/GetActiveMap.srv @@ -0,0 +1,3 @@ +MappingHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/GetActuatorCount.srv b/kortex_driver/srv/GetActuatorCount.srv new file mode 100644 index 00000000..cb92302a --- /dev/null +++ b/kortex_driver/srv/GetActuatorCount.srv @@ -0,0 +1,3 @@ +Empty input +--- +ActuatorInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetAllConfiguredWifis.srv b/kortex_driver/srv/GetAllConfiguredWifis.srv new file mode 100644 index 00000000..7a64466e --- /dev/null +++ b/kortex_driver/srv/GetAllConfiguredWifis.srv @@ -0,0 +1,3 @@ +Empty input +--- +WifiConfigurationList output \ No newline at end of file diff --git a/kortex_driver/srv/GetAllConnectedControllers.srv b/kortex_driver/srv/GetAllConnectedControllers.srv new file mode 100644 index 00000000..2397aaff --- /dev/null +++ b/kortex_driver/srv/GetAllConnectedControllers.srv @@ -0,0 +1,3 @@ +Empty input +--- +ControllerList output \ No newline at end of file diff --git a/kortex_driver/srv/GetArmState.srv b/kortex_driver/srv/GetArmState.srv new file mode 100644 index 00000000..9c9bcd89 --- /dev/null +++ b/kortex_driver/srv/GetArmState.srv @@ -0,0 +1,3 @@ +Empty input +--- +ArmStateInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetAvailableWifi.srv b/kortex_driver/srv/GetAvailableWifi.srv new file mode 100644 index 00000000..be8692f3 --- /dev/null +++ b/kortex_driver/srv/GetAvailableWifi.srv @@ -0,0 +1,3 @@ +Empty input +--- +WifiInformationList output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedCartesianPose.srv b/kortex_driver/srv/GetCommandedCartesianPose.srv new file mode 100644 index 00000000..a79dc7e6 --- /dev/null +++ b/kortex_driver/srv/GetCommandedCartesianPose.srv @@ -0,0 +1,3 @@ +Empty input +--- +Pose output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedGripperMovement.srv b/kortex_driver/srv/GetCommandedGripperMovement.srv new file mode 100644 index 00000000..1311aa77 --- /dev/null +++ b/kortex_driver/srv/GetCommandedGripperMovement.srv @@ -0,0 +1,3 @@ +GripperRequest input +--- +Gripper output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedJointAngles.srv b/kortex_driver/srv/GetCommandedJointAngles.srv new file mode 100644 index 00000000..bc24fba9 --- /dev/null +++ b/kortex_driver/srv/GetCommandedJointAngles.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointAngles output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedJointSpeeds.srv b/kortex_driver/srv/GetCommandedJointSpeeds.srv new file mode 100644 index 00000000..43ff467a --- /dev/null +++ b/kortex_driver/srv/GetCommandedJointSpeeds.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointSpeeds output \ No newline at end of file diff --git a/kortex_driver/srv/GetCommandedTwist.srv b/kortex_driver/srv/GetCommandedTwist.srv new file mode 100644 index 00000000..fe4d93d5 --- /dev/null +++ b/kortex_driver/srv/GetCommandedTwist.srv @@ -0,0 +1,3 @@ +Empty input +--- +Twist output \ No newline at end of file diff --git a/kortex_driver/srv/GetConfiguredWifi.srv b/kortex_driver/srv/GetConfiguredWifi.srv new file mode 100644 index 00000000..76f8d177 --- /dev/null +++ b/kortex_driver/srv/GetConfiguredWifi.srv @@ -0,0 +1,3 @@ +Ssid input +--- +WifiConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/GetConnectedWifiInformation.srv b/kortex_driver/srv/GetConnectedWifiInformation.srv new file mode 100644 index 00000000..deced6ec --- /dev/null +++ b/kortex_driver/srv/GetConnectedWifiInformation.srv @@ -0,0 +1,3 @@ +Empty input +--- +WifiInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetControlMode.srv b/kortex_driver/srv/GetControlMode.srv new file mode 100644 index 00000000..6eb15fb1 --- /dev/null +++ b/kortex_driver/srv/GetControlMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +ControlModeInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetControllerState.srv b/kortex_driver/srv/GetControllerState.srv new file mode 100644 index 00000000..5596f9e4 --- /dev/null +++ b/kortex_driver/srv/GetControllerState.srv @@ -0,0 +1,3 @@ +ControllerHandle input +--- +ControllerState output \ No newline at end of file diff --git a/kortex_driver/srv/GetFwdKinematics.srv b/kortex_driver/srv/GetFwdKinematics.srv new file mode 100644 index 00000000..0489367a --- /dev/null +++ b/kortex_driver/srv/GetFwdKinematics.srv @@ -0,0 +1,3 @@ +Empty input +--- +TransformationMatrix output \ No newline at end of file diff --git a/kortex_driver/srv/GetIPv4Configuration.srv b/kortex_driver/srv/GetIPv4Configuration.srv new file mode 100644 index 00000000..1515ce25 --- /dev/null +++ b/kortex_driver/srv/GetIPv4Configuration.srv @@ -0,0 +1,3 @@ +NetworkHandle input +--- +IPv4Configuration output \ No newline at end of file diff --git a/kortex_driver/srv/GetIPv4Information.srv b/kortex_driver/srv/GetIPv4Information.srv new file mode 100644 index 00000000..5b5a39c2 --- /dev/null +++ b/kortex_driver/srv/GetIPv4Information.srv @@ -0,0 +1,3 @@ +NetworkHandle input +--- +IPv4Information output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredCartesianPose.srv b/kortex_driver/srv/GetMeasuredCartesianPose.srv new file mode 100644 index 00000000..a79dc7e6 --- /dev/null +++ b/kortex_driver/srv/GetMeasuredCartesianPose.srv @@ -0,0 +1,3 @@ +Empty input +--- +Pose output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredGripperMovement.srv b/kortex_driver/srv/GetMeasuredGripperMovement.srv new file mode 100644 index 00000000..1311aa77 --- /dev/null +++ b/kortex_driver/srv/GetMeasuredGripperMovement.srv @@ -0,0 +1,3 @@ +GripperRequest input +--- +Gripper output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredJointAngles.srv b/kortex_driver/srv/GetMeasuredJointAngles.srv new file mode 100644 index 00000000..bc24fba9 --- /dev/null +++ b/kortex_driver/srv/GetMeasuredJointAngles.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointAngles output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredJointSpeeds.srv b/kortex_driver/srv/GetMeasuredJointSpeeds.srv new file mode 100644 index 00000000..43ff467a --- /dev/null +++ b/kortex_driver/srv/GetMeasuredJointSpeeds.srv @@ -0,0 +1,3 @@ +Empty input +--- +JointSpeeds output \ No newline at end of file diff --git a/kortex_driver/srv/GetMeasuredTwist.srv b/kortex_driver/srv/GetMeasuredTwist.srv new file mode 100644 index 00000000..fe4d93d5 --- /dev/null +++ b/kortex_driver/srv/GetMeasuredTwist.srv @@ -0,0 +1,3 @@ +Empty input +--- +Twist output \ No newline at end of file diff --git a/kortex_driver/srv/GetOperatingMode.srv b/kortex_driver/srv/GetOperatingMode.srv new file mode 100644 index 00000000..d8364528 --- /dev/null +++ b/kortex_driver/srv/GetOperatingMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +OperatingModeInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetProtectionZoneState.srv b/kortex_driver/srv/GetProtectionZoneState.srv new file mode 100644 index 00000000..9d4d6a1c --- /dev/null +++ b/kortex_driver/srv/GetProtectionZoneState.srv @@ -0,0 +1,3 @@ +ProtectionZoneHandle input +--- +ProtectionZoneInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetSequenceState.srv b/kortex_driver/srv/GetSequenceState.srv new file mode 100644 index 00000000..65790b89 --- /dev/null +++ b/kortex_driver/srv/GetSequenceState.srv @@ -0,0 +1,3 @@ +SequenceHandle input +--- +SequenceInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetServoingMode.srv b/kortex_driver/srv/GetServoingMode.srv new file mode 100644 index 00000000..345f2567 --- /dev/null +++ b/kortex_driver/srv/GetServoingMode.srv @@ -0,0 +1,3 @@ +Empty input +--- +ServoingModeInformation output \ No newline at end of file diff --git a/kortex_driver/srv/GetTargetedCartesianPose.srv b/kortex_driver/srv/GetTargetedCartesianPose.srv new file mode 100644 index 00000000..a79dc7e6 --- /dev/null +++ b/kortex_driver/srv/GetTargetedCartesianPose.srv @@ -0,0 +1,3 @@ +Empty input +--- +Pose output \ No newline at end of file diff --git a/kortex_driver/srv/GetWifiInformation.srv b/kortex_driver/srv/GetWifiInformation.srv new file mode 100644 index 00000000..9208c104 --- /dev/null +++ b/kortex_driver/srv/GetWifiInformation.srv @@ -0,0 +1,3 @@ +Ssid input +--- +WifiInformation output \ No newline at end of file diff --git a/kortex_driver/srv/IsCommunicationInterfaceEnable.srv b/kortex_driver/srv/IsCommunicationInterfaceEnable.srv new file mode 100644 index 00000000..a3ad49c9 --- /dev/null +++ b/kortex_driver/srv/IsCommunicationInterfaceEnable.srv @@ -0,0 +1,3 @@ +NetworkHandle input +--- +CommunicationInterfaceConfiguration output \ No newline at end of file diff --git a/kortex_driver/srv/MappingInfoTopic.srv b/kortex_driver/srv/MappingInfoTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/MappingInfoTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/NetworkTopic.srv b/kortex_driver/srv/NetworkTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/NetworkTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/OperatingModeTopic.srv b/kortex_driver/srv/OperatingModeTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/OperatingModeTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/Pause.srv b/kortex_driver/srv/Pause.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/Pause.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PauseAction.srv b/kortex_driver/srv/PauseAction.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/PauseAction.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PauseSequence.srv b/kortex_driver/srv/PauseSequence.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/PauseSequence.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlayAdvancedSequence.srv b/kortex_driver/srv/PlayAdvancedSequence.srv new file mode 100644 index 00000000..151aa316 --- /dev/null +++ b/kortex_driver/srv/PlayAdvancedSequence.srv @@ -0,0 +1,3 @@ +AdvancedSequenceHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlayCartesianTrajectory.srv b/kortex_driver/srv/PlayCartesianTrajectory.srv new file mode 100644 index 00000000..1a64dd46 --- /dev/null +++ b/kortex_driver/srv/PlayCartesianTrajectory.srv @@ -0,0 +1,3 @@ +ConstrainedPose input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlayCartesianTrajectoryOrientation.srv b/kortex_driver/srv/PlayCartesianTrajectoryOrientation.srv new file mode 100644 index 00000000..5bac9814 --- /dev/null +++ b/kortex_driver/srv/PlayCartesianTrajectoryOrientation.srv @@ -0,0 +1,3 @@ +ConstrainedOrientation input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlayCartesianTrajectoryPosition.srv b/kortex_driver/srv/PlayCartesianTrajectoryPosition.srv new file mode 100644 index 00000000..68c1748f --- /dev/null +++ b/kortex_driver/srv/PlayCartesianTrajectoryPosition.srv @@ -0,0 +1,3 @@ +ConstrainedPosition input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlayJointTrajectory.srv b/kortex_driver/srv/PlayJointTrajectory.srv new file mode 100644 index 00000000..2d17f3ca --- /dev/null +++ b/kortex_driver/srv/PlayJointTrajectory.srv @@ -0,0 +1,3 @@ +ConstrainedJointAngles input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlaySelectedJointTrajectory.srv b/kortex_driver/srv/PlaySelectedJointTrajectory.srv new file mode 100644 index 00000000..b6dfbaa0 --- /dev/null +++ b/kortex_driver/srv/PlaySelectedJointTrajectory.srv @@ -0,0 +1,3 @@ +ConstrainedJointAngle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/PlaySequence.srv b/kortex_driver/srv/PlaySequence.srv new file mode 100644 index 00000000..00e870c4 --- /dev/null +++ b/kortex_driver/srv/PlaySequence.srv @@ -0,0 +1,3 @@ +SequenceHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ProtectionZoneTopic.srv b/kortex_driver/srv/ProtectionZoneTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ProtectionZoneTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAction.srv b/kortex_driver/srv/ReadAction.srv new file mode 100644 index 00000000..f9d93fb0 --- /dev/null +++ b/kortex_driver/srv/ReadAction.srv @@ -0,0 +1,3 @@ +ActionHandle input +--- +Action output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllActions.srv b/kortex_driver/srv/ReadAllActions.srv new file mode 100644 index 00000000..3f1d6d44 --- /dev/null +++ b/kortex_driver/srv/ReadAllActions.srv @@ -0,0 +1,3 @@ +RequestedActionType input +--- +ActionList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllMappings.srv b/kortex_driver/srv/ReadAllMappings.srv new file mode 100644 index 00000000..06aba6a1 --- /dev/null +++ b/kortex_driver/srv/ReadAllMappings.srv @@ -0,0 +1,3 @@ +Empty input +--- +MappingList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllMaps.srv b/kortex_driver/srv/ReadAllMaps.srv new file mode 100644 index 00000000..30e520c4 --- /dev/null +++ b/kortex_driver/srv/ReadAllMaps.srv @@ -0,0 +1,3 @@ +MappingHandle input +--- +MapList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllProtectionZones.srv b/kortex_driver/srv/ReadAllProtectionZones.srv new file mode 100644 index 00000000..31307fba --- /dev/null +++ b/kortex_driver/srv/ReadAllProtectionZones.srv @@ -0,0 +1,3 @@ +Empty input +--- +ProtectionZoneList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllSequences.srv b/kortex_driver/srv/ReadAllSequences.srv new file mode 100644 index 00000000..146a255a --- /dev/null +++ b/kortex_driver/srv/ReadAllSequences.srv @@ -0,0 +1,3 @@ +Empty input +--- +SequenceList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllUserProfiles.srv b/kortex_driver/srv/ReadAllUserProfiles.srv new file mode 100644 index 00000000..46d81410 --- /dev/null +++ b/kortex_driver/srv/ReadAllUserProfiles.srv @@ -0,0 +1,3 @@ +Empty input +--- +UserProfileList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadAllUsers.srv b/kortex_driver/srv/ReadAllUsers.srv new file mode 100644 index 00000000..7ffb2d01 --- /dev/null +++ b/kortex_driver/srv/ReadAllUsers.srv @@ -0,0 +1,3 @@ +Empty input +--- +UserList output \ No newline at end of file diff --git a/kortex_driver/srv/ReadMapping.srv b/kortex_driver/srv/ReadMapping.srv new file mode 100644 index 00000000..27349a2f --- /dev/null +++ b/kortex_driver/srv/ReadMapping.srv @@ -0,0 +1,3 @@ +MappingHandle input +--- +Mapping output \ No newline at end of file diff --git a/kortex_driver/srv/ReadProtectionZone.srv b/kortex_driver/srv/ReadProtectionZone.srv new file mode 100644 index 00000000..bc7600b3 --- /dev/null +++ b/kortex_driver/srv/ReadProtectionZone.srv @@ -0,0 +1,3 @@ +ProtectionZoneHandle input +--- +ProtectionZone output \ No newline at end of file diff --git a/kortex_driver/srv/ReadSequence.srv b/kortex_driver/srv/ReadSequence.srv new file mode 100644 index 00000000..f7fb91c3 --- /dev/null +++ b/kortex_driver/srv/ReadSequence.srv @@ -0,0 +1,3 @@ +SequenceHandle input +--- +Sequence output \ No newline at end of file diff --git a/kortex_driver/srv/ReadUserProfile.srv b/kortex_driver/srv/ReadUserProfile.srv new file mode 100644 index 00000000..58fedf8c --- /dev/null +++ b/kortex_driver/srv/ReadUserProfile.srv @@ -0,0 +1,3 @@ +UserProfileHandle input +--- +UserProfile output \ No newline at end of file diff --git a/kortex_driver/srv/Reboot.srv b/kortex_driver/srv/Reboot.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/Reboot.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Refresh.srv b/kortex_driver/srv/Refresh.srv new file mode 100644 index 00000000..432de516 --- /dev/null +++ b/kortex_driver/srv/Refresh.srv @@ -0,0 +1,3 @@ +Command input +--- +Feedback output \ No newline at end of file diff --git a/kortex_driver/srv/RefreshCommand.srv b/kortex_driver/srv/RefreshCommand.srv new file mode 100644 index 00000000..9bd2e9fc --- /dev/null +++ b/kortex_driver/srv/RefreshCommand.srv @@ -0,0 +1,3 @@ +Command input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/RefreshCustomData.srv b/kortex_driver/srv/RefreshCustomData.srv new file mode 100644 index 00000000..301250e4 --- /dev/null +++ b/kortex_driver/srv/RefreshCustomData.srv @@ -0,0 +1,3 @@ +CustomData input +--- +CustomData output \ No newline at end of file diff --git a/kortex_driver/srv/RefreshFeedback.srv b/kortex_driver/srv/RefreshFeedback.srv new file mode 100644 index 00000000..c2102f1a --- /dev/null +++ b/kortex_driver/srv/RefreshFeedback.srv @@ -0,0 +1,3 @@ +Empty input +--- +Feedback output \ No newline at end of file diff --git a/kortex_driver/srv/RestoreFactorySettings.srv b/kortex_driver/srv/RestoreFactorySettings.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/RestoreFactorySettings.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/RestoreNetworkFactorySettings.srv b/kortex_driver/srv/RestoreNetworkFactorySettings.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/RestoreNetworkFactorySettings.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Resume.srv b/kortex_driver/srv/Resume.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/Resume.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ResumeAction.srv b/kortex_driver/srv/ResumeAction.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/ResumeAction.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/ResumeSequence.srv b/kortex_driver/srv/ResumeSequence.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/ResumeSequence.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/RobotEventTopic.srv b/kortex_driver/srv/RobotEventTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/RobotEventTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/SendGripperCommand.srv b/kortex_driver/srv/SendGripperCommand.srv new file mode 100644 index 00000000..f83e0fcd --- /dev/null +++ b/kortex_driver/srv/SendGripperCommand.srv @@ -0,0 +1,3 @@ +GripperCommand input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SendJointSpeedsCommmand.srv b/kortex_driver/srv/SendJointSpeedsCommmand.srv new file mode 100644 index 00000000..18656d38 --- /dev/null +++ b/kortex_driver/srv/SendJointSpeedsCommmand.srv @@ -0,0 +1,3 @@ +JointSpeeds input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SendSelectedJointSpeedCommand.srv b/kortex_driver/srv/SendSelectedJointSpeedCommand.srv new file mode 100644 index 00000000..2cc32856 --- /dev/null +++ b/kortex_driver/srv/SendSelectedJointSpeedCommand.srv @@ -0,0 +1,3 @@ +JointSpeed input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SendTwistCommand.srv b/kortex_driver/srv/SendTwistCommand.srv new file mode 100644 index 00000000..afa8aa1d --- /dev/null +++ b/kortex_driver/srv/SendTwistCommand.srv @@ -0,0 +1,3 @@ +TwistCommand input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SequenceInfoTopic.srv b/kortex_driver/srv/SequenceInfoTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/SequenceInfoTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/ServoingModeTopic.srv b/kortex_driver/srv/ServoingModeTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/ServoingModeTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/SetAdmittance.srv b/kortex_driver/srv/SetAdmittance.srv new file mode 100644 index 00000000..9e132b83 --- /dev/null +++ b/kortex_driver/srv/SetAdmittance.srv @@ -0,0 +1,3 @@ +Admittance input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetCommunicationInterfaceEnable.srv b/kortex_driver/srv/SetCommunicationInterfaceEnable.srv new file mode 100644 index 00000000..91007ce4 --- /dev/null +++ b/kortex_driver/srv/SetCommunicationInterfaceEnable.srv @@ -0,0 +1,3 @@ +CommunicationInterfaceConfiguration input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetIPv4Configuration.srv b/kortex_driver/srv/SetIPv4Configuration.srv new file mode 100644 index 00000000..58ed27e3 --- /dev/null +++ b/kortex_driver/srv/SetIPv4Configuration.srv @@ -0,0 +1,3 @@ +FullIPv4Configuration input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetOperatingMode.srv b/kortex_driver/srv/SetOperatingMode.srv new file mode 100644 index 00000000..a91aa070 --- /dev/null +++ b/kortex_driver/srv/SetOperatingMode.srv @@ -0,0 +1,3 @@ +OperatingModeInformation input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetServoingMode.srv b/kortex_driver/srv/SetServoingMode.srv new file mode 100644 index 00000000..b8dc46dd --- /dev/null +++ b/kortex_driver/srv/SetServoingMode.srv @@ -0,0 +1,3 @@ +ServoingModeInformation input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/SetTwistWrenchReferenceFrame.srv b/kortex_driver/srv/SetTwistWrenchReferenceFrame.srv new file mode 100644 index 00000000..0ac82544 --- /dev/null +++ b/kortex_driver/srv/SetTwistWrenchReferenceFrame.srv @@ -0,0 +1,3 @@ +CartesianReferenceFrameRequest input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/StartWifiScan.srv b/kortex_driver/srv/StartWifiScan.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/StartWifiScan.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/StopAction.srv b/kortex_driver/srv/StopAction.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/StopAction.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/StopSequence.srv b/kortex_driver/srv/StopSequence.srv new file mode 100644 index 00000000..4d7a11a3 --- /dev/null +++ b/kortex_driver/srv/StopSequence.srv @@ -0,0 +1,3 @@ +Empty input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/Unsubscribe.srv b/kortex_driver/srv/Unsubscribe.srv new file mode 100644 index 00000000..403ee3b9 --- /dev/null +++ b/kortex_driver/srv/Unsubscribe.srv @@ -0,0 +1,3 @@ +NotificationHandle input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/UpdateAction.srv b/kortex_driver/srv/UpdateAction.srv new file mode 100644 index 00000000..c74f1249 --- /dev/null +++ b/kortex_driver/srv/UpdateAction.srv @@ -0,0 +1,3 @@ +Action input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/UpdateProtectionZone.srv b/kortex_driver/srv/UpdateProtectionZone.srv new file mode 100644 index 00000000..1b07d487 --- /dev/null +++ b/kortex_driver/srv/UpdateProtectionZone.srv @@ -0,0 +1,3 @@ +ProtectionZone input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/UpdateSequence.srv b/kortex_driver/srv/UpdateSequence.srv new file mode 100644 index 00000000..5805a3a5 --- /dev/null +++ b/kortex_driver/srv/UpdateSequence.srv @@ -0,0 +1,3 @@ +Sequence input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/UpdateUserProfile.srv b/kortex_driver/srv/UpdateUserProfile.srv new file mode 100644 index 00000000..bbd7d544 --- /dev/null +++ b/kortex_driver/srv/UpdateUserProfile.srv @@ -0,0 +1,3 @@ +UserProfile input +--- +Empty output \ No newline at end of file diff --git a/kortex_driver/srv/UserTopic.srv b/kortex_driver/srv/UserTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_driver/srv/UserTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_driver/srv/non_generated/SetApiOptions.srv b/kortex_driver/srv/non_generated/SetApiOptions.srv new file mode 100644 index 00000000..cab7c810 --- /dev/null +++ b/kortex_driver/srv/non_generated/SetApiOptions.srv @@ -0,0 +1,3 @@ +ApiOptions input +--- + diff --git a/kortex_driver/srv/non_generated/SetDeviceID.srv b/kortex_driver/srv/non_generated/SetDeviceID.srv new file mode 100644 index 00000000..396957c5 --- /dev/null +++ b/kortex_driver/srv/non_generated/SetDeviceID.srv @@ -0,0 +1,2 @@ +uint32 device_id +--- diff --git a/kortex_driver/templates/NodeServices.cpp.jinja2 b/kortex_driver/templates/NodeServices.cpp.jinja2 new file mode 100644 index 00000000..d34791c8 --- /dev/null +++ b/kortex_driver/templates/NodeServices.cpp.jinja2 @@ -0,0 +1,145 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +{% for package in detailedPackages %} +{%- if package.HasMessage == 1 -%} +#include "{{package.filename|lower}}_ros_converter.h" +#include "{{package.filename|lower}}_proto_converter.h" +{%- endif %} +{% endfor -%} + +BaseServices::BaseServices(char* ip, ros::NodeHandle& n) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + m_CurrentDeviceID = 0; + m_apiOptions.timeout_ms = 3000; +{% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); + {%- endif -%} + +{% endfor -%} + m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + std::cout << "\nSession Created\n"; + + m_pub_Error = m_n.advertise("KortexError", 1000); +{%- for package in detailedPackages -%} +{%- for method in package.service.method -%} +{%- if 'Topic' in method.name %} + m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); +{%- endif -%} +{%- endfor -%} +{%- endfor -%} + + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +bool BaseServices::SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res) +{ + m_CurrentDeviceID = req.device_id; + + return true; +} + +bool BaseServices::SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res) +{ + m_apiOptions.timeout_ms = req.input.timeout_ms; + + return true; +} + +{% for package in detailedPackages %} +{% for method in package.service.method %} +{%- if 'Topic' in method.name %} +bool BaseServices::OnNotification{{method.name}}(kortex_driver::{{method.name}}::Request &req, kortex_driver::{{method.name}}::Response &res) +{%- else %} +bool BaseServices::{{method.name}}(kortex_driver::{{method.name}}::Request &req, kortex_driver::{{method.name}}::Response &res) +{%- endif %} +{ + {%- set splitInputTypeName = method.input_type.split('.') -%} + {% set splitOutputTypeName = method.output_type.split('.') %} + {{splitInputTypeName[4]}} input; + {%- if not method.input_type.split('.')[4] == "Empty" %} + ToProtoData(req.input, &input); + {%- endif %} + {{splitOutputTypeName[4]}} output; + kortex_driver::KortexError result_error; + + try + { + {%- if not method.output_type.split('.')[4] == "Empty" %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + {%- if 'Topic' in method.name %} + std::function< void ({{package.name}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&BaseServices::cb_{{method.name}}, this, std::placeholders::_1); + output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- else %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); + {%- else %} + m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- endif %} + } + catch (KDetailedException& ex) + + + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.toString(); + m_pub_Error.publish(result_error); + ROS_INFO("Kortex exception"); + ROS_INFO("KINOVA exception error code: %d\n", ex.getErrorInfo().getError().error_code()); + ROS_INFO("KINOVA exception error sub code: %d\n", ex.getErrorInfo().getError().error_sub_code()); + ROS_INFO("KINOVA exception description: %s\n", ex.what()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + {%- if not method.output_type.split('.')[4] == "Empty" %} + ToRosData(output, res.output); + {%- endif %} + return true; +} +{%- if 'Topic' in method.name %} +void BaseServices::cb_{{method.name}}({{package.name}}::{{method.name|replace("Topic", "")}}Notification notif) +{ + kortex_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; + ToRosData(notif, ros_msg); + m_pub_{{method.name}}.publish(ros_msg); +} +{%- endif %} +{% endfor -%} +{% endfor -%} \ No newline at end of file diff --git a/kortex_driver/templates/NodeServices.h.jinja2 b/kortex_driver/templates/NodeServices.h.jinja2 new file mode 100644 index 00000000..a2f345fc --- /dev/null +++ b/kortex_driver/templates/NodeServices.h.jinja2 @@ -0,0 +1,107 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{packageName}}SERVICES_H_ +#define _KORTEX_{{packageName}}SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +{%- for package in detailedPackages %} +#include <{{package.filename}}.pb.h> +{%- endfor %} + +#include +#include + +#include +#include + +{%- for package in detailedPackages %} +{%- if package.HasRPC == 1 %} +#include <{{package.name}}ClientRpc.h> +{%- endif %} +{%- endfor %} +#include +#include + +{%- for package in detailedPackages %} +{%- for method in package.service.method %} +#include "kortex_driver/{{method.name}}.h" +{%- endfor %} +{%- endfor %} +#include "kortex_driver/KortexError.h" +#include "kortex_driver/SetDeviceID.h" +#include "kortex_driver/SetApiOptions.h" + +#include "kortex_driver/ApiOptions.h" + +using namespace std; +using namespace Kinova::Api; +{%- for package in detailedPackages %} +using namespace {{package.namespace}}; +{%- endfor %} + +class BaseServices +{ + public: + BaseServices(char* ip, ros::NodeHandle& n); + bool SetDeviceID(kortex_driver::SetDeviceID::Request &req, kortex_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_driver::SetApiOptions::Request &req, kortex_driver::SetApiOptions::Response &res); +{% for package in detailedPackages %} +{%- for method in package.service.method %} +{%- if 'Topic' in method.name %} + bool OnNotification{{method.name}}(kortex_driver::{{method.name}}::Request &req, kortex_driver::{{method.name}}::Response &res); + void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); +{%- else %} + bool {{method.name}}(kortex_driver::{{method.name}}::Request &req, kortex_driver::{{method.name}}::Response &res); +{%- endif %} +{%- endfor %} +{% endfor %} + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + {% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + {{package.name}}Client* m_{{package.name|lower}}; + {%- endif -%} + {% endfor %} + uint32_t m_CurrentDeviceID; + RouterClientSendOptions m_apiOptions; + + SessionManager* m_SessionManager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + {%- for package in detailedPackages %} + {%- for method in package.service.method %} + {%- if 'Topic' in method.name %} + ros::Publisher m_pub_{{method.name}}; + {%- endif %} + {%- endfor %} + {%- endfor %} +}; +#endif + diff --git a/kortex_driver/templates/main.jinja2 b/kortex_driver/templates/main.jinja2 new file mode 100644 index 00000000..eba7992f --- /dev/null +++ b/kortex_driver/templates/main.jinja2 @@ -0,0 +1,160 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "math_util.h" + +#include +#include + +#define JOINT_COUNT 7 + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "BaseServices"); + + uint32_t cyclic_data_rate = 100; + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 2) + { + ROS_INFO("Connecting to IP = %s - node refresh rate = %s", argv[1], argv[2]); + + //Converting the second parameter(the cyclic rate) to an unsigned int variable. + stringstream tempRate; + tempRate << argv[2]; + tempRate >> cyclic_data_rate; + if(tempRate.fail() || tempRate.bad()) + { + ROS_INFO("ERROR - Bad error rate, shutting down the node..."); + ros::shutdown(); + return 0; + } + } + else + { + ROS_INFO("You need to provide an IP adresse as the first parameter and a cycle rate(Hertz) as the second parameter. ex: rosrun package node 192.168.1.1 100"); + ros::shutdown(); + return 0; + } + + BaseServices services_object(argv[1], n); + + ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &BaseServices::SetDeviceID, &services_object); + + {% for function in list_function -%} + ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &BaseServices::{{function}}, &services_object); + {% endfor %} + + ROS_INFO("Node's services initialized correctly."); + + ros::Publisher pub_base_feedback = n.advertise("base_feedback", 1000); + ros::Publisher pub_joint_state = n.advertise("base_feedback/joint_state", 1000); + + kortex_driver::Feedback base_feedback; + kortex_driver::RefreshFeedback::Request req; + kortex_driver::RefreshFeedback::Response res; + + sensor_msgs::JointState joint_state; + + ros::Rate rate(cyclic_data_rate); // 100 hz + while (!ros::isShuttingDown()) + { + services_object.RefreshFeedback(req, res); + + base_feedback.frame_id = res.output.frame_id; + + base_feedback.base.arm_voltage = res.output.base.arm_voltage; + base_feedback.base.arm_current = res.output.base.arm_current; + base_feedback.base.temperature_cpu = res.output.base.temperature_cpu; + base_feedback.base.temperature_ambient = res.output.base.temperature_ambient; + base_feedback.base.imu_acceleration_x = res.output.base.imu_acceleration_x; + base_feedback.base.imu_acceleration_y = res.output.base.imu_acceleration_y; + base_feedback.base.imu_acceleration_z = res.output.base.imu_acceleration_z; + base_feedback.base.imu_angular_velocity_x = res.output.base.imu_angular_velocity_x; + base_feedback.base.imu_angular_velocity_y = res.output.base.imu_angular_velocity_y; + base_feedback.base.imu_angular_velocity_z = res.output.base.imu_angular_velocity_z; + base_feedback.base.tool_pose_x = res.output.base.tool_pose_x; + base_feedback.base.tool_pose_y = res.output.base.tool_pose_y; + base_feedback.base.tool_pose_z = res.output.base.tool_pose_z; + base_feedback.base.tool_pose_theta_x = res.output.base.tool_pose_theta_x; + base_feedback.base.tool_pose_theta_y = res.output.base.tool_pose_theta_y; + base_feedback.base.tool_pose_theta_z = res.output.base.tool_pose_theta_z; + base_feedback.base.tool_external_wrench_force_x = res.output.base.tool_external_wrench_force_x; + base_feedback.base.tool_external_wrench_force_y = res.output.base.tool_external_wrench_force_y; + base_feedback.base.tool_external_wrench_force_z = res.output.base.tool_external_wrench_force_z; + base_feedback.base.tool_external_wrench_torque_x = res.output.base.tool_external_wrench_torque_x; + base_feedback.base.tool_external_wrench_torque_y = res.output.base.tool_external_wrench_torque_y; + base_feedback.base.tool_external_wrench_torque_z = res.output.base.tool_external_wrench_torque_z; + base_feedback.base.fault_bank_a = res.output.base.fault_bank_a; + base_feedback.base.fault_bank_b = res.output.base.fault_bank_b; + base_feedback.base.warning_bank_a = res.output.base.warning_bank_a; + base_feedback.base.warning_bank_b = res.output.base.warning_bank_b; + + base_feedback.actuators.clear(); + + joint_state.position.resize(JOINT_COUNT); + joint_state.velocity.resize(JOINT_COUNT); + joint_state.effort.resize(JOINT_COUNT); + joint_state.name.resize(JOINT_COUNT); + + for(int i = 0; i < JOINT_COUNT; i++) + { + kortex_driver::ActuatorFeedback temp; + + temp.status_flags = res.output.actuators[i].status_flags; + temp.jitter_comm = res.output.actuators[i].jitter_comm; + temp.position = res.output.actuators[i].position; + temp.velocity = res.output.actuators[i].velocity; + temp.torque = res.output.actuators[i].torque; + temp.current_motor = res.output.actuators[i].current_motor; + temp.voltage = res.output.actuators[i].voltage; + temp.temperature_motor = res.output.actuators[i].temperature_motor; + temp.temperature_core = res.output.actuators[i].temperature_core; + temp.fault_bank_a = res.output.actuators[i].fault_bank_a; + temp.fault_bank_b = res.output.actuators[i].fault_bank_b; + temp.warning_bank_a = res.output.actuators[i].warning_bank_a; + temp.warning_bank_b = res.output.actuators[i].warning_bank_b; + + base_feedback.actuators.push_back(temp); + + joint_state.name[i] = "Actuator" + std::to_string(i + 1); + joint_state.position[i] = TO_RAD(res.output.actuators[i].position); + joint_state.velocity[i] = TO_RAD(res.output.actuators[i].velocity); + joint_state.effort[i] = res.output.actuators[i].torque; + } + base_feedback.interconnect.position = res.output.interconnect.position; + + + + joint_state.header.stamp = ros::Time::now(); + joint_state.header.frame_id = std::to_string(res.output.frame_id); + + pub_base_feedback.publish(base_feedback); + pub_joint_state.publish(joint_state); + + + ros::spinOnce(); + + + + rate.sleep(); + } + + return 1; +} diff --git a/kortex_driver/templates/proto_converter.cpp.jinja2 b/kortex_driver/templates/proto_converter.cpp.jinja2 new file mode 100644 index 00000000..e37a427f --- /dev/null +++ b/kortex_driver/templates/proto_converter.cpp.jinja2 @@ -0,0 +1,77 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentPackageName|lower}}_proto_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_proto_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToProtoData(kortex_driver::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") -%} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {%- if field.type == 11 %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); + } + {%- else %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name|lower}}.size(); i++) + { + output->add_{{field.name|lower}}(input.{{field.name|lower}}[i]); + } + {% endif -%} + {% else -%} + {%- if field.type == 11 %} + ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); + {%- elif field.type == 14 %}{# ENUM #} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); + {%- elif field.type == 12 %} + output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); + {%- else %} + output->set_{{field.name}}(input.{{field.name}}); + {%- endif -%} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + + {% if detailed_message.HasOneOf == "true" %} + + {% for field in detailed_message.message.field %} + {%- if field.HasField("oneof_index") -%} + if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) + { + {% if field.type == 11 -%} + ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} + output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- else %} + output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- endif %} + } + {% endif %} + {%- endfor -%} + {% endif %} + + return 0; +} +{% endfor %} diff --git a/kortex_driver/templates/proto_converter.h.jinja2 b/kortex_driver/templates/proto_converter.h.jinja2 new file mode 100644 index 00000000..ec4abc80 --- /dev/null +++ b/kortex_driver/templates/proto_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_driver/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToProtoData(kortex_driver::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_driver/templates/ros_converter.cpp.jinja2 b/kortex_driver/templates/ros_converter.cpp.jinja2 new file mode 100644 index 00000000..80fd8dde --- /dev/null +++ b/kortex_driver/templates/ros_converter.cpp.jinja2 @@ -0,0 +1,86 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentPackageName|lower}}_ros_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_ros_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_driver::{{detailed_message.message.name}} &output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") %} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {% if field.type == 11 %} + {%- set splitTypeName = field.type_name.split('.') -%} + output.{{field.name|lower}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + kortex_driver::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(i), temp); + output.{{field.name}}.push_back(temp); + } + {%- else %} + output.{{field.name}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); + } + {%- endif %} + {%- else %} + {%- if field.type == 11 %} + ToRosData(input.{{field.name}}(), output.{{field.name}}); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output.{{field.name}} = input.{{field.name}}(); + {%- elif field.type == 12 %} + output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); + {%- else %} + output.{{field.name}} = input.{{field.name}}(); + {%- endif %} + {%- endif %} + {%- endif %} + {%- endfor %} + + {% if detailed_message.HasOneOf == "true" %} + auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); + + switch(oneof_type) + { + {%- for field in detailed_message.message.field -%} + {%- if field.HasField("oneof_index") -%} + {%- set splitTypeName = field.type_name.split('.') %} + {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} + case {{detailed_message.message.name}}::k{{EnumName}}: + { + {%- if field.type == 11 %} + kortex_driver::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(), temp); + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); + {%- elif field.type == 14 %} + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); + {% endif %} + break; + } + {% endif %} + {%- endfor %} + } + {% endif -%} + + return 0; +} +{% endfor %} diff --git a/kortex_driver/templates/ros_converter.h.jinja2 b/kortex_driver/templates/ros_converter.h.jinja2 new file mode 100644 index 00000000..f7162018 --- /dev/null +++ b/kortex_driver/templates/ros_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_driver/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_driver::{{detailed_message.message.name}} &output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_driver/templates/ros_enum.jinja2 b/kortex_driver/templates/ros_enum.jinja2 new file mode 100644 index 00000000..164146fc --- /dev/null +++ b/kortex_driver/templates/ros_enum.jinja2 @@ -0,0 +1,3 @@ +{% for member in item.value %} +uint32 {{member.name}} = {{member.number}} +{% endfor %} diff --git a/kortex_driver/templates/ros_message.jinja2 b/kortex_driver/templates/ros_message.jinja2 new file mode 100644 index 00000000..746188b6 --- /dev/null +++ b/kortex_driver/templates/ros_message.jinja2 @@ -0,0 +1,44 @@ +{%- for member in item.field -%} +{%- if not member.HasField("oneof_index") -%} +{%- if member.type == 9 %} {# TYPE_STRING #} +string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 12 %} {# TYPE_BYTES #} +uint8[] {{member.name}} +{%- elif member.type == 1 %} {# TYPE_DOUBLE #} +float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 7 %} {# TYPE_FIXED32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 6 %} {# TYPE_FIXED64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 2 %} {# TYPE_FLOAT #} +float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 5 %} {# TYPE_INT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 3 %} {# TYPE_INT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 17 %} {# TYPE_SINT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 18 %} {# TYPE_SINT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 13 %} {# TYPE_UINT32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 4 %} {# TYPE_UINT64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 14 -%} {# TYPE_ENUM #} +{% set list1 = member.type_name.split('.') %} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 8 %} {# TYPE_BOOL #} +bool {{member.name}} +{%- elif member.type == 11 %}{# TYPE MESSAGE #} +{% set list1 = member.type_name.split('.') %} +{{list1[4]}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- if HasOneOf %} +{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} +{%- endif -%} \ No newline at end of file diff --git a/kortex_driver/templates/ros_oneof.jinja2 b/kortex_driver/templates/ros_oneof.jinja2 new file mode 100644 index 00000000..4fac302a --- /dev/null +++ b/kortex_driver/templates/ros_oneof.jinja2 @@ -0,0 +1,9 @@ +{%- for member in item.field -%} +{% if member.HasField("oneof_index") %} +{% if member.type == 11 %} +{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} +{%- else -%} +uint32[] {{member.name}} +{%- endif -%} +{%- endif -%} +{% endfor %} \ No newline at end of file diff --git a/kortex_driver/templates/ros_service.jinja2 b/kortex_driver/templates/ros_service.jinja2 new file mode 100644 index 00000000..cc015cf8 --- /dev/null +++ b/kortex_driver/templates/ros_service.jinja2 @@ -0,0 +1,5 @@ +{% set split_input_type = item.input_type.split('.') %} +{%- set split_output_type = item.output_type.split('.') -%} +{{split_input_type[4]}} input +--- +{{split_output_type[4]}} output \ No newline at end of file diff --git a/kortex_examples/CMakeLists.txt b/kortex_examples/CMakeLists.txt new file mode 100644 index 00000000..777c4563 --- /dev/null +++ b/kortex_examples/CMakeLists.txt @@ -0,0 +1,40 @@ + +cmake_minimum_required(VERSION 2.8.3) +project(kortex_examples) + +add_compile_options(-std=c++11) +add_definitions(-D_OS_UNIX) + +## Find catkin and any catkin packages +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation kortex_driver kortex_actuator_driver kortex_vision_config_driver kortex_device_manager) + +file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "cpp/*.cpp") + +## Declare a catkin package +catkin_package() + +include_directories(include ${catkin_INCLUDE_DIRS}) +include_directories(include ${PROJECT_SOURCE_DIR}/src) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) +include_directories(include ${PROJECT_SOURCE_DIR}/src/util) + +add_executable(PlayCartesian cpp/example_play_cartesian.cpp) +target_link_libraries(PlayCartesian ${catkin_LIBRARIES} ) + +add_executable(PlayCartesianPosition cpp/example_play_cartesian_position.cpp) +target_link_libraries(PlayCartesianPosition ${catkin_LIBRARIES} ) + +add_executable(GetControlLoopParameters cpp/example_get_control_loop_parameters.cpp) +target_link_libraries(GetControlLoopParameters ${catkin_LIBRARIES} ) + +add_executable(SetControlLoopParameters cpp/example_set_control_loop_parameters.cpp) +target_link_libraries(SetControlLoopParameters ${catkin_LIBRARIES} ) + +add_executable(GetSensorSettings cpp/example_get_sensor_settings.cpp) +target_link_libraries(GetSensorSettings ${catkin_LIBRARIES} ) + +add_executable(ReadAllDevices cpp/example_read_all_devices.cpp) +target_link_libraries(ReadAllDevices ${catkin_LIBRARIES} ) diff --git a/kortex_examples/cpp/example_get_control_loop_parameters.cpp b/kortex_examples/cpp/example_get_control_loop_parameters.cpp new file mode 100644 index 00000000..8cc87c04 --- /dev/null +++ b/kortex_examples/cpp/example_get_control_loop_parameters.cpp @@ -0,0 +1,85 @@ +#include "ros/ros.h" +#include +#include +#include "kortex_actuator_driver/SetDeviceID.h" +#include "kortex_device_manager/DeviceTypes.h" +#include "kortex_device_manager/ReadAllDevices.h" + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "Actuator_GetControlLoopParameters"); + + ros::NodeHandle n; + + ros::ServiceClient service_GetControlLoopParameters = n.serviceClient("GetControlLoopParameters"); + ros::ServiceClient service_SetDeviceID = n.serviceClient("SetDeviceID"); + ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); + + kortex_actuator_driver::GetControlLoopParameters srvGetControlLoopParameters; + kortex_actuator_driver::SetDeviceID srvSetDeviceID; + kortex_device_manager::ReadAllDevices srvReadAllDevices; + + kortex_actuator_driver::ControlLoopSelection loopSelection; + kortex_device_manager::DeviceTypes device_type; + + srvGetControlLoopParameters.request.input.loop_selection = loopSelection.MOTOR_VELOCITY; + + bool actuatorFound = false; + uint32_t actuator_id = 0; + + if (service_ReadAllDevices.call(srvReadAllDevices)) + { + + for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) + { + if((srvReadAllDevices.response.output.device_handle[i].device_type == device_type.BIG_ACTUATOR) || + (srvReadAllDevices.response.output.device_handle[i].device_type == device_type.SMALL_ACTUATOR)) + { + + actuator_id = srvReadAllDevices.response.output.device_handle[i].device_identifier; + actuatorFound = true; + srvSetDeviceID.request.device_id = actuator_id; + + if (!service_SetDeviceID.call(srvSetDeviceID)) + { + ROS_ERROR("Failed to call SetDeviceID"); + } + + break; + } + } + } + else + { + ROS_ERROR("Failed to call ReadAllDevices"); + return 1; + } + + if(actuatorFound) + { + ROS_INFO("Found 1 actuator.\n"); + + if (service_GetControlLoopParameters.call(srvGetControlLoopParameters)) + { + ROS_INFO("loop_selection: %d", srvGetControlLoopParameters.response.output.loop_selection); + ROS_INFO("error_saturation: %f", srvGetControlLoopParameters.response.output.error_saturation); + ROS_INFO("output_saturation: %f", srvGetControlLoopParameters.response.output.output_saturation); + + for(int i = 0; i < srvGetControlLoopParameters.response.output.kAz.size(); i++) + { + ROS_INFO("kAz[%d]: %f", i, srvGetControlLoopParameters.response.output.kAz[i]); + } + for(int i = 0; i < srvGetControlLoopParameters.response.output.kBz.size(); i++) + { + ROS_INFO("kBz[%d]: %f", i, srvGetControlLoopParameters.response.output.kBz[i]); + } + } + else + { + ROS_ERROR("Failed to call GetControlLoopParameters"); + return 1; + } + } + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/example_get_sensor_settings.cpp b/kortex_examples/cpp/example_get_sensor_settings.cpp new file mode 100644 index 00000000..5b106c30 --- /dev/null +++ b/kortex_examples/cpp/example_get_sensor_settings.cpp @@ -0,0 +1,80 @@ +#include "ros/ros.h" +#include "kortex_vision_config_driver/GetSensorSettings.h" +#include "kortex_vision_config_driver/Sensor.h" +#include "kortex_vision_config_driver/SetDeviceID.h" +#include "kortex_device_manager/DeviceTypes.h" +#include "kortex_device_manager/ReadAllDevices.h" +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "VisionConfig_GetSensorSettings"); + + ros::NodeHandle n; + + ros::ServiceClient service_GetSensorSettings = n.serviceClient("GetSensorSettings"); + ros::ServiceClient service_SetDeviceID = n.serviceClient("SetDeviceID"); + ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); + + kortex_vision_config_driver::GetSensorSettings srvGetSensorSettings; + kortex_vision_config_driver::SetDeviceID srvSetDeviceID; + kortex_device_manager::ReadAllDevices srvReadAllDevices; + + kortex_vision_config_driver::Sensor sensor_type; + kortex_device_manager::DeviceTypes device_type; + + srvGetSensorSettings.request.input.sensor = sensor_type.SENSOR_COLOR; + + bool visionFound = false; + uint32_t vision_id = 0; + + if (service_ReadAllDevices.call(srvReadAllDevices)) + { + + for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) + { + if(srvReadAllDevices.response.output.device_handle[i].device_type == device_type.VISION) + { + + vision_id = srvReadAllDevices.response.output.device_handle[i].device_identifier; + visionFound = true; + srvSetDeviceID.request.device_id = vision_id; + + if (!service_SetDeviceID.call(srvSetDeviceID)) + { + ROS_ERROR("Failed to call SetDeviceID"); + } + } + } + } + else + { + ROS_ERROR("Failed to call ReadAllDevices"); + return 1; + } + + if(visionFound) + { + ROS_INFO("Found 1 vision module.\n"); + + if (service_GetSensorSettings.call(srvGetSensorSettings)) + { + ROS_INFO("sensor: %d", srvGetSensorSettings.response.output.sensor); + ROS_INFO("resolution: %d", srvGetSensorSettings.response.output.resolution); + ROS_INFO("frame_rate: %d", srvGetSensorSettings.response.output.frame_rate); + ROS_INFO("bit_rate: %d", srvGetSensorSettings.response.output.bit_rate); + } + else + { + ROS_ERROR("Failed to call GetSensorSettings"); + return 1; + } + } + else + { + ROS_INFO("Could not find any vision module on the target robot."); + } + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/example_play_cartesian.cpp b/kortex_examples/cpp/example_play_cartesian.cpp new file mode 100644 index 00000000..ff7a5655 --- /dev/null +++ b/kortex_examples/cpp/example_play_cartesian.cpp @@ -0,0 +1,72 @@ +#include "ros/ros.h" +#include +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "Sequence"); + + ros::NodeHandle n; + + ros::ServiceClient client_PlayCartesianTrajectory = n.serviceClient("PlayCartesianTrajectory"); + ros::ServiceClient client_RefreshFeedback = n.serviceClient("RefreshFeedback"); + + kortex_driver::PlayCartesianTrajectory srvPlayCartesianTrajectory; + kortex_driver::RefreshFeedback srvRefreshFeedback; + + float current_x = 0.0f; + float current_y = 0.0f; + float current_z = 0.0f; + + float current_theta_x = 0.0f; + float current_theta_y = 0.0f; + float current_theta_z = 0.0f; + + if (client_RefreshFeedback.call(srvRefreshFeedback)) + { + current_x = srvRefreshFeedback.response.output.base.tool_pose_x; + current_y = srvRefreshFeedback.response.output.base.tool_pose_y; + current_z = srvRefreshFeedback.response.output.base.tool_pose_z; + + current_theta_x = srvRefreshFeedback.response.output.base.tool_pose_theta_x; + current_theta_y = srvRefreshFeedback.response.output.base.tool_pose_theta_y; + current_theta_z = srvRefreshFeedback.response.output.base.tool_pose_theta_z; + + ROS_INFO("Getting cyclic data from the robot - x= %f y= %f z= %f theta x = %f theta y = %f theta z = %f", + current_x, current_y, current_z, current_theta_x, current_theta_y, current_theta_z); + } + else + { + ROS_ERROR("Failed to retrieve the cyclic data."); + return 1; + } + + //Creating our next target (a Cartesian pose) + srvPlayCartesianTrajectory.request.input.target_pose.x = current_x; + srvPlayCartesianTrajectory.request.input.target_pose.y = current_y; + srvPlayCartesianTrajectory.request.input.target_pose.z = current_z + 0.1; + + srvPlayCartesianTrajectory.request.input.target_pose.theta_x = current_theta_x; + srvPlayCartesianTrajectory.request.input.target_pose.theta_y = current_theta_y; + srvPlayCartesianTrajectory.request.input.target_pose.theta_z = current_theta_z + 60; + + kortex_driver::CartesianSpeed poseSpeed; + poseSpeed.translation = 0.1; + poseSpeed.orientation = 15; + + srvPlayCartesianTrajectory.request.input.constraint.oneof_type.speed.push_back(poseSpeed); + + ROS_INFO("CALL PlayCartesianTrajectory"); + if (client_PlayCartesianTrajectory.call(srvPlayCartesianTrajectory)) + { + ROS_INFO("pose sent"); + } + else + { + ROS_ERROR("Failed to call PlayCartesianTrajectory"); + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/example_play_cartesian_position.cpp b/kortex_examples/cpp/example_play_cartesian_position.cpp new file mode 100644 index 00000000..8688acb7 --- /dev/null +++ b/kortex_examples/cpp/example_play_cartesian_position.cpp @@ -0,0 +1,59 @@ +#include "ros/ros.h" +#include +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "example_play_cartesian_position"); + + ros::NodeHandle n; + + ros::ServiceClient client_PlayCartesianTrajectoryPosition = n.serviceClient("PlayCartesianTrajectoryPosition"); + ros::ServiceClient client_RefreshFeedback = n.serviceClient("RefreshFeedback"); + + kortex_driver::PlayCartesianTrajectoryPosition srvPlayCartesianTrajectoryPosition; + kortex_driver::RefreshFeedback srvRefreshFeedback; + + float current_x = 0.0f; + float current_y = 0.0f; + float current_z = 0.0f; + + if (client_RefreshFeedback.call(srvRefreshFeedback)) + { + current_x = srvRefreshFeedback.response.output.base.tool_pose_x; + current_y = srvRefreshFeedback.response.output.base.tool_pose_y; + current_z = srvRefreshFeedback.response.output.base.tool_pose_z; + ROS_INFO("Getting cyclic data from the robot - x= %f y= %f z= %f", current_x, current_y, current_z); + } + else + { + ROS_ERROR("Failed to retrieve the cyclic data."); + return 1; + } + + + + //Creating our next target (a Cartesian pose) + srvPlayCartesianTrajectoryPosition.request.input.target_position.x = current_x; + srvPlayCartesianTrajectoryPosition.request.input.target_position.y = current_y; + srvPlayCartesianTrajectoryPosition.request.input.target_position.z = current_z + 0.1; + + kortex_driver::CartesianSpeed poseSpeed; + poseSpeed.translation = 0.1; + + srvPlayCartesianTrajectoryPosition.request.input.constraint.oneof_type.speed.push_back(poseSpeed); + + ROS_INFO("CALL PlayCartesianTrajectory"); + if (client_PlayCartesianTrajectoryPosition.call(srvPlayCartesianTrajectoryPosition)) + { + ROS_INFO("pose sent"); + } + else + { + ROS_ERROR("Failed to call PlayCartesianTrajectoryPosition"); + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/example_read_all_devices.cpp b/kortex_examples/cpp/example_read_all_devices.cpp new file mode 100644 index 00000000..1345907b --- /dev/null +++ b/kortex_examples/cpp/example_read_all_devices.cpp @@ -0,0 +1,34 @@ +#include "ros/ros.h" +#include "kortex_device_manager/ReadAllDevices.h" +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "Example_DeviceManager_ReadAllDevices"); + + ros::NodeHandle n; + + ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); + + kortex_device_manager::ReadAllDevices srvReadAllDevices; + + ROS_INFO("CALL ReadAllDevices"); + + if (service_ReadAllDevices.call(srvReadAllDevices)) + { + for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) + { + ROS_INFO("device_type: %d", srvReadAllDevices.response.output.device_handle[i].device_type); + ROS_INFO("device_identifier: %d", srvReadAllDevices.response.output.device_handle[i].device_identifier); + ROS_INFO("order: %d", srvReadAllDevices.response.output.device_handle[i].order); + } + } + else + { + ROS_ERROR("Failed to call ReadAllDevices"); + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/cpp/example_set_control_loop_parameters.cpp b/kortex_examples/cpp/example_set_control_loop_parameters.cpp new file mode 100644 index 00000000..f6cd53d6 --- /dev/null +++ b/kortex_examples/cpp/example_set_control_loop_parameters.cpp @@ -0,0 +1,72 @@ +#include "ros/ros.h" +#include "kortex_actuator_driver/SetControlLoopParameters.h" +#include "kortex_actuator_driver/ControlLoopSelection.h" +#include "kortex_actuator_driver/SetDeviceID.h" +#include "kortex_device_manager/DeviceTypes.h" +#include "kortex_device_manager/ReadAllDevices.h" + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "Example_Actuator_SetControlLoopParameters"); + + ros::NodeHandle n; + + ros::ServiceClient service_SetControlLoopParameters = n.serviceClient("SetControlLoopParameters"); + ros::ServiceClient service_SetDeviceID = n.serviceClient("SetDeviceID"); + ros::ServiceClient service_ReadAllDevices = n.serviceClient("ReadAllDevices"); + + + kortex_actuator_driver::SetControlLoopParameters srvSetControlLoopParameters; + kortex_actuator_driver::ControlLoopSelection loopSelection; + kortex_actuator_driver::SetDeviceID srvSetDeviceID; + kortex_device_manager::ReadAllDevices srvReadAllDevices; + + srvSetControlLoopParameters.request.input.loop_selection = loopSelection.MOTOR_VELOCITY; + kortex_device_manager::DeviceTypes device_type; + + bool actuatorFound = false; + uint32_t actuator_id = 0; + + if (service_ReadAllDevices.call(srvReadAllDevices)) + { + + for(int i = 0; i < srvReadAllDevices.response.output.device_handle.size(); i++) + { + if((srvReadAllDevices.response.output.device_handle[i].device_type == device_type.BIG_ACTUATOR) || + (srvReadAllDevices.response.output.device_handle[i].device_type == device_type.SMALL_ACTUATOR)) + { + + actuator_id = srvReadAllDevices.response.output.device_handle[i].device_identifier; + actuatorFound = true; + srvSetDeviceID.request.device_id = actuator_id; + + if (!service_SetDeviceID.call(srvSetDeviceID)) + { + ROS_ERROR("Failed to call SetDeviceID"); + } + + break; + } + } + } + else + { + ROS_ERROR("Failed to call ReadAllDevices"); + return 1; + } + + if(actuatorFound) + { + if (service_SetControlLoopParameters.call(srvSetControlLoopParameters)) + { + ROS_INFO("ControlLoopParameters sent with success"); + } + else + { + ROS_ERROR("Failed to call SetControlLoopParameters"); + return 1; + } + } + + return 0; +} \ No newline at end of file diff --git a/kortex_examples/package.xml b/kortex_examples/package.xml new file mode 100644 index 00000000..38f6ad99 --- /dev/null +++ b/kortex_examples/package.xml @@ -0,0 +1,34 @@ + + + kortex_examples + 1.0.0 + THe kortex package that act as a robot's driver. + + KINOVA + + BSD + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + message_generation + kortex_driver + kortex_actuator_driver + kortex_vision_config_driver + kortex_device_manager + message_runtime + + + + + + + + diff --git a/kortex_examples/python/GetControlLoopParameters.py b/kortex_examples/python/GetControlLoopParameters.py new file mode 100644 index 00000000..1a2f950b --- /dev/null +++ b/kortex_examples/python/GetControlLoopParameters.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +import sys +import rospy +import time +from kortex_actuator_driver.srv import * +from kortex_actuator_driver.msg import * +from kortex_device_manager.srv import * +from kortex_device_manager.msg import * + +def GetControlLoopParameters_Client(): + rospy.wait_for_service('GetControlLoopParameters') + + try: + function_GetControlLoopParameters = rospy.ServiceProxy('GetControlLoopParameters', GetControlLoopParameters) + function_SetDeviceID = rospy.ServiceProxy('SetDeviceID', SetDeviceID) + function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) + + reqGetControlLoopParameters = GetControlLoopParametersRequest() + reqReadAllDevices = ReadAllDevicesRequest() + reqSetDeviceID = SetDeviceIDRequest() + + reqGetControlLoopParameters.input.loop_selection = ControlLoopSelection.MOTOR_VELOCITY; + + actuatorFound = False; + actuator_id = 0; + + responseReadAllDevices = function_ReadAllDevices(reqReadAllDevices) + + for index, device in enumerate(responseReadAllDevices.output.device_handle): + if device.device_type is DeviceTypes.BIG_ACTUATOR or device.device_type is DeviceTypes.SMALL_ACTUATOR: + actuator_id = device.device_identifier + actuatorFound = True + reqSetDeviceID.device_id = actuator_id + function_SetDeviceID(reqSetDeviceID) + break + + if actuatorFound: + responseGetControlLoopParameters = function_GetControlLoopParameters(reqGetControlLoopParameters) + + print("loop_selection = {}".format(responseGetControlLoopParameters.output.loop_selection)) + print("error_saturation = {}".format(responseGetControlLoopParameters.output.error_saturation)) + print("output_saturation = {}\n".format(responseGetControlLoopParameters.output.output_saturation)) + + for index, gainA in enumerate(responseGetControlLoopParameters.output.kAz): + print("kAz[{}] = {}".format(index, gainA)) + + print("\n") + + for index, gainB in enumerate(responseGetControlLoopParameters.output.kBz): + print("kBz[{}] = {}".format(index, gainB)) + + except rospy.ServiceException as e: + print "Service call failed: %s"%e + +if __name__ == "__main__": + GetControlLoopParameters_Client() \ No newline at end of file diff --git a/kortex_examples/python/GetSensorSettings.py b/kortex_examples/python/GetSensorSettings.py new file mode 100644 index 00000000..b1176c54 --- /dev/null +++ b/kortex_examples/python/GetSensorSettings.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import sys +import rospy +import time +from kortex_vision_config_driver.srv import * +from kortex_vision_config_driver.msg import * + +def GetSensorSettings_Client(): + rospy.wait_for_service('GetSensorSettings') + try: + function_GetSensorSettings = rospy.ServiceProxy('GetSensorSettings', GetSensorSettings) + + req = GetSensorSettingsRequest() + + req.input.sensor = Sensor.SENSOR_COLOR; + + response = function_GetSensorSettings(req) + + print(response) + + + + except rospy.ServiceException as e: + print "Service call failed: %s"%e + +if __name__ == "__main__": + GetSensorSettings_Client() \ No newline at end of file diff --git a/kortex_examples/python/PlayCartesian.py b/kortex_examples/python/PlayCartesian.py new file mode 100644 index 00000000..5c243d1f --- /dev/null +++ b/kortex_examples/python/PlayCartesian.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +import sys +import rospy +from kortex_driver.srv import * +from kortex_driver.msg import * + +def PlayCartesian_client(): + + rospy.wait_for_service('PlayCartesianTrajectory') + rospy.wait_for_service('RefreshFeedback') + + try: + function_PlayCartesianTrajectory = rospy.ServiceProxy('PlayCartesianTrajectory', PlayCartesianTrajectory) + function_RefreshFeedback = rospy.ServiceProxy('RefreshFeedback', RefreshFeedback) + + current_feedback = function_RefreshFeedback() + request = PlayCartesianTrajectoryRequest() + + current_x = current_feedback.output.base.tool_pose_x + current_y = current_feedback.output.base.tool_pose_y + current_z = current_feedback.output.base.tool_pose_z + + current_theta_x = current_feedback.output.base.tool_pose_theta_x + current_theta_y = current_feedback.output.base.tool_pose_theta_y + current_theta_z = current_feedback.output.base.tool_pose_theta_z + + //Creating our next target (a Cartesian pose) + request.input.target_pose.x = current_x + request.input.target_pose.y = current_y + request.input.target_pose.z = current_z + 0.1 + + request.input.target_pose.theta_x = current_theta_x + request.input.target_pose.theta_y = current_theta_y + request.input.target_pose.theta_z = current_theta_z + 60 + + poseSpeed = CartesianSpeed() + poseSpeed.translation = 0.1 + poseSpeed.orientation = 15 + + request.input.constraint.oneof_type.speed.append(poseSpeed) + + function_PlayCartesianTrajectory(request) + + except rospy.ServiceException as e: + print "Service call failed: %s"%e + +if __name__ == "__main__": + PlayCartesian_client() \ No newline at end of file diff --git a/kortex_examples/python/ReadAllDevices.py b/kortex_examples/python/ReadAllDevices.py new file mode 100644 index 00000000..d0adee9b --- /dev/null +++ b/kortex_examples/python/ReadAllDevices.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python + +import sys +import rospy +from kortex_device_manager.srv import * + +def ReadAllDevices_client(): + rospy.wait_for_service('ReadAllDevices') + try: + function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) + resp1 = function_ReadAllDevices() + print(resp1) + except rospy.ServiceException as e: + print "Service call failed: %s"%e + + + +if __name__ == "__main__": + ReadAllDevices_client() \ No newline at end of file diff --git a/kortex_examples/python/SetControlLoopParameters.py b/kortex_examples/python/SetControlLoopParameters.py new file mode 100644 index 00000000..7ab80e98 --- /dev/null +++ b/kortex_examples/python/SetControlLoopParameters.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +import sys +import rospy +import time +from kortex_actuator_driver.srv import * +from kortex_actuator_driver.msg import * +from kortex_device_manager.srv import * +from kortex_device_manager.msg import * + +def _function_SetControlLoopParameters(): + rospy.wait_for_service('SetControlLoopParameters') + + try: + function_SetControlLoopParameters = rospy.ServiceProxy('SetControlLoopParameters', SetControlLoopParameters) + function_SetDeviceID = rospy.ServiceProxy('SetDeviceID', SetDeviceID) + function_ReadAllDevices = rospy.ServiceProxy('ReadAllDevices', ReadAllDevices) + + req = SetControlLoopParametersRequest() + reqReadAllDevices = ReadAllDevicesRequest() + reqSetDeviceID = SetDeviceIDRequest() + + req.input.loop_selection = ControlLoopSelection.MOTOR_VELOCITY; + + actuatorFound = False; + actuator_id = 0; + + responseReadAllDevices = function_ReadAllDevices(reqReadAllDevices) + + for index, device in enumerate(responseReadAllDevices.output.device_handle): + if device.device_type is DeviceTypes.BIG_ACTUATOR or device.device_type is DeviceTypes.SMALL_ACTUATOR: + actuator_id = device.device_identifier + actuatorFound = True + reqSetDeviceID.device_id = actuator_id + function_SetDeviceID(reqSetDeviceID) + break + + if actuatorFound: + function_SetControlLoopParameters(req) + + except rospy.ServiceException as e: + print "Service call failed: %s"%e + +if __name__ == "__main__": + _function_SetControlLoopParameters() \ No newline at end of file diff --git a/kortex_examples/readme.md b/kortex_examples/readme.md new file mode 100644 index 00000000..eb003f84 --- /dev/null +++ b/kortex_examples/readme.md @@ -0,0 +1,112 @@ + +# Kortex Examples + + + +1. [Get control loop parameters](#get-control-loop-parameters) +1. [Set control loop parameters](#set-control-loop-parameters) +1. [Play cartesian](#play-cartesian) +1. [Play cartesian position](#play-cartesian-position) +1. [Get sensor settings](#get-sensor-settings) +1. [Read all devices](#read-all-devices) + + + + + +## Get control loop parameters +

      +Gets the control loop parameters from an actuator that is part of a Gen3 robot. +

      + +To run this example, those node need to be running: +> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) +> - kortex\_actuator\_driver (**rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100**) + +\* Note here that the address **192.168.1.10** is the default IP address of a robot but you can put any IP address that suits your need. + +To run the example: + +rosrun kortex_examples GetControlLoopParameters + + +## Set control loop parameters +

      +Sets the control loop parameters from an actuator that is part of a Gen3 robot. +

      + +This example needs those node to be running: +> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) +> - kortex\_actuator\_driver (**rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100**) + +\* Note here that the address **192.168.1.10** is the default IP address of a robot but you can put any IP address that suits your need. + + +## Play cartesian +

      +Move the end effector of a Gen3 robot in the Z axix by +0,1 meter and rotate around the THETA Z by +60°. +

      + +To run this example, those node need to be running: +> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) +> - kortex\_actuator\_driver (**rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100**) + +\* Note here that the address **192.168.1.10** is the default IP address of a robot but you can put any IP address that suits your need. + +To run the example: + +rosrun kortex_examples PlayCartesian + + +## Play cartesian position + +

      +Move the end effector of a Gen3 robot in the Z axix by +0,1. +

      + +To run this example, those node need to be running: +> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) +> - kortex\_actuator\_driver (**rosrun kortex\_actuator\_driver kortex\_actuator\_driver 192.168.1.10 100**) + +\* Note here that the address **192.168.1.10** is the default IP address of a robot but you can put any IP address that suits your need. + +To run the example: + +rosrun kortex_examples PlayCartesianPosition + + +## Get sensor settings +

      + Gets the settings of all the sensors from a vision module. In this example, we assume that the targeted vision module is part of a robot and to you want to communicate with through the robot's base using the device routing feature. +

      + +To run this example, those node need to be running: +> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) +> - kortex\_vision\_config\_driver (**rosrun kortex\_vision\_config\_driver kortex\_vision\_config\_driver 192.168.1.10**) + +Then to run it: + +rosrun kortex_examples GetSensorSettings + + +## Read all devices +

      + Get a list of all the devices available on a Gen3 robot's base. This example is useful when you want to communicate with a device that is a part of a robot using the device routin feature. +

      + +To run this example, those node need to be running: +> - kortex\_device\_manager (**rosrun kortex\_device\_manager kortex\_device\_manager 192.168.1.10**) + +Then to run it: + +rosrun kortex_examples ReadAllDevices + + diff --git a/kortex_vision_config_driver/CMakeLists.txt b/kortex_vision_config_driver/CMakeLists.txt new file mode 100644 index 00000000..a043a07c --- /dev/null +++ b/kortex_vision_config_driver/CMakeLists.txt @@ -0,0 +1,41 @@ + +cmake_minimum_required(VERSION 2.8.3) +project(kortex_vision_config_driver) + +add_compile_options(-std=c++11) +add_definitions(-D_OS_UNIX) + +## Find catkin and any catkin packages +find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation) + +file(GLOB_RECURSE cpp_list RELATIVE ${PROJECT_SOURCE_DIR} "src/*.cpp") + +## Declare ROS messages and services +add_message_files(DIRECTORY msg) +add_message_files(DIRECTORY msg/non_generated) +add_service_files(DIRECTORY srv) +add_service_files(DIRECTORY srv/non_generated) + +## Generate added messages and services +generate_messages(DEPENDENCIES std_msgs) + +## Declare a catkin package +catkin_package() + +include_directories(include ${catkin_INCLUDE_DIRS}) +include_directories(include ${PROJECT_SOURCE_DIR}/src) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/client_stubs) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/messages) +include_directories(include ${PROJECT_SOURCE_DIR}/../kortex_api/include/common) +include_directories(include ${PROJECT_SOURCE_DIR}/src/util) + +link_directories(${PROJECT_SOURCE_DIR}/../kortex_api/lib/release) + +add_executable(${PROJECT_NAME} ${cpp_list}) + +target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} CppKinovaApi gcov) + +add_dependencies(${PROJECT_NAME} kortex_vision_config_driver_gencpp) + + diff --git a/kortex_vision_config_driver/RosGeneration.py b/kortex_vision_config_driver/RosGeneration.py new file mode 100644 index 00000000..f47a0d01 --- /dev/null +++ b/kortex_vision_config_driver/RosGeneration.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python + +import sys + +from google.protobuf.compiler import plugin_pb2 as plugin +from google.protobuf import json_format as json_f + +import jinja2 + +import itertools +import json +import types +import os +import sys + +from google.protobuf.descriptor_pb2 import DescriptorProto, EnumDescriptorProto, ServiceDescriptorProto, FieldDescriptorProto, OneofDescriptorProto + +#Class that holds a protobuf message and some other details needed by the generator(jinja2 template). +class DetailedMessage: + def __init__(self, message=None): + self.message = message + self.HasOneOf = "false" + self.oneOfList = [] + +#Class that holds a protobuf service and some other details needed by the generator(jinja2 template). +class DetailedPackage: + def __init__(self, service=None): + self.name = "NoName" + self.service = service + +#JINJA2 function to render a file from a template. +def render(tpl_path, context): + path, filename = os.path.split(tpl_path) + return jinja2.Environment(loader=jinja2.FileSystemLoader(path or './')).get_template(filename).render(**context) + +#Main plugin function +def generate_code(request, response): + + #The context is the object sent to the JINJA2 template + context = types.SimpleNamespace() + context.serviceVersion = 1 + + context.detailedPackages = [] + + MainFilePath = os.path.join(".", "src/main.cpp") + function_list = [] + fileIndex = 0 + + for proto_file in request.proto_file: + context.detailedPackages.append(DetailedPackage()) + context.detailedPackages[fileIndex].name = proto_file.package.split(".")[-1] + context.detailedPackages[fileIndex].filename = proto_file.name.split(".")[0] + context.detailedPackages[fileIndex].namespace = proto_file.package.replace(".", "::") + context.detailedPackages[fileIndex].HasRPC = 0 + context.detailedPackages[fileIndex].HasMessage = 0 + + HeaderFilePath = os.path.join(".", "src/node.h") + CppFilePath = os.path.join(".", "src/node.cpp") + + #We lower the case to respect ROS coding standard style + CppProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderProtoConverterFilePath = os.path.join(".", "src/{}_proto_converter.h".format(proto_file.name.split(".")[0].lower())) + CppRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.cpp".format(proto_file.name.split(".")[0].lower())) + HeaderRosConverterFilePath = os.path.join(".", "src/{}_ros_converter.h".format(proto_file.name.split(".")[0].lower())) + + list_detailedMessage = [] + list_detailedMethod = [] + + # For every item in the current proto file + for item, package in traverse(proto_file): + context.HasOneOf = 0 + + + if isinstance(item, EnumDescriptorProto): + context.item = item + + ros_enumPath = os.path.join(".", "msg/{}.msg".format(item.name)) + + with open(ros_enumPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_enum.jinja2", context.__dict__)) + #If this it a message + if isinstance(item, DescriptorProto): + tempMessage = DetailedMessage(item) + context.detailedPackages[fileIndex].HasMessage = 1 + + for member in item.field: + #If a member is part of a oneof, it will have this additional field + if member.HasField("oneof_index"): + context.HasOneOf = 1 + tempMessage.HasOneOf = "true" + else: + context.HasOneOf = 0 + tempMessage.HasOneOf = "false" + + context.item = item + + #If the proto file contains a ONEOF we need to generate a separate file to handle it. + if context.HasOneOf == 1: + + #This line gets the list of ONEOF that is in the current message. + oneOfList = item.ListFields()[-1][1] + + tempMessage.oneOfList = item.ListFields()[-1][1] + ros_oneofPath = os.path.join(".", "msg/{}_{}.msg".format(item.name, oneOfList[0].name)) + + with open(ros_oneofPath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_oneof.jinja2", context.__dict__)) + + + list_detailedMessage.append(tempMessage) + ros_messagePath = os.path.join(".", "msg/{}.msg".format(item.name)) + + #We call jinja2 to generate a ROS message. + with open(ros_messagePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_message.jinja2", context.__dict__)) + + #If this is a service (A group of method) + if isinstance(item, ServiceDescriptorProto): + for method in item.method: + context.item = method + if "Topic" not in method.name: + function_list.append(method.name) + ros_servicePath = os.path.join(".", "srv/{}.srv".format(method.name)) + with open(ros_servicePath, 'wt') as serviceFile: + serviceFile.write(render("./templates/ros_service.jinja2", context.__dict__)) + + context.detailedPackages[fileIndex].service = item + context.detailedPackages[fileIndex].HasRPC = 1 + + context.currentPackageName = context.detailedPackages[fileIndex].name + context.currentNamespace = proto_file.package.replace(".", "::") + context.currentFilename = context.detailedPackages[fileIndex].filename + context.item = list_detailedMessage + + if context.detailedPackages[fileIndex].HasMessage == 1: + #Wecall jinja2 to generate a prot/ROS converter for every protobuf message. + with open(CppProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.cpp.jinja2", context.__dict__)) + with open(HeaderProtoConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/proto_converter.h.jinja2", context.__dict__)) + with open(CppRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.cpp.jinja2", context.__dict__)) + with open(HeaderRosConverterFilePath, 'wt') as converterFile: + converterFile.write(render("./templates/ros_converter.h.jinja2", context.__dict__)) + + fileIndex = fileIndex + 1 + + context.list_function = function_list + + #We jinja2 to generate the ROS node. + with open(HeaderFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.h.jinja2", context.__dict__)) + with open(CppFilePath, 'wt') as nodeFile: + nodeFile.write(render("./templates/NodeServices.cpp.jinja2", context.__dict__)) + with open(MainFilePath, 'wt') as mainFile: + mainFile.write(render("./templates/main.jinja2", context.__dict__)) + +def traverse(proto_file): + #recursive function that browse a protobof item + def _traverse(package, items): + for item in items: + yield item, package + + if isinstance(item, DescriptorProto): + for enum in item.enum_type: + yield enum, package + + for nested in item.nested_type: + nested_package = package + item.name + + for nested_item in _traverse(nested, nested_package): + yield nested_item, nested_package + if isinstance(item, ServiceDescriptorProto): + for rpc in item.method: + yield rpc, package + + #return a list of everything found in the proto file + return itertools.chain( + _traverse(proto_file.package, proto_file.enum_type), + _traverse(proto_file.package, proto_file.message_type), + _traverse(proto_file.package, proto_file.service), + ) + +if __name__ == '__main__': + # Read request message from stdin + data = sys.stdin.buffer.read() + + # Parse request + request = plugin.CodeGeneratorRequest() + request.ParseFromString(data) + + # Create response + response = plugin.CodeGeneratorResponse() + + # Generate code + generate_code(request, response) + + # Serialise response message + output = response.SerializeToString() + + # Write to stdout + sys.stdout.buffer.write(output) \ No newline at end of file diff --git a/kortex_vision_config_driver/build/.gitignore b/kortex_vision_config_driver/build/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/kortex_vision_config_driver/kortex_vision_config_driver.sh b/kortex_vision_config_driver/kortex_vision_config_driver.sh new file mode 100755 index 00000000..011eee96 --- /dev/null +++ b/kortex_vision_config_driver/kortex_vision_config_driver.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +python3 -u RosGeneration.py + diff --git a/kortex_vision_config_driver/msg/ArmState.msg b/kortex_vision_config_driver/msg/ArmState.msg new file mode 100644 index 00000000..d85bd69d --- /dev/null +++ b/kortex_vision_config_driver/msg/ArmState.msg @@ -0,0 +1,22 @@ + +uint32 UNSPECIFIED_ARM_STATE = 0 + +uint32 BASE_INITIALIZATION = 1 + +uint32 IDLE = 2 + +uint32 ARM_INITIALIZATION = 3 + +uint32 ARM_IN_FAULT = 4 + +uint32 ARM_MAINTENANCE = 5 + +uint32 ARM_SERVOING_LOW_LEVEL = 6 + +uint32 ARM_SERVOING_READY = 7 + +uint32 ARM_SERVOING_PLAYING_SEQUENCE = 8 + +uint32 ARM_SERVOING_MANUALLY_CONTROLLED = 9 + +uint32 RESERVED = 255 diff --git a/kortex_vision_config_driver/msg/BitRate.msg b/kortex_vision_config_driver/msg/BitRate.msg new file mode 100644 index 00000000..49596067 --- /dev/null +++ b/kortex_vision_config_driver/msg/BitRate.msg @@ -0,0 +1,10 @@ + +uint32 BITRATE_UNSPECIFIED = 0 + +uint32 BITRATE_10_MBPS = 1 + +uint32 BITRATE_15_MBPS = 2 + +uint32 BITRATE_20_MBPS = 3 + +uint32 BITRATE_25_MBPS = 4 diff --git a/kortex_vision_config_driver/msg/Connection.msg b/kortex_vision_config_driver/msg/Connection.msg new file mode 100644 index 00000000..ca08b6c8 --- /dev/null +++ b/kortex_vision_config_driver/msg/Connection.msg @@ -0,0 +1,5 @@ + + +UserProfileHandle user_handle +string connection_information +uint32 connection_identifier \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/DeviceHandle.msg b/kortex_vision_config_driver/msg/DeviceHandle.msg new file mode 100644 index 00000000..49f84366 --- /dev/null +++ b/kortex_vision_config_driver/msg/DeviceHandle.msg @@ -0,0 +1,5 @@ + + +uint32 device_type +uint32 device_identifier +uint32 order \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/DeviceTypes.msg b/kortex_vision_config_driver/msg/DeviceTypes.msg new file mode 100644 index 00000000..5a55df07 --- /dev/null +++ b/kortex_vision_config_driver/msg/DeviceTypes.msg @@ -0,0 +1,14 @@ + +uint32 UNSPECIFIED_DEVICE_TYPE = 0 + +uint32 BASE = 1 + +uint32 VISION = 2 + +uint32 BIG_ACTUATOR = 3 + +uint32 SMALL_ACTUATOR = 4 + +uint32 INTERCONNECT = 5 + +uint32 GRIPPER = 6 diff --git a/kortex_vision_config_driver/msg/Empty.msg b/kortex_vision_config_driver/msg/Empty.msg new file mode 100644 index 00000000..e69de29b diff --git a/kortex_vision_config_driver/msg/FocusAction.msg b/kortex_vision_config_driver/msg/FocusAction.msg new file mode 100644 index 00000000..29ba2f8f --- /dev/null +++ b/kortex_vision_config_driver/msg/FocusAction.msg @@ -0,0 +1,10 @@ + +uint32 FOCUSACTION_UNSPECIFIED = 0 + +uint32 FOCUSACTION_START_CONTINUOUS_FOCUS = 1 + +uint32 FOCUSACTION_PAUSE_CONTINUOUS_FOCUS = 2 + +uint32 FOCUSACTION_FOCUS_NOW = 3 + +uint32 FOCUSACTION_DISABLE_FOCUS = 4 diff --git a/kortex_vision_config_driver/msg/FrameRate.msg b/kortex_vision_config_driver/msg/FrameRate.msg new file mode 100644 index 00000000..1f3368d9 --- /dev/null +++ b/kortex_vision_config_driver/msg/FrameRate.msg @@ -0,0 +1,8 @@ + +uint32 FRAMERATE_UNSPECIFIED = 0 + +uint32 FRAMERATE_6_FPS = 1 + +uint32 FRAMERATE_15_FPS = 2 + +uint32 FRAMERATE_30_FPS = 3 diff --git a/kortex_vision_config_driver/msg/IntrinsicParameters.msg b/kortex_vision_config_driver/msg/IntrinsicParameters.msg new file mode 100644 index 00000000..e3455c1a --- /dev/null +++ b/kortex_vision_config_driver/msg/IntrinsicParameters.msg @@ -0,0 +1,7 @@ + +uint32 width +uint32 height +float32 principal_point_x +float32 principal_point_y +float32 focal_length_x +float32 focal_length_y \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/NotificationHandle.msg b/kortex_vision_config_driver/msg/NotificationHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_vision_config_driver/msg/NotificationHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/NotificationOptions.msg b/kortex_vision_config_driver/msg/NotificationOptions.msg new file mode 100644 index 00000000..6ff46842 --- /dev/null +++ b/kortex_vision_config_driver/msg/NotificationOptions.msg @@ -0,0 +1,5 @@ + + +uint32 type +uint32 rate_m_sec +float32 threshold_value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/NotificationType.msg b/kortex_vision_config_driver/msg/NotificationType.msg new file mode 100644 index 00000000..79dd058c --- /dev/null +++ b/kortex_vision_config_driver/msg/NotificationType.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED_NOTIFICATION_TYPE = 0 + +uint32 THRESHOLD = 1 + +uint32 FIX_RATE = 2 + +uint32 EVENT = 3 diff --git a/kortex_vision_config_driver/msg/Option.msg b/kortex_vision_config_driver/msg/Option.msg new file mode 100644 index 00000000..aa509db1 --- /dev/null +++ b/kortex_vision_config_driver/msg/Option.msg @@ -0,0 +1,86 @@ + +uint32 OPTION_UNSPECIFIED = 0 + +uint32 OPTION_BACKLIGHT_COMPENSATION = 1 + +uint32 OPTION_BRIGHTNESS = 2 + +uint32 OPTION_CONTRAST = 3 + +uint32 OPTION_EXPOSURE = 4 + +uint32 OPTION_GAIN = 5 + +uint32 OPTION_GAMMA = 6 + +uint32 OPTION_HUE = 7 + +uint32 OPTION_SATURATION = 8 + +uint32 OPTION_SHARPNESS = 9 + +uint32 OPTION_WHITE_BALANCE = 10 + +uint32 OPTION_ENABLE_AUTO_EXPOSURE = 11 + +uint32 OPTION_ENABLE_AUTO_WHITE_BALANCE = 12 + +uint32 OPTION_VISUAL_PRESET = 13 + +uint32 OPTION_LASER_POWER = 14 + +uint32 OPTION_ACCURACY = 15 + +uint32 OPTION_MOTION_RANGE = 16 + +uint32 OPTION_FILTER_OPTION = 17 + +uint32 OPTION_CONFIDENCE_THRESHOLD = 18 + +uint32 OPTION_EMITTER_ENABLED = 19 + +uint32 OPTION_FRAMES_QUEUE_SIZE = 20 + +uint32 OPTION_TOTAL_FRAME_DROPS = 21 + +uint32 OPTION_AUTO_EXPOSURE_MODE = 22 + +uint32 OPTION_POWER_LINE_FREQUENCY = 23 + +uint32 OPTION_ASIC_TEMPERATURE = 24 + +uint32 OPTION_ERROR_POLLING_ENABLED = 25 + +uint32 OPTION_PROJECTOR_TEMPERATURE = 26 + +uint32 OPTION_OUTPUT_TRIGGER_ENABLED = 27 + +uint32 OPTION_MOTION_MODULE_TEMPERATURE = 28 + +uint32 OPTION_DEPTH_UNITS = 29 + +uint32 OPTION_ENABLE_MOTION_CORRECTION = 30 + +uint32 OPTION_AUTO_EXPOSURE_PRIORITY = 31 + +uint32 OPTION_COLOR_SCHEME = 32 + +uint32 OPTION_HISTOGRAM_EQUALIZATION_ENABLED = 33 + +uint32 OPTION_MIN_DISTANCE = 34 + +uint32 OPTION_MAX_DISTANCE = 35 + +uint32 OPTION_TEXTURE_SOURCE = 36 + +uint32 OPTION_FILTER_MAGNITUDE = 37 + +uint32 OPTION_FILTER_SMOOTH_ALPHA = 38 + +uint32 OPTION_FILTER_SMOOTH_DELTA = 39 + +uint32 OPTION_HOLES_FILL = 40 + +uint32 OPTION_STEREO_BASELINE = 41 + +uint32 OPTION_AUTO_EXPOSURE_CONVERGE_STEP = 42 diff --git a/kortex_vision_config_driver/msg/OptionIdentifier.msg b/kortex_vision_config_driver/msg/OptionIdentifier.msg new file mode 100644 index 00000000..188c0269 --- /dev/null +++ b/kortex_vision_config_driver/msg/OptionIdentifier.msg @@ -0,0 +1,5 @@ + + +uint32 sensor + +uint32 option \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/OptionInformation.msg b/kortex_vision_config_driver/msg/OptionInformation.msg new file mode 100644 index 00000000..d89df3ae --- /dev/null +++ b/kortex_vision_config_driver/msg/OptionInformation.msg @@ -0,0 +1,11 @@ + + +uint32 sensor + +uint32 option +bool supported +bool read_only +float32 minimum +float32 maximum +float32 step +float32 default_value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/OptionValue.msg b/kortex_vision_config_driver/msg/OptionValue.msg new file mode 100644 index 00000000..a69f5305 --- /dev/null +++ b/kortex_vision_config_driver/msg/OptionValue.msg @@ -0,0 +1,6 @@ + + +uint32 sensor + +uint32 option +float32 value \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Permission.msg b/kortex_vision_config_driver/msg/Permission.msg new file mode 100644 index 00000000..c5399e9c --- /dev/null +++ b/kortex_vision_config_driver/msg/Permission.msg @@ -0,0 +1,8 @@ + +uint32 NO_PERMISSION = 0 + +uint32 READ_PERMISSION = 1 + +uint32 UPDATE_PERMISSION = 2 + +uint32 DELETE_PERMISSION = 4 diff --git a/kortex_vision_config_driver/msg/Resolution.msg b/kortex_vision_config_driver/msg/Resolution.msg new file mode 100644 index 00000000..d0901c9e --- /dev/null +++ b/kortex_vision_config_driver/msg/Resolution.msg @@ -0,0 +1,14 @@ + +uint32 RESOLUTION_UNSPECIFIED = 0 + +uint32 RESOLUTION_320x240 = 1 + +uint32 RESOLUTION_424x240 = 2 + +uint32 RESOLUTION_480x270 = 3 + +uint32 RESOLUTION_640x480 = 4 + +uint32 RESOLUTION_1280x720 = 5 + +uint32 RESOLUTION_1920x1080 = 6 diff --git a/kortex_vision_config_driver/msg/SafetyHandle.msg b/kortex_vision_config_driver/msg/SafetyHandle.msg new file mode 100644 index 00000000..bd72812b --- /dev/null +++ b/kortex_vision_config_driver/msg/SafetyHandle.msg @@ -0,0 +1,2 @@ + +uint32 identifier \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SafetyNotification.msg b/kortex_vision_config_driver/msg/SafetyNotification.msg new file mode 100644 index 00000000..36d88894 --- /dev/null +++ b/kortex_vision_config_driver/msg/SafetyNotification.msg @@ -0,0 +1,11 @@ + + +SafetyHandle safety_handle + +uint32 value + +Timestamp timestamp + +UserProfileHandle user_handle + +Connection connection \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SafetyStatusValue.msg b/kortex_vision_config_driver/msg/SafetyStatusValue.msg new file mode 100644 index 00000000..2ea80554 --- /dev/null +++ b/kortex_vision_config_driver/msg/SafetyStatusValue.msg @@ -0,0 +1,8 @@ + +uint32 UNSPECIFIED = 0 + +uint32 WARNING = 1 + +uint32 ERROR = 2 + +uint32 NORMAL = 3 diff --git a/kortex_vision_config_driver/msg/Sensor.msg b/kortex_vision_config_driver/msg/Sensor.msg new file mode 100644 index 00000000..193ad1ff --- /dev/null +++ b/kortex_vision_config_driver/msg/Sensor.msg @@ -0,0 +1,6 @@ + +uint32 SENSOR_UNSPECIFIED = 0 + +uint32 SENSOR_COLOR = 1 + +uint32 SENSOR_DEPTH = 2 diff --git a/kortex_vision_config_driver/msg/SensorFocusAction.msg b/kortex_vision_config_driver/msg/SensorFocusAction.msg new file mode 100644 index 00000000..c5db660d --- /dev/null +++ b/kortex_vision_config_driver/msg/SensorFocusAction.msg @@ -0,0 +1,5 @@ + + +uint32 sensor + +uint32 focus_action \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SensorIdentifier.msg b/kortex_vision_config_driver/msg/SensorIdentifier.msg new file mode 100644 index 00000000..a6ea8c96 --- /dev/null +++ b/kortex_vision_config_driver/msg/SensorIdentifier.msg @@ -0,0 +1,3 @@ + + +uint32 sensor \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/SensorSettings.msg b/kortex_vision_config_driver/msg/SensorSettings.msg new file mode 100644 index 00000000..7225b43b --- /dev/null +++ b/kortex_vision_config_driver/msg/SensorSettings.msg @@ -0,0 +1,9 @@ + + +uint32 sensor + +uint32 resolution + +uint32 frame_rate + +uint32 bit_rate \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/ServiceVersion.msg b/kortex_vision_config_driver/msg/ServiceVersion.msg new file mode 100644 index 00000000..9665d1c2 --- /dev/null +++ b/kortex_vision_config_driver/msg/ServiceVersion.msg @@ -0,0 +1,4 @@ + +uint32 RESERVED_0 = 0 + +uint32 CURRENT_VERSION = 1 diff --git a/kortex_vision_config_driver/msg/Timestamp.msg b/kortex_vision_config_driver/msg/Timestamp.msg new file mode 100644 index 00000000..5e60508c --- /dev/null +++ b/kortex_vision_config_driver/msg/Timestamp.msg @@ -0,0 +1,3 @@ + +uint32 sec +uint32 usec \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/Unit.msg b/kortex_vision_config_driver/msg/Unit.msg new file mode 100644 index 00000000..c019aeba --- /dev/null +++ b/kortex_vision_config_driver/msg/Unit.msg @@ -0,0 +1,28 @@ + +uint32 UNSPECIFIED_UNIT = 0 + +uint32 CELSIUS = 1 + +uint32 AMPERE = 2 + +uint32 VOLT = 3 + +uint32 METER_PER_SECOND = 4 + +uint32 DEGREE_PER_SECOND = 5 + +uint32 METER_PER_SECOND_2 = 6 + +uint32 DEGREE_PER_SECOND_2 = 7 + +uint32 NEWTON = 8 + +uint32 NEWTON_METER = 9 + +uint32 KILOGRAM = 10 + +uint32 DEGREE = 11 + +uint32 TICK = 12 + +uint32 DEGREE_PER_MILLISECOND = 13 diff --git a/kortex_vision_config_driver/msg/UserProfileHandle.msg b/kortex_vision_config_driver/msg/UserProfileHandle.msg new file mode 100644 index 00000000..3038380d --- /dev/null +++ b/kortex_vision_config_driver/msg/UserProfileHandle.msg @@ -0,0 +1,3 @@ + +uint32 identifier +uint32 permission \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/VisionEvent.msg b/kortex_vision_config_driver/msg/VisionEvent.msg new file mode 100644 index 00000000..65d7bd41 --- /dev/null +++ b/kortex_vision_config_driver/msg/VisionEvent.msg @@ -0,0 +1,6 @@ + +uint32 UNSPECIFIED_VISION_EVENT = 0 + +uint32 SENSOR_SETTINGS_CHANGED = 1 + +uint32 OPTION_VALUE_CHANGED = 2 diff --git a/kortex_vision_config_driver/msg/VisionNotification.msg b/kortex_vision_config_driver/msg/VisionNotification.msg new file mode 100644 index 00000000..79f43120 --- /dev/null +++ b/kortex_vision_config_driver/msg/VisionNotification.msg @@ -0,0 +1,7 @@ + + +uint32 event + +uint32 sensor + +uint32 option \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/non_generated/ApiOptions.msg b/kortex_vision_config_driver/msg/non_generated/ApiOptions.msg new file mode 100644 index 00000000..471fddd8 --- /dev/null +++ b/kortex_vision_config_driver/msg/non_generated/ApiOptions.msg @@ -0,0 +1 @@ +uint32 timeout_ms \ No newline at end of file diff --git a/kortex_vision_config_driver/msg/non_generated/KortexError.msg b/kortex_vision_config_driver/msg/non_generated/KortexError.msg new file mode 100644 index 00000000..3ff9c32c --- /dev/null +++ b/kortex_vision_config_driver/msg/non_generated/KortexError.msg @@ -0,0 +1,3 @@ +uint32 code +uint32 subCode +string description \ No newline at end of file diff --git a/kortex_vision_config_driver/package.xml b/kortex_vision_config_driver/package.xml new file mode 100644 index 00000000..b4ede718 --- /dev/null +++ b/kortex_vision_config_driver/package.xml @@ -0,0 +1,35 @@ + + + kortex_vision_config_driver + 1.0.0 + The kortex package that configure a vision module. + + + KINOVA + + + + + + BSD + + catkin + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + roscpp + rospy + std_msgs + message_generation + message_runtime + + + + + + + + diff --git a/kortex_vision_config_driver/protos/Common.options b/kortex_vision_config_driver/protos/Common.options new file mode 100644 index 00000000..5f3020ab --- /dev/null +++ b/kortex_vision_config_driver/protos/Common.options @@ -0,0 +1,4 @@ +Kinova.Api.Common.DeviceTypes long_names:false +Kinova.Api.Common.SafetyStatusValue long_names:false +Kinova.Api.Common.NotificationType long_names:false +Kinova.Api.Common.Unit long_names:false \ No newline at end of file diff --git a/kortex_vision_config_driver/protos/Common.proto b/kortex_vision_config_driver/protos/Common.proto new file mode 100644 index 00000000..50f762ec --- /dev/null +++ b/kortex_vision_config_driver/protos/Common.proto @@ -0,0 +1,152 @@ +syntax = "proto3"; + +package Kinova.Api.Common; + +/** + * list of possible device types + */ +enum DeviceTypes { + UNSPECIFIED_DEVICE_TYPE = 0; + BASE = 1; + VISION = 2; + BIG_ACTUATOR = 3; + SMALL_ACTUATOR = 4; + INTERCONNECT = 5; + GRIPPER = 6; +} + +/** +* Message contains information about a device - device type, device identifier, and the order of the device within the robot +*/ +message DeviceHandle { + DeviceTypes device_type = 1; + uint32 device_identifier = 2; // Unique device identifier (used with other services) + uint32 order = 3; // Unique value indicating the order of that device versus the others to facilitate representation +} + +/** + * list of possible safety statuses + */ +enum SafetyStatusValue { + UNSPECIFIED = 0; + WARNING = 1; //warning safety reached + ERROR = 2; //error safety reached + NORMAL = 3; //safety is off +} + +/** + * Enumeration used as bitfields wih permission field + */ +enum Permission { + NO_PERMISSION = 0; + READ_PERMISSION = 1; //refers to a user's capability to read the entity + UPDATE_PERMISSION = 2;//refers to a user's capability to write or modify the entity + DELETE_PERMISSION = 4; //refers to a user's capability to delete the entity +} + +/** + * list of notification types + */ +enum NotificationType { + UNSPECIFIED_NOTIFICATION_TYPE = 0; + THRESHOLD = 1; + FIX_RATE = 2; + EVENT = 3; //Event type. Only this one is supported for now +} + +/** + * list of units used throughout API methods + */ +enum Unit { + UNSPECIFIED_UNIT = 0; + CELSIUS = 1; + AMPERE = 2; + VOLT = 3; + METER_PER_SECOND = 4; + DEGREE_PER_SECOND = 5; + METER_PER_SECOND_2 = 6; + DEGREE_PER_SECOND_2 = 7; + NEWTON = 8; + NEWTON_METER =9; + KILOGRAM = 10; + DEGREE = 11; + TICK = 12; + DEGREE_PER_MILLISECOND = 13; +} + +/** + * Message used when no information needs to be exchanged between client application and robot, and vice versa + */ +message Empty { +} + +/** + * Notification options + */ +message NotificationOptions { + NotificationType type = 1; //type of notification + uint32 rate_m_sec = 2; + float threshold_value = 3; +} + +/** + * Handle to a safety + */ +message SafetyHandle { + uint32 identifier = 1; +} + +/** + * Handle to a notification + */ +message NotificationHandle { + uint32 identifier = 1; +} + +/** + * Message that contains a Safety event + */ +message SafetyNotification { + SafetyHandle safety_handle = 1; //safety handle + SafetyStatusValue value = 2; //new safety status + Timestamp timestamp = 3; //event timestamp + UserProfileHandle user_handle = 4; //user that caused the safety event + Connection connection = 5; // connection that caused the safety event +} + +/** + * Timestamp based on epoch + */ +message Timestamp { + uint32 sec = 1; //epoch in seconds since 1970 + uint32 usec = 2;//microseconds after the second (0-999999) +} + +/** + * Handle to an existing User Profile. + */ +message UserProfileHandle { + uint32 identifier = 1; //User profile identifier + fixed32 permission = 2; //must use 'Permission' as bitwise +} + +message Connection { + UserProfileHandle user_handle = 1; //user profile handle, or set to zero if no user logged in + string connection_information = 2; //connection info (ex. IP address with port number) + uint32 connection_identifier = 3; //connection identifier +} + +enum ArmState +{ + UNSPECIFIED_ARM_STATE = 0; + BASE_INITIALIZATION = 1; // Cannot be reported as the Base initialization must be completed before allowing user connection + IDLE = 2; + ARM_INITIALIZATION = 3; + ARM_IN_FAULT = 4; + ARM_MAINTENANCE = 5; + ARM_SERVOING_LOW_LEVEL = 6; + ARM_SERVOING_READY = 7; + ARM_SERVOING_PLAYING_SEQUENCE = 8; + ARM_SERVOING_MANUALLY_CONTROLLED = 9; + RESERVED = 255; // For debugging, this state must never be reported outside the base. this means that a state is not mapped correctly +} \ No newline at end of file diff --git a/kortex_vision_config_driver/protos/VisionConfig.proto b/kortex_vision_config_driver/protos/VisionConfig.proto new file mode 100644 index 00000000..886ff536 --- /dev/null +++ b/kortex_vision_config_driver/protos/VisionConfig.proto @@ -0,0 +1,217 @@ +syntax = "proto3"; + +import public "Common.proto"; + +package Kinova.Api.VisionConfig; + +service VisionConfig {//@PROXY_ID=5 @ERROR=Kinova.Api.Error + + // Set sensor settings (resolution, frame rate, etc) + rpc SetSensorSettings (SensorSettings) returns (Kinova.Api.Common.Empty);//@RPC_ID=1 + + // Get sensor settings (resolution, frame rate, etc) + rpc GetSensorSettings (SensorIdentifier) returns (SensorSettings);//@RPC_ID=2 + + // Read option value from the sensor + rpc GetOptionValue (OptionIdentifier) returns (OptionValue);//@RPC_ID=3 + + // Write new value to sensor option + rpc SetOptionValue (OptionValue) returns (Kinova.Api.Common.Empty);//@RPC_ID=4 + + // Read option information from the sensor + rpc GetOptionInformation (OptionIdentifier) returns (OptionInformation);//@RPC_ID=5 + + //Subscribes to Vision configuration notifications + rpc VisionTopic (Kinova.Api.Common.NotificationOptions) returns (Kinova.Api.Common.NotificationHandle);//@RPC_ID=6 @PUB_SUB=VisionNotification + + // Do a focus action + rpc DoSensorFocusAction (SensorFocusAction) returns (Kinova.Api.Common.Empty);//@RPC_ID=7 + + // Get sensor intrinsic parameters + rpc GetIntrinsicParameters (SensorIdentifier) returns (IntrinsicParameters);//@RPC_ID=8 +} + +enum ServiceVersion { + RESERVED_0 = 0; + CURRENT_VERSION = 1; // Current Version +} + +/** +* Main settings - resolution, frame rate, bit rate - for the chosen sensor (color or depth). +*/ +message SensorSettings { + Sensor sensor = 1; // The sensor (color or depth) + Resolution resolution = 2; // The resolution setting + FrameRate frame_rate = 3; // Frame rate setting + BitRate bit_rate = 4; // Maximum encoded bit rate +} + +/** +*Select the Vision module camera sensor to configure. +*/ +enum Sensor { + SENSOR_UNSPECIFIED = 0; + SENSOR_COLOR = 1; //Select the Vision module color sensor + SENSOR_DEPTH = 2; //Select the Vision module depth sensor +} + +/** +*Select the camera resolution. +*/ +enum Resolution { + RESOLUTION_UNSPECIFIED = 0; + RESOLUTION_320x240 = 1; // 320 x 240 pixels + RESOLUTION_424x240 = 2; // 424 x 240 pixels + RESOLUTION_480x270 = 3; // 480 x 270 pixels + RESOLUTION_640x480 = 4; // 640 x 480 pixels + RESOLUTION_1280x720 = 5; // 1280 x 720 pixels (HD) + RESOLUTION_1920x1080 = 6; // 1920 x 1080 pixels (full HD) +} + +/** +*Select the camera frame rate. +*/ +enum FrameRate { + FRAMERATE_UNSPECIFIED = 0; + FRAMERATE_6_FPS = 1; // 6 frames per second + FRAMERATE_15_FPS = 2; // 15 frames per second + FRAMERATE_30_FPS = 3; // 30 frame per second +} + +/** +*Select the maximum encoded bit rate, in Mbps. +*/ +enum BitRate { + BITRATE_UNSPECIFIED = 0; + BITRATE_10_MBPS = 1; // 10 Mbps maximum bit rate + BITRATE_15_MBPS = 2; // 15 Mbps maximum bit rate + BITRATE_20_MBPS = 3; // 20 Mbps maximum bit rate + BITRATE_25_MBPS = 4; // 25 Mbps maximum bit rate +} + +message SensorIdentifier { + Sensor sensor = 1; +} + +/** +* Identifies the sensor and the option to configure. +*/ +message OptionIdentifier { + Sensor sensor = 1; // The sensor to configure + Option option = 2; // The option to configure on the sensor +} + +/** +* Identifies the value of the particular option for the sensor. +*/ +message OptionValue { + Sensor sensor = 1; // The sensor to configure (color or depth) + Option option = 2; // The option to configure + float value = 3; // The desired value for the option +} + +/** +* Packages information about the optional settings for the chosen sensor +*/ +message OptionInformation { + Sensor sensor = 1; // The sensor (color or depth) + Option option = 2; // The option + bool supported = 3; // Is the option supported by the chosen sensor? + bool read_only = 4; // Is the option read-only, or can it be changed? + float minimum = 5; // Minimum value for the option + float maximum = 6; // Maximum value for the option + float step = 7; // Step size for the option value (if it takes on discrete values) + float default_value = 8; // Default value for the option +} + +enum Option { + OPTION_UNSPECIFIED = 0; + OPTION_BACKLIGHT_COMPENSATION = 1; // Enable / disable color backlight compensation + OPTION_BRIGHTNESS = 2; // Color image brightness + OPTION_CONTRAST = 3; // Color image contrast + OPTION_EXPOSURE = 4; // Controls exposure time of color camera. Setting any value will disable auto exposure + OPTION_GAIN = 5; // Color image gain + OPTION_GAMMA = 6; // Color image gamma setting + OPTION_HUE = 7; // Color image hue + OPTION_SATURATION = 8; // Color image saturation setting + OPTION_SHARPNESS = 9; // Color image sharpness setting + OPTION_WHITE_BALANCE = 10; // Controls white balance of color image. Setting any value will disable auto white balance + OPTION_ENABLE_AUTO_EXPOSURE = 11; // Enable / disable color image auto-exposure + OPTION_ENABLE_AUTO_WHITE_BALANCE = 12; // Enable / disable color image auto-white-balance + OPTION_VISUAL_PRESET = 13; // Provide access to several recommend sets of option presets for the depth camera + OPTION_LASER_POWER = 14; // Power of the projector, with 0 meaning projector off + OPTION_ACCURACY = 15; // Set the number of patterns projected per frame. The higher the accuracy value the more patterns projected + OPTION_MOTION_RANGE = 16; // Motion vs. Range trade-off, with lower values allowing for better motion sensitivity and higher values allowing for better depth range + OPTION_FILTER_OPTION = 17; // Set the filter to apply to each depth frame. Each one of the filter is optimized per the application requirements + OPTION_CONFIDENCE_THRESHOLD = 18; // The confidence level threshold used by the Depth algorithm pipe to set whether a pixel will get a valid range or will be marked with invalid range + OPTION_EMITTER_ENABLED = 19; // Laser Emitter enabled + OPTION_FRAMES_QUEUE_SIZE = 20; // Number of frames the user is allowed to keep per stream. Trying to hold-on to more frames will cause frame-drops. + OPTION_TOTAL_FRAME_DROPS = 21; // Total number of detected frame drops from all streams + OPTION_AUTO_EXPOSURE_MODE = 22; // Auto-Exposure modes: Static, Anti-Flicker and Hybrid + OPTION_POWER_LINE_FREQUENCY = 23; // Power Line Frequency control for anti-flickering Off/50Hz/60Hz/Auto + OPTION_ASIC_TEMPERATURE = 24; // Current Asic Temperature + OPTION_ERROR_POLLING_ENABLED = 25; // Disable error handling + OPTION_PROJECTOR_TEMPERATURE = 26; // Current Projector Temperature + OPTION_OUTPUT_TRIGGER_ENABLED = 27; // Enable / disable trigger to be outputed from the camera to any external device on every depth frame + OPTION_MOTION_MODULE_TEMPERATURE = 28; // Current Motion-Module Temperature + OPTION_DEPTH_UNITS = 29; // Number of meters represented by a single depth unit + OPTION_ENABLE_MOTION_CORRECTION = 30; // Enable/Disable automatic correction of the motion data + OPTION_AUTO_EXPOSURE_PRIORITY = 31; // Allows sensor to dynamically ajust the frame rate depending on lighting conditions + OPTION_COLOR_SCHEME = 32; // Color scheme for data visualization + OPTION_HISTOGRAM_EQUALIZATION_ENABLED = 33; // Perform histogram equalization post-processing on the depth data + OPTION_MIN_DISTANCE = 34; // Minimal distance to the target + OPTION_MAX_DISTANCE = 35; // Maximum distance to the target + OPTION_TEXTURE_SOURCE = 36; // Texture mapping stream unique ID + OPTION_FILTER_MAGNITUDE = 37; // The 2D-filter effect. The specific interpretation is given within the context of the filter. + OPTION_FILTER_SMOOTH_ALPHA = 38; // 2D-filter parameter controls the weight/radius for smoothing + OPTION_FILTER_SMOOTH_DELTA = 39; // 2D-filter range/validity threshold + OPTION_HOLES_FILL = 40; // Enhance depth data post-processing with holes filling where appropriate + OPTION_STEREO_BASELINE = 41; // The distance in mm between the first and the second imagers in stereo-based depth cameras + OPTION_AUTO_EXPOSURE_CONVERGE_STEP = 42; // Allows dynamically ajust the converge step value of the target exposure in Auto-Exposure algorithm +} + +/** +* Identifies the sensor and the focus action to perform. +*/ +message SensorFocusAction { + Sensor sensor = 1; // The sensor on which to perform the focus action + FocusAction focus_action = 2; // The focus action to perform on the sensor +} + +/** +*Select the focus action to perform (start/pause continuous, focus now, disable). +*/ +enum FocusAction { + FOCUSACTION_UNSPECIFIED = 0; + FOCUSACTION_START_CONTINUOUS_FOCUS = 1; // Start continuous focus + FOCUSACTION_PAUSE_CONTINUOUS_FOCUS = 2; // Pause continuous focus + FOCUSACTION_FOCUS_NOW = 3; // Focus now (single-shot) + FOCUSACTION_DISABLE_FOCUS = 4; // Disable focus +} + +enum VisionEvent { + UNSPECIFIED_VISION_EVENT = 0; + SENSOR_SETTINGS_CHANGED = 1; + OPTION_VALUE_CHANGED = 2; +} + +/** + * Message that contains robot event + */ +message VisionNotification { + VisionEvent event = 1; + Sensor sensor = 2; + Option option = 3; +} + +/** +* Sensor intrinsic parameters +*/ +message IntrinsicParameters { + uint32 width = 1; // Width of the image in pixels + uint32 height = 2; // Height of the image in pixels + float principal_point_x = 3; // Horizontal coordinate of the principal point of the image, as a pixel offset from the left edge + float principal_point_y = 4; // Vertical coordinate of the principal point of the image, as a pixel offset from the top edge + float focal_length_x = 5; // Focal length of the image plane, as a multiple of pixel width + float focal_length_y = 6; // Focal length of the image plane, as a multiple of pixel height +} diff --git a/kortex_vision_config_driver/readme.md b/kortex_vision_config_driver/readme.md new file mode 100644 index 00000000..b39f21fd --- /dev/null +++ b/kortex_vision_config_driver/readme.md @@ -0,0 +1,106 @@ + +# Kortex Vision Config Module + + + +1. [Content](#content) + 1. [build](#build) + 1. [msg](#msg) + 1. [non_generated](#non_generated) + 1. [protos](#protos) + 1. [src](#src) + 1. [srv](#srv) + 1. [non_generated](#non_generated-1) + 1. [templates](#templates) +1. [How to start the node](#how-to-start-the-node) +1. [Generation](#generation) + + + + + +## Content + +### build +This folder's only purpose is to exist as a temp folder during the generation. It should not be used. + +### msg +This folder contains every custom messages used by the node **kortex\_vision\_config\_driver**. All the .msg files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .msg files used by the node **kortex\_vision\_config\_driver**. + +| MSG | Description | +|:---:|:---:| +| ApiOptions.msg | A set of option that is supported by the Kortex API. It is used with the service SetApiOptions. For now there is only one option called tiemout_ms and it lets the user set a timeout value on every next service call. | +| KortexError.msg | Describe the topic /KortexError. Every service call of the node kortex_driver will publish in /KortexError everytime the Kortex API returns an error. | + + +### protos +This folder contains the protobuf files from where the MSG, SRV and sources files are generated. The content of this folder should not be modified. + +### src +This folder contains all the generated source files needed to build the node. The content of this folder should not be modified. + +### srv +This folder contains every custom services used by the node **kortex\_vision\_config\_driver**. All the .srv files in this folder are generated by a custom protoc plugin described in the [Generation](#generation) section. + +#### non_generated +This folder contains all the non-generated .srv files used by the node **kortex\_vision\_config\_driver**. + +| SRV | Description | +|:---:|:---:| +| SetApiOptions.srv | It modify the api options of the Kortex API. Once this service is called, the options set will affect every future call to the node. | +| SetDeviceID.srv | It modify the target device (device routing feature) of the node. The default value is 0.| + + +### templates +This folder contains all the JINJA2 files needed by the protoc generator. For more details on the generation process, see the [Generation](#generation) section. + +| JINJA2 files | Description | +|:---:|:---:| +| main.jinja2 | Use to generate src/main.cpp | +| NodeServices.cpp.jinja2 | Use to generate src/node.cpp | +| NodeServices.h.jinja2 | Use to generate src/node.h | +| proto_converterCPP.jinja2 | Use to generate every src/*_proto\_converter.cpp files | +| proto_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_converterCPP.jinja2 | Use to generate every src/*_ros\_converter.cpp files | +| ros_converterHeader.jinja2 | Use to generate every src/*_proto\_converter.h files | +| ros_enum.jinja2 | Use to generate every msg/*.msg files that represent a protobuf enum | +| ros_message.jinja2 | Use to generate every msg/*.msg files that represent a protobuf message | +| ros_oneof.jinja2 | Use to generate every msg/*.msg files that represent a protobuf oneof | +| ros_service.jinja2 | Use to generate every msg/*.msg files that represent a protobuf RPC | + + +## How to start the node + +rosrun kortex\_vision\_config\_driver kortex\_vision\_config\_driver 192.168.1.10 + +In the command above, you would be running the kortex\_vision\_config\_driver node on an Gen3 robot with an IP address of 192.168.1.10. + +## Generation +

      +The generation process is based on a custom protobuf plugin. Basically, most of the generation process is in the python file RosGeneration.py located at the package's root folder. Before launching the generation make sure you have the python module Jinja2 installed on your computer. +

      + +To launch the generation of this package: + +1. Open a terminal window. +1. Browse the root of this package [YOUR\_ROS\_WORKSPACE]/src/ros\_kortex/kortex\_vision\_config\_driver/ +1. Make sure that the file kortex\_vision\_config\_driver.sh can be executed. If not then chmod +x kortex\_vision\_config\_driver.sh +1. Run this command: protoc --plugin=protoc-gen-custom=kortex\_vision\_config\_driver.sh -I./protos/ --custom_out=./build ./protos/\*.prot +1. The result of the generation should be on thos folder: + * /src + * /msg + * /srv + diff --git a/kortex_vision_config_driver/src/common_proto_converter.cpp b/kortex_vision_config_driver/src/common_proto_converter.cpp new file mode 100644 index 00000000..40b20611 --- /dev/null +++ b/kortex_vision_config_driver/src/common_proto_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_vision_config_driver::DeviceHandle input, DeviceHandle *output) +{ + output->set_device_type((Kinova::Api::Common::DeviceTypes)input.device_type); + output->set_device_identifier(input.device_identifier); + output->set_order(input.order); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::Empty input, Empty *output) +{ + + return 0; +} +int ToProtoData(kortex_vision_config_driver::NotificationOptions input, NotificationOptions *output) +{ + output->set_type((Kinova::Api::Common::NotificationType)input.type); + output->set_rate_m_sec(input.rate_m_sec); + output->set_threshold_value(input.threshold_value); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::SafetyHandle input, SafetyHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::NotificationHandle input, NotificationHandle *output) +{ + output->set_identifier(input.identifier); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::SafetyNotification input, SafetyNotification *output) +{ + ToProtoData(input.safety_handle, output->mutable_safety_handle()); + output->set_value((Kinova::Api::Common::SafetyStatusValue)input.value); + ToProtoData(input.timestamp, output->mutable_timestamp()); + ToProtoData(input.user_handle, output->mutable_user_handle()); + ToProtoData(input.connection, output->mutable_connection()); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::Timestamp input, Timestamp *output) +{ + output->set_sec(input.sec); + output->set_usec(input.usec); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::UserProfileHandle input, UserProfileHandle *output) +{ + output->set_identifier(input.identifier); + output->set_permission(input.permission); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::Connection input, Connection *output) +{ + ToProtoData(input.user_handle, output->mutable_user_handle()); + output->set_connection_information(input.connection_information); + output->set_connection_identifier(input.connection_identifier); + + return 0; +} diff --git a/kortex_vision_config_driver/src/common_proto_converter.h b/kortex_vision_config_driver/src/common_proto_converter.h new file mode 100644 index 00000000..29706196 --- /dev/null +++ b/kortex_vision_config_driver/src/common_proto_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonPROTO_CONVERTER_H_ +#define _KORTEX_CommonPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_vision_config_driver/DeviceHandle.h" +#include "kortex_vision_config_driver/Empty.h" +#include "kortex_vision_config_driver/NotificationOptions.h" +#include "kortex_vision_config_driver/SafetyHandle.h" +#include "kortex_vision_config_driver/NotificationHandle.h" +#include "kortex_vision_config_driver/SafetyNotification.h" +#include "kortex_vision_config_driver/Timestamp.h" +#include "kortex_vision_config_driver/UserProfileHandle.h" +#include "kortex_vision_config_driver/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToProtoData(kortex_vision_config_driver::DeviceHandle intput, DeviceHandle *output); +int ToProtoData(kortex_vision_config_driver::Empty intput, Empty *output); +int ToProtoData(kortex_vision_config_driver::NotificationOptions intput, NotificationOptions *output); +int ToProtoData(kortex_vision_config_driver::SafetyHandle intput, SafetyHandle *output); +int ToProtoData(kortex_vision_config_driver::NotificationHandle intput, NotificationHandle *output); +int ToProtoData(kortex_vision_config_driver::SafetyNotification intput, SafetyNotification *output); +int ToProtoData(kortex_vision_config_driver::Timestamp intput, Timestamp *output); +int ToProtoData(kortex_vision_config_driver::UserProfileHandle intput, UserProfileHandle *output); +int ToProtoData(kortex_vision_config_driver::Connection intput, Connection *output); + +#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/src/common_ros_converter.cpp b/kortex_vision_config_driver/src/common_ros_converter.cpp new file mode 100644 index 00000000..5c3c2b0e --- /dev/null +++ b/kortex_vision_config_driver/src/common_ros_converter.cpp @@ -0,0 +1,84 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "common_ros_converter.h" + + +int ToRosData(DeviceHandle input, kortex_vision_config_driver::DeviceHandle &output) +{ + output.device_type = input.device_type(); + output.device_identifier = input.device_identifier(); + output.order = input.order(); + + return 0; +} +int ToRosData(Empty input, kortex_vision_config_driver::Empty &output) +{ + + return 0; +} +int ToRosData(NotificationOptions input, kortex_vision_config_driver::NotificationOptions &output) +{ + output.type = input.type(); + output.rate_m_sec = input.rate_m_sec(); + output.threshold_value = input.threshold_value(); + + return 0; +} +int ToRosData(SafetyHandle input, kortex_vision_config_driver::SafetyHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(NotificationHandle input, kortex_vision_config_driver::NotificationHandle &output) +{ + output.identifier = input.identifier(); + + return 0; +} +int ToRosData(SafetyNotification input, kortex_vision_config_driver::SafetyNotification &output) +{ + ToRosData(input.safety_handle(), output.safety_handle); + output.value = input.value(); + ToRosData(input.timestamp(), output.timestamp); + ToRosData(input.user_handle(), output.user_handle); + ToRosData(input.connection(), output.connection); + + return 0; +} +int ToRosData(Timestamp input, kortex_vision_config_driver::Timestamp &output) +{ + output.sec = input.sec(); + output.usec = input.usec(); + + return 0; +} +int ToRosData(UserProfileHandle input, kortex_vision_config_driver::UserProfileHandle &output) +{ + output.identifier = input.identifier(); + output.permission = input.permission(); + + return 0; +} +int ToRosData(Connection input, kortex_vision_config_driver::Connection &output) +{ + ToRosData(input.user_handle(), output.user_handle); + output.connection_information = input.connection_information(); + output.connection_identifier = input.connection_identifier(); + + return 0; +} diff --git a/kortex_vision_config_driver/src/common_ros_converter.h b/kortex_vision_config_driver/src/common_ros_converter.h new file mode 100644 index 00000000..59335369 --- /dev/null +++ b/kortex_vision_config_driver/src/common_ros_converter.h @@ -0,0 +1,66 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_CommonROS_CONVERTER_H_ +#define _KORTEX_CommonROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_vision_config_driver/DeviceHandle.h" +#include "kortex_vision_config_driver/Empty.h" +#include "kortex_vision_config_driver/NotificationOptions.h" +#include "kortex_vision_config_driver/SafetyHandle.h" +#include "kortex_vision_config_driver/NotificationHandle.h" +#include "kortex_vision_config_driver/SafetyNotification.h" +#include "kortex_vision_config_driver/Timestamp.h" +#include "kortex_vision_config_driver/UserProfileHandle.h" +#include "kortex_vision_config_driver/Connection.h" + + +using namespace Kinova::Api::Common; + +int ToRosData(DeviceHandle input, kortex_vision_config_driver::DeviceHandle &output); +int ToRosData(Empty input, kortex_vision_config_driver::Empty &output); +int ToRosData(NotificationOptions input, kortex_vision_config_driver::NotificationOptions &output); +int ToRosData(SafetyHandle input, kortex_vision_config_driver::SafetyHandle &output); +int ToRosData(NotificationHandle input, kortex_vision_config_driver::NotificationHandle &output); +int ToRosData(SafetyNotification input, kortex_vision_config_driver::SafetyNotification &output); +int ToRosData(Timestamp input, kortex_vision_config_driver::Timestamp &output); +int ToRosData(UserProfileHandle input, kortex_vision_config_driver::UserProfileHandle &output); +int ToRosData(Connection input, kortex_vision_config_driver::Connection &output); + +#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/src/main.cpp b/kortex_vision_config_driver/src/main.cpp new file mode 100644 index 00000000..6a4d3311 --- /dev/null +++ b/kortex_vision_config_driver/src/main.cpp @@ -0,0 +1,75 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" + +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "VisionConfig_Services"); + + uint32_t device_id = 0; + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 2) + { + stringstream tempId; + tempId << argv[2]; + tempId >> device_id; + + if(tempId.fail() || tempId.bad()) + { + ROS_INFO("ERROR - Bad device ID, shutting down the node..."); + ros::shutdown(); + return 0; + } + ROS_INFO("Connecting to IP = %s - device ID = %s", argv[1], argv[2]); + } + else if(argc > 1) + { + ROS_INFO("Connecting to IP = %s", argv[1]); + } + else + { + ROS_INFO("You need to provide, at least, an IP adresse as the first parameter. An optional device ID can also be passed if you are using the device routing feature. ex: rosrun package node 192.168.1.10 [device_id]"); + ros::shutdown(); + return 0; + } + + VisionConfig_Services services_object(argv[1], n, device_id); + + ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &VisionConfig_Services::SetDeviceID, &services_object); + ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &VisionConfig_Services::SetApiOptions, &services_object); + + ros::ServiceServer serviceSetSensorSettings = n.advertiseService("SetSensorSettings", &VisionConfig_Services::SetSensorSettings, &services_object); + ros::ServiceServer serviceGetSensorSettings = n.advertiseService("GetSensorSettings", &VisionConfig_Services::GetSensorSettings, &services_object); + ros::ServiceServer serviceGetOptionValue = n.advertiseService("GetOptionValue", &VisionConfig_Services::GetOptionValue, &services_object); + ros::ServiceServer serviceSetOptionValue = n.advertiseService("SetOptionValue", &VisionConfig_Services::SetOptionValue, &services_object); + ros::ServiceServer serviceGetOptionInformation = n.advertiseService("GetOptionInformation", &VisionConfig_Services::GetOptionInformation, &services_object); + ros::ServiceServer serviceDoSensorFocusAction = n.advertiseService("DoSensorFocusAction", &VisionConfig_Services::DoSensorFocusAction, &services_object); + ros::ServiceServer serviceGetIntrinsicParameters = n.advertiseService("GetIntrinsicParameters", &VisionConfig_Services::GetIntrinsicParameters, &services_object); + + + ROS_INFO("Node's services initialized correctly."); + + ros::spin(); + + return 1; +} \ No newline at end of file diff --git a/kortex_vision_config_driver/src/node.cpp b/kortex_vision_config_driver/src/node.cpp new file mode 100644 index 00000000..17a3735e --- /dev/null +++ b/kortex_vision_config_driver/src/node.cpp @@ -0,0 +1,300 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +#include "common_ros_converter.h" +#include "common_proto_converter.h" +#include "visionconfig_ros_converter.h" +#include "visionconfig_proto_converter.h" +VisionConfig_Services::VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + m_CurrentDeviceID = device_id; + m_apiOptions.timeout_ms = 3000; + + m_visionconfig = new VisionConfig::VisionConfigClient(m_router);//If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. + if(m_CurrentDeviceID != 0) + { + m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + } + + m_pub_Error = m_n.advertise("KortexError", 1000); + m_pub_VisionTopic = m_n.advertise("VisionTopic", 1000);std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +bool VisionConfig_Services::SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res) +{ + if(m_CurrentDeviceID == 0) + { + auto sessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + sessionManager->CreateSession(createSessionInfo); + } + + m_CurrentDeviceID = req.device_id; +} + +bool VisionConfig_Services::SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res) +{ + m_apiOptions.timeout_ms = req.input.timeout_ms; + + return true; +} + + + +bool VisionConfig_Services::SetSensorSettings(kortex_vision_config_driver::SetSensorSettings::Request &req, kortex_vision_config_driver::SetSensorSettings::Response &res) +{ + SensorSettings input; + ToProtoData(req.input, &input); + Empty output; + kortex_vision_config_driver::KortexError result_error; + + try + { + m_visionconfig->SetSensorSettings(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool VisionConfig_Services::GetSensorSettings(kortex_vision_config_driver::GetSensorSettings::Request &req, kortex_vision_config_driver::GetSensorSettings::Response &res) +{ + SensorIdentifier input; + ToProtoData(req.input, &input); + SensorSettings output; + kortex_vision_config_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetSensorSettings(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfig_Services::GetOptionValue(kortex_vision_config_driver::GetOptionValue::Request &req, kortex_vision_config_driver::GetOptionValue::Response &res) +{ + OptionIdentifier input; + ToProtoData(req.input, &input); + OptionValue output; + kortex_vision_config_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetOptionValue(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfig_Services::SetOptionValue(kortex_vision_config_driver::SetOptionValue::Request &req, kortex_vision_config_driver::SetOptionValue::Response &res) +{ + OptionValue input; + ToProtoData(req.input, &input); + Empty output; + kortex_vision_config_driver::KortexError result_error; + + try + { + m_visionconfig->SetOptionValue(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool VisionConfig_Services::GetOptionInformation(kortex_vision_config_driver::GetOptionInformation::Request &req, kortex_vision_config_driver::GetOptionInformation::Response &res) +{ + OptionIdentifier input; + ToProtoData(req.input, &input); + OptionInformation output; + kortex_vision_config_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetOptionInformation(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} + +bool VisionConfig_Services::OnNotificationVisionTopic(kortex_vision_config_driver::VisionTopic::Request &req, kortex_vision_config_driver::VisionTopic::Response &res) +{ + NotificationOptions input; + ToProtoData(req.input, &input); + NotificationHandle output; + kortex_vision_config_driver::KortexError result_error; + + try + { + std::function< void (VisionConfig::VisionNotification) > callback = std::bind(&VisionConfig_Services::cb_VisionTopic, this, std::placeholders::_1); + output = m_visionconfig->OnNotificationVisionTopic(callback, input); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} +void VisionConfig_Services::cb_VisionTopic(VisionConfig::VisionNotification notif) +{ + kortex_vision_config_driver::VisionNotification ros_msg; + ToRosData(notif, ros_msg); + m_pub_VisionTopic.publish(ros_msg); +} + +bool VisionConfig_Services::DoSensorFocusAction(kortex_vision_config_driver::DoSensorFocusAction::Request &req, kortex_vision_config_driver::DoSensorFocusAction::Response &res) +{ + SensorFocusAction input; + ToProtoData(req.input, &input); + Empty output; + kortex_vision_config_driver::KortexError result_error; + + try + { + m_visionconfig->DoSensorFocusAction(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + return true; +} + +bool VisionConfig_Services::GetIntrinsicParameters(kortex_vision_config_driver::GetIntrinsicParameters::Request &req, kortex_vision_config_driver::GetIntrinsicParameters::Response &res) +{ + SensorIdentifier input; + ToProtoData(req.input, &input); + IntrinsicParameters output; + kortex_vision_config_driver::KortexError result_error; + + try + { + output = m_visionconfig->GetIntrinsicParameters(input, m_CurrentDeviceID, m_apiOptions); + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + ToRosData(output, res.output); + return true; +} diff --git a/kortex_vision_config_driver/src/node.h b/kortex_vision_config_driver/src/node.h new file mode 100644 index 00000000..b5260fc6 --- /dev/null +++ b/kortex_vision_config_driver/src/node.h @@ -0,0 +1,93 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_SERVICES_H_ +#define _KORTEX_SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include "kortex_vision_config_driver/SetSensorSettings.h" +#include "kortex_vision_config_driver/GetSensorSettings.h" +#include "kortex_vision_config_driver/GetOptionValue.h" +#include "kortex_vision_config_driver/SetOptionValue.h" +#include "kortex_vision_config_driver/GetOptionInformation.h" +#include "kortex_vision_config_driver/VisionTopic.h" +#include "kortex_vision_config_driver/DoSensorFocusAction.h" +#include "kortex_vision_config_driver/GetIntrinsicParameters.h" +#include "kortex_vision_config_driver/KortexError.h" +#include "kortex_vision_config_driver/SetDeviceID.h" +#include "kortex_vision_config_driver/SetApiOptions.h" + +#include "kortex_vision_config_driver/ApiOptions.h" + +using namespace std; +using namespace Kinova::Api; +using namespace Kinova::Api::Common; +using namespace Kinova::Api::VisionConfig; + +class VisionConfig_Services +{ + public: + VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); + bool SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res); + + + bool SetSensorSettings(kortex_vision_config_driver::SetSensorSettings::Request &req, kortex_vision_config_driver::SetSensorSettings::Response &res); + bool GetSensorSettings(kortex_vision_config_driver::GetSensorSettings::Request &req, kortex_vision_config_driver::GetSensorSettings::Response &res); + bool GetOptionValue(kortex_vision_config_driver::GetOptionValue::Request &req, kortex_vision_config_driver::GetOptionValue::Response &res); + bool SetOptionValue(kortex_vision_config_driver::SetOptionValue::Request &req, kortex_vision_config_driver::SetOptionValue::Response &res); + bool GetOptionInformation(kortex_vision_config_driver::GetOptionInformation::Request &req, kortex_vision_config_driver::GetOptionInformation::Response &res); + bool OnNotificationVisionTopic(kortex_vision_config_driver::VisionTopic::Request &req, kortex_vision_config_driver::VisionTopic::Response &res); + void cb_VisionTopic(VisionNotification notif); + bool DoSensorFocusAction(kortex_vision_config_driver::DoSensorFocusAction::Request &req, kortex_vision_config_driver::DoSensorFocusAction::Response &res); + bool GetIntrinsicParameters(kortex_vision_config_driver::GetIntrinsicParameters::Request &req, kortex_vision_config_driver::GetIntrinsicParameters::Response &res); + + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + + VisionConfigClient* m_visionconfig; + uint32_t m_CurrentDeviceID; + RouterClientSendOptions m_apiOptions; + + SessionManager* m_SessionManager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + ros::Publisher m_pub_VisionTopic; +}; +#endif diff --git a/kortex_vision_config_driver/src/util/diagnostic.h b/kortex_vision_config_driver/src/util/diagnostic.h new file mode 100644 index 00000000..f0199870 --- /dev/null +++ b/kortex_vision_config_driver/src/util/diagnostic.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +struct kortex_error +{ + int error_code; + std::string description; +}; \ No newline at end of file diff --git a/kortex_vision_config_driver/src/util/math_util.h b/kortex_vision_config_driver/src/util/math_util.h new file mode 100644 index 00000000..bf935386 --- /dev/null +++ b/kortex_vision_config_driver/src/util/math_util.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2018 Kinova inc. All rights reserved. + * + * This software may be modified and distributed under the + * terms of the BSD 3-Clause license. + * + * Refer to the LICENSE file for details. + * + */ +#include + +#define TO_RAD(degree) degree * M_PI / 180.0 \ No newline at end of file diff --git a/kortex_vision_config_driver/src/visionconfig_proto_converter.cpp b/kortex_vision_config_driver/src/visionconfig_proto_converter.cpp new file mode 100644 index 00000000..dbec65ae --- /dev/null +++ b/kortex_vision_config_driver/src/visionconfig_proto_converter.cpp @@ -0,0 +1,90 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "visionconfig_proto_converter.h" + +#include "common_proto_converter.h" + + +int ToProtoData(kortex_vision_config_driver::SensorSettings input, SensorSettings *output) +{ + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_resolution((Kinova::Api::VisionConfig::Resolution)input.resolution); + output->set_frame_rate((Kinova::Api::VisionConfig::FrameRate)input.frame_rate); + output->set_bit_rate((Kinova::Api::VisionConfig::BitRate)input.bit_rate); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::SensorIdentifier input, SensorIdentifier *output) +{ + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::OptionIdentifier input, OptionIdentifier *output) +{ + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::OptionValue input, OptionValue *output) +{ + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + output->set_value(input.value); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::OptionInformation input, OptionInformation *output) +{ + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + output->set_supported(input.supported); + output->set_read_only(input.read_only); + output->set_minimum(input.minimum); + output->set_maximum(input.maximum); + output->set_step(input.step); + output->set_default_value(input.default_value); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::SensorFocusAction input, SensorFocusAction *output) +{ + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_focus_action((Kinova::Api::VisionConfig::FocusAction)input.focus_action); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::VisionNotification input, VisionNotification *output) +{ + output->set_event((Kinova::Api::VisionConfig::VisionEvent)input.event); + output->set_sensor((Kinova::Api::VisionConfig::Sensor)input.sensor); + output->set_option((Kinova::Api::VisionConfig::Option)input.option); + + return 0; +} +int ToProtoData(kortex_vision_config_driver::IntrinsicParameters input, IntrinsicParameters *output) +{ + output->set_width(input.width); + output->set_height(input.height); + output->set_principal_point_x(input.principal_point_x); + output->set_principal_point_y(input.principal_point_y); + output->set_focal_length_x(input.focal_length_x); + output->set_focal_length_y(input.focal_length_y); + + return 0; +} diff --git a/kortex_vision_config_driver/src/visionconfig_proto_converter.h b/kortex_vision_config_driver/src/visionconfig_proto_converter.h new file mode 100644 index 00000000..dc4e3e7f --- /dev/null +++ b/kortex_vision_config_driver/src/visionconfig_proto_converter.h @@ -0,0 +1,64 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_VisionConfigPROTO_CONVERTER_H_ +#define _KORTEX_VisionConfigPROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_vision_config_driver/SensorSettings.h" +#include "kortex_vision_config_driver/SensorIdentifier.h" +#include "kortex_vision_config_driver/OptionIdentifier.h" +#include "kortex_vision_config_driver/OptionValue.h" +#include "kortex_vision_config_driver/OptionInformation.h" +#include "kortex_vision_config_driver/SensorFocusAction.h" +#include "kortex_vision_config_driver/VisionNotification.h" +#include "kortex_vision_config_driver/IntrinsicParameters.h" + + +using namespace Kinova::Api::VisionConfig; + +int ToProtoData(kortex_vision_config_driver::SensorSettings intput, SensorSettings *output); +int ToProtoData(kortex_vision_config_driver::SensorIdentifier intput, SensorIdentifier *output); +int ToProtoData(kortex_vision_config_driver::OptionIdentifier intput, OptionIdentifier *output); +int ToProtoData(kortex_vision_config_driver::OptionValue intput, OptionValue *output); +int ToProtoData(kortex_vision_config_driver::OptionInformation intput, OptionInformation *output); +int ToProtoData(kortex_vision_config_driver::SensorFocusAction intput, SensorFocusAction *output); +int ToProtoData(kortex_vision_config_driver::VisionNotification intput, VisionNotification *output); +int ToProtoData(kortex_vision_config_driver::IntrinsicParameters intput, IntrinsicParameters *output); + +#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/src/visionconfig_ros_converter.cpp b/kortex_vision_config_driver/src/visionconfig_ros_converter.cpp new file mode 100644 index 00000000..9a1efe16 --- /dev/null +++ b/kortex_vision_config_driver/src/visionconfig_ros_converter.cpp @@ -0,0 +1,90 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "visionconfig_ros_converter.h" + +#include "common_ros_converter.h" + + +int ToRosData(SensorSettings input, kortex_vision_config_driver::SensorSettings &output) +{ + output.sensor = input.sensor(); + output.resolution = input.resolution(); + output.frame_rate = input.frame_rate(); + output.bit_rate = input.bit_rate(); + + return 0; +} +int ToRosData(SensorIdentifier input, kortex_vision_config_driver::SensorIdentifier &output) +{ + output.sensor = input.sensor(); + + return 0; +} +int ToRosData(OptionIdentifier input, kortex_vision_config_driver::OptionIdentifier &output) +{ + output.sensor = input.sensor(); + output.option = input.option(); + + return 0; +} +int ToRosData(OptionValue input, kortex_vision_config_driver::OptionValue &output) +{ + output.sensor = input.sensor(); + output.option = input.option(); + output.value = input.value(); + + return 0; +} +int ToRosData(OptionInformation input, kortex_vision_config_driver::OptionInformation &output) +{ + output.sensor = input.sensor(); + output.option = input.option(); + output.supported = input.supported(); + output.read_only = input.read_only(); + output.minimum = input.minimum(); + output.maximum = input.maximum(); + output.step = input.step(); + output.default_value = input.default_value(); + + return 0; +} +int ToRosData(SensorFocusAction input, kortex_vision_config_driver::SensorFocusAction &output) +{ + output.sensor = input.sensor(); + output.focus_action = input.focus_action(); + + return 0; +} +int ToRosData(VisionNotification input, kortex_vision_config_driver::VisionNotification &output) +{ + output.event = input.event(); + output.sensor = input.sensor(); + output.option = input.option(); + + return 0; +} +int ToRosData(IntrinsicParameters input, kortex_vision_config_driver::IntrinsicParameters &output) +{ + output.width = input.width(); + output.height = input.height(); + output.principal_point_x = input.principal_point_x(); + output.principal_point_y = input.principal_point_y(); + output.focal_length_x = input.focal_length_x(); + output.focal_length_y = input.focal_length_y(); + + return 0; +} diff --git a/kortex_vision_config_driver/src/visionconfig_ros_converter.h b/kortex_vision_config_driver/src/visionconfig_ros_converter.h new file mode 100644 index 00000000..dd1c9f4c --- /dev/null +++ b/kortex_vision_config_driver/src/visionconfig_ros_converter.h @@ -0,0 +1,64 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_VisionConfigROS_CONVERTER_H_ +#define _KORTEX_VisionConfigROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include "kortex_vision_config_driver/SensorSettings.h" +#include "kortex_vision_config_driver/SensorIdentifier.h" +#include "kortex_vision_config_driver/OptionIdentifier.h" +#include "kortex_vision_config_driver/OptionValue.h" +#include "kortex_vision_config_driver/OptionInformation.h" +#include "kortex_vision_config_driver/SensorFocusAction.h" +#include "kortex_vision_config_driver/VisionNotification.h" +#include "kortex_vision_config_driver/IntrinsicParameters.h" + + +using namespace Kinova::Api::VisionConfig; + +int ToRosData(SensorSettings input, kortex_vision_config_driver::SensorSettings &output); +int ToRosData(SensorIdentifier input, kortex_vision_config_driver::SensorIdentifier &output); +int ToRosData(OptionIdentifier input, kortex_vision_config_driver::OptionIdentifier &output); +int ToRosData(OptionValue input, kortex_vision_config_driver::OptionValue &output); +int ToRosData(OptionInformation input, kortex_vision_config_driver::OptionInformation &output); +int ToRosData(SensorFocusAction input, kortex_vision_config_driver::SensorFocusAction &output); +int ToRosData(VisionNotification input, kortex_vision_config_driver::VisionNotification &output); +int ToRosData(IntrinsicParameters input, kortex_vision_config_driver::IntrinsicParameters &output); + +#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/DoSensorFocusAction.srv b/kortex_vision_config_driver/srv/DoSensorFocusAction.srv new file mode 100644 index 00000000..96d7baa8 --- /dev/null +++ b/kortex_vision_config_driver/srv/DoSensorFocusAction.srv @@ -0,0 +1,3 @@ +SensorFocusAction input +--- +Empty output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/GetIntrinsicParameters.srv b/kortex_vision_config_driver/srv/GetIntrinsicParameters.srv new file mode 100644 index 00000000..706f2ab9 --- /dev/null +++ b/kortex_vision_config_driver/srv/GetIntrinsicParameters.srv @@ -0,0 +1,3 @@ +SensorIdentifier input +--- +IntrinsicParameters output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/GetOptionInformation.srv b/kortex_vision_config_driver/srv/GetOptionInformation.srv new file mode 100644 index 00000000..995b3a8e --- /dev/null +++ b/kortex_vision_config_driver/srv/GetOptionInformation.srv @@ -0,0 +1,3 @@ +OptionIdentifier input +--- +OptionInformation output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/GetOptionValue.srv b/kortex_vision_config_driver/srv/GetOptionValue.srv new file mode 100644 index 00000000..be416735 --- /dev/null +++ b/kortex_vision_config_driver/srv/GetOptionValue.srv @@ -0,0 +1,3 @@ +OptionIdentifier input +--- +OptionValue output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/GetSensorSettings.srv b/kortex_vision_config_driver/srv/GetSensorSettings.srv new file mode 100644 index 00000000..c6636980 --- /dev/null +++ b/kortex_vision_config_driver/srv/GetSensorSettings.srv @@ -0,0 +1,3 @@ +SensorIdentifier input +--- +SensorSettings output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/SetOptionValue.srv b/kortex_vision_config_driver/srv/SetOptionValue.srv new file mode 100644 index 00000000..3214d55b --- /dev/null +++ b/kortex_vision_config_driver/srv/SetOptionValue.srv @@ -0,0 +1,3 @@ +OptionValue input +--- +Empty output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/SetSensorSettings.srv b/kortex_vision_config_driver/srv/SetSensorSettings.srv new file mode 100644 index 00000000..e5e58687 --- /dev/null +++ b/kortex_vision_config_driver/srv/SetSensorSettings.srv @@ -0,0 +1,3 @@ +SensorSettings input +--- +Empty output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/VisionTopic.srv b/kortex_vision_config_driver/srv/VisionTopic.srv new file mode 100644 index 00000000..43c15c71 --- /dev/null +++ b/kortex_vision_config_driver/srv/VisionTopic.srv @@ -0,0 +1,3 @@ +NotificationOptions input +--- +NotificationHandle output \ No newline at end of file diff --git a/kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv b/kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv new file mode 100644 index 00000000..cab7c810 --- /dev/null +++ b/kortex_vision_config_driver/srv/non_generated/SetApiOptions.srv @@ -0,0 +1,3 @@ +ApiOptions input +--- + diff --git a/kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv b/kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv new file mode 100644 index 00000000..396957c5 --- /dev/null +++ b/kortex_vision_config_driver/srv/non_generated/SetDeviceID.srv @@ -0,0 +1,2 @@ +uint32 device_id +--- diff --git a/kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 b/kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 new file mode 100644 index 00000000..8bb883ad --- /dev/null +++ b/kortex_vision_config_driver/templates/NodeServices.cpp.jinja2 @@ -0,0 +1,151 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" +{% for package in detailedPackages %} +{%- if package.HasMessage == 1 -%} +#include "{{package.filename|lower}}_ros_converter.h" +#include "{{package.filename|lower}}_proto_converter.h" +{%- endif %} +{% endfor -%} + +VisionConfig_Services::VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id) : m_n(n) +{ + m_transport = new TransportClientUdp(); + m_transport->connect(ip, 10000); + + m_router = new RouterClient(m_transport, [](KError err) { cout << "_________ callback error _________" << err.toString(); }); + m_CurrentDeviceID = device_id; + m_apiOptions.timeout_ms = 3000; +{% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + m_{{package.name|lower}} = new {{package.name}}::{{package.name}}Client(m_router); + {%- endif -%} +{% endfor -%} + //If the Device ID is different than 0, it means that we are using the feature DEVICE ROUTING. + if(m_CurrentDeviceID != 0) + { + m_SessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + m_SessionManager->CreateSession(createSessionInfo); + } + + m_pub_Error = m_n.advertise("KortexError", 1000); +{%- for package in detailedPackages -%} +{%- for method in package.service.method -%} +{%- if 'Topic' in method.name %} + m_pub_{{method.name}} = m_n.advertise("{{method.name}}", 1000); +{%- endif -%} +{%- endfor -%} +{%- endfor -%} + + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); +} + +bool VisionConfig_Services::SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res) +{ + if(m_CurrentDeviceID == 0) + { + auto sessionManager = new SessionManager(m_router); + auto createSessionInfo = Kinova::Api::Session::CreateSessionInfo(); + + createSessionInfo.set_username("admin"); + createSessionInfo.set_password("admin"); + createSessionInfo.set_session_inactivity_timeout(35000); + + sessionManager->CreateSession(createSessionInfo); + } + + m_CurrentDeviceID = req.device_id; +} + +bool VisionConfig_Services::SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res) +{ + m_apiOptions.timeout_ms = req.input.timeout_ms; + + return true; +} +{% for package in detailedPackages %} +{% for method in package.service.method %} +{%- if 'Topic' in method.name %} +bool VisionConfig_Services::OnNotification{{method.name}}(kortex_vision_config_driver::{{method.name}}::Request &req, kortex_vision_config_driver::{{method.name}}::Response &res) +{%- else %} +bool VisionConfig_Services::{{method.name}}(kortex_vision_config_driver::{{method.name}}::Request &req, kortex_vision_config_driver::{{method.name}}::Response &res) +{%- endif %} +{ + {%- set splitInputTypeName = method.input_type.split('.') -%} + {% set splitOutputTypeName = method.output_type.split('.') %} + {{splitInputTypeName[4]}} input; + {%- if not method.input_type.split('.')[4] == "Empty" %} + ToProtoData(req.input, &input); + {%- endif %} + {{splitOutputTypeName[4]}} output; + kortex_vision_config_driver::KortexError result_error; + + try + { + {%- if not method.output_type.split('.')[4] == "Empty" %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + {%- if 'Topic' in method.name %} + std::function< void ({{package.name}}::{{method.name|replace("Topic", "")}}Notification) > callback = std::bind(&VisionConfig_Services::cb_{{method.name}}, this, std::placeholders::_1); + output = m_{{package.name|lower}}->OnNotification{{method.name}}(callback, input); + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- else %} + output = m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- else %} + {%- if not method.input_type.split('.')[4] == "Empty" %} + m_{{package.name|lower}}->{{method.name}}(input, m_CurrentDeviceID, m_apiOptions); + {%- else %} + m_{{package.name|lower}}->{{method.name}}(m_CurrentDeviceID, m_apiOptions); + {%- endif %} + {%- endif %} + } + catch (KDetailedException& ex) + { + result_error.subCode = ex.getErrorInfo().getError().error_sub_code(); + result_error.code = ex.getErrorInfo().getError().error_code(); + result_error.description = ex.what(); + m_pub_Error.publish(result_error); + ROS_INFO("KINOVA exception: %d\n", ex.getErrorInfo().getError().error_sub_code()); + return false; + } + catch (std::runtime_error& ex2) + { + return false; + } + {%- if not method.output_type.split('.')[4] == "Empty" %} + ToRosData(output, res.output); + {%- endif %} + return true; +} +{%- if 'Topic' in method.name %} +void VisionConfig_Services::cb_{{method.name}}({{package.name}}::{{method.name|replace("Topic", "")}}Notification notif) +{ + kortex_vision_config_driver::{{method.name|replace("Topic", "")}}Notification ros_msg; + ToRosData(notif, ros_msg); + m_pub_{{method.name}}.publish(ros_msg); +} +{%- endif %} +{% endfor -%} +{% endfor -%} \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/NodeServices.h.jinja2 b/kortex_vision_config_driver/templates/NodeServices.h.jinja2 new file mode 100644 index 00000000..e7999ee1 --- /dev/null +++ b/kortex_vision_config_driver/templates/NodeServices.h.jinja2 @@ -0,0 +1,107 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{packageName}}SERVICES_H_ +#define _KORTEX_{{packageName}}SERVICES_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +{%- for package in detailedPackages %} +#include <{{package.filename}}.pb.h> +{%- endfor %} + +#include +#include + +#include +#include + +{%- for package in detailedPackages %} +{%- if package.HasRPC == 1 %} +#include <{{package.name}}ClientRpc.h> +{%- endif %} +{%- endfor %} +#include +#include + +{%- for package in detailedPackages %} +{%- for method in package.service.method %} +#include "kortex_vision_config_driver/{{method.name}}.h" +{%- endfor %} +{%- endfor %} +#include "kortex_vision_config_driver/KortexError.h" +#include "kortex_vision_config_driver/SetDeviceID.h" +#include "kortex_vision_config_driver/SetApiOptions.h" + +#include "kortex_vision_config_driver/ApiOptions.h" + +using namespace std; +using namespace Kinova::Api; +{%- for package in detailedPackages %} +using namespace {{package.namespace}}; +{%- endfor %} + +class VisionConfig_Services +{ + public: + VisionConfig_Services(char* ip, ros::NodeHandle& n, uint32_t device_id); + bool SetDeviceID(kortex_vision_config_driver::SetDeviceID::Request &req, kortex_vision_config_driver::SetDeviceID::Response &res); + bool SetApiOptions(kortex_vision_config_driver::SetApiOptions::Request &req, kortex_vision_config_driver::SetApiOptions::Response &res); +{% for package in detailedPackages %} +{%- for method in package.service.method %} +{%- if 'Topic' in method.name %} + bool OnNotification{{method.name}}(kortex_vision_config_driver::{{method.name}}::Request &req, kortex_vision_config_driver::{{method.name}}::Response &res); + void cb_{{method.name}}({{method.name|replace("Topic", "")}}Notification notif); +{%- else %} + bool {{method.name}}(kortex_vision_config_driver::{{method.name}}::Request &req, kortex_vision_config_driver::{{method.name}}::Response &res); +{%- endif %} +{%- endfor %} +{% endfor %} + +private: + TransportClientUdp* m_transport; + RouterClient* m_router; + {% for package in detailedPackages %} + {%- if package.HasRPC == 1 %} + {{package.name}}Client* m_{{package.name|lower}}; + {%- endif -%} + {% endfor %} + uint32_t m_CurrentDeviceID; + RouterClientSendOptions m_apiOptions; + + SessionManager* m_SessionManager; + + ros::NodeHandle m_n; + ros::Publisher m_pub_Error; + + {%- for package in detailedPackages %} + {%- for method in package.service.method %} + {%- if 'Topic' in method.name %} + ros::Publisher m_pub_{{method.name}}; + {%- endif %} + {%- endfor %} + {%- endfor %} +}; +#endif + diff --git a/kortex_vision_config_driver/templates/main.jinja2 b/kortex_vision_config_driver/templates/main.jinja2 new file mode 100644 index 00000000..93994931 --- /dev/null +++ b/kortex_vision_config_driver/templates/main.jinja2 @@ -0,0 +1,70 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "node.h" + +#include +#include + +int main(int argc, char **argv) +{ + ros::init(argc, argv, "VisionConfig_Services"); + + uint32_t device_id = 0; + + ros::NodeHandle n; + bool valid_ip = false; + + if(argc > 2) + { + stringstream tempId; + tempId << argv[2]; + tempId >> device_id; + + if(tempId.fail() || tempId.bad()) + { + ROS_INFO("ERROR - Bad device ID, shutting down the node..."); + ros::shutdown(); + return 0; + } + ROS_INFO("Connecting to IP = %s - device ID = %s", argv[1], argv[2]); + } + else if(argc > 1) + { + ROS_INFO("Connecting to IP = %s", argv[1]); + } + else + { + ROS_INFO("You need to provide, at least, an IP adresse as the first parameter. An optional device ID can also be passed if you are using the device routing feature. ex: rosrun package node 192.168.1.10 [device_id]"); + ros::shutdown(); + return 0; + } + + VisionConfig_Services services_object(argv[1], n, device_id); + + ros::ServiceServer serviceSetDeviceID = n.advertiseService("SetDeviceID", &VisionConfig_Services::SetDeviceID, &services_object); + ros::ServiceServer serviceSetApiOptions = n.advertiseService("SetApiOptions", &VisionConfig_Services::SetApiOptions, &services_object); + + {% for function in list_function -%} + ros::ServiceServer service{{function}} = n.advertiseService("{{function}}", &VisionConfig_Services::{{function}}, &services_object); + {% endfor %} + + ROS_INFO("Node's services initialized correctly."); + + ros::spin(); + + return 1; +} diff --git a/kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 b/kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 new file mode 100644 index 00000000..5f255569 --- /dev/null +++ b/kortex_vision_config_driver/templates/proto_converter.cpp.jinja2 @@ -0,0 +1,77 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentFilename|lower}}_proto_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_proto_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToProtoData(kortex_vision_config_driver::{{detailed_message.message.name}} input, {{detailed_message.message.name}} *output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") -%} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {%- if field.type == 11 %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + ToProtoData(input.{{field.name}}[i], output->add_{{field.name|lower}}()); + } + {%- else %} + output->clear_{{field.name|lower}}(); + for(int i = 0; i < input.{{field.name}}.size(); i++) + { + output->add_{{field.name|lower}}(input.{{field.name}}[i]); + } + {% endif -%} + {% else -%} + {%- if field.type == 11 %} + ToProtoData(input.{{field.name}}, output->mutable_{{field.name}}()); + {%- elif field.type == 14 %}{# ENUM #} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output->set_{{field.name}}(({{field.type_name|replace(".", "", 1)|replace(".", "::")}})input.{{field.name}}); + {%- elif field.type == 12 %} + output->set_{{field.name}}(std::string(input.{{field.name}}.begin(), input.{{field.name}}.end())); + {%- else %} + output->set_{{field.name}}(input.{{field.name}}); + {%- endif -%} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + + {% if detailed_message.HasOneOf == "true" %} + + {% for field in detailed_message.message.field %} + {%- if field.HasField("oneof_index") -%} + if(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.size() > 0) + { + {% if field.type == 11 -%} + ToProtoData(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0], output->mutable_{{field.name}}()); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} + output->set_{{field.name}}(({{list1[4]}})input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- else %} + output->set_{{field.name}}(input.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}[0]); + {%- endif %} + } + {% endif %} + {%- endfor -%} + {% endif %} + + return 0; +} +{% endfor %} diff --git a/kortex_vision_config_driver/templates/proto_converter.h.jinja2 b/kortex_vision_config_driver/templates/proto_converter.h.jinja2 new file mode 100644 index 00000000..3f56d39f --- /dev/null +++ b/kortex_vision_config_driver/templates/proto_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}PROTO_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_vision_config_driver/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToProtoData(kortex_vision_config_driver::{{detailed_message.message.name}} intput, {{detailed_message.message.name}} *output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 b/kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 new file mode 100644 index 00000000..8ddcc9e7 --- /dev/null +++ b/kortex_vision_config_driver/templates/ros_converter.cpp.jinja2 @@ -0,0 +1,86 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#include "{{currentFilename|lower}}_ros_converter.h" +{% if 'Common' not in currentPackageName %} +#include "common_ros_converter.h" +{% endif %} + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_vision_config_driver::{{detailed_message.message.name}} &output) +{ + {%- for field in detailed_message.message.field %} + {%- if not field.HasField("oneof_index") %} + {%- if field.label == 3 %} {# Si c'est un repeated #} + {% if field.type == 11 %} + {%- set splitTypeName = field.type_name.split('.') -%} + output.{{field.name}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + gen3_actuator::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(i), temp); + output.{{field.name}}.push_back(temp); + } + {%- else %} + output.{{field.name}}.clear(); + for(int i = 0; i < input.{{field.name|lower}}_size(); i++) + { + output.{{field.name}}.push_back(input.{{field.name|lower}}(i)); + } + {%- endif %} + {%- else %} + {%- if field.type == 11 %} + ToRosData(input.{{field.name}}(), output.{{field.name}}); + {%- elif field.type == 14 %} + {%- set list1 = field.type_name.split('.') -%} {# Cette ligne sert à enlever les namespace dans le nom du type #} + output.{{field.name}} = input.{{field.name}}(); + {%- elif field.type == 12 %} + output.{{field.name}} = std::vector(input.{{field.name}}().begin(), input.{{field.name}}().end()); + {%- else %} + output.{{field.name}} = input.{{field.name}}(); + {%- endif %} + {%- endif %} + {%- endif %} + {%- endfor %} + + {% if detailed_message.HasOneOf == "true" %} + auto oneof_type = input.{{detailed_message.message.ListFields()[-1][1][0].name}}_case(); + + switch(oneof_type) + { + {%- for field in detailed_message.message.field -%} + {%- if field.HasField("oneof_index") -%} + {%- set splitTypeName = field.type_name.split('.') %} + {%- set EnumName = field.name.replace("_", " ").title().replace(" ", "") %} + case {{detailed_message.message.name}}::k{{EnumName}}: + { + {%- if field.type == 11 %} + gen3_actuator::{{splitTypeName[4]}} temp; + ToRosData(input.{{field.name}}(), temp); + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(temp); + {%- elif field.type == 14 %} + output.oneof_{{detailed_message.message.ListFields()[-1][1][0].name}}.{{field.name}}.push_back(input.{{field.name}}()); + {% endif %} + break; + } + {% endif %} + {%- endfor %} + } + {% endif -%} + + return 0; +} +{% endfor %} diff --git a/kortex_vision_config_driver/templates/ros_converter.h.jinja2 b/kortex_vision_config_driver/templates/ros_converter.h.jinja2 new file mode 100644 index 00000000..ff3e5df8 --- /dev/null +++ b/kortex_vision_config_driver/templates/ros_converter.h.jinja2 @@ -0,0 +1,52 @@ +/* +* KINOVA (R) KORTEX (TM) +* +* Copyright (c) 2018 Kinova inc. All rights reserved. +* +* This software may be modified and distributed under the +* terms of the BSD 3-Clause license. +* +* Refer to the LICENSE file for details. +* +*/ + +/* + * This file has been auto-generated and should not be modified. + */ + +#ifndef _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ +#define _KORTEX_{{currentPackageName}}ROS_CONVERTER_H_ + +#include "ros/ros.h" + +#include +#include +#include +#include +#include + +#include +#include +#include <{{currentFilename}}.pb.h> + +#include +#include + +#include +#include + +#include +#include +#include +#include + +{% for detailed_message in item -%} +#include "kortex_vision_config_driver/{{detailed_message.message.name}}.h" +{% endfor %} + +using namespace {{currentNamespace}}; + +{% for detailed_message in item -%} +int ToRosData({{detailed_message.message.name}} input, kortex_vision_config_driver::{{detailed_message.message.name}} &output); +{% endfor %} +#endif \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_enum.jinja2 b/kortex_vision_config_driver/templates/ros_enum.jinja2 new file mode 100644 index 00000000..164146fc --- /dev/null +++ b/kortex_vision_config_driver/templates/ros_enum.jinja2 @@ -0,0 +1,3 @@ +{% for member in item.value %} +uint32 {{member.name}} = {{member.number}} +{% endfor %} diff --git a/kortex_vision_config_driver/templates/ros_message.jinja2 b/kortex_vision_config_driver/templates/ros_message.jinja2 new file mode 100644 index 00000000..167f685f --- /dev/null +++ b/kortex_vision_config_driver/templates/ros_message.jinja2 @@ -0,0 +1,44 @@ +{%- for member in item.field -%} +{%- if not member.HasField("oneof_index") -%} +{%- if member.type == 9 %} {# TYPE_STRING #} +string{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 12 %} {# TYPE_BYTES #} +uint8[] {{member.name}} +{%- elif member.type == 1 %} {# TYPE_DOUBLE #} +float64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 7 %} {# TYPE_FIXED32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 6 %} {# TYPE_FIXED64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 2 %} {# TYPE_FLOAT #} +float32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 5 %} {# TYPE_INT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 3 %} {# TYPE_INT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 15 %} {# TYPE_SFIXED32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 16 %} {# TYPE_SFIXED64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 17 %} {# TYPE_SINT32 #} +int32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 18 %} {# TYPE_SINT64 #} +int64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 13 %} {# TYPE_UINT32 #} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 4 %} {# TYPE_UINT64 #} +uint64{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 14 -%} {# TYPE_ENUM #} +{% set list1 = member.type_name.split('.') %} +uint32{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- elif member.type == 8 %} {# TYPE_BOOL #} +bool {{member.name}} +{%- elif member.type == 11 %}{# TYPE MESSAGE #} +{% set list1 = member.type_name.split('.') %} +{{list1|last}}{%- if member.label == 3 -%}[]{% endif %} {{member.name}} +{%- endif -%} +{%- endif -%} +{%- endfor -%} +{%- if HasOneOf %} +{{item.name}}_{{item.ListFields()[-1][1][0].name}} oneof_{{item.ListFields()[-1][1][0].name}} +{%- endif -%} \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_oneof.jinja2 b/kortex_vision_config_driver/templates/ros_oneof.jinja2 new file mode 100644 index 00000000..4fac302a --- /dev/null +++ b/kortex_vision_config_driver/templates/ros_oneof.jinja2 @@ -0,0 +1,9 @@ +{%- for member in item.field -%} +{% if member.HasField("oneof_index") %} +{% if member.type == 11 %} +{% set list1 = member.type_name.split('.') %}{{list1[4]}}[] {{member.name}} +{%- else -%} +uint32[] {{member.name}} +{%- endif -%} +{%- endif -%} +{% endfor %} \ No newline at end of file diff --git a/kortex_vision_config_driver/templates/ros_service.jinja2 b/kortex_vision_config_driver/templates/ros_service.jinja2 new file mode 100644 index 00000000..cc015cf8 --- /dev/null +++ b/kortex_vision_config_driver/templates/ros_service.jinja2 @@ -0,0 +1,5 @@ +{% set split_input_type = item.input_type.split('.') %} +{%- set split_output_type = item.output_type.split('.') -%} +{{split_input_type[4]}} input +--- +{{split_output_type[4]}} output \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 00000000..bb967b68 --- /dev/null +++ b/readme.md @@ -0,0 +1,88 @@ +# ROS KORTEX +The official ROS package to interact with Kortex and its related products. It is built on top of the Kortex API. Documentation of the Kortex API can be found in the Kortex [repository](https://github.com/Kinovarobotics/kortex). + + + + +1. [Content](#content) + 1. [kortex driver](#kortex-driver) + 1. [kortex actuator](#kortex-actuator) + 1. [kortex device manager](#kortex-device-manager) + 1. [kortex vision module driver](#kortex-vision-module-driver) + 1. [kortex examples](#kortex-examples) + 1. [kortex description](#kortex-description) + 1. [kortex api](#kortex-api) +1. [Setup](#setup) + 1. [Install protobuf](#install-protobuf) +1. [kortex gazebo](#kortex-gazebo) +1. [kortex moveit](#kortex-moveit) + + + + +## Content + +### kortex driver +This package is a ROS node that allows communication with a robotic base from a Gen3 robot. For more details, please read the [documentation](kortex_driver/readme.md) from inside the package. Use this package if you want to: + +* Change some basic configuration on the robot. +* Move the robot in the Cartesian space. +* Move the robot in the Joint space. +* Activate the admittance mode. +* Move the robot using the **LOW\_LEVEL**\ (1 KHz\) control mode. +* Move the robot using the **LOW\_LEVEL\_BYPASS**\ mode. +* Access the cyclic data sporadically. + + +### kortex actuator +This package is a ROS node that allows a direct communication with a Gen3 actuator. A direct communication means that either the computer that is running the node has direct IP connectivity with the actuator or is connected to a robot and using the device routing system to reach the actuator. A more detailed [documentation](kortex_actuator_driver/readme.md) can be found inside the package. Use this package if you want to: + +* Change an advance configuration setting on an actuator. +* Move an actuator using the cyclic data (1 KHz). + + +### kortex device manager +This package is a ROS node that allows basic communication with every devices supported by the kortex framework. A more detailed [documentation](kortex_device_manager/readme.md) can be found inside the package. Use this package if you want to: + +* List all the devices available on a specific Gen3 robot. +* Retrieve some generic informations on a specific device. +* Get the firmware version of a specific device. +* Get the serial number of a device. +* Set IPv4 settings on a device. +* Get safety informations of a device. + + +### kortex vision module driver +This package is a ROS node that allows direct communication with a Gen3 vision module. A direct communication means that either the computer running the node has an ethernet cable directly connected to a vision module or that it is connected to a robot using the device routing system. A more detailed [documentation](kortex_vision_config_driver/readme.md) can be found inside the package. Use this package if you want to: + +* Change a configuration setting on a vision module. +* Get informations about the configuration settings of a vision module. + + +### kortex examples +This package holds all the examples needed to understands that basics of ros_kortex. All examples are written in both c++ and python. A more detailed [documentation](kortex_examples/readme.md) can be found inside the package. + + +### kortex description +This package contains the URDF and the STL of a complete Gen3 robot. A more detailed [documentation](kortex_description/readme.md) can be found inside the package. + + +### kortex api +This package contains all the header files and the libraries needed by the kortex C++ API. A more detailed [documentation](kortex_api/readme.md) can be found inside the package. + + +## Setup + +### Install protobuf +Protobuf compiler is needed if you want to re-generate the code of a package. + +1. git clone https://github.com/protocolbuffers/protobuf --branch 3.5.1.1 (you absolutely need to use this specific version) +2. Follow these [instructions](https://github.com/protocolbuffers/protobuf/blob/master/src/README.md) to build and install protobuf and its compiler. + + +## kortex gazebo +This package is not completed yet but will be available in a future version. + + +## kortex moveit +This package is not completed yet but will be available in a future version.
  • X@52*7#?UbQ1^Yy>6TC> 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