JaiaBot 2.7.0+40+ge813615b
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 uint32 transit = 1 [
88 default = 2,
89 (dccl.field) = {
90 min: 1,
91 max: 3,
92 precision: 0,
93 units { base_dimensions: "LT^-1" }
94 }
95 ];
96 optional uint32 stationkeep_outer = 2 [
97 default = 1,
98 (dccl.field) = {
99 min: 1,
100 max: 3,
101 precision: 0,
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 uint32 constant_heading_speed = 3 [
134 default = 2,
135 (dccl.field) = {
136 min: 1,
137 max: 3,
138 precision: 0,
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: 10,
148 precision: 1,
149 units { base_dimensions: "L" }
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 uint32 constant_heading_speed = 3 [
291 default = 2,
292 (dccl.field) = {
293 min: 1,
294 max: 3,
295 precision: 0,
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 // A Segment groups a contiguous range of goals (by global index) and
432 // carries the metadata that applies to that range.
433 message Segment
434 {
435 // Start of this segment (inclusive). End is inferred from the
436 // next segment's start_goal_index, or the total goal count for
437 // the last segment.
438 required uint32 start_goal_index = 2
439 [(dccl.field) = { min: 0, max: 79 }];
440
441 // Global goal indices marking the start of each survey lane within
442 // this segment.
443 repeated uint32 lane_start_goal_indices = 6
444 [(dccl.field) = { max_repeat: 7, min: 1, max: 80 }];
445
446 // Per-segment transit speed override (m/s).
447 // Omit to use plan-level speeds.transit.
448 optional uint32 speed = 4 [
449 default = 2,
450 (dccl.field) = {
451 min: 1,
452 max: 3,
453 precision: 0,
454 units { base_dimensions: "LT^-1" }
455 }
456 ];
457
458 optional BottomDepthSafetyParams bottom_depth_safety_params = 5;
459 }
460
461 // Segments in mission execution order. Non-overlapping goal index
462 // ranges are enforced by the UI before sending.
463 repeated Segment segments = 12
464 [(dccl.field).max_repeat = 5, (jaia.field).rest_api.presence = GUARANTEED];
465
466}
467
468message IvPBehaviorUpdate
469{
470 message TransitUpdate
471 {
472 // unit dimensions must match those used by MOOS-IvP
473 option (dccl.msg) = {
474 unit_system: "si"
475 };
476 required bool active = 1;
477
478 optional double x = 2
479 [(dccl.field).units = { base_dimensions: "L" }]; // meters
480 optional double y = 3
481 [(dccl.field).units = { base_dimensions: "L" }]; // meters
482 optional double speed = 4 [
483 (dccl.field).units = { base_dimensions: "LT^-1" }
484 ]; // meters/second
485
486 optional int32 slip_radius = 5;
487 }
488
489 message StationkeepUpdate
490 {
491 // unit dimensions must match those used by MOOS-IvP
492 option (dccl.msg) = {
493 unit_system: "si"
494 };
495
496 required bool active = 1;
497
498 optional double x = 2
499 [(dccl.field).units = { base_dimensions: "L" }]; // meters
500 optional double y = 3
501 [(dccl.field).units = { base_dimensions: "L" }]; // meters
502 optional double outer_speed = 4 [
503 (dccl.field).units = { base_dimensions: "LT^-1" }
504 ]; // meters/second
505 optional double transit_speed = 5 [
506 (dccl.field).units = { base_dimensions: "LT^-1" }
507 ]; // meters/second
508 optional bool center_activate = 6 [default = false];
509 }
510
511 message ConstantHeadingUpdate
512 {
513 // unit dimensions must match those used by MOOS-IvP
514 option (dccl.msg) = {
515 unit_system: "si"
516 };
517
518 required bool active = 1;
519
520 optional double heading = 2 [(dccl.field) = {
521 min: 0
522 max: 360
523 precision: 0
524 units { derived_dimensions: "plane_angle" system: "angle::degree" }
525 }];
526 }
527
528 message ConstantSpeedUpdate
529 {
530 // unit dimensions must match those used by MOOS-IvP
531 option (dccl.msg) = {
532 unit_system: "si"
533 };
534
535 required bool active = 1;
536
537 optional double speed = 2 [
538 (dccl.field).units = { base_dimensions: "LT^-1" }
539 ]; // meters/second
540 }
541
542 message TrailUpdate
543 {
544 // unit dimensions must match those used by MOOS-IvP
545 option (dccl.msg) = {
546 unit_system: "si"
547 };
548
549 required bool active = 1;
550
551 optional MissionPlan.TrailParam param = 2;
552 }
553
554 message ContactUpdate
555 {
556 // unit dimensions must match those used by MOOS-IvP
557 option (dccl.msg) = {
558 unit_system: "si"
559 };
560 optional int32 contact = 1;
561 optional double x = 2
562 [(dccl.field).units = { base_dimensions: "L" }]; // meters
563 optional double y = 3
564 [(dccl.field).units = { base_dimensions: "L" }]; // meters
565 optional double speed = 4 [
566 (dccl.field).units = { base_dimensions: "LT^-1" }
567 ]; // meters/second
568 optional double heading_or_cog = 5 [(dccl.field).units = {
569 derived_dimensions: "plane_angle"
570 system: "angle::degree"
571 }]; // degrees
572 }
573
574 oneof behavior
575 {
576 TransitUpdate transit = 1;
577 StationkeepUpdate stationkeep = 2;
578 ConstantHeadingUpdate constantHeading = 3;
579 ConstantSpeedUpdate constantSpeed = 4;
580 TrailUpdate trail = 5;
581 ContactUpdate contact = 6;
582 }
583}
584
585message IvPBehaviorReport
586{
587 message TransitReport
588 {
589 optional bool waypoint_reached = 1 [default = false];
590 }
591
592 oneof behavior
593 {
594 TransitReport transit = 1;
595 }
596}
597
598message MissionTpvMeetsGpsReq
599{
600 option (dccl.msg) = {
601 unit_system: "si"
602 };
603
604 optional goby.middleware.protobuf.gpsd.TimePositionVelocity tpv = 1;
605}
606
607// Represents a summary of a mission, for use in mission querying results.
608message MissionSummary
609{
610 optional string mission_name = 1;
611 optional uint64 start_time = 2;
612 optional uint64 end_time = 3;
613 optional uint32 task_packet_count = 4;
614}