Console.WriteLine("📜 Motion: Path 3D Rendering");
try
{
const string xLabel = "X-Axis";
const string yLabel = "Y-Axis";
const string zLabel = "Z-Axis";
Axis xAxis = controller.
AxisGet(Constants.AXIS_0_INDEX);
Axis yAxis = controller.
AxisGet(Constants.AXIS_1_INDEX);
Axis zAxis = controller.
AxisGet(Constants.AXIS_2_INDEX);
Axis[] axes = [xAxis, yAxis, zAxis];
jointsMultiAxis.
AxesAdd(axes, axes.Length);
const string modelName = "RSI_XYZ";
const double scaling = 1.0;
const double offset = 0.0;
LinearModelBuilder builder = new(modelName);
builder.UnitsSet(LinearUnits.Millimeters);
builder.JointAdd(new LinearJointMapping(0, CartesianAxis.X) { ExpectedLabel = xLabel, Scaling = scaling, Offset = offset });
builder.JointAdd(new LinearJointMapping(1, CartesianAxis.Y) { ExpectedLabel = yLabel, Scaling = scaling, Offset = offset });
builder.JointAdd(new LinearJointMapping(2, CartesianAxis.Z) { ExpectedLabel = zLabel, Scaling = scaling, Offset = offset });
robot.PathAccelerationSet(100);
robot.PathVelocitySet(50);
robot.PathProgrammingModeSet(PathMode.Absolute);
robot.PathLine(target: new Pose(1, 1, 1));
robot.PathArc(
target: new Pose(0, 2, 1),
center: new Vector3d(0, 1, 1),
direction: RotationDirection.Clockwise);
robot.PathProcessLoadedMoves();
Console.WriteLine("Retrieving 3D path points for rendering:");
const ulong frameCount = 500;
ulong startFrame = 0;
int totalPointCount = 0;
ulong retrievedFrames;
do
{
RapidVectorRobotPosition positions = robot.PathPlannedPositionsGet(startFrame, frameCount);
retrievedFrames = positions.Size();
foreach (RobotPosition position in positions.ToArray())
{
Vector3d spatial = position.Pose.Position;
if (totalPointCount < 4)
{
Console.WriteLine($"Point {totalPointCount}: X={spatial.X:F2}, Y={spatial.Y:F2}, Z={spatial.Z:F2}");
}
totalPointCount++;
}
startFrame += retrievedFrames;
}
while (retrievedFrames == frameCount);
Console.WriteLine($"Total 3D points retrieved: {totalPointCount}");
Robot.RobotDelete(controller, robot);
}
finally
{
}
static void ConfigurePhantomAxis(Axis phantomAxis)
Configures a phantom axis on the controller.
static void CheckErrors(RapidCodeObject rsiObject)
Checks for errors in the given RapidCodeObject and throws an exception if any non-warning errors are ...
Helpers class provides static methods for common tasks in RMP applications.
void UserLabelSet(const char *const userLabel)
Set the axis User defined Label.
Represents a single axis of motion control. This class provides an interface for commanding motion,...
Axis * AxisGet(int32_t axisNumber)
AxisGet returns a pointer to an Axis object and initializes its internals.
static constexpr int32_t AxisFrameBufferSizeDefault
The default value of the AxisFrameBufferSize, also the minimum allowable value.
static MotionController * Get()
Get an already running RMP EtherCAT controller.
void Delete(void)
Delete the MotionController and all its objects.
MultiAxis * MultiAxisGet(int32_t motionSupervisorNumber)
MultiAxisGet returns a pointer to a MultiAxis object and initializes its internals.
Represents the RMP soft motion controller. This class provides an interface to general controller con...
void AxesAdd(Axis **axes, int32_t axisCount)
Represents multiple axes of motion control, allows you to map two or more Axis objects together for e...