movesj (Auto Mode)
This function moves the robot along a spline curve that connects the current joint position to the final joint position (last waypoint) through a list of waypoints in joint space. The input velocity/acceleration represent the maximum velocity/acceleration along the path; actual accel/decel are automatically distributed according to each waypoint segment.
Definition
DRFLEx.h within class CDRFLEx, public section (line 795)
bool movesj(float fTargetPos[MAX_SPLINE_POINT][NUM_JOINT],
unsigned char nPosCount,
float fTargetVel,
float fTargetAcc,
float fTargetTime = 0.f,
MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE) {
return _movesj(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
fTargetAcc, fTargetTime, eMoveMode);
};
Parameter
Parameter Name |
Data Type |
Default Value |
Description |
|---|---|---|---|
fTargetPos |
Float[MAX_SPLINE_POINT][6] |
Waypoint list (maximum 100 waypoints) |
|
nPosCount |
unsigned char |
Number of valid waypoints |
|
fTargetVel |
float / float[6] |
Velocity (scalar or per-joint) |
|
fTargetAcc |
float / float[6] |
Acceleration (scalar or per-joint) |
|
fTargetTime |
float |
0.f |
Reach time [sec] |
eMoveMode |
|
Refer to the Definition of Enumeration Type |
Note
When
fTargetTimeis specified, motion is processed based on the time, ignoringfTargetVelandfTargetAcc.When
eMoveModeisMOVE_MODE_RELATIVE, each waypoint in the list is defined relative to the previous waypoint (e.g., if the list is [q1, q2, …, q(n)],q1is relative to the start pose andq(n)is relative toq(n-1)).This function does not support online blending with previous/subsequent motions.
Return
Value |
Description |
|---|---|
0 |
Error |
1 |
Success |
Example
// CASE 1 : Absolute coordinate input (mode = MOVE_MODE_ABSOLUTE)
float jpos[4][6];
float jvel = 10;
float jacc = 10;
int jposNum = 4;
// q0
jpos[0][0]=0; jpos[0][1]=0; jpos[0][2]=-30; jpos[0][3]=0; jpos[0][4]=-30; jpos[0][5]=0;
// q1
jpos[1][0]=90; jpos[1][1]=0; jpos[1][2]=0; jpos[1][3]=0; jpos[1][4]=0; jpos[1][5]=0;
// q2
jpos[2][0]=0; jpos[2][1]=0; jpos[2][2]=-30; jpos[2][3]=0; jpos[2][4]=-30; jpos[2][5]=0;
// q3 (goal)
jpos[3][0]=0; jpos[3][1]=0; jpos[3][2]=0; jpos[3][3]=0; jpos[3][4]=0; jpos[3][5]=0;
drfl.movesj(jpos, jposNum, jvel, jacc);
// Moves the spline curve through absolute waypoints with max velocity 10(deg/s)
// and max acceleration 10(deg/s^2).
// CASE 2 : Relative angle input (mode = MOVE_MODE_RELATIVE)
float rpos[4][6];
jvel = 10; jacc = 10; jposNum = 4;
// Relative waypoints (each is relative to the previous)
rpos[0][0]=0; rpos[0][1]=0; rpos[0][2]=-30; rpos[0][3]=0; rpos[0][4]=-30; rpos[0][5]=0;
rpos[1][0]=90; rpos[1][1]=0; rpos[1][2]=0; rpos[1][3]=0; rpos[1][4]=0; rpos[1][5]=0;
rpos[2][0]=-90; rpos[2][1]=0; rpos[2][2]=-30; rpos[2][3]=0; rpos[2][4]=-30; rpos[2][5]=0;
rpos[3][0]=0; rpos[3][1]=0; rpos[3][2]=30; rpos[3][3]=0; rpos[3][4]=30; rpos[3][5]=0;
drfl.movesj(rpos, jposNum, jvel, jacc, 0, MOVE_MODE_RELATIVE);
This example first runs a spline in absolute joint coordinates and then repeats using relative waypoints, where each row is applied w.r.t. the preceding joint state. Use fTargetTime when you need a fixed-duration spline regardless of velocity/acceleration limits.