Modeling an articulated robot #499
Replies: 10 comments 3 replies
-
Well I got everything from a UR's RTDE protocol onto an agent, but I just modeled each as a dataItem of the root device so far. Im reading up on maybe the larger question - in the case of 3d cad representation - is the kinematics the responsibility of the adapter? or the 'client' app mtconnect data consumer? |
Beta Was this translation helpful? Give feedback.
-
ok, makes sense. Are ...Or would the device model include lower-level dataItems |
Beta Was this translation helpful? Give feedback.
-
They are the static relationships between the components. Motion describes how they move along what axis for linear or around what axis for rotary.
The component Position and Angle data items change the relative motion. The configuration is at when the axes are zeroed. It is the same info you get from the machine specification or robot axes relationships.
|
Beta Was this translation helpful? Give feedback.
-
ok, that is making more sense. im trying to follow https://github.com/mtconnect/cppagent/tree/main/demo/twin lets look at the Mazak, X-axis, for example. Here is a snippet from the probe: <Structures id="mstruct">
<Configuration>
<SolidModel coordinateSystemIdRef="base" href="/twin/objs/mazak-fixture.obj" id="model" mediaType="OBJ" nativeUnits="x:METER">
<Transformation>
<Rotation>0 0 0</Rotation>
<Translation>0 0 860</Translation>
</Transformation>
</SolidModel>
</Configuration>
<Components>
<Link id="xaxism" name="X_AXIS">
<Configuration>
<SolidModel coordinateSystemIdRef="base" id="x_model" itemRef="X_AXIS" mediaType="OBJ" solidModelIdRef="model" />
</Configuration>
</Link>
...
</Components>
</Structures>
<Axes id="a" name="base">
<DataItems>
<DataItem category="CONDITION" id="servo_cond" type="ACTUATOR" />
<DataItem category="CONDITION" id="spindle_cond" type="SYSTEM" />
</DataItems>
<Components>
<Linear id="x" name="X" nativeName="X">
<Configuration>
<Motion actuation="DIRECT" coordinateSystemIdRef="machcoord" id="xmotion" type="PRISMATIC">
<Axis>1 0 0</Axis>
<Transformation>
<Rotation>0 0 0</Rotation>
<Translation>0 0 0</Translation>
</Transformation>
</Motion>
<Relationships>
<ComponentRelationship id="xpar" idRef="enclosurem" type="PARENT" />
<ComponentRelationship id="xchi" idRef="xaxism" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem category="SAMPLE" coordinateSystemIdRef="machcoord" id="Xabs" subType="ACTUAL" type="POSITION" units="MILLIMETER" />
<DataItem category="SAMPLE" coordinateSystemIdRef="workcoord" id="Xpos" subType="ACTUAL" type="POSITION" units="MILLIMETER" />
<DataItem category="CONDITION" id="Xtravel" type="POSITION" />
<DataItem category="SAMPLE" id="Xload" type="LOAD" units="PERCENT">
</DataItem>
<DataItem category="SAMPLE" id="Xfrt" type="AXIS_FEEDRATE" units="MILLIMETER/SECOND" />
<DataItem category="SAMPLE" compositionId="Xmotor" id="servotemp1" type="TEMPERATURE" units="CELSIUS"></DataItem>
<DataItem category="EVENT" id="xaxisstate" type="AXIS_STATE" />
</DataItems>
</Linear>
...
</Axes> How/where does the client "associate" I am failing to see where the provided example is reading position and applying that to the threejs rendering? I dont see how the js "knows" which solid model to manipulate with new position dataitem values? |
Beta Was this translation helpful? Give feedback.
-
...and... ofc i spot it once i post that comment: <Link id="xaxism" name="X_AXIS">
<Configuration>
<SolidModel coordinateSystemIdRef="base" id="x_model" itemRef="X_AXIS" mediaType="OBJ" solidModelIdRef="model" />
</Configuration>
</Link>
...
<ComponentRelationship id="xchi" idRef="xaxism" type="CHILD" /> |
Beta Was this translation helpful? Give feedback.
-
The links are static parts of the model that connect motion components. Since they are not really components per-say, they are part of the structure. https://model.mtconnect.org/#Structure___19_0_3_45f01b9_1587597430378_591532_1084 We used them to construct the solid model as opposed to linear and rotary axes. The axes in MTConnect, especially rotary, are similar to joints in a robot. We decided, after long debate, to only have rotary instead of a special type of component called a joint. This was because it was confusing when to use Rotary and when to use Joint when building certain machines that have robot-like articulation on a machine tool. Links were not covered in the current model and since they do not have motion of their own, they are moved by axes, they were just described by a solid model link as part of the machine structure. They are a subclass of Stucture: https://model.mtconnect.org/#Structure___19_0_3_45f01b9_1587597358521_716746_1028 Hopefully, this makes sense. We put together the demo as a full implementation with JavaScript to show how the model integrates into a fully functional animation. |
Beta Was this translation helpful? Give feedback.
-
yes, its making more sense. the js is complex to follow, but im starting to get it. I transcribed Protocol.js into typescript importing the parser(s) and twin as js and ive got streaming working, updating text so far. 2 questions:
|
Beta Was this translation helpful? Give feedback.
-
here is my device.xml for a UR robot so far, does this look right? This is what i meant about defining the solidmodel in each component. Although it does seem a bit weak to have only the fixed base in the structure... <?xml version="1.0" encoding="UTF-8"?>
<MTConnectDevices
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:mtconnect.org:MTConnectDevices:2.3"
xsi:schemaLocation="urn:mtconnect.org:MTConnectDevices:2.3 https://schemas.mtconnect.org/schemas/MTConnectDevices_2.3.xsd">
<Header deviceModelChangeTime="2022-06-17T16:33:21.188094Z" creationTime="2013-04-02T03:40:04Z" assetBufferSize="1024" sender="localhost" assetCount="0" version="2.3" instanceId="1" bufferSize="131072"/>
<Devices>
<Device name="machine_1" id="mxi_m001" uuid="mxi_m001">
<DataItems>
<DataItem id="app_ver" type="APPLICATION" subType="VERSION" category="EVENT"/>
</DataItems>
<Configuration>
<CoordinateSystems>
<CoordinateSystem id="base" type='BASE'>
<Origin>0 0 0</Origin>
</CoordinateSystem>
</CoordinateSystems>
<SolidModel id="model_3d" href="695-903-00_Centercode_B.step" coordinateSystemIdRef="base" mediaType="STEP"/>
</Configuration>
<Components>
<Structures id="structure">
<Components>
<Structure id="base_mount">
<Configuration>
<SolidModel id="base_mnt_model" mediaType="STEP" itemRef="C-2003903" solidModelIdRef="model_3d">
<Transformation>
<Translation>0 0 0</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
</SolidModel>
</Configuration>
</Structure>
</Components>
</Structures>
<Systems id="sys">
<Components>
<Electric id="elec_sys">
<DataItems>
<DataItem id="actual_main_voltage" name="actual_main_voltage" type="VOLTAGE_DC" category="SAMPLE" units="VOLT"/>
<DataItem id="actual_robot_voltage" name="actual_robot_voltage" type="VOLTAGE_DC" category="SAMPLE" units="VOLT"/>
<DataItem id="actual_robot_current" name="actual_robot_current" type="AMPERAGE_DC" category="SAMPLE" units="AMPERE"/>
</DataItems>
</Electric>
<EndEffector id="tool">
<DataItems>
<DataItem id="actual_tool_accelerometer" name="actual_tool_accelerometer" type="ACCELERATION" subType="ACTUAL" representation="DATA_SET" category="SAMPLE" units="MILLIMETER/SECOND^2" />
<DataItem id="tool_mode" name="tool_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="tool_analog_input_types" name="tool_analog_input_types" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="tool_analog_input0" name="tool_analog_input0" type="SENSOR_STATE" category="EVENT"/>
<DataItem id="tool_analog_input1" name="tool_analog_input1" type="SENSOR_STATE" category="EVENT"/>
<DataItem id="tool_output_voltage" name="tool_output_voltage" type="VOLTAGE" category="SAMPLE" units="VOLT"/>
<DataItem id="tool_output_current" name="tool_output_current" type="AMPERAGE" category="SAMPLE" units="AMPERE" />
<DataItem id="tool_temperature" name="tool_temperature" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="tcp_force_scalar" name="tcp_force_scalar" type="LINEAR_FORCE" category="SAMPLE" units="NEWTON"/>
<DataItem id="tool_output_mode" name="tool_output_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="tool_digital_output0_mode" name="tool_digital_output0_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="tool_digital_output1_mode" name="tool_digital_output1_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="ft_raw_wrench_linear" name="ft_raw_wrench" type="LINEAR_FORCE" representation="DATA_SET" category="SAMPLE" units="NEWTON"/>
<DataItem id="ft_raw_wrench_torque" name="ft_raw_wrench" type="TORQUE" representation="DATA_SET" category="SAMPLE" units="NEWTON_METER"/>
<DataItem id="actual_TCP_position" name="actual_TCP_position" type="POSITION_CARTESIAN" category="SAMPLE" subType="ACTUAL" units="MILLIMETER_3D"/>
<DataItem id="actual_TCP_orientation" name="actual_TCP_rotation" type="ORIENTATION" category="SAMPLE" subType="ACTUAL" units="DEGREE_3D" />
<DataItem id="actual_TCP_linear_speed" name="actual_TCP_linear_speed" type="VELOCITY" representation="DATA_SET" category="SAMPLE" subType="ACTUAL" units="MILLIMETER/SECOND" />
<DataItem id="actual_TCP_angular_speed" name="actual_TCP_angular_speed" type="ANGULAR_VELOCITY" representation="DATA_SET" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND" />
<DataItem id="actual_TCP_force_linear" name="actual_TCP_linear_force" type="LINEAR_FORCE" representation="DATA_SET" category="SAMPLE" subType="ACTUAL" units="NEWTON" />
<DataItem id="actual_TCP_force_torque" name="actual_TCP_linear_force" type="TORQUE" representation="DATA_SET" category="SAMPLE" subType="ACTUAL" units="NEWTON_METER" />
<DataItem id="target_TCP_position" name="target_TCP_position" type="POSITION_CARTESIAN" subType="ACTUAL" category="SAMPLE" units="MILLIMETER_3D" />
<DataItem id="target_TCP_orientation" name="target_TCP_rotation" type="ORIENTATION" category="SAMPLE" subType="COMMANDED" units="DEGREE_3D" />
<DataItem id="target_TCP_linear_speed" name="target_TCP_linear_speed" type="VELOCITY" representation="DATA_SET" category="SAMPLE" subType="COMMANDED" units="MILLIMETER/SECOND" />
<DataItem id="target_TCP_angular_speed" name="target_TCP_angular_speed" type="ANGULAR_VELOCITY" representation="DATA_SET" category="SAMPLE" subType="COMMANDED" units="DEGREE/SECOND" />
</DataItems>
</EndEffector>
</Components>
</Systems>
<Controller id="controller">
<DataItems>
<DataItem id="estop" type="EMERGENCY_STOP" category="EVENT"/>
<DataItem id="prog" type="PROGRAM" category="EVENT"/>
<DataItem id="exe" type="EXECUTION" category="EVENT"/>
<DataItem id="mode" type="CONTROLLER_MODE" category="EVENT"/>
<DataItem id="bind_state" type="BINDING_STATE" category="EVENT"/>
<DataItem id="timestamp" name="timestamp" type="EQUIPMENT_TIMER" subType="POWERED" category="SAMPLE" units="SECOND"/>
<DataItem id="actual_digital_input_bits" name="actual_digital_input_bits" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="actual_execution_time" name="actual_execution_time" type="CLOCK_TIME" category="EVENT" />
<DataItem id="robot_mode" name="robot_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="safety_mode" name="safety_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="safety_status" name="safety_status" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="speed_scaling" name="speed_scaling" type="SENSOR_STATE" category="EVENT" />
<DataItem id="target_speed_fraction" name="target_speed_fraction" type="SENSOR_STATE" category="EVENT" />
<DataItem id="actual_momentum" name="actual_momentum" type="SENSOR_STATE" category="EVENT" />
<DataItem id="actual_digital_output_bits" name="actual_digital_output_bits" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="runtime_state" name="runtime_state" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="elbow_position" name="elbow_position" type="POSITION_CARTESIAN" category="SAMPLE" units="MILLIMETER_3D"/>
<DataItem id="elbow_velocity" name="elbow_velocity" type="VELOCITY" representation="DATA_SET" category="SAMPLE" units="MILLIMETER/SECOND"/>
<DataItem id="robot_status_bits" name="robot_status_bits" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="safety_status_bits" name="safety_status_bits" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="analog_io_types" name="analog_io_types" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="standard_analog_input0" name="standard_analog_input0" type="SENSOR_STATE" category="EVENT" />
<DataItem id="standard_analog_input1" name="standard_analog_input1" type="SENSOR_STATE" category="EVENT" />
<DataItem id="standard_analog_output0" name="standard_analog_output0" type="SENSOR_STATE" category="EVENT" />
<DataItem id="standard_analog_output1" name="standard_analog_output1" type="SENSOR_STATE" category="EVENT"/>
<DataItem id="io_current" name="io_current" type="AMPERAGE" category="SAMPLE" units="AMPERE" />
<DataItem id="euromap67_input_bits" name="euromap67_input_bits" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="euromap67_output_bits" name="euromap67_output_bits" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
<DataItem id="euromap67_24V_voltage" name="euromap67_24V_voltage" type="VOLTAGE" category="SAMPLE" />
<DataItem id="euromap67_24V_current" name="euromap67_24V_current" type="AMPERAGE" category="SAMPLE" />
<DataItem id="payload" name="payload" type="MASS" category="SAMPLE" units="KILOGRAM"/>
<DataItem id="payload_cog" name="payload_cog" type="POSITION_CARTESIAN" category="SAMPLE" units="MILLIMETER_3D"/>
<DataItem id="payload_inertia" name="payload_inertia" type="INERTIA" representation="DATA_SET" category="SAMPLE" units="KILOGRAM_METER/SECOND^2" />
<DataItem id="script_control_line" name="script_control_line" type="LINE_NUMBER" category="EVENT" />
<DataItem id="joint_position_deviation_ratio" name="joint_position_deviation_ratio" type="FOLLOWING_ERROR_ANGULAR" category="SAMPLE" units="DEGREE"/>
<DataItem id="collision_detection_ratio" name="collision_detection_ratio" type="SENSOR_STATE" category="EVENT" />
<DataItem id="time_scale_source" name="time_scale_source" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT" />
</DataItems>
</Controller>
<Axes id="axes">
<Components>
<Rotary id="j1">
<Configuration>
<SolidModel id="j1_model" coordinateSystemIdRef="base" solidModelIdRef="model_3d" itemRef="C-2003903" mediaType="STEP"/>
<Motion id="j1_motion" coordinateSystemIdRef="base" type="REVOLUTE" actuation="DIRECT" parentIdRef="base_mount">
<Transformation>
<Translation>0 0 107.4</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 1 0</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="base_mount" id="j1_parent_rel" type="PARENT" />
<ComponentRelationship idRef="j2" id="j1_child_rel" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j1_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j1_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j1_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j1_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j1_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j1_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j1_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j1_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j1_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j1_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j1_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j1_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j1_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j1_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
<Rotary id="j2">
<Configuration>
<SolidModel id="j2_model" coordinateSystemIdRef="j1_coord" solidModelIdRef="model_3d" itemRef="C-2003904" mediaType="STEP"/>
<Motion id="j2_motion" coordinateSystemIdRef="j1_coord" type="REVOLUTE" actuation="DIRECT" parentIdRef="j1">
<Transformation>
<Translation>0 128.90 -262.90</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 0 1</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="j1" id="j2_parent_rel" type="PARENT" />
<ComponentRelationship idRef="j3" id="j2_child_rel" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j2_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j2_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j2_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j2_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j2_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j2_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j2_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j2_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j2_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j2_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j2_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j2_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j2_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j2_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
<Rotary id="j3">
<Configuration>
<SolidModel id="j3_model" coordinateSystemIdRef="j2_coord" solidModelIdRef="model_3d" itemRef="C-2003905" mediaType="STEP"/>
<Motion id="j3_motion" coordinateSystemIdRef="j2_coord" type="REVOLUTE" actuation="DIRECT" parentIdRef="j2">
<Transformation>
<Translation>0 862.00 219.70</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 0 1</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="j2" id="j3_parent_rel" type="PARENT" />
<ComponentRelationship idRef="j4" id="j3_child_rel" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j3_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j3_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j3_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j3_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j3_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j3_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j3_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j3_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j3_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j3_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j3_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j3_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j3_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j3_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
<Rotary id="j4">
<Configuration>
<SolidModel id="j4_model" coordinateSystemIdRef="j3_coord" solidModelIdRef="model_3d" itemRef="C-2003906" mediaType="STEP"/>
<Motion id="j4_motion" coordinateSystemIdRef="j3_coord" type="REVOLUTE" actuation="DIRECT" parentIdRef="j3">
<Transformation>
<Translation>0 728.70 -157.80</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 0 1</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="j3" id="j4_parent_rel" type="PARENT" />
<ComponentRelationship idRef="j5" id="j4_child_rel" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j4_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j4_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j4_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j4_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j4_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j4_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j4_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j4_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j4_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j4_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j4_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j4_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j4_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j4_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
<Rotary id="j5">
<Configuration>
<SolidModel id="j5_model" coordinateSystemIdRef="j4_coord" solidModelIdRef="model_3d" itemRef="C-2003907" mediaType="STEP"/>
<Motion id="j5_motion" coordinateSystemIdRef="j4_coord" type="REVOLUTE" actuation="DIRECT" parentIdRef="j4">
<Transformation>
<Translation>0 159.30 0</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 0 1</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="j4" id="j5_parent_rel" type="PARENT" />
<ComponentRelationship idRef="j6" id="j5_child_rel" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j5_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j5_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j5_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j5_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j5_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j5_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j5_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j5_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j5_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j5_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j5_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j5_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j5_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j5_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
<Rotary id="j6">
<Configuration>
<SolidModel id="j6_model" coordinateSystemIdRef="j5_coord" solidModelIdRef="model_3d" itemRef="C-2003908" mediaType="STEP"/>
<Motion id="j6_motion" coordinateSystemIdRef="j5_coord" type="REVOLUTE" actuation="DIRECT" parentIdRef="j5">
<Transformation>
<Translation>0 -227.30 159.30</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 1 0</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="j5" id="j6_parent_rel" type="PARENT" />
<ComponentRelationship idRef="j7" id="j6_child_rel" type="CHILD" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j6_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j6_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j6_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j6_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j6_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j6_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j6_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j6_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j6_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j6_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j6_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j6_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j6_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j6_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
<Rotary id="j7">
<Configuration>
<SolidModel id="j7_model" coordinateSystemIdRef="j6_coord" solidModelIdRef="model_3d" itemRef="C-2007588" mediaType="STEP"/>
<Motion id="j7_motion" coordinateSystemIdRef="j6_coord" type="REVOLUTE" actuation="DIRECT" parentIdRef="j6">
<Transformation>
<Translation>0 0 0</Translation>
<Rotation>0 0 0</Rotation>
</Transformation>
<Axis>0 0 1</Axis>
</Motion>
<Relationships>
<ComponentRelationship idRef="j6" id="j7_parent_rel" type="PARENT" />
</Relationships>
</Configuration>
<DataItems>
<DataItem id="j7_angle_actual" type="ANGLE" category="SAMPLE" subType="ACTUAL" units="DEGREE"/>
<DataItem id="j7_angle_targ" type="ANGLE" category="SAMPLE" subType="COMMANDED" units="DEGREE"/>
<DataItem id="j7_velocity_actual" type="VELOCITY" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j7_velocity_targ" type="VELOCITY" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND"/>
<DataItem id="j7_accel_actual" type="ACCELERATION" subType="ACTUAL" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j7_accel_targ" type="ACCELERATION" subType="COMMANDED" category="SAMPLE" units="DEGREE/SECOND^2"/>
<DataItem id="j7_temp" type="TEMPERATURE" category="SAMPLE" units="CELSIUS"/>
<DataItem id="j7_target_torque" type="TORQUE" category="SAMPLE" subType="COMMANDED" units="NEWTON_METER"/>
<DataItem id="j7_target_current" type="AMPERAGE_DC" category="SAMPLE" subType="COMMANDED" units="AMPERE"/>
<DataItem id="j7_actual_current" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j7_actual_current_window" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j7_joint_control_output" type="AMPERAGE_DC" category="SAMPLE" subType="ACTUAL" units="AMPERE"/>
<DataItem id="j7_voltage" type="VOLTAGE_DC" category="SAMPLE" subType="ACTUAL" units="VOLT"/>
<DataItem id="j7_mode" type="SENSOR_STATE" subType="ENUMERATED" category="EVENT"/>
</DataItems>
</Rotary>
</Components>
</Axes>
</Components>
</Device>
</Devices>
</MTConnectDevices> |
Beta Was this translation helpful? Give feedback.
-
Im following the demo.mtconnect.org now, it is making sense. I go back to the question of: Who is responsible for the forward kinematics calculations in a graphical digital twin use case? Does MTConnect assume that a client application has the capability to do forward kinematics calcs? (client application gets joint angles via dataItems and static relationship data via configurations and calculates its own forward kin)? [edit: in this case; why dont we just make dh parameters a configuration element in MTC instead of breaking it down across multiple links/structures] ...or does MTConnect assume that a client app IS NOT capable of forward kin? (ie client app "simply" gets transform and orientation for each solid model component via position/orientation dataitems after the adapter has done the forward kin)? |
Beta Was this translation helpful? Give feedback.
-
The model is taken from the ROS urdf file format. We considered using a translation matrix, but it was thought this was simpler. Not sure if we should support something more robust. Regardless. We are assuming the applications compute the forward kinematics using the model documentation. The machine tools are simpler, but the same principles apply. A robot should be representable and computable using the same methodology. The joints of a robot are rotary axes named J1...Jn instead of A, B, C, ... The parent-child relationship should also allow for the information on the connection to be associated correctly. We reviewed dh parameters, and though they are used in robotics, they are not used in machine tools and other devices and are much harder to understand for people who are not in the robotics world. We could support translation matrix (better) or dh (alternative) in the future. This is something to discuss in the robotics WG. |
Beta Was this translation helpful? Give feedback.
-
I am trying to write a device model for a Universal Robot, which uses 'pose' format as position in the format
[x, y, z, rx, ry, rz]
.I see there is sample
POSITION_CARTESIAN
, but no sample type for rotation.There is separate
TRANSLATION
andROTATION
events.I would prefer not to split up the translation and rotation components, but I want to stay 'MTConnect-compliant'. What is the MTConenct - canon way to model this?
Beta Was this translation helpful? Give feedback.
All reactions