UnderAutomation
질문이요?

[email protected]

문의하기
UnderAutomation
⌘Q
이 페이지는 영어로만 제공됩니다.

Motion planner overview

Create smooth robot trajectories offline, with velocity, acceleration and jerk limits, using FANUC motion instructions (J, L, C, FINE, CNT, CR).

  • Quick start
  • Try it in the Showcase app
  • Main concepts
  • What do you want to do?
  • Units and conventions
  • API reference

The Motion module creates smooth robot trajectories that respect velocity, acceleration and jerk limits. It works offline, without robot connection, and its trajectories can be sent with Stream Motion, used in a simulation, or checked before use.

Motions are described as in a TP program: joint (J), linear (L) and circular (C) motions, with a speed and a FINE, CNT or CR termination. The module also creates splines through points, geometric shapes, and trajectories from your own positions.

The planner is in the UnderAutomation.Robotics.Motion namespace. This namespace is the same in all UnderAutomation robot SDKs, so the same code can plan trajectories for other robot brands. The FanucMotion class of UnderAutomation.Fanuc.Motion converts FANUC positions, FINE, CNT and CR terminations and I/O to the types of the planner.

Quick start

new double[] { 1125, 1125, 1687, 2530, 1265, 2530 });
var cartesianLimits = new CartesianLimits(500, 2000, 10000, 90, 360, 1800);
var planner = new MotionPlanner(jointLimits, cartesianLimits);
// Joint motions, as J instructions of a TP program
var home = new JointValues(0, 0, 0, 0, -90, 0);
var pick = new JointValues(30, 20, -10, 0, -70, 30);
Trajectory trajectory = planner.CreateJointPath(home)
.MoveJoint(pick, 50, FanucMotion.Cnt(100)) // 50% speed, CNT100
.MoveJoint(home, 50, FanucMotion.Fine())
.Build();
Console.WriteLine($"Duration: {trajectory.Duration:0.000} s");
// Position at any time, or one position per communication cycle
JointValues middle = trajectory.GetJoints(trajectory.Duration / 2);
JointValues[] samples = trajectory.SampleJoints(0.008);
// FANUC joint position, when needed
JointsPosition fanucMiddle = FanucMotion.ToJointsPosition(middle);
// Velocity, acceleration and jerk of each axis, computed as the robot does
TrajectoryReport report = trajectory.Check(jointLimits, 0.008, false);
Console.WriteLine(report.IsValid);
}
}
Click to see the full code
Joint positions of this trajectory. With CNT100, the robot passes near pick without stopping. With FINE, it stops at home.Joint positions of this trajectory. With CNT100, the robot passes near pick without stopping. With FINE, it stops at home.
Joint positions of this trajectory. With CNT100, the robot passes near pick without stopping. With FINE, it stops at home.

Try it in the Showcase app

The Showcase demo application (Windows, WinForms) has a Stream Motion page with two buttons that build trajectories with the motion planner and send them to the robot with Stream Motion. Download it from the download page.

  • Joint demo uses a JointPathBuilder: J1 moves to +amplitude, then to -amplitude with a Cnt termination between the two moves, then back to the start with Fine.
  • Cartesian demo uses a CartesianPathBuilder: a horizontal circle of the given radius, starting and ending at the current position.

Change the amplitude, the radius or the speed and send the demo again: the duration of the resulting trajectory is shown in the log, and the joint and Cartesian positions update in real time while the robot moves.

Stream Motion page of the Showcase demo application, with the joint and Cartesian demo motions

The C# source of this page is in the StreamMotionControl.cs file of the Fanuc.NET repository.

Main concepts

ClassRole
JointLimitsVelocity, acceleration and jerk of each axis (9 axes). Read them from the robot with StreamMotion.ReadLimits()
CartesianLimitsLinear and angular velocity, acceleration and jerk, for Cartesian motions. You choose them
MotionPlannerCreates joint and Cartesian paths with the limits, and optional tool and user frames
JointPathBuilder, CartesianPathBuilderChain motions, waits and I/O, then Build() the trajectory
TrajectoryResult: position at any time, samples at a fixed period, I/O events, limit checks
JointValues, CartesianPoseJoint and Cartesian positions of the planner. A CartesianPose has X, Y, Z, an Orientation and optional external axes
FanucMotionConversions with JointsPosition and XYZWPRPosition, FINE, CNT and CR terminations, I/O signals, FANUC positions of a trajectory

All motions use jerk limited profiles: the acceleration changes progressively, which gives smooth motions and avoids the jerk alarms of the robot. 100% speed means the velocity limits, and the acceleration percentage (ACC) scales the acceleration and the jerk.

Velocity of J1 for the same joint motion. The speed percentage limits the velocity, ACC changes the slopes.Velocity of J1 for the same joint motion. The speed percentage limits the velocity, ACC changes the slopes.
Velocity of J1 for the same joint motion. The speed percentage limits the velocity, ACC changes the slopes.

What do you want to do?

NeedPage
Move to positions with J, L, C motions, FINE, CNT, CRJoint & Cartesian motions
Pass through a list of points, draw a circle, a rectangle or a helixSplines & shapes
Use positions computed by your application, check or slow down a trajectoryTrajectories from points
Convert orientations and positions between framesFrames & orientations

Units and conventions

  • Joint positions in degrees (mm for linear axes), Cartesian positions in mm, angles in degrees.
  • Velocities per second, accelerations per second squared, jerks per second cubed.
  • The W, P, R angles of FANUC use the fixed XYZ convention: CartesianPose.FromEuler(x, y, z, w, p, r, EulerConvention.FixedXYZ) gives the same pose as FanucMotion.ToCartesianPose(new XYZWPRPosition(x, y, z, w, p, r)).
  • FanucMotion.SampleCartesian() gives FANUC positions whose W, P, R angles stay continuous: an angle can go beyond 180 degrees instead of jumping to -180.

API reference


Universal Robots, Fanuc, Yaskawa, ABB 또는 Staubli 로봇을 .NET, Python, LabVIEW 또는 Matlab 애플리케이션에 쉽게 통합

UnderAutomation
문의하기Legal

© All rights reserved.