Legacy Forum: Preserving Nearly 20 Years of Community History - A Time Capsule of Discussions, Memories, and Shared Experiences.

Inverse kinematic by Jacobian transpose

Bioloid robot kit from Korean company Robotis; CM5 controller block, AX12 servos..
3 postsPage 1 of 1
3 postsPage 1 of 1

Inverse kinematic by Jacobian transpose

Post by Mirko » Tue Oct 12, 2010 4:08 pm

Post by Mirko
Tue Oct 12, 2010 4:08 pm

Hi everybody!
I'm currently working (VERY slowly) on a project about biped balance control. My architecture is meant to work as follows:
- trajectory for each leg is planned on Cartesian space, and expressed as a matrix of via points
- the algorithm, written in C, calculates at each time interval the inverse kinematics by transposing the Jacobian matrix, multiplying it by a weighted error vector, and finally integrating the result (using Euler's method)
- a global vector containing the future robot stance is updated and commands are sent to the servos (at a much slower rate than that of the calculations)
- additionally, I plan to use Huv's pressure sensor to mesure the position of the ZMP, and use it to balance the biped, but this is not important for now.
In pseudo code:

Code: Select all
while ( time_counter < max )
{
   
   for (cycle=0; cycle < end_cycle; cycle++)
  {
     //present target position by linear spline interpolation
     x_d_dx = lin_spline(time_counter, via_points);
     e_dx =K*( x_dx - x_d_dx);
     qdot_dx = traspJac(e_dx, q_old_dx);
     q_dx = euler(qdot_dx, q_old_dx);
     q_old_dx = q_dx;

     x_dx = direct_kin(q_dx);
     
     //same for the left
    _delay_ms(DELTA);
   }

   //update the portion of the global stance vector corresponding to that leg
   update(RIGHT_LEG);
    //same for the left

  send_next_stance();
  time_counter++;
}


Everything works fine in some situations, (and the logic is tested on Matlab), but other commands lead to strange behaviours, which I believe are related to temporization (in fact I can't determine the frequency at which I'm integrating, because calculatioins are slower than _delay_ms() ), and above all on the tracking precision of the algorithm, since to obtain small errors you need larger gains K, but numerical stability limits the distance you can travel. And again, larger frequencies allow for larger gains, but you can't increase it as you like ( I'm assuming from the CM-5 schematic that F_CPU = 16 MHz).
Has anyone already tried something similar?
Thanks, and sorry for bothering you!
Hi everybody!
I'm currently working (VERY slowly) on a project about biped balance control. My architecture is meant to work as follows:
- trajectory for each leg is planned on Cartesian space, and expressed as a matrix of via points
- the algorithm, written in C, calculates at each time interval the inverse kinematics by transposing the Jacobian matrix, multiplying it by a weighted error vector, and finally integrating the result (using Euler's method)
- a global vector containing the future robot stance is updated and commands are sent to the servos (at a much slower rate than that of the calculations)
- additionally, I plan to use Huv's pressure sensor to mesure the position of the ZMP, and use it to balance the biped, but this is not important for now.
In pseudo code:

Code: Select all
while ( time_counter < max )
{
   
   for (cycle=0; cycle < end_cycle; cycle++)
  {
     //present target position by linear spline interpolation
     x_d_dx = lin_spline(time_counter, via_points);
     e_dx =K*( x_dx - x_d_dx);
     qdot_dx = traspJac(e_dx, q_old_dx);
     q_dx = euler(qdot_dx, q_old_dx);
     q_old_dx = q_dx;

     x_dx = direct_kin(q_dx);
     
     //same for the left
    _delay_ms(DELTA);
   }

   //update the portion of the global stance vector corresponding to that leg
   update(RIGHT_LEG);
    //same for the left

  send_next_stance();
  time_counter++;
}


Everything works fine in some situations, (and the logic is tested on Matlab), but other commands lead to strange behaviours, which I believe are related to temporization (in fact I can't determine the frequency at which I'm integrating, because calculatioins are slower than _delay_ms() ), and above all on the tracking precision of the algorithm, since to obtain small errors you need larger gains K, but numerical stability limits the distance you can travel. And again, larger frequencies allow for larger gains, but you can't increase it as you like ( I'm assuming from the CM-5 schematic that F_CPU = 16 MHz).
Has anyone already tried something similar?
Thanks, and sorry for bothering you!
Mirko
Robot Builder
Robot Builder
Posts: 7
Joined: Thu Jun 03, 2010 3:54 pm

Post by limor » Wed Dec 15, 2010 1:19 am

Post by limor
Wed Dec 15, 2010 1:19 am

Hi, how is your project progressing ?
We are doing something in the same line of thought.
More info will be posted on http://actuated.wordpress.com

ImageImage
ImageImage
ImageImage
Hi, how is your project progressing ?
We are doing something in the same line of thought.
More info will be posted on http://actuated.wordpress.com

ImageImage
ImageImage
ImageImage
limor
Savvy Roboteer
Savvy Roboteer
User avatar
Posts: 1845
Joined: Mon Oct 11, 2004 1:00 am
Location: London, UK

Post by Fraser » Fri Dec 17, 2010 10:52 pm

Post by Fraser
Fri Dec 17, 2010 10:52 pm

Nice rig Limor!
Nice rig Limor!
Fraser
Savvy Roboteer
Savvy Roboteer
Posts: 84
Joined: Tue Nov 30, 2010 2:16 pm


3 postsPage 1 of 1
3 postsPage 1 of 1