forked from ros-industrial/abb_libegm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathegm_wrapper.proto
More file actions
208 lines (180 loc) · 5.6 KB
/
Copy pathegm_wrapper.proto
File metadata and controls
208 lines (180 loc) · 5.6 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
//======================================================================================================================
//
// Wrapper messages.
//
// Note: Used to wrap the actual EGM messages, which are defined in the egm.proto file from ABB Robotics.
// This can be used in intermediate components that are utilizing EGM communication for motion control.
//
//======================================================================================================================
syntax = "proto2";
package abb.egm.wrapper;
//======================================================================================================================
//
// Auxiliary messages.
//
//======================================================================================================================
message Header
{
enum MessageType
{
UNDEFINED = 0;
DATA = 1; // Message contains data sent by the robot controller.
}
optional uint32 sequence_number = 1; // Sequence number (to be able to detect lost messages).
optional uint32 time_stamp = 2; // Time stamp in milliseconds.
optional MessageType message_type = 3 [default = UNDEFINED];
}
// Note: Status of the robot controller, and the active EGM motion.
message Status
{
enum EGMState
{
EGM_UNDEFINED = 0;
EGM_ERROR = 1;
EGM_STOPPED = 2;
EGM_RUNNING = 3;
}
enum MotorState
{
MOTORS_UNDEFINED = 0;
MOTORS_ON = 1;
MOTORS_OFF = 2;
}
enum RAPIDExecutionState
{
RAPID_UNDEFINED = 0;
RAPID_STOPPED = 1;
RAPID_RUNNING = 2;
}
optional bool egm_convergence_met = 1;
optional EGMState egm_state = 2 [default = EGM_UNDEFINED];
optional MotorState motor_state = 3 [default = MOTORS_UNDEFINED];
optional RAPIDExecutionState rapid_execution_state = 4 [default = RAPID_UNDEFINED];
}
// Note: Time in seconds and microseconds since the epoch (1 Jan 1970)
message Clock
{
optional uint64 sec = 1;
optional uint64 usec = 2;
}
//===========================================================
//
// Joint space related messages.
//
//===========================================================
// Note: This message is used for joints values, and only up to seven values will be considered.
//
// For six axes robots:
// - If robot joints : 1-6 values.
// - If external joints: 1-6 values.
// For seven axes robots:
// - If robot joints : 1-7 values.
// - If external joints: 1-5 values.
message Joints
{
repeated double values = 1;
}
message JointSpace
{
optional Joints position = 1; // Units [degrees]
optional Joints velocity = 2; // Units [degrees/s]
}
//===========================================================
//
// Cartesian space related messages.
//
// Note 1: Cartesian messages from the robot controller are
// relative to the work object specified when setting
// up EGM. E.g. with EGMActPose RAPID instructions.
//
// Note 2: Cartesian messages to the robot controller are
// interpreted relative to the sensor frame defined
// when setting up EGM. E.g. with EGMActPose RAPID
// instructions.
//
//===========================================================
message Cartesian
{
optional double x = 1;
optional double y = 2;
optional double z = 3;
}
// Note: Higher priority than quaternions.
message Euler
{
optional double x = 1;
optional double y = 2;
optional double z = 3;
}
// Note: Lower priority than Euler angles. The quaternion is defined as: u0 + u1*i + u2*j + u3*k.
message Quaternion
{
optional double u0 = 1;
optional double u1 = 2;
optional double u2 = 3;
optional double u3 = 4;
}
message CartesianPose
{
optional Cartesian position = 1; // Units [mm].
optional Euler euler = 2; // Units [degrees].
optional Quaternion quaternion = 3; // Units [-].
}
message CartesianVelocity
{
optional Cartesian linear = 1; // Units [mm/s].
optional Euler angular = 2; // Units [degrees/s].
}
message CartesianSpace
{
optional CartesianPose pose = 1;
optional CartesianVelocity velocity = 2;
}
//===========================================================
//
// Combined joint and Cartesian space auxiliary messages.
//
//===========================================================
// Note: Joint or Cartesian motion depends on the used EGM RAPID instructions.
message Robot
{
optional JointSpace joints = 1;
optional CartesianSpace cartesian = 2;
}
message External
{
optional JointSpace joints = 1;
}
// Note: The velocity sub fields are estimated from the actual EGM messages.
message Feedback
{
optional Robot robot = 1;
optional External external = 2;
optional Clock time = 3;
}
// Note: The velocity sub fields are estimated from the actual EGM messages.
message Planned
{
optional Robot robot = 1;
optional External external = 2;
optional Clock time = 3;
}
//======================================================================================================================
//
// Primary messages.
//
//======================================================================================================================
// Inputs extracted from the robot controller outbound messages (i.e. EgmRobot).
message Input
{
optional Header header = 1;
optional Feedback feedback = 2;
optional Planned planned = 3;
optional Status status = 4;
}
// Outputs to send to the robot controller.
message Output
{
optional Robot robot = 1; // Outputs to the robot.
optional External external = 2; // Outputs to external axes.
}