The Kinematic interface is not available on controller generations before YRC1000.
When converting between coordinate types using the KinematicsInterface, this enum specifies the conversion to use.
public enum KinematicConversions
{
JointAngleToCartesianPos, // Convert Joint Angles(in degrees) To Cartesian Position.
PulseToJointAngle, // Convert Pulse position To Joint Angles(in degrees).
JointAngleToPulse, // Convert Joint Angles(in degrees) To Pulse.
PulseToCartesianPos, // Convert Pulse position To Cartesian Position.
CartesianPosToJointAngle,
CartesianPosToPulse
};
Name | Description |
---|---|
ConvertPosition | Converts the position data to the specified type. |
ConvertPositionFromCartesian | Converts the position data from the specified cartesian type. |
Converts the position data to the specified type. Possible conversions are
JointAngleToCartesianPos, PulseToJointAngle, JointAngleToPulse, PulseToCartesianPos.
StatusInfo ConvertPosition(ControlGroupId grp, PositionData positionToConvert,
KinematicConversions conversionType, out PositionData convertedPosition);
grp
[in] The control group to convert the position for. See ControlGroupId.
positionToConvert
[in] The position data to convert. Position can be pulse or joint angle. See PositionData.
conversionType
[in] The type of conversion to perform. Available conversions for this function are JointAngleToCartesianPos, PulseToJointAngle, JointAngleToPulse, PulseToCartesianPos. See KinematicConversions.
convertedPosition
[out] The converted position data. See PositionData.
A StatusInfo object indicating if the operation was successful.
//`c` is a MotomanController object that has been created with ` YMConnect.OpenConnection`
status = c.Variables.RobotPositionVariable.Read(0, out RobotPositionVariableData data);
Console.WriteLine(status);
// get a position variable to convert.
Console.WriteLine("Starting position.\n******************");
Console.WriteLine(data);
PositionData positionToConvert = data.PositionData;
//Convert pulse to joint angle
status = c.Kinematics.ConvertPosition(ControlGroupId.R1, positionToConvert, KinematicConversions.PulseToJointAngle, out PositionData jointAnglePosition);
Console.WriteLine(status);
Console.WriteLine("\nPulse to joint angle.\n******************");
Console.WriteLine(jointAnglePosition);
//Convert joint angle to pulse
status = c.Kinematics.ConvertPosition(ControlGroupId.R1, jointAnglePosition, KinematicConversions.JointAngleToPulse, out PositionData pulsePosition);
Console.WriteLine(status);
Console.WriteLine("\nJoint angle to pulse.\n******************");
Console.WriteLine(pulsePosition);
//Convert Joint angle to cartesian
status = c.Kinematics.ConvertPosition(ControlGroupId.R1, jointAnglePosition, KinematicConversions.JointAngleToCartesianPos, out PositionData cartesianPosition);
Console.WriteLine(status);
Console.WriteLine("\nJoint angle to cartesian.\n******************");
Console.WriteLine(cartesianPosition);
Console.WriteLine(status);
//be sure to close `c` with `YMConnect.CloseConnection` when the application is done
Output
Starting position.
******************
Code (0): OK
Coordinate Type: Pulse
Tool Number: 0
Axes:
Axis S : 101707 pulses.
Axis L : -48901 pulses.
Axis U : -50003 pulses.
Axis R : 1954 pulses.
Axis B : -90211 pulses.
Axis T : 2769 pulses.
Axis E : 0 pulses.
Axis W : 0 pulses.
Pulse to joint angle.
******************
Code (0): OK
Coordinate Type: RobotCoordinate
Figure:
Front, Upper, Flip, S<180, L<180, U<180, R<180, B<180, T<180, E<180, W<180
Tool Number: 0
User Coordinate Number: 0
Axes:
Axis X : 70.8586 millimeters.
Axis Y : -37.6069 millimeters.
Axis Z : -35.1583 millimeters.
Axis Rx : 2.0145 degrees.
Axis Ry : -92.0295 degrees.
Axis Rz : 6.089 degrees.
Axis Re : 0 degrees.
Axis Rw : 0 degrees.
back to pulse.
******************
Code (0): OK
Coordinate Type: Pulse
Tool Number: 0
Axes:
Axis S : 101707 pulses.
Axis L : -48901 pulses.
Axis U : -50003 pulses.
Axis R : 1954 pulses.
Axis B : -90211 pulses.
Axis T : 2769 pulses.
Axis E : 0 pulses.
Axis W : 0 pulses.
Pulse to cartesian.
******************
Code (0): OK
Coordinate Type: RobotCoordinate
Figure:
Front, Upper, NoFlip, S<180, L<180, U<180, R<180, B<180, T<180, E<180, W<180
Tool Number: 0
User Coordinate Number: 0
Axes:
Axis X : 138.385 millimeters.
Axis Y : 387.986 millimeters.
Axis Z : 613.645 millimeters.
Axis Rx : 177.954 degrees.
Axis Ry : -0.2045 degrees.
Axis Rz : 76.8725 degrees.
Axis Re : 0 degrees.
Axis Rw : 0 degrees.
Joint angle to cartesian.
******************
Code (0): OK
Coordinate Type: RobotCoordinate
Figure:
Front, Upper, NoFlip, S<180, L<180, U<180, R<180, B<180, T<180, E<180, W<180
Tool Number: 0
User Coordinate Number: 0
Axes:
Axis X : 138.385 millimeters.
Axis Y : 387.986 millimeters.
Axis Z : 613.646 millimeters.
Axis Rx : 177.954 degrees.
Axis Ry : -0.2046 degrees.
Axis Rz : 76.8725 degrees.
Axis Re : 0 degrees.
Axis Rw : 0 degrees.
Converts the position data from the specified cartesian type.
Possible conversions are CartesianPosToJointAngle and CartesianPosToPulse.
StatusInfo ConvertPositionFromCartesian(ControlGroupId grp, PositionData positionToConvert,
KinematicConversions conversionType, KinematicType type, CoordinateArray prevAngle, out PositionData convertedPosition);
grp
[in] Group with position to convert. See ControlGroupId.
positionToConvert
[in] The position data to convert. Must be cartesian. See PositionData.
conversionType
[in] The type of conversion to perform. Available conversions for this function are CartesianPosToJointAngle and CartesianPosToPulse. See KinematicConversions.
type
[in] optional parameter that specifies how to solve inverse kinamatics.
Default: Calculate using parameter S2C430 value. 2:Delta, 1:Figure
Delta: Calculate by prevAngle. If this type is selected, prevAngle must be provided.
Figure: Calculate by the figure set in the position to convert.
See KinematicType.
prevAngle
[in] requred angle when conversions are done with with KinematicType Delta. Otherwise ignored.
convertedPosition
[out] The converted position data. See PositionData.
A StatusInfo object indicating if the operation was successful.
//`c` is a MotomanController object that has been created with ` YMConnect.OpenConnection`
// get a position variable to convert.
status = c.Variables.RobotPositionVariable.Read(0, out RobotPositionVariableData data);
Console.WriteLine(status);
Console.WriteLine("Starting position.\n******************");
Console.WriteLine(data);
PositionData positionToConvert = data.PositionData;
//Convert pulse to cartesian
status = c.Kinematics.ConvertPosition(ControlGroupId.R1, positionToConvert, KinematicConversions.PulseToCartesianPos, out PositionData convertedPosition);
Console.WriteLine(status);
Console.WriteLine("\nPulse to cartesian.\n * *****************");
Console.WriteLine(convertedPosition);
//Convert cartesian to pulse
status = c.Kinematics.ConvertPositionFromCartesian(ControlGroupId.R1, convertedPosition, KinematicConversions.CartesianPosToPulse, KinematicType.Default, [], out PositionData cartesianPosition);
Console.WriteLine(status);
Console.WriteLine("\nCartesian to pulse.\n * *****************");
Console.WriteLine(cartesianPosition);
//Convert cartesian to joint angle
status = c.Kinematics.ConvertPosition(ControlGroupId.R1, positionToConvert, KinematicConversions.CartesianPosToJointAngle, out PositionData jointPosition);
Console.WriteLine(status);
Console.WriteLine("\nCartesian to joint angle.\n * *****************");
Console.WriteLine(jointPosition);
//be sure to close `c` with `YMConnect.CloseConnection` when the application is done
Output
Starting position.
******************
Code (0): OK
Coordinate Type: Pulse
Tool Number: 0
Axes:
Axis S : 101707 pulses.
Axis L : -48901 pulses.
Axis U : -50003 pulses.
Axis R : 1954 pulses.
Axis B : -90211 pulses.
Axis T : 2769 pulses.
Axis E : 0 pulses.
Axis W : 0 pulses.
Pulse to cartesian.
******************
Code (0): OK
Coordinate Type: RobotCoordinate
Figure:
Front, Upper, NoFlip, S<180, L<180, U<180, R<180, B<180, T<180, E<180, W<180
Tool Number: 0
User Coordinate Number: 0
Axes:
Axis X : 138.385 millimeters.
Axis Y : 387.986 millimeters.
Axis Z : 613.645 millimeters.
Axis Rx : 177.954 degrees.
Axis Ry : -0.2045 degrees.
Axis Rz : 76.8725 degrees.
Axis Re : 0 degrees.
Axis Rw : 0 degrees.
Cartesian to pulse.
******************
Code (0): OK
Coordinate Type: Pulse
Tool Number: 0
Axes:
Axis S : 101707 pulses.
Axis L : -48901 pulses.
Axis U : -50003 pulses.
Axis R : 1954 pulses.
Axis B : -90211 pulses.
Axis T : 2769 pulses.
Axis E : 0 pulses.
Axis W : 0 pulses.
Cartesian to joint angle.
******************
Code (0): OK
Coordinate Type: RobotCoordinate
Figure:
Front, Upper, NoFlip, S<180, L<180, U<180, R<180, B<180, T<180, E<180, W<180
Tool Number: 0
User Coordinate Number: 0
Axes:
Axis X : 70.8585 millimeters.
Axis Y : -37.6069 millimeters.
Axis Z : -35.1583 millimeters.
Axis Rx : 2.0144 degrees.
Axis Ry : -92.0296 degrees.
Axis Rz : 6.0889 degrees.
Axis Re : 0 degrees.
Axis Rw : 0 degrees.