Operation of the CCD algorithm for inverse kinematics

Suppose I have a robotic arm with joints at points A, B, C, D in three-dimensional space. Let D be the final effector (the lowest child), and A the highest parent. Let T be an endpoint anywhere in space. The goal is for the final effector to reach the goal with minimal revs at the upper levels (by parents).

What I originally thought:

1) Turn lever C to the TCD angle. 2) Then turn lever B to the new TBD angle. 3) Then turn lever A at a new angle TAD.

But the final effector seems to point to the target after step 2. What am I doing wrong and how to fix it?

+1
source share
2 answers

Before I started using some more advanced approaches, I did it like this:

pe=desired new position;

for (i=0;i<number of actuators;i++)
 {
 // choose better direction
                   p=direct_kinematics(); d =|p-pe|; // actual step
 actuator(i)--;  p=direct_kinematics(); d0=|p-pe|; // previous step
 actuator(i)+=2; p=direct_kinematics(); d1=|p-pe|; // next step
 actuator(i)--;  dir=0; d0=d;
      if ((d0<d)&&(d0<d1)) dir=-1;
 else if ((d1<d)&&(d1<d0)) dir=+1;
 else continue;

 for (;;)
  {
  actuator(i)+=dir; p=direct_kinematics(); d =|p-pe|;
  if (d>d0) { actuator(i)-=dir; break; }
  if (actuator(i) on the edge limit) break;
  }

 }

[notes]

  • you can change it to the drive on / off position by some step instead of 1

    stop if the difference has crossed zero, then start with a smaller step to step == 1This will increase productivity, but for most applications it’s step=1enough, because the new position is usually next to the last.

  • remember this may get stuck in local min / max

    if the output is stuck (the position of the effector has not changed), then randomize the actuators and try again. The occurrence of this depends on the complexity of the kinematics and on the type of path you want to use.

  • if the levers move more from above and below

    i-for

  • CCD CCD

0

, ( , ). x ' y' - A, x '' y '' - . :

enter image description here

gamma_i - ( gamma_i = 1), alpha_i - . - . x ', y', x '', y '' - , - . .

f (x ', y', x_1, y_1, alpha_1) = 0 , A _1 B x_1, y_1. (, f , , , , f ).

, : p

0

All Articles