controller
robotStruct.h
浏览该文件的文档.
1 
11 #ifndef ROBOTSTRUCT_H_
12 #define ROBOTSTRUCT_H_
13 
14 /*---------------------------- Includes ------------------------------------*/
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18 
19 
20 
21 
22 #ifdef __cplusplus
23 namespace HYYRobotBase
24 {
25 extern "C" {
26 #endif
27 
28 
29 /*---------------------------- Defines -------------------------------------*/
30 #define ROBOT_MAX_NUM 10
31 #define ROBOT_MAX_DOF 10
32 #define MAX_CHAR_NUM 300
33 #define MAX_BSPLINE_NUM 200
34 #define ROBOT_DATA_NAME_LEN_MAX 10
35 
36 typedef unsigned char byte;
37 
38 
39 /*-------------------------------------------------------------------------*/
45 /*-------------------------------------------------------------------------*/
46 typedef enum{
47  _other=0,
49  _ur,
53 
54 /*-------------------------------------------------------------------------*/
60 /*-------------------------------------------------------------------------*/
61 typedef struct{
62  char* path;
67  int port;
68  int iscopy;
70 
71 /*-------------------------------------------------------------------------*/
77 /*-------------------------------------------------------------------------*/
78 typedef struct PayLoad{
79  double m;
80  double cm[3];
81  double I[3][3];
82  double I2[3][3];
84 
85 /*-------------------------------------------------------------------------*/
91 /*-------------------------------------------------------------------------*/
92 typedef struct robjoint{
93  double angle[ROBOT_MAX_DOF];
94  int dof;
96 
97 /*-------------------------------------------------------------------------*/
103 /*-------------------------------------------------------------------------*/
104 typedef struct robpose{
105  double xyz[3];
106  double kps[3];
108 
109 /*-------------------------------------------------------------------------*/
115 /*-------------------------------------------------------------------------*/
116 typedef struct speed{
117  double per[ROBOT_MAX_DOF];
118  int per_flag;
119  double tcp;
120  double orl;
121  int tcp_flag;
123  int dof;
125 
126 /*-------------------------------------------------------------------------*/
132 /*-------------------------------------------------------------------------*/
133 typedef struct zone{
135  double zone_size;
137 
138 /*-------------------------------------------------------------------------*/
144 /*-------------------------------------------------------------------------*/
145 typedef struct tool{
146  int robhold;
150 
151 /*-------------------------------------------------------------------------*/
157 /*-------------------------------------------------------------------------*/
158 typedef struct wobj{
159  int robhold;
160  int ufprog;
161  int ufmec;
165 
166 /*-------------------------------------------------------------------------*/
172 /*-------------------------------------------------------------------------*/
173 typedef struct{
174  double angle[ROBOT_MAX_DOF];
175  int dof;
176 }ROBJOINT;
177 
178 /*-------------------------------------------------------------------------*/
184 /*-------------------------------------------------------------------------*/
185 typedef struct{
186  double xyzkps[6];
187 }ROBPOSE;
188 
189 /*-------------------------------------------------------------------------*/
195 /*-------------------------------------------------------------------------*/
196 typedef struct{
197  double per[ROBOT_MAX_DOF];
198  int per_flag;
199  double tcp;
200  double orl;
201  int tcp_flag;
202 
203  int dof;
204 }SPEED;
205 
206 /*-------------------------------------------------------------------------*/
212 /*-------------------------------------------------------------------------*/
213 typedef struct{
215  double zone_size;
216 }ZONE;
217 
218 /*-------------------------------------------------------------------------*/
224 /*-------------------------------------------------------------------------*/
225 typedef struct{
226  int robhold;
227  double toolframe[6];
229 }TOOL;
230 
231 /*-------------------------------------------------------------------------*/
237 /*-------------------------------------------------------------------------*/
238 typedef struct{
239  int robhold;
240  int ufprog;
241  int ufmec;
242  double userframe[6];
243  double workframe[6];
244 }WOBJ;
245 
246 /*-------------------------------------------------------------------------*/
252 /*-------------------------------------------------------------------------*/
253 typedef enum robdatatype{
259  _wobj
261 
268 extern int getDataNum(robdatatype rdt);
269 
278 extern int getDataName(robdatatype rdt, int n, char* dataname);
279 
287 extern int getrobjoint(const char* J, robjoint* rjoint);
288 
296 extern int getrobpose(const char* P, robpose* rpose);
297 
305 extern int getspeed(const char* S, speed* sp);
306 
314 extern int getzone(const char* Z, zone* zo);
315 
323 extern int gettool(const char* T, tool* to);
324 
332 extern int getwobj(const char* W, wobj* wo);
333 
341 extern int writerobjoint(const char* J,robjoint* rjoint);
342 
350 extern int writerobpose(const char* P, robpose* rpose);
351 
359 extern int writespeed(const char* S, speed* sp);
360 
368 extern int writezone(const char* Z, zone* zo);
369 
377 extern int writetool(const char* T, tool* to);
378 
386 extern int writewobj(const char* W, wobj* wo);
387 
395 extern void init_robjoint(robjoint* rjoint, double* data, int dof);
396 
404 extern void init_robpose(robpose* rpose, double* xyz, double* rpy);
405 
414 extern void init_speed_joint(speed* sp, double* data, int dof, int flag);
415 
424 extern void init_speed_cartesian(speed* sp, double tcp, double orl, int flag);
425 
437 extern void init_speed(speed* sp, double* data, int dof, int per_flag, double tcp, double orl, int tcp_flag);
438 
446 extern void init_zone(zone* ze, double size, int flag);
447 
455 extern void init_tool(tool* tl, double* frame, int robhold, PayLoad* payload);
456 
467 extern void init_wobj(wobj* wj, double* userframe, double* workframe, int robhold, int ufprog, int ufmec);
468 
477 extern void init_PayLoad(PayLoad* pl,double m, double* cm,double (*I)[3]);
478 
486 extern void parse_robjoint(robjoint* rjoint, double* data, int* dof);
487 
495 extern void parse_robpose(robpose* rpose, double* xyz, double* rpy);
496 
505 extern void parse_speed_joint(speed* sp, double* data, int*dof, int* flag);
506 
515 extern void parse_speed_cartesian(speed* sp, double* tcp, double* orl, int* flag);
516 
528 extern void parse_speed(speed* sp, double* data, int*dof, int* per_flag, double* tcp, double* orl, int* tcp_flag);
529 
530 
538 extern void parse_zone(zone* ze, double* size, int* flag);
539 
547 extern void parse_tool(tool* tl, double* frame, int* robhold, PayLoad* payload);
548 
559 extern void parse_wobj(wobj* wj, double* userframe, double* workframe, int* robhold, int* ufprog, int* ufmec);
560 
569 extern void parse_PayLoad(PayLoad* pl,double* m, double* cm,double (*I)[3]);
570 
571 
573 /*说明:数据批量操作接口,用于操作数据量较大时使用,如批量读取和写入.数据量较小时可用get***(),write***()等接口操作.数据量大时建议使用批量操作接口.
574  * 使用时利用CreatDataBatch()创建批量操作数据,创建时需要指定操作数据类型和读(0)写(1)方式,再利用数据类型对应的get***_batch() 或write***_batch()进行读或写操作,
575  * 操作完成,必须使用FreeDataDatch()释放操作数据.
576  *
577  * 使用代码例子:
578  * void robot_read_data_batch_test()
579  * {
580  * int err=0;
581  * char name[ROBOT_DATA_NAME_LEN_MAX];
582  * robjoint rjoint;
583  * double angle[ROBOT_MAX_DOF];
584  * int dof=0;
585  * int num=CreatDataBatch(_robjoint, 0);//创建批操作数据
586  * if (num<0)
587  * {
588  * printf("CreatDataBatch failure\n");
589  * return;
590  * }
591  * int i=0;
592  * int j=0;
593  * for (i=0;i<num;i++)
594  * {
595  * err=getrobjoint_batch(name,&rjoint, i);//获取索引为i的数据内容及名字
596  * if (0!=err)
597  * {
598  * printf("getrobjoint_batch failure\n");
599  * break;
600  * }
601  * //------------------------------数据使用------------------
602  * parse_robjoint(&rjoint, angle, &dof);//解析数据
603  * printf("读取数据名字:%s,数据维度%d, 数据内容: ",name,dof);
604  * for (j=0;j<dof;j++)
605  * {
606  * printf("%f,",angle[j]);
607  * }
608  * printf("\n");
609  * }
610  * err=FreeDataDatch();//释放批操作数据
611  * if (0!=err)
612  * {
613  * printf("FreeDataDatch failure\n");
614  * }
615  * }
616  *
617  * void robot_write_data_batch_test()
618  * {
619  * char name[ROBOT_DATA_NAME_LEN_MAX];
620  * robjoint rjoint;
621  * double angle[ROBOT_MAX_DOF];
622  * int dof=0;
623  * int err=CreatDataBatch(_robjoint, 1);//创建批操作数据
624  * if (err<0)
625  * {
626  * printf("CreatDataBatch failure\n");
627  * return;
628  * }
629  * int i=0;
630  * int num=10;//写入十个数据
631  * for (i=0;i<num;i++)
632  * {
633  * //------------------------设置写入数据----------------------------
634  * dof=6;//设置数据维度要与机器人自由度一致,可以通过相应接口获取
635  * angle[0]=0;angle[1]=0;angle[2]=0;angle[3]=0;angle[4]=1;angle[5]=0;
636  * sprintf(name,"%s,%d","J",i);//设置数据名称
637  * init_robjoint(&rjoint, angle, dof);//设置机器人数据
638  * //------------------写入数据----------------------
639  * err=writerobjoint_batch(name,&rjoint);
640  * if (0!=err)
641  * {
642  * printf("getrobjoint_batch failure\n");
643  * break;
644  * }
645  * }
646  * err=FreeDataDatch();//释放批操作数据
647  * if (0!=err)
648  * {
649  * printf("FreeDataDatch failure\n");
650  * }
651  * }
652  *
653  * */
654 
662 extern int CreatDataBatch(robdatatype rdt, int RW_flag);
663 
669 extern int FreeDataDatch();
670 
679 extern int getrobjoint_batch(char* J,robjoint* rjoint, int index);
680 
689 extern int getrobpose_batch(char* P,robpose* rpose, int index);
690 
699 extern int getspeed_batch(char* S, speed* sp, int index);
700 
709 extern int getzone_batch(char* Z, zone* zo, int index);
710 
719 extern int gettool_batch(char* T, tool* to, int index);
720 
729 extern int getwobj_batch(char* W, wobj* wo, int index);
730 
738 extern int writerobjoint_batch(const char* J,robjoint* rjoint);
739 
747 extern int writerobpose_batch(const char* P, robpose* rpose);
748 
756 extern int writespeed_batch(const char* S, speed* sp);
757 
765 extern int writezone_batch(const char* Z, zone* zo);
766 
774 extern int writetool_batch(const char* T, tool* to);
775 
783 extern int writewobj_batch(const char* W, wobj* wo);
784 
785 
786 
787 
788 #ifdef __cplusplus
789 }
790 }
791 #endif
792 
793 
794 #endif /* ROBOTSTRUCT_H_ */
ROBJOINT::dof
int dof
机器人自由度
Definition: robotStruct.h:175
speed::tcp_flag
int tcp_flag
Definition: robotStruct.h:121
speed
struct speed speed
运动指令输入,速度数据
_aubo
@ _aubo
通过aubo机器人控制器驱动aubo机器人
Definition: robotStruct.h:50
_custom
@ _custom
自定义协议驱动的控制方式
Definition: robotStruct.h:51
writetool
int writetool(const char *T, tool *to)
写工件坐标系数据至系统
TOOL
运动指令输入,工具数据(私有数据)
Definition: robotStruct.h:225
CreatDataBatch
int CreatDataBatch(robdatatype rdt, int RW_flag)
创建批数据区,操作完成必须使用FreeDataDatch()释放批数据
zone::zone_size
double zone_size
Definition: robotStruct.h:135
init_zone
void init_zone(zone *ze, double size, int flag)
初始化机器人转弯区
writerobpose
int writerobpose(const char *P, robpose *rpose)
写位姿至系统
getzone
int getzone(const char *Z, zone *zo)
从系统获取转弯区大小
getrobjoint_batch
int getrobjoint_batch(char *J, robjoint *rjoint, int index)
获取指定索引的关节数据,必须使用CreatDataBatch()创建批数据区
PayLoad
struct PayLoad PayLoad
负载数据
parse_speed_cartesian
void parse_speed_cartesian(speed *sp, double *tcp, double *orl, int *flag)
解析笛卡尔速度
WOBJ::ufmec
int ufmec
预留,未使用
Definition: robotStruct.h:241
SPEED
运动指令输入,速度数据(私有数据)
Definition: robotStruct.h:196
init_speed_joint
void init_speed_joint(speed *sp, double *data, int dof, int flag)
初始化关节速度
speed::per_flag
int per_flag
Definition: robotStruct.h:118
command_arg::dete_background
int dete_background
Definition: robotStruct.h:64
getwobj_batch
int getwobj_batch(char *W, wobj *wo, int index)
获取指定索引的工件数据,必须使用CreatDataBatch()创建批数据区
zone
运动指令输入,转弯区数据
Definition: robotStruct.h:133
command_arg
命令行数据结构
Definition: robotStruct.h:61
init_tool
void init_tool(tool *tl, double *frame, int robhold, PayLoad *payload)
初始化机器人工具
wobj::ufprog
int ufprog
预留,未使用
Definition: robotStruct.h:160
wobj
struct wobj wobj
运动指令输入,工件标系数据
zone::zone_flag
int zone_flag
Definition: robotStruct.h:134
init_robjoint
void init_robjoint(robjoint *rjoint, double *data, int dof)
初始化关节目标
writerobpose_batch
int writerobpose_batch(const char *P, robpose *rpose)
写入位姿数据,必须使用CreatDataBatch()创建批数据区
getspeed
int getspeed(const char *S, speed *sp)
从系统获取运动速度
parse_robpose
void parse_robpose(robpose *rpose, double *xyz, double *rpy)
解析笛卡尔位姿目标
command_arg::mode
controller_mode mode
Definition: robotStruct.h:63
init_speed_cartesian
void init_speed_cartesian(speed *sp, double tcp, double orl, int flag)
初始化笛卡尔速度
tool
struct tool tool
运动指令输入,工具数据
_tool
@ _tool
工具数据
Definition: robotStruct.h:258
ROBJOINT
运动指令输入,关节数据(私有数据)
Definition: robotStruct.h:173
init_robpose
void init_robpose(robpose *rpose, double *xyz, double *rpy)
初始化笛卡尔位姿目标
PayLoad::m
double m
Definition: robotStruct.h:79
parse_speed_joint
void parse_speed_joint(speed *sp, double *data, int *dof, int *flag)
解析化关节速度
robjoint
struct robjoint robjoint
运动指令输入,关节数据
speed
运动指令输入,速度数据
Definition: robotStruct.h:116
wobj::ufmec
int ufmec
预留,未使用
Definition: robotStruct.h:161
writezone
int writezone(const char *Z, zone *zo)
写转弯区数据至系统
TOOL::payload
PayLoad payload
负载
Definition: robotStruct.h:228
wobj::uframe
robpose uframe
用户坐标在基坐标系下的描述
Definition: robotStruct.h:162
_wobj
@ _wobj
工件数据
Definition: robotStruct.h:259
writerobjoint
int writerobjoint(const char *J, robjoint *rjoint)
写关节位置至系统
gettool_batch
int gettool_batch(char *T, tool *to, int index)
获取指定索引的工具数据,必须使用CreatDataBatch()创建批数据区
wobj::oframe
robpose oframe
工件坐标在用户坐标系下的描述
Definition: robotStruct.h:163
wobj
运动指令输入,工件标系数据
Definition: robotStruct.h:158
getwobj
int getwobj(const char *W, wobj *wo)
从系统获取工件坐标系
parse_zone
void parse_zone(zone *ze, double *size, int *flag)
解析机器人转弯区
ZONE::zone_flag
int zone_flag
转弯区大小,zone_size=0:不使用转弯区;zone_size=1:运动总长度的百分比0~1;zone_size=2:转弯大小,移动mm,转动rad
Definition: robotStruct.h:214
speed::dof
int dof
Definition: robotStruct.h:123
_other
@ _other
从配置文件获取机器人类型
Definition: robotStruct.h:47
command_arg::EtherCATonly
int EtherCATonly
Definition: robotStruct.h:65
getrobpose
int getrobpose(const char *P, robpose *rpose)
从系统获取位姿
_ur
@ _ur
通过ur机器人控制器驱动ur机器人
Definition: robotStruct.h:49
robjoint::dof
int dof
Definition: robotStruct.h:94
byte
unsigned char byte
Definition: robotStruct.h:36
SPEED::tcp
double tcp
笛卡尔移动速度,tcp_flag=0: 最大速度的百分比0~1; tcp_flag=1: 速度,单位mm/s; tcp_flag=2: 时间,单位s;
Definition: robotStruct.h:199
writewobj_batch
int writewobj_batch(const char *W, wobj *wo)
写入工件数据,必须使用CreatDataBatch()创建批数据区
WOBJ
运动指令输入,工件标系数据(私有数据)
Definition: robotStruct.h:238
SPEED::orl
double orl
笛卡尔转动速度,tcp_flag=0: 最大速度的百分比0~1; tcp_flag=1: 速度,单位rad/s; tcp_flag=2: 时间,单位s;
Definition: robotStruct.h:200
getrobpose_batch
int getrobpose_batch(char *P, robpose *rpose, int index)
获取指定索引的位姿数据,必须使用CreatDataBatch()创建批数据区
zone
struct zone zone
运动指令输入,转弯区数据
writetool_batch
int writetool_batch(const char *T, tool *to)
写入工具数据,必须使用CreatDataBatch()创建批数据区
PayLoad
负载数据
Definition: robotStruct.h:78
parse_speed
void parse_speed(speed *sp, double *data, int *dof, int *per_flag, double *tcp, double *orl, int *tcp_flag)
解析速度
ROBPOSE
运动指令输入,笛卡尔位置及姿态数据(私有数据)
Definition: robotStruct.h:185
command_arg::path
char * path
Definition: robotStruct.h:62
robpose
struct robpose robpose
运动指令输入,笛卡尔位置及姿态数据
writerobjoint_batch
int writerobjoint_batch(const char *J, robjoint *rjoint)
写入关节数据,必须使用CreatDataBatch()创建批数据区
getDataName
int getDataName(robdatatype rdt, int n, char *dataname)
从系统获取数据文件内索引为的数据名字
writewobj
int writewobj(const char *W, wobj *wo)
写工件坐标系数据至系统
SPEED::tcp_flag
int tcp_flag
tcp 含义,0:百分比;1:速度;2:时间; -1:不是用
Definition: robotStruct.h:201
writespeed_batch
int writespeed_batch(const char *S, speed *sp)
写入速度数据,必须使用CreatDataBatch()创建批数据区
gettool
int gettool(const char *T, tool *to)
从系统获取末端工具
command_arg::server_modbus
int server_modbus
Definition: robotStruct.h:66
parse_robjoint
void parse_robjoint(robjoint *rjoint, double *data, int *dof)
解析关节目标
getDataNum
int getDataNum(robdatatype rdt)
从系统获取数据文件内数据的数目
robpose
运动指令输入,笛卡尔位置及姿态数据
Definition: robotStruct.h:104
tool::robhold
int robhold
Definition: robotStruct.h:146
command_arg::port
int port
Definition: robotStruct.h:67
init_wobj
void init_wobj(wobj *wj, double *userframe, double *workframe, int robhold, int ufprog, int ufmec)
初始化机器人工件
robdatatype
robdatatype
运动指令输入数据类型
Definition: robotStruct.h:253
ZONE
运动指令输入,转弯区数据(私有数据)
Definition: robotStruct.h:213
SPEED::per_flag
int per_flag
per 含义,0:百分比;1:速度;2:时间; -1:不是用
Definition: robotStruct.h:198
getzone_batch
int getzone_batch(char *Z, zone *zo, int index)
获取指定索引的转弯区数据,必须使用CreatDataBatch()创建批数据区
_ethercat
@ _ethercat
EtherCAT直接驱动驱动器的控制方式
Definition: robotStruct.h:48
TOOL::robhold
int robhold
是否手持工具,0:非手持;1:手持
Definition: robotStruct.h:226
_zone
@ _zone
转弯区数据
Definition: robotStruct.h:257
getspeed_batch
int getspeed_batch(char *S, speed *sp, int index)
获取指定索引的速度数据,必须使用CreatDataBatch()创建批数据区
ZONE::zone_size
double zone_size
zone_flag含义,0:不使用;1:百分比;2:具体大小
Definition: robotStruct.h:215
robjoint
运动指令输入,关节数据
Definition: robotStruct.h:92
WOBJ::robhold
int robhold
工件是否在机器人上,0:不在机器人上;1:在机器人上
Definition: robotStruct.h:239
speed::tcp
double tcp
Definition: robotStruct.h:119
_speed
@ _speed
速度数据
Definition: robotStruct.h:256
wobj::robhold
int robhold
工件是否在机器人上,0:不在机器人上;1:在机器人上
Definition: robotStruct.h:159
ROBOT_MAX_DOF
#define ROBOT_MAX_DOF
Definition: robotStruct.h:31
controller_mode
controller_mode
控制器机器人类型
Definition: robotStruct.h:46
writezone_batch
int writezone_batch(const char *Z, zone *zo)
写入转弯区数据,必须使用CreatDataBatch()创建批数据区
command_arg::iscopy
int iscopy
Definition: robotStruct.h:68
init_speed
void init_speed(speed *sp, double *data, int dof, int per_flag, double tcp, double orl, int tcp_flag)
初始速度
init_PayLoad
void init_PayLoad(PayLoad *pl, double m, double *cm, double(*I)[3])
初始化机器人负载
parse_tool
void parse_tool(tool *tl, double *frame, int *robhold, PayLoad *payload)
解析机器人工具
parse_PayLoad
void parse_PayLoad(PayLoad *pl, double *m, double *cm, double(*I)[3])
解析机器人负载数据
tool::tframe
robpose tframe
Definition: robotStruct.h:147
FreeDataDatch
int FreeDataDatch()
释放批数据区
getrobjoint
int getrobjoint(const char *J, robjoint *rjoint)
从系统获取关节位置
_robpose
@ _robpose
笛卡尔数据
Definition: robotStruct.h:255
SPEED::dof
int dof
机器人自由度
Definition: robotStruct.h:203
tool
运动指令输入,工具数据
Definition: robotStruct.h:145
writespeed
int writespeed(const char *S, speed *sp)
写运动速度至系统
_robjoint
@ _robjoint
关节数据
Definition: robotStruct.h:254
tool::payload
PayLoad payload
Definition: robotStruct.h:148
speed::orl
double orl
Definition: robotStruct.h:120
parse_wobj
void parse_wobj(wobj *wj, double *userframe, double *workframe, int *robhold, int *ufprog, int *ufmec)
解析机器人工件
WOBJ::ufprog
int ufprog
预留,未使用
Definition: robotStruct.h:240