home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 500 / 470 / rccl030 < prev    next >
Text File  |  1987-03-02  |  5KB  |  215 lines

  1. /*
  2.  * RCCL Version 1.0           Author :  Vincent Hayward
  3.  *                                      School of Electrical Engineering
  4.  *                                      Purdue University
  5.  *      Dir     : src
  6.  *      File    : other.c
  7.  *      Remarks : The functions here are called by setpoint to deal with
  8.  *                set of joint values or drive parameters.
  9.  *      Usage   : part of the library
  10.  */
  11.  
  12. #include "../h/rccl.h"
  13. #include "../h/manip.h"
  14.  
  15. /*
  16.  * perform joint structure value copy
  17.  */
  18.  
  19. assignjs_n(d, s) /*::*/
  20. register JNTS_PTR d, s;
  21. {
  22.     d->th1 = s->th1;
  23.     d->th2 = s->th2;
  24.     d->th3 = s->th3;
  25.     d->th4 = s->th4;
  26.     d->th5 = s->th5;
  27.     d->th6 = s->th6;
  28. }
  29.  
  30. /*
  31.  * perform joint structure value difference
  32.  */
  33.  
  34. diffjnts_n(d, x, y) /*::*/
  35. register JNTS_PTR d, x, y;
  36. {
  37.     d->th1 = x->th1 - y->th1;
  38.     d->th2 = x->th2 - y->th2;
  39.     d->th3 = x->th3 - y->th3;
  40.     d->th4 = x->th4 - y->th4;
  41.     d->th5 = x->th5 - y->th5;
  42.     d->th6 = x->th6 - y->th6;
  43. }
  44.  
  45. /*
  46.  * perform joint structure value first order polynomial y = a * x + b
  47.  */
  48.  
  49. fojnts_n(y, a, b, x)      /*::*/
  50. register JNTS_PTR y, a, b;
  51. real x;
  52. {
  53.     y->th1 = a->th1 * x + b->th1;
  54.     y->th2 = a->th2 * x + b->th2;
  55.     y->th3 = a->th3 * x + b->th3;
  56.     y->th4 = a->th4 * x + b->th4;
  57.     y->th5 = a->th5 * x + b->th5;
  58.     y->th6 = a->th6 * x + b->th6;
  59. }
  60.  
  61.  
  62. /*
  63.  * perform joint structure value fast times -2
  64.  */
  65.  
  66. t2jnts_n(y, x)  /*::*/
  67. register JNTS_PTR y, x;
  68. {
  69.     y->th1 = - (x->th1 + x->th1);
  70.     y->th2 = - (x->th2 + x->th2);
  71.     y->th3 = - (x->th3 + x->th3);
  72.     y->th4 = - (x->th4 + x->th4);
  73.     y->th5 = - (x->th5 + x->th5);
  74.     y->th6 = - (x->th6 + x->th6);
  75. }
  76.  
  77.  
  78. /*
  79.  * straight part j mode polynomial adjustment in comply mode
  80.  */
  81.  
  82. focpyc_n(jt, jf, x, jo, cpy)  /*::*/
  83. register JNTS_PTR jt, jf;
  84. real x;
  85. register JNTS_PTR jo;
  86. int cpy;
  87. {
  88.     if (cpy & SELJ1) {
  89.         jt->th1 = jo->th1 - jf->th1 * x;
  90.     }
  91.     if (cpy & SELJ2) {
  92.         jt->th2 = jo->th2 - jf->th2 * x;
  93.     }
  94.     if (cpy & SELJ3) {
  95.         jt->th3 = jo->th3 - jf->th3 * x;
  96.     }
  97.     if (cpy & SELJ4) {
  98.         jt->th4 = jo->th4 - jf->th4 * x;
  99.     }
  100.     if (cpy & SELJ5) {
  101.         jt->th5 = jo->th5 - jf->th5 * x;
  102.     }
  103.     if (cpy & SELJ6) {
  104.         jt->th6 = jo->th6 - jf->th6 * x;
  105.     }
  106. }
  107.  
  108.  
  109. /*
  110.  * quartic j mode transition
  111.  */
  112.  
  113. polyjnts_n(r, c1, c2, c3, x, y) /*::*/
  114. register JNTS_PTR r, c1, c2, c3;
  115. real x, y;
  116. {
  117.     r->th1 = (c1->th1 * x + c2->th1) * y + c3->th1;
  118.     r->th2 = (c1->th2 * x + c2->th2) * y + c3->th2;
  119.     r->th3 = (c1->th3 * x + c2->th3) * y + c3->th3;
  120.     r->th4 = (c1->th4 * x + c2->th4) * y + c3->th4;
  121.     r->th5 = (c1->th5 * x + c2->th5) * y + c3->th5;
  122.     r->th6 = (c1->th6 * x + c2->th6) * y + c3->th6;
  123. }
  124.  
  125.  
  126. /*
  127.  * transitiom part j mode polynomial adjustment in comply mode
  128.  */
  129.  
  130. polycpyc_n(jt, jf, jg, x, y, jo, cpy) /*::*/
  131. register JNTS_PTR jt, jf, jg;
  132. real x, y;
  133. JNTS_PTR jo;
  134. int cpy;
  135. {
  136.     if (cpy & SELJ1) {
  137.         jt->th1 = jo->th1 - (jf->th1 * x + jg->th1) * y;
  138.     }
  139.     if (cpy & SELJ2) {
  140.         jt->th2 = jo->th2 - (jf->th2 * x + jg->th2) * y;
  141.     }
  142.     if (cpy & SELJ3) {
  143.         jt->th3 = jo->th3 - (jf->th3 * x + jg->th3) * y;
  144.     }
  145.     if (cpy & SELJ4) {
  146.         jt->th4 = jo->th4 - (jf->th4 * x + jg->th4) * y;
  147.     }
  148.     if (cpy & SELJ5) {
  149.         jt->th5 = jo->th5 - (jf->th5 * x + jg->th5) * y;
  150.     }
  151.     if (cpy & SELJ6) {
  152.         jt->th6 = jo->th6 - (jf->th6 * x + jg->th6) * y;
  153.     }
  154. }
  155.  
  156.  
  157. /*
  158.  * first order polynomial for drive parameters  y = a * x + b (b can be NULL)
  159.  */
  160.  
  161. fopar_n(y, a, b, x) /*::*/
  162. register DRVP_PTR y, a, b;
  163. real x;
  164. {
  165.     if (b == (DRVP_PTR)NULL) {
  166.         y->dx = a->dx * x;
  167.         y->dy = a->dy * x;
  168.         y->dz = a->dz * x;
  169.         y->dphi = a->dphi * x;
  170.         y->dthe = a->dthe * x;
  171.     }
  172.     else {
  173.         y->dx = a->dx * x + b->dx;
  174.         y->dy = a->dy * x + b->dy;
  175.         y->dz = a->dz * x + b->dz;
  176.         y->dphi = a->dphi * x + b->dphi;
  177.         y->dthe = a->dthe * x + b->dthe;
  178.     }
  179.     y->dpsi = a->dpsi;
  180. }
  181.  
  182.  
  183. /*
  184.  * perform fast drive parameters times -2
  185.  */
  186.  
  187. t2par_n(y, x) /*::*/
  188. register DRVP_PTR y, x;
  189. {
  190.     y->dx = - (x->dx + x->dx);
  191.     y->dy = - (x->dy + x->dy);
  192.     y->dz = - (x->dz + x->dz);
  193.     y->dphi = - (x->dphi + x->dphi);
  194.     y->dthe = - (x->dthe + x->dthe);
  195. }
  196.  
  197.  
  198. /*
  199.  * perform quartic transition of drive parameters
  200.  * plus a third order polynomial for velocity adjustment
  201.  */
  202.  
  203. polypar_n(r, c1, x, c2, y, c3, c4, z, c5, t) /*::*/
  204. register DRVP_PTR r, c1, c2, c3, c4, c5;
  205. real x, y, z, t;
  206. {
  207.     r->dx = (c1->dx * x + c2->dx) * y + c3->dx + c4->dx * z + c5->dx * t;
  208.     r->dy = (c1->dy * x + c2->dy) * y + c3->dy + c4->dy * z + c5->dy * t;
  209.     r->dz = (c1->dz * x + c2->dz) * y + c3->dz + c4->dz * z + c5->dz * t;
  210.     r->dphi = (c1->dphi * x + c2->dphi) * y + c3->dphi + c4->dphi * z
  211.                                + c5->dphi * t;
  212.     r->dthe = (c1->dthe * x + c2->dthe) * y + c3->dthe + c4->dthe * z
  213.                                + c5->dthe * t;
  214. }
  215.