JAKATYPE.cs
13.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
using System.Runtime.InteropServices;
namespace JAKA
{
public class JKTYPE
{
/**
* @brief 笛卡尔空间位置数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct CartesianTran
{
public double x; ///< x轴坐标,单位mm
public double y; ///< y轴坐标,单位mm
public double z; ///< z轴坐标,单位mm
};
/**
* @brief 欧拉角姿态数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct Rpy
{
public double rx; ///< 绕固定轴X旋转角度,单位:rad
public double ry; ///< 绕固定轴Y旋转角度,单位:rad
public double rz; ///< 绕固定轴Z旋转角度,单位:rad
};
/**
* @brief 四元数姿态数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct Quaternion
{
public double s;
public double x;
public double y;
public double z;
};
/**
*@brief 笛卡尔空间位姿类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct CartesianPose
{
public CartesianTran tran; ///< 笛卡尔空间位置
public Rpy rpy; ///< 笛卡尔空间姿态
};
/**
* @brief 旋转矩阵数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct RotMatrix
{
public CartesianTran x; ///< x轴列分量
public CartesianTran y; ///< y轴列分量
public CartesianTran z; ///< z轴列分量
};
/**
* @brief 程序运行状态枚举类型
*/
public enum ProgramState
{
PROGRAM_IDLE, ///< 机器人停止运行
PROGRAM_RUNNING, ///< 机器人正在运行
PROGRAM_PAUSED ///< 机器人暂停
};
/**
* @brief 坐标系选择枚举类型
*/
public enum CoordType
{
COORD_BASE, ///< 基坐标系
COORD_JOINT, ///< 关节空间
COORD_TOOL ///< 工具坐标系
};
/**
* @brief jog运动模式枚举
*/
public enum MoveMode
{
ABS = 0, ///< 绝对运动
INCR ///< 增量运动
};
/**
* @brief 系统监测数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct SystemMonitorData
{
public int scbMajorVersion; ///<scb主版本号
public int scbMinorVersion; ///<scb次版本号
public int cabTemperature; ///<控制柜温度
public double robotAveragePower; ///<控制柜总线平均功率
public double robotAverageCurrent; ///<控制柜总线平均电流
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] instCurrent; ///<机器人6个轴的瞬时电流
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] instVoltage; ///<机器人6个轴的瞬时电压
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] instTemperature; ///<机器人6个轴的瞬时温度
};
/**
* @brief 负载数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct PayLoad
{
public double mass; ///<负载质量,单位:kg
public CartesianTran centroid; ///<负载质心, 单位:mm
};
/**
* @brief 关节位置数据类型
*/
public struct JointValue
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] jVal; ///< 6关节位置值,单位:rad
};
/**
* @brief IO类型枚举
*/
public enum IOType
{
IO_CABINET, ///< 控制柜面板IO
IO_TOOL, ///< 工具IO
IO_EXTEND ///< 扩展IO
};
/**
* @brief 机器人状态数据
*/
[StructLayout(LayoutKind.Sequential)]
public struct RobotState
{
public int estoped; ///< 是否急停
public int poweredOn; ///< 是否打开电源
public int servoEnabled; ///< 是否使能
};
/**
* @brief 机器人力矩数据
*/
[StructLayout(LayoutKind.Sequential)]
public struct TorqueValue
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] jTorque; ///< 是否使能
}
/**
* @brief 机器人关节监测数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct JointMonitorData
{
double instCurrent; ///< 瞬时电流
double instVoltage; ///< 瞬时电压
double instTemperature; ///< 瞬时温度
}
/**
* @brief 机器人监测数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct RobotMonitorData
{
double scbMajorVersion; ///< scb主版本号
double scbMinorVersion; ///< scb小版本号
double cabTemperature; ///< 控制器温度
double robotAveragePower; ///< 机器人平均电压
double robotAverageCurrent; ///< 机器人平均电流
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public JointMonitorData[] jointMonitorData; ///< 机器人6个关节的监测数据
}
/**
* @brief 力矩传感器监测数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct TorqSensorMonitorData
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] ip; ///< 力矩传感器ip地址
int port; ///< 力矩传感器端口号
PayLoad payLoad; ///< 工具负载
int status; ///< 力矩传感器状态
int errcode; ///< 力矩传感器异常错误码
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] actTorque; ///< 力矩传感器实际接触力值
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] torque; ///< 力矩传感器原始读数值
}
/**
* @brief 机器人状态监测数据,使用get_robot_status函数更新机器人状态数据
*/
[StructLayout(LayoutKind.Sequential)]
public struct RobotStatus
{
public int errcode; ///< 机器人运行出错时错误编号,0为运行正常,其它为运行异常
public int inpos; ///< 机器人运动是否到位标志,0为没有到位,1为运动到位
public int powered_on; ///< 机器人是否上电标志,0为没有上电,1为上电
public int enabled; ///< 机器人是否使能标志,0为没有使能,1为使能
public double rapidrate; ///< 机器人运动倍率
public int protective_stop; ///< 机器人是否检测到碰撞,0为没有检测到碰撞,1为检测到碰撞
public int emergency_stop; ///< 机器人是否急停,0为没有急停,1为急停
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65)]
public int[] dout; ///< 机器人控制柜数字输出信号,dout[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public int[] tio_dout; ///< 机器人末端工具数字输出信号,tio_dout[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65)]
public int[] extio; ///< 机器人外部应用数字输出信号,extio[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65)]
public int[] din; ///< 机器人控制柜数字输入信号,din[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public int[] tio_din; ///< 机器人末端工具数字输入信号,tio_din[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65)]
public double[] ain; ///< 机器人控制柜模拟输入信号,ain[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public double[] tio_ain; ///< 机器人末端工具模拟输入信号,tio_ain[0]为信号的个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65)]
public double[] aout; ///< 机器人控制柜模拟输出信号,aout[0]为信号的个数
public int current_tool_id; ///< 机器人目前使用的工具坐标系id
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] cartesiantran_position; ///< 机器人末端所在的笛卡尔空间位置
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public double[] joint_position; ///< 机器人关节空间位置
public int on_soft_limit; ///< 机器人是否处于限位,0为没有触发限位保护,1为触发限位保护
public int current_user_id; ///< 机器人目前使用的用户坐标系id
public int drag_status; ///< 机器人是否处于拖拽状态,0为没有处于拖拽状态,1为处于拖拽状态
public RobotMonitorData robot_monitor_data; ///< 机器人状态监测数据
public TorqSensorMonitorData torq_sensor_monitor_data; ///< 机器人力矩传感器状态监测数据
public int is_socket_connect; ///< sdk与控制器连接通道是否正常,0为连接通道异常,1为连接通道正常
}
/**
* @brief 机器人错误码数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct ErrorCode
{
public int code; ///< 错误码编号
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 120)]
public char[] message; ///< 错误码对应提示信息
}
/**
* @brief 轨迹复现配置参数数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct TrajTrackPara
{
public double xyz_interval; ///< 空间位置采集精度
public double rpy_interval; ///< 姿态采集精度
public double vel; ///< 执行脚本运行速度
public double acc; ///< 执行脚本运行加速度
}
/**
* @brief 多个字符串存储数据类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct MultStrStorType
{
public int len; ///< 字符串个数
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128 * 128)]
public char[] message; ///< 错误码对应提示信息
}
/**
* @brief 运动参数可选项
*/
[StructLayout(LayoutKind.Sequential)]
public struct OptionalCond
{
int executingLineId; ///< 控制命令id编号
}
/**
* @brief 网络异常机器人运动自动终止类型枚举
*/
public enum ProcessType
{
MOT_KEEP, ///< 网络异常时机器人继续保持原来的运动
MOT_PAUSE, ///< 网络异常时机器人暂停运动
MOT_ABORT ///< 网络异常时机器人终止运动
}
/**
* @brief 柔顺控制参数类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct AdmitCtrlType
{
int opt; ///< 柔顺方向,可选值为 1 2 3 4 5 6分别对应 fx fy fz mx my mz,0代表没有勾选
double ft_user; ///< 用户用多大的力才能让机器人的沿着某个方向以最大速度进行运动
double ft_rebound; ///< 回弹力:机器人回到初始状态的能力
double ft_constant; ///< 恒力
int ft_normal_track; ///< 法向跟踪是否开启,0为没有开启,1为开启
}
/**
* @brief 机器人柔顺控制参数类型
*/
[StructLayout(LayoutKind.Sequential)]
public struct RobotAdmitCtrl
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public AdmitCtrlType[] admit_ctrl;
}
/**
* @brief 速度柔顺控制等级和比率等级设置
* 速度柔顺控制分三个等级,并且 1>rate1>rate2>rate3>rate4>0
* 等级为1时,只能设置rate1,rate2两个等级。rate3,rate4的值为0
* 等级为2时,只能设置rate1,rate2,rate3 三个等级。rate4的值为0
* 等级为3时,能设置 rate1,rate2,rate3,rate4 4个等级
*/
[StructLayout(LayoutKind.Sequential)]
public struct VelCom
{
int vc_level; //速度柔顺控制等级
double rate1; //比率1等级
double rate2; //比率2等级
double rate3; //比率3等级
double rate4; //比率4等级
}
/**
* @brief 力传感器的受力分量和力矩分量
*/
[StructLayout(LayoutKind.Sequential)]
public struct FTxyz
{
double fx; // 沿x轴受力分量
double fy; // 沿y轴受力分量
double fz; // 沿z轴受力分量
double tx; // 绕x轴力矩分量
double ty; // 绕y轴力矩分量
double tz; // 绕z轴力矩分量
}
}
}