JaiaBot 2.6.0+14+g3cab9c46
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 optional uint32 command_from_hub_id = 70
180 [(dccl.field) = { min: 0 max: 30 }];
181 optional uint64 mission_command_time = 71 [
182 (dccl.field) = {
183 codec: "dccl.time2"
184 units { prefix: "micro" derived_dimensions: "time" },
185 }
186 ];
187}
188
189message MissionTask
190{
191 option (dccl.msg) = {
192 unit_system: "si"
193 };
194
195 enum TaskType
196 {
197 NONE = 0 [(jaia.ev).rest_api.presence = GUARANTEED];
198 DIVE = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
199 STATION_KEEP = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
200 SURFACE_DRIFT = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
201 CONSTANT_HEADING = 4 [(jaia.ev).rest_api.presence = GUARANTEED];
202 }
203 optional TaskType type = 1
204 [default = NONE, (jaia.field).rest_api.presence = GUARANTEED];
205
206 message DiveParameters
207 {
208 optional double max_depth = 1 [
209 default = 50,
210 (dccl.field) = {
211 min: 0
212 max: 50
213 precision: 1
214 units { base_dimensions: "L" }
215 },
216 (jaia.field).rest_api.presence = GUARANTEED
217 ];
218 optional double depth_interval = 2 [
219 default = inf,
220 (dccl.field) = {
221 min: 0.1
222 max: 50
223 precision: 1
224 units { base_dimensions: "L" }
225 },
226 (jaia.field).rest_api.presence = GUARANTEED
227 ];
228 optional double hold_time = 3 [
229 default = 0,
230 (dccl.field) = {
231 min: 0
232 max: 80
233 precision: 0
234 units { base_dimensions: "T" }
235 },
236 (jaia.field).rest_api.presence = GUARANTEED
237 ];
238 optional bool bottom_dive = 4
239 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
240 }
241
242 // for type == DIVE
243 optional DiveParameters dive = 2
244 [(jaia.field).rest_api.presence = GUARANTEED];
245
246 message DriftParameters
247 {
248 optional int32 drift_time = 3 [
249 default = 0,
250 (dccl.field) = {
251 min: 0
252 max: 3600
253 precision: -1
254 units { base_dimensions: "T" }
255 },
256 (jaia.field).rest_api.presence = GUARANTEED
257 ];
258 }
259
260 // for type == SURFACE_DRIFT and type == DIVE
261 optional DriftParameters surface_drift = 3
262 [(jaia.field).rest_api.presence = GUARANTEED];
263
264 message ConstantHeadingParameters
265 {
266 optional double constant_heading = 1 [
267 (dccl.field) = {
268 min: 0
269 max: 360
270 precision: 0
271 units {
272 derived_dimensions: "plane_angle"
273 system: "angle::degree"
274 }
275 },
276 (jaia.field).rest_api.presence = GUARANTEED
277 ];
278
279 optional int32 constant_heading_time = 2 [
280 default = 0,
281 (dccl.field) = {
282 min: 0
283 max: 3600
284 precision: -1
285 units { base_dimensions: "T" }
286 },
287 (jaia.field).rest_api.presence = GUARANTEED
288 ];
289
290 optional double constant_heading_speed = 3 [
291 default = 2,
292 (dccl.field) = {
293 min: 0.1,
294 max: 3.0,
295 precision: 1,
296 units { base_dimensions: "LT^-1" }
297 },
298 (jaia.field).rest_api.presence = GUARANTEED
299 ];
300 }
301
302 // for type == CONSTANT_HEADING
303 optional ConstantHeadingParameters constant_heading = 4
304 [(jaia.field).rest_api.presence = GUARANTEED];
305 optional bool start_echo = 5
306 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
307
308 message StationKeepParameters
309 {
310 optional int32 station_keep_time = 1 [
311 default = 10,
312 (dccl.field) = {
313 min: 0,
314 max: 3600,
315 precision: -1,
316 units { base_dimensions: "T" }
317 },
318 (jaia.field).rest_api.presence = GUARANTEED
319 ];
320 }
321
322 // for type == STATION_KEEP
323 optional StationKeepParameters station_keep = 6
324 [(jaia.field).rest_api.presence = GUARANTEED];
325}
326
327message MissionPlan
328{
329 option (dccl.msg) = {
330 unit_system: "si"
331 };
332
333 enum MissionStart
334 {
335 START_IMMEDIATELY = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
336 START_ON_COMMAND = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
337 // START_IN_WATER_DETECT = 3;
338 // START_AFTER_DELAY = 4;
339 }
340 optional MissionStart start = 1 [
341 default = START_ON_COMMAND,
342 (jaia.field).rest_api.presence = GUARANTEED
343 ];
344
345 enum MovementType
346 {
347 TRANSIT = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
348 REMOTE_CONTROL = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
349 TRAIL = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
350 }
351 optional MovementType movement = 2
352 [default = TRANSIT, (jaia.field).rest_api.presence = GUARANTEED];
353
354 message Goal
355 {
356 optional string name = 1 [(dccl.field).omit = true];
357 required GeographicCoordinate location = 2
358 [(jaia.field).rest_api.presence = GUARANTEED];
359 optional MissionTask task = 3
360 [(jaia.field).rest_api.presence = GUARANTEED];
361 optional bool moveWptMode = 4;
362 }
363
364 repeated Goal goal = 3 [
365 (dccl.field).max_repeat = 10,
366 (jaia.field).rest_api.presence = GUARANTEED
367 ];
368
369 message Recovery
370 {
371 optional bool recover_at_final_goal = 1
372 [default = true, (jaia.field).rest_api.presence = GUARANTEED];
373 optional GeographicCoordinate location = 2
374 [(jaia.field).rest_api.presence = GUARANTEED];
375 }
376 optional Recovery recovery = 4
377 [(jaia.field).rest_api.presence = GUARANTEED];
378
379 optional Speeds speeds = 5 [(jaia.field).rest_api.presence = GUARANTEED];
380 optional BottomDepthSafetyParams bottom_depth_safety_params = 6
381 [(jaia.field).rest_api.presence = GUARANTEED];
382 optional uint32 fragment_index = 7 [(dccl.field) = { min: 0 max: 7 }];
383 optional uint32 expected_fragments = 8 [(dccl.field) = { min: 1 max: 8 }];
384
385 message TrailParam
386 {
387 option (dccl.msg) = {
388 unit_system: "si"
389 };
390
391 optional int32 contact = 1
392 [default = 0, (dccl.field) = { min: 0, max: 7 }];
393
394 optional double angle = 2 [
395 default = 180,
396 (dccl.field) = {
397 min: 0
398 max: 360
399 precision: 0
400 units {
401 derived_dimensions: "plane_angle"
402 system: "angle::degree"
403 }
404 }
405 ];
406 optional bool angle_relative = 3 [default = true];
407 optional double range = 4 [
408 default = 50,
409 (dccl.field) = {
410 min: 0
411 max: 500
412 precision: 0
413 units: { derived_dimensions: "length" }
414 }
415 ];
416 }
417
418 oneof movement_params
419 {
420 TrailParam trail = 10;
421 }
422
423 optional uint32 repeats = 9 [
424 default = 1,
425 (jaia.field).rest_api.presence = GUARANTEED,
426 (dccl.field) = { min: 1 max: 100 }
427 ];
428
429 optional string mission_name = 11 [(dccl.field).omit = true]; // not sent over radio, only saved to the hub
430
431}
432
433message IvPBehaviorUpdate
434{
435 message TransitUpdate
436 {
437 // unit dimensions must match those used by MOOS-IvP
438 option (dccl.msg) = {
439 unit_system: "si"
440 };
441 required bool active = 1;
442
443 optional double x = 2
444 [(dccl.field).units = { base_dimensions: "L" }]; // meters
445 optional double y = 3
446 [(dccl.field).units = { base_dimensions: "L" }]; // meters
447 optional double speed = 4 [
448 (dccl.field).units = { base_dimensions: "LT^-1" }
449 ]; // meters/second
450
451 optional int32 slip_radius = 5;
452 }
453
454 message StationkeepUpdate
455 {
456 // unit dimensions must match those used by MOOS-IvP
457 option (dccl.msg) = {
458 unit_system: "si"
459 };
460
461 required bool active = 1;
462
463 optional double x = 2
464 [(dccl.field).units = { base_dimensions: "L" }]; // meters
465 optional double y = 3
466 [(dccl.field).units = { base_dimensions: "L" }]; // meters
467 optional double outer_speed = 4 [
468 (dccl.field).units = { base_dimensions: "LT^-1" }
469 ]; // meters/second
470 optional double transit_speed = 5 [
471 (dccl.field).units = { base_dimensions: "LT^-1" }
472 ]; // meters/second
473 optional bool center_activate = 6 [default = false];
474 }
475
476 message ConstantHeadingUpdate
477 {
478 // unit dimensions must match those used by MOOS-IvP
479 option (dccl.msg) = {
480 unit_system: "si"
481 };
482
483 required bool active = 1;
484
485 optional double heading = 2 [(dccl.field) = {
486 min: 0
487 max: 360
488 precision: 0
489 units { derived_dimensions: "plane_angle" system: "angle::degree" }
490 }];
491 }
492
493 message ConstantSpeedUpdate
494 {
495 // unit dimensions must match those used by MOOS-IvP
496 option (dccl.msg) = {
497 unit_system: "si"
498 };
499
500 required bool active = 1;
501
502 optional double speed = 2 [
503 (dccl.field).units = { base_dimensions: "LT^-1" }
504 ]; // meters/second
505 }
506
507 message TrailUpdate
508 {
509 // unit dimensions must match those used by MOOS-IvP
510 option (dccl.msg) = {
511 unit_system: "si"
512 };
513
514 required bool active = 1;
515
516 optional MissionPlan.TrailParam param = 2;
517 }
518
519 message ContactUpdate
520 {
521 // unit dimensions must match those used by MOOS-IvP
522 option (dccl.msg) = {
523 unit_system: "si"
524 };
525 optional int32 contact = 1;
526 optional double x = 2
527 [(dccl.field).units = { base_dimensions: "L" }]; // meters
528 optional double y = 3
529 [(dccl.field).units = { base_dimensions: "L" }]; // meters
530 optional double speed = 4 [
531 (dccl.field).units = { base_dimensions: "LT^-1" }
532 ]; // meters/second
533 optional double heading_or_cog = 5 [(dccl.field).units = {
534 derived_dimensions: "plane_angle"
535 system: "angle::degree"
536 }]; // degrees
537 }
538
539 oneof behavior
540 {
541 TransitUpdate transit = 1;
542 StationkeepUpdate stationkeep = 2;
543 ConstantHeadingUpdate constantHeading = 3;
544 ConstantSpeedUpdate constantSpeed = 4;
545 TrailUpdate trail = 5;
546 ContactUpdate contact = 6;
547 }
548}
549
550message IvPBehaviorReport
551{
552 message TransitReport
553 {
554 optional bool waypoint_reached = 1 [default = false];
555 }
556
557 oneof behavior
558 {
559 TransitReport transit = 1;
560 }
561}
562
563message MissionTpvMeetsGpsReq
564{
565 option (dccl.msg) = {
566 unit_system: "si"
567 };
568
569 optional goby.middleware.protobuf.gpsd.TimePositionVelocity tpv = 1;
570}
571
572// Represents a summary of a mission, for use in mission querying results.
573message MissionSummary
574{
575 optional string mission_name = 1;
576 optional uint64 start_time = 2;
577 optional uint64 end_time = 3;
578 optional uint32 task_packet_count = 4;
579}