home *** CD-ROM | disk | FTP | other *** search
/ Between Heaven & Hell 2 / BetweenHeavenHell.cdr / 500 / 471 / rccl163 < prev    next >
Text File  |  1987-03-02  |  7KB  |  247 lines

  1. /*
  2.  * RCCL Version 1.0           Author :  Vincent Hayward
  3.  *                                      School of Electrical Engineering
  4.  *                                      Purdue University
  5.  *      Dir     : h
  6.  *      File    : rccl.h
  7.  *      Remarks : RCCL structure definitions, macros, and external entries
  8.  *      Usage   : made available to the user
  9.  */
  10.  
  11. #include <stdio.h>              /* included here for safety             */
  12. #include <math.h>               /* .................................... */
  13.  
  14. #define YES     1
  15. #define NO      0
  16. #define UNDEF   2
  17.  
  18. #define OK      -1              /* normal path segment termination code */
  19. #define LIMIT   -2              /* ran into a limit, arm stopped        */
  20. #define ONF     -3              /* terminated on force                  */
  21. #define OND     -4              /* terminated on differential motion    */
  22.  
  23. #define PIB2            1.57079632679489660     /* pi / 2               */
  24. #define PI              3.14159265358979320     /* pi                   */
  25. #define PIT2            6.28318530717958650     /* pi * 2               */
  26. #define RADTODEG        57.29577951308232100    /* 180 / pi             */
  27. #define DEGTORAD        0.01745329251994330     /* pi / 180             */
  28. #define SMALL           (1.e-5)                 /* considered as small  */
  29. #define EQ              1                       /* lhs = rhs            */
  30. #define TL              2                       /* tool =               */
  31.  
  32. #define malloc  malloc_l        /* .................................... */
  33. #define free    free_l
  34. #define realloc realloc_l       /* replace dynamic allocation entries   */
  35. #define calloc  calloc_l
  36. #define cfree   cfree_l         /* .................................... */
  37.  
  38. /*
  39.  * RCCL typedefs
  40.  */
  41.  
  42. typedef int bool;
  43.  
  44. typedef float real;
  45.  
  46. typedef int event;
  47.  
  48.  
  49. typedef struct vector {
  50.         real x, y, z;
  51. } VECT, *VECT_PTR;
  52.  
  53. typedef int(* TRFN)();
  54.  
  55. typedef struct transform {
  56.         char *name;
  57.         TRFN fn;
  58.         VECT n, o, a, p;
  59.         int timeval;
  60. } TRSF, *TRSF_PTR;
  61.  
  62. typedef struct jns {
  63.         char *conf;
  64.         real th1, th2, th3, th4, th5, th6;
  65. } JNTS, *JNTS_PTR;
  66.  
  67. typedef struct posit {
  68.         char *name;
  69.         int code;
  70.         real scal;
  71.         event end;
  72. } POS, *POS_PTR;
  73.  
  74. typedef struct force {
  75.         VECT f, m;
  76. } FORCE, *FORCE_PTR;
  77.  
  78. typedef struct diff {
  79.         VECT t, r;
  80. } DIFF, *DIFF_PTR;
  81.  
  82.  
  83. /*
  84.  * RCCL functions
  85.  */
  86.  
  87. extern POS_PTR  makeposition();
  88.  
  89. extern TRSF_PTR newtrans(),
  90.         gentr_rot(),
  91.         gentr_eul(),
  92.         gentr_rpy(),
  93.         gentr_pao(),
  94.         gentr_trsl(),
  95.         assigntr(),
  96.         taketrsl(),
  97.         takerot(),
  98.         trmult(),
  99.         trmultinp(),
  100.         trmultinv(),
  101.         invert(),
  102.         invertinp(),
  103.         trsl(),
  104.         vao(),
  105.         rot(),
  106.         eul(),
  107.         rpy(),
  108.         trslm(),
  109.         vaom(),
  110.         rotm(),
  111.         eulm(),
  112.         rpym(),
  113.         df_to_tr();
  114.  
  115. extern DIFF_PTR assigndiff(),
  116.         tr_to_df(),
  117.         difftr();
  118.  
  119. extern FORCE_PTR assignforce(),
  120.          forcetr();
  121.  
  122. extern VECT_PTR assignvect(),
  123.         cross(),
  124.         unit();
  125.  
  126. extern real     dot();
  127.  
  128. extern int      const(),
  129.         hold(),
  130.         varb(),
  131.         optimize(),
  132.         printd(),
  133.         printm(),
  134.         freepos(),
  135.         startup(),
  136.         suspendfg(),
  137.         giveup(),
  138.         release(),
  139.         setmod(),
  140.         setime(),
  141.         setvel(),
  142.         evalfn(),
  143.         setconf(),
  144.         update(),
  145.         sample(),
  146.         massis(),
  147.         limit(),
  148.         comply(),
  149.         lock(),
  150.         distance(),
  151.         move(),
  152.         stop(),
  153.         noatoeul(),
  154.         noatorpy(),
  155.         printr(),
  156.         printrn(),
  157.         printe(),
  158.         printy(),
  159.         teach();
  160.  
  161. /*
  162.  * variables
  163.  */
  164.  
  165. extern JNTS_PTR j6,                     /* current joint range values   */
  166.         jd;                     /* current joint increments     */
  167.  
  168. extern TRSF_PTR t6,                     /* current T6                   */
  169.         here,                   /* equals T6 each end of segment*/
  170.         rest,                   /* T6 park position             */
  171.         unitr;                  /* unit transform               */
  172.  
  173. extern VECT_PTR xunit,                  /* X unit vector                */
  174.         yunit,                  /* Y unit vector                */
  175.         zunit;                  /* Z unit vector                */
  176.  
  177. extern  POS_PTR lastpos,                /* last evaluated position      */
  178.         goalpos,                /* current evaluated position   */
  179.         there,                  /* such as t6 = here            */
  180.         park;                   /* such as t6 = rest            */
  181.  
  182. extern event    completed;              /* queue empty                  */
  183.  
  184. extern  FILE    *fpi;                   /* info file pointer            */
  185.  
  186. extern  bool    prints_out,             /* info prints switch           */
  187.         force_ctl;              /* force control switch         */
  188.  
  189. extern  int     fddb;                   /* data base file descriptor    */
  190.  
  191. extern  int     rtime,                  /* current time since reset     */
  192.         timeincrement,          /* current sample period        */
  193.         requestnb,              /* number of requests in queue  */
  194.         nextmove,               /* motion interruption flag     */
  195.         terminate;              /* in rtc                       */
  196.  
  197. extern real     pi_m,                   /* math constants               */
  198.         pib2_m,
  199.         pit2_m,
  200.         dgtord_m,
  201.         rdtodg_m;
  202.  
  203. extern short    hdpos;
  204.  
  205. #define waitas(predicate)       {while(!(predicate)) suspendfg();}
  206.  
  207. #define waitfor(event)          {++(event);\
  208.                 while(event > 0) suspendfg();}
  209.  
  210.  
  211. #define Assigntr        (void)assigntr
  212. #define Taketrsl        (void)taketrsl
  213. #define Takerot         (void)takerot
  214. #define Trmult          (void)trmult
  215. #define Trmultinp       (void)trmultinp
  216. #define Trmultinv       (void)trmultinv
  217. #define Invert          (void)invert
  218. #define Invertinp       (void)invertinp
  219. #define Trsl            (void)trsl
  220. #define Vao             (void)vao
  221. #define Rot             (void)rot
  222. #define Eul             (void)eul
  223. #define Rpy             (void)rpy
  224. #define Trslm           (void)trslm
  225. #define Vaom            (void)vaom
  226. #define Rotm            (void)rotm
  227. #define Eulm            (void)eulm
  228. #define Rpym            (void)rpym
  229.  
  230. #define Assigndiff      (void)assigndiff
  231. #define Df_to_tr        (void)df_to_tr
  232. #define Tr_to_df        (void)tr_to_df
  233. #define Assignforce     (void)assignforce
  234. #define Forcetr         (void)forcetr
  235. #define Difftr          (void)difftr
  236.  
  237. #define Assignvect      (void)assignvect
  238. #define Cross           (void)cross
  239. #define Unit            (void)unit
  240.  
  241. #define movecart(p, ta, ts)     {setmod('c'); setime(ta, ts); move(p);}
  242. #define movejnts(p, ta, ts)     {setmod('j'); setime(ta, ts); move(p);}
  243. #define moveconf(p, ta, ts, cf)  {setconf(cf); setmod('j'); setime(ta, ts); move
  244.  
  245. #define freetrans(t)            {free((char *)t); t = NULL;}
  246. #define freeposition(p)         {freepos(p); p = NULL;}
  247.