home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
500
/
471
/
rccl163
< prev
next >
Wrap
Text File
|
1987-03-02
|
7KB
|
247 lines
/*
* RCCL Version 1.0 Author : Vincent Hayward
* School of Electrical Engineering
* Purdue University
* Dir : h
* File : rccl.h
* Remarks : RCCL structure definitions, macros, and external entries
* Usage : made available to the user
*/
#include <stdio.h> /* included here for safety */
#include <math.h> /* .................................... */
#define YES 1
#define NO 0
#define UNDEF 2
#define OK -1 /* normal path segment termination code */
#define LIMIT -2 /* ran into a limit, arm stopped */
#define ONF -3 /* terminated on force */
#define OND -4 /* terminated on differential motion */
#define PIB2 1.57079632679489660 /* pi / 2 */
#define PI 3.14159265358979320 /* pi */
#define PIT2 6.28318530717958650 /* pi * 2 */
#define RADTODEG 57.29577951308232100 /* 180 / pi */
#define DEGTORAD 0.01745329251994330 /* pi / 180 */
#define SMALL (1.e-5) /* considered as small */
#define EQ 1 /* lhs = rhs */
#define TL 2 /* tool = */
#define malloc malloc_l /* .................................... */
#define free free_l
#define realloc realloc_l /* replace dynamic allocation entries */
#define calloc calloc_l
#define cfree cfree_l /* .................................... */
/*
* RCCL typedefs
*/
typedef int bool;
typedef float real;
typedef int event;
typedef struct vector {
real x, y, z;
} VECT, *VECT_PTR;
typedef int(* TRFN)();
typedef struct transform {
char *name;
TRFN fn;
VECT n, o, a, p;
int timeval;
} TRSF, *TRSF_PTR;
typedef struct jns {
char *conf;
real th1, th2, th3, th4, th5, th6;
} JNTS, *JNTS_PTR;
typedef struct posit {
char *name;
int code;
real scal;
event end;
} POS, *POS_PTR;
typedef struct force {
VECT f, m;
} FORCE, *FORCE_PTR;
typedef struct diff {
VECT t, r;
} DIFF, *DIFF_PTR;
/*
* RCCL functions
*/
extern POS_PTR makeposition();
extern TRSF_PTR newtrans(),
gentr_rot(),
gentr_eul(),
gentr_rpy(),
gentr_pao(),
gentr_trsl(),
assigntr(),
taketrsl(),
takerot(),
trmult(),
trmultinp(),
trmultinv(),
invert(),
invertinp(),
trsl(),
vao(),
rot(),
eul(),
rpy(),
trslm(),
vaom(),
rotm(),
eulm(),
rpym(),
df_to_tr();
extern DIFF_PTR assigndiff(),
tr_to_df(),
difftr();
extern FORCE_PTR assignforce(),
forcetr();
extern VECT_PTR assignvect(),
cross(),
unit();
extern real dot();
extern int const(),
hold(),
varb(),
optimize(),
printd(),
printm(),
freepos(),
startup(),
suspendfg(),
giveup(),
release(),
setmod(),
setime(),
setvel(),
evalfn(),
setconf(),
update(),
sample(),
massis(),
limit(),
comply(),
lock(),
distance(),
move(),
stop(),
noatoeul(),
noatorpy(),
printr(),
printrn(),
printe(),
printy(),
teach();
/*
* variables
*/
extern JNTS_PTR j6, /* current joint range values */
jd; /* current joint increments */
extern TRSF_PTR t6, /* current T6 */
here, /* equals T6 each end of segment*/
rest, /* T6 park position */
unitr; /* unit transform */
extern VECT_PTR xunit, /* X unit vector */
yunit, /* Y unit vector */
zunit; /* Z unit vector */
extern POS_PTR lastpos, /* last evaluated position */
goalpos, /* current evaluated position */
there, /* such as t6 = here */
park; /* such as t6 = rest */
extern event completed; /* queue empty */
extern FILE *fpi; /* info file pointer */
extern bool prints_out, /* info prints switch */
force_ctl; /* force control switch */
extern int fddb; /* data base file descriptor */
extern int rtime, /* current time since reset */
timeincrement, /* current sample period */
requestnb, /* number of requests in queue */
nextmove, /* motion interruption flag */
terminate; /* in rtc */
extern real pi_m, /* math constants */
pib2_m,
pit2_m,
dgtord_m,
rdtodg_m;
extern short hdpos;
#define waitas(predicate) {while(!(predicate)) suspendfg();}
#define waitfor(event) {++(event);\
while(event > 0) suspendfg();}
#define Assigntr (void)assigntr
#define Taketrsl (void)taketrsl
#define Takerot (void)takerot
#define Trmult (void)trmult
#define Trmultinp (void)trmultinp
#define Trmultinv (void)trmultinv
#define Invert (void)invert
#define Invertinp (void)invertinp
#define Trsl (void)trsl
#define Vao (void)vao
#define Rot (void)rot
#define Eul (void)eul
#define Rpy (void)rpy
#define Trslm (void)trslm
#define Vaom (void)vaom
#define Rotm (void)rotm
#define Eulm (void)eulm
#define Rpym (void)rpym
#define Assigndiff (void)assigndiff
#define Df_to_tr (void)df_to_tr
#define Tr_to_df (void)tr_to_df
#define Assignforce (void)assignforce
#define Forcetr (void)forcetr
#define Difftr (void)difftr
#define Assignvect (void)assignvect
#define Cross (void)cross
#define Unit (void)unit
#define movecart(p, ta, ts) {setmod('c'); setime(ta, ts); move(p);}
#define movejnts(p, ta, ts) {setmod('j'); setime(ta, ts); move(p);}
#define moveconf(p, ta, ts, cf) {setconf(cf); setmod('j'); setime(ta, ts); move
#define freetrans(t) {free((char *)t); t = NULL;}
#define freeposition(p) {freepos(p); p = NULL;}