JaiaBot 2.0.0
JaiaBot micro-AUV software
 
Loading...
Searching...
No Matches
mission.proto
Go to the documentation of this file.
1syntax = "proto2";
2
3import "jaiabot/messages/geographic_coordinate.proto";
4import "dccl/option_extensions.proto";
5import "goby/middleware/protobuf/gpsd.proto";
6import "jaiabot/messages/option_extensions.proto";
7
8package jaiabot.protobuf;
9
10enum MissionState
11{
12 PRE_DEPLOYMENT__STARTING_UP = 0 [(jaia.ev).rest_api.presence = GUARANTEED];
13 PRE_DEPLOYMENT__IDLE = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
14 PRE_DEPLOYMENT__SELF_TEST = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
15 PRE_DEPLOYMENT__FAILED = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
16 PRE_DEPLOYMENT__WAIT_FOR_MISSION_PLAN = 4
17 [(jaia.ev).rest_api.presence = GUARANTEED];
18 PRE_DEPLOYMENT__READY = 5 [(jaia.ev).rest_api.presence = GUARANTEED];
19
20 IN_MISSION__UNDERWAY__REPLAN = 100
21 [(jaia.ev).rest_api.presence = GUARANTEED];
22
23 IN_MISSION__UNDERWAY__MOVEMENT__TRANSIT = 110
24 [(jaia.ev).rest_api.presence = GUARANTEED];
25 IN_MISSION__UNDERWAY__MOVEMENT__REMOTE_CONTROL__SETPOINT = 112
26 [(jaia.ev).rest_api.presence = GUARANTEED];
27 IN_MISSION__UNDERWAY__MOVEMENT__REMOTE_CONTROL__STATION_KEEP = 113
28 [(jaia.ev).rest_api.presence = GUARANTEED];
29 IN_MISSION__UNDERWAY__MOVEMENT__REMOTE_CONTROL__SURFACE_DRIFT = 114
30 [(jaia.ev).rest_api.presence = GUARANTEED];
31 IN_MISSION__UNDERWAY__MOVEMENT__TRAIL = 115
32 [(jaia.ev).rest_api.presence = GUARANTEED];
33
34 IN_MISSION__UNDERWAY__TASK__STATION_KEEP = 120
35 [(jaia.ev).rest_api.presence = GUARANTEED];
36 IN_MISSION__UNDERWAY__TASK__SURFACE_DRIFT = 121
37 [(jaia.ev).rest_api.presence = GUARANTEED];
38 IN_MISSION__UNDERWAY__TASK__DIVE__DIVE_PREP = 123
39 [(jaia.ev).rest_api.presence = GUARANTEED];
40 IN_MISSION__UNDERWAY__TASK__DIVE__POWERED_DESCENT = 124
41 [(jaia.ev).rest_api.presence = GUARANTEED];
42 IN_MISSION__UNDERWAY__TASK__DIVE__HOLD = 125
43 [(jaia.ev).rest_api.presence = GUARANTEED];
44 IN_MISSION__UNDERWAY__TASK__DIVE__UNPOWERED_ASCENT = 126
45 [(jaia.ev).rest_api.presence = GUARANTEED];
46 IN_MISSION__UNDERWAY__TASK__DIVE__POWERED_ASCENT = 127
47 [(jaia.ev).rest_api.presence = GUARANTEED];
48 IN_MISSION__UNDERWAY__TASK__DIVE__REACQUIRE_GPS = 128
49 [(jaia.ev).rest_api.presence = GUARANTEED];
50 IN_MISSION__UNDERWAY__TASK__DIVE__SURFACE_DRIFT = 129
51 [(jaia.ev).rest_api.presence = GUARANTEED];
52 IN_MISSION__UNDERWAY__TASK__DIVE__CONSTANT_HEADING = 130
53 [(jaia.ev).rest_api.presence = GUARANTEED];
54 IN_MISSION__UNDERWAY__TASK__CONSTANT_HEADING = 131
55 [(jaia.ev).rest_api.presence = GUARANTEED];
56
57 IN_MISSION__UNDERWAY__RECOVERY__TRANSIT = 140
58 [(jaia.ev).rest_api.presence = GUARANTEED];
59 IN_MISSION__UNDERWAY__RECOVERY__STATION_KEEP = 141
60 [(jaia.ev).rest_api.presence = GUARANTEED];
61 IN_MISSION__UNDERWAY__RECOVERY__STOPPED = 142
62 [(jaia.ev).rest_api.presence = GUARANTEED];
63
64 IN_MISSION__UNDERWAY__ABORT = 150;
65
66 IN_MISSION__PAUSE__IMU_RESTART = 160;
67 IN_MISSION__PAUSE__REACQUIRE_GPS = 161
68 [(jaia.ev).rest_api.presence = GUARANTEED];
69 IN_MISSION__PAUSE__MANUAL = 162 [(jaia.ev).rest_api.presence = GUARANTEED];
70 IN_MISSION__PAUSE__RESOLVE_NO_FORWARD_PROGRESS = 163;
71
72 POST_DEPLOYMENT__RECOVERED = 200 [(jaia.ev).rest_api.presence = GUARANTEED];
73 POST_DEPLOYMENT__DATA_OFFLOAD = 202
74 [(jaia.ev).rest_api.presence = GUARANTEED];
75 POST_DEPLOYMENT__IDLE = 203 [(jaia.ev).rest_api.presence = GUARANTEED];
76 POST_DEPLOYMENT__SHUTTING_DOWN = 204
77 [(jaia.ev).rest_api.presence = GUARANTEED];
78 POST_DEPLOYMENT__FAILED = 205 [(jaia.ev).rest_api.presence = GUARANTEED];
79}
80
81message Speeds
82{
83 option (dccl.msg) = {
84 unit_system: "si"
85 };
86
87 optional double transit = 1 [
88 default = 2,
89 (dccl.field) = {
90 min: 0.1,
91 max: 3.0,
92 precision: 1,
93 units { base_dimensions: "LT^-1" }
94 }
95 ];
96 optional double stationkeep_outer = 2 [
97 default = 0.5,
98 (dccl.field) = {
99 min: 0.1,
100 max: 3.0,
101 precision: 1,
102 units { base_dimensions: "LT^-1" }
103 }
104 ];
105}
106
107message BottomDepthSafetyParams
108{
109 option (dccl.msg) = {
110 unit_system: "si"
111 };
112
113 required double constant_heading = 1 [
114 default = 0,
115 (dccl.field) = {
116 min: 0
117 max: 360
118 precision: 0
119 units { derived_dimensions: "plane_angle" system: "angle::degree" }
120 }
121 ];
122
123 required int32 constant_heading_time = 2 [
124 default = 0,
125 (dccl.field) = {
126 min: 0
127 max: 360
128 precision: 0
129 units { base_dimensions: "T" }
130 }
131 ];
132
133 required double constant_heading_speed = 3 [
134 default = 2,
135 (dccl.field) = {
136 min: 0,
137 max: 3.0,
138 precision: 1,
139 units { base_dimensions: "LT^-1" }
140 }
141 ];
142
143 required double safety_depth = 4 [
144 default = -1,
145 (dccl.field) = {
146 min: -1,
147 max: 60,
148 precision: 1,
149 units { base_dimensions: "LT^-1" }
150 }
151 ];
152}
153
154message MissionReport
155{
156 option (dccl.msg) = {
157 unit_system: "si"
158 };
159
160 required MissionState state = 10;
161 optional int32 active_goal = 11;
162 optional GeographicCoordinate active_goal_location = 12;
163 optional double distance_to_active_goal = 13 [(dccl.field) = {
164 min: 0
165 max: 1000
166 precision: 1
167 units: { derived_dimensions: "length" }
168 }];
169 optional uint32 active_goal_timeout = 14 [(dccl.field) = {
170 min: 0
171 max: 3600
172 precision: 0
173 units { base_dimensions: "T" }
174 }];
175 optional int32 data_offload_percentage = 15
176 [(dccl.field) = { min: 0 max: 100 precision: 0 }];
177 optional int32 repeat_index = 16
178 [(dccl.field) = { min: 0 max: 1000 precision: 0 }];
179}
180
181message MissionTask
182{
183 option (dccl.msg) = {
184 unit_system: "si"
185 };
186
187 enum TaskType
188 {
189 NONE = 0 [(jaia.ev).rest_api.presence = GUARANTEED];
190 DIVE = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
191 STATION_KEEP = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
192 SURFACE_DRIFT = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
193 CONSTANT_HEADING = 4 [(jaia.ev).rest_api.presence = GUARANTEED];
194 }
195 optional TaskType type = 1
196 [default = NONE, (jaia.field).rest_api.presence = GUARANTEED];
197
198 message DiveParameters
199 {
200 optional double max_depth = 1 [
201 default = 50,
202 (dccl.field) = {
203 min: 0
204 max: 50
205 precision: 1
206 units { base_dimensions: "L" }
207 },
208 (jaia.field).rest_api.presence = GUARANTEED
209 ];
210 optional double depth_interval = 2 [
211 default = inf,
212 (dccl.field) = {
213 min: 0.1
214 max: 50
215 precision: 1
216 units { base_dimensions: "L" }
217 },
218 (jaia.field).rest_api.presence = GUARANTEED
219 ];
220 optional double hold_time = 3 [
221 default = 0,
222 (dccl.field) = {
223 min: 0
224 max: 80
225 precision: 0
226 units { base_dimensions: "T" }
227 },
228 (jaia.field).rest_api.presence = GUARANTEED
229 ];
230 optional bool bottom_dive = 4
231 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
232 }
233
234 // for type == DIVE
235 optional DiveParameters dive = 2
236 [(jaia.field).rest_api.presence = GUARANTEED];
237
238 message DriftParameters
239 {
240 optional int32 drift_time = 3 [
241 default = 0,
242 (dccl.field) = {
243 min: 0
244 max: 3600
245 precision: -1
246 units { base_dimensions: "T" }
247 },
248 (jaia.field).rest_api.presence = GUARANTEED
249 ];
250 }
251
252 // for type == SURFACE_DRIFT and type == DIVE
253 optional DriftParameters surface_drift = 3
254 [(jaia.field).rest_api.presence = GUARANTEED];
255
256 message ConstantHeadingParameters
257 {
258 optional double constant_heading = 1 [
259 (dccl.field) = {
260 min: 0
261 max: 360
262 precision: 0
263 units {
264 derived_dimensions: "plane_angle"
265 system: "angle::degree"
266 }
267 },
268 (jaia.field).rest_api.presence = GUARANTEED
269 ];
270
271 optional int32 constant_heading_time = 2 [
272 default = 0,
273 (dccl.field) = {
274 min: 0
275 max: 3600
276 precision: -1
277 units { base_dimensions: "T" }
278 },
279 (jaia.field).rest_api.presence = GUARANTEED
280 ];
281
282 optional double constant_heading_speed = 3 [
283 default = 2,
284 (dccl.field) = {
285 min: 0.1,
286 max: 3.0,
287 precision: 1,
288 units { base_dimensions: "LT^-1" }
289 },
290 (jaia.field).rest_api.presence = GUARANTEED
291 ];
292 }
293
294 // for type == CONSTANT_HEADING
295 optional ConstantHeadingParameters constant_heading = 4
296 [(jaia.field).rest_api.presence = GUARANTEED];
297 optional bool start_echo = 5
298 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
299
300 message StationKeepParameters
301 {
302 optional int32 station_keep_time = 1 [
303 default = 10,
304 (dccl.field) = {
305 min: 0,
306 max: 3600,
307 precision: -1,
308 units { base_dimensions: "T" }
309 },
310 (jaia.field).rest_api.presence = GUARANTEED
311 ];
312 }
313
314 // for type == STATION_KEEP
315 optional StationKeepParameters station_keep = 6
316 [(jaia.field).rest_api.presence = GUARANTEED];
317}
318
319message MissionPlan
320{
321 option (dccl.msg) = {
322 unit_system: "si"
323 };
324
325 enum MissionStart
326 {
327 START_IMMEDIATELY = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
328 START_ON_COMMAND = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
329 // START_IN_WATER_DETECT = 3;
330 // START_AFTER_DELAY = 4;
331 }
332 optional MissionStart start = 1 [
333 default = START_ON_COMMAND,
334 (jaia.field).rest_api.presence = GUARANTEED
335 ];
336
337 enum MovementType
338 {
339 TRANSIT = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
340 REMOTE_CONTROL = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
341 TRAIL = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
342 }
343 optional MovementType movement = 2
344 [default = TRANSIT, (jaia.field).rest_api.presence = GUARANTEED];
345
346 message Goal
347 {
348 optional string name = 1 [(dccl.field).omit = true];
349 required GeographicCoordinate location = 2
350 [(jaia.field).rest_api.presence = GUARANTEED];
351 optional MissionTask task = 3
352 [(jaia.field).rest_api.presence = GUARANTEED];
353 optional bool moveWptMode = 4;
354 }
355
356 repeated Goal goal = 3 [
357 (dccl.field).max_repeat = 10,
358 (jaia.field).rest_api.presence = GUARANTEED
359 ];
360
361 message Recovery
362 {
363 optional bool recover_at_final_goal = 1
364 [default = true, (jaia.field).rest_api.presence = GUARANTEED];
365 optional GeographicCoordinate location = 2
366 [(jaia.field).rest_api.presence = GUARANTEED];
367 }
368 optional Recovery recovery = 4
369 [(jaia.field).rest_api.presence = GUARANTEED];
370
371 optional Speeds speeds = 5 [(jaia.field).rest_api.presence = GUARANTEED];
372 optional BottomDepthSafetyParams bottom_depth_safety_params = 6
373 [(jaia.field).rest_api.presence = GUARANTEED];
374 optional uint32 fragment_index = 7 [(dccl.field) = { min: 0 max: 7 }];
375 optional uint32 expected_fragments = 8 [(dccl.field) = { min: 1 max: 8 }];
376
377 message TrailParam
378 {
379 option (dccl.msg) = {
380 unit_system: "si"
381 };
382
383 optional int32 contact = 1
384 [default = 0, (dccl.field) = { min: 0, max: 7 }];
385
386 optional double angle = 2 [
387 default = 180,
388 (dccl.field) = {
389 min: 0
390 max: 360
391 precision: 0
392 units {
393 derived_dimensions: "plane_angle"
394 system: "angle::degree"
395 }
396 }
397 ];
398 optional bool angle_relative = 3 [default = true];
399 optional double range = 4 [
400 default = 50,
401 (dccl.field) = {
402 min: 0
403 max: 500
404 precision: 0
405 units: { derived_dimensions: "length" }
406 }
407 ];
408 }
409
410 oneof movement_params
411 {
412 TrailParam trail = 10;
413 }
414
415 optional uint32 repeats = 9 [
416 default = 1,
417 (jaia.field).rest_api.presence = GUARANTEED,
418 (dccl.field) = { min: 1 max: 100 }
419 ];
420
421}
422
423message IvPBehaviorUpdate
424{
425 message TransitUpdate
426 {
427 // unit dimensions must match those used by MOOS-IvP
428 option (dccl.msg) = {
429 unit_system: "si"
430 };
431 required bool active = 1;
432
433 optional double x = 2
434 [(dccl.field).units = { base_dimensions: "L" }]; // meters
435 optional double y = 3
436 [(dccl.field).units = { base_dimensions: "L" }]; // meters
437 optional double speed = 4 [
438 (dccl.field).units = { base_dimensions: "LT^-1" }
439 ]; // meters/second
440
441 optional int32 slip_radius = 5;
442 }
443
444 message StationkeepUpdate
445 {
446 // unit dimensions must match those used by MOOS-IvP
447 option (dccl.msg) = {
448 unit_system: "si"
449 };
450
451 required bool active = 1;
452
453 optional double x = 2
454 [(dccl.field).units = { base_dimensions: "L" }]; // meters
455 optional double y = 3
456 [(dccl.field).units = { base_dimensions: "L" }]; // meters
457 optional double outer_speed = 4 [
458 (dccl.field).units = { base_dimensions: "LT^-1" }
459 ]; // meters/second
460 optional double transit_speed = 5 [
461 (dccl.field).units = { base_dimensions: "LT^-1" }
462 ]; // meters/second
463 optional bool center_activate = 6 [default = false];
464 }
465
466 message ConstantHeadingUpdate
467 {
468 // unit dimensions must match those used by MOOS-IvP
469 option (dccl.msg) = {
470 unit_system: "si"
471 };
472
473 required bool active = 1;
474
475 optional double heading = 2 [(dccl.field) = {
476 min: 0
477 max: 360
478 precision: 0
479 units { derived_dimensions: "plane_angle" system: "angle::degree" }
480 }];
481 }
482
483 message ConstantSpeedUpdate
484 {
485 // unit dimensions must match those used by MOOS-IvP
486 option (dccl.msg) = {
487 unit_system: "si"
488 };
489
490 required bool active = 1;
491
492 optional double speed = 2 [
493 (dccl.field).units = { base_dimensions: "LT^-1" }
494 ]; // meters/second
495 }
496
497 message TrailUpdate
498 {
499 // unit dimensions must match those used by MOOS-IvP
500 option (dccl.msg) = {
501 unit_system: "si"
502 };
503
504 required bool active = 1;
505
506 optional MissionPlan.TrailParam param = 2;
507 }
508
509 message ContactUpdate
510 {
511 // unit dimensions must match those used by MOOS-IvP
512 option (dccl.msg) = {
513 unit_system: "si"
514 };
515 optional int32 contact = 1;
516 optional double x = 2
517 [(dccl.field).units = { base_dimensions: "L" }]; // meters
518 optional double y = 3
519 [(dccl.field).units = { base_dimensions: "L" }]; // meters
520 optional double speed = 4 [
521 (dccl.field).units = { base_dimensions: "LT^-1" }
522 ]; // meters/second
523 optional double heading_or_cog = 5 [(dccl.field).units = {
524 derived_dimensions: "plane_angle"
525 system: "angle::degree"
526 }]; // degrees
527 }
528
529 oneof behavior
530 {
531 TransitUpdate transit = 1;
532 StationkeepUpdate stationkeep = 2;
533 ConstantHeadingUpdate constantHeading = 3;
534 ConstantSpeedUpdate constantSpeed = 4;
535 TrailUpdate trail = 5;
536 ContactUpdate contact = 6;
537 }
538}
539
540message IvPBehaviorReport
541{
542 message TransitReport
543 {
544 optional bool waypoint_reached = 1 [default = false];
545 }
546
547 oneof behavior
548 {
549 TransitReport transit = 1;
550 }
551}
552
553message MissionTpvMeetsGpsReq
554{
555 option (dccl.msg) = {
556 unit_system: "si"
557 };
558
559 optional goby.middleware.protobuf.gpsd.TimePositionVelocity tpv = 1;
560}