JaiaBot  1.19.0
JaiaBot micro-AUV software
mission.proto
Go to the documentation of this file.
1 syntax = "proto2";
2 
3 import "jaiabot/messages/geographic_coordinate.proto";
4 import "dccl/option_extensions.proto";
5 import "goby/middleware/protobuf/gpsd.proto";
6 import "jaiabot/messages/option_extensions.proto";
7 
8 package jaiabot.protobuf;
9 
10 enum 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 
81 message 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 
107 message 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 
154 message 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 
181 message 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 
319 message 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: 2 }];
375  optional uint32 expected_fragments = 8 [(dccl.field) = { min: 1 max: 3 }];
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 
423 message 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 
540 message 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 
553 message MissionTpvMeetsGpsReq
554 {
555  option (dccl.msg) = {
556  unit_system: "si"
557  };
558 
559  optional goby.middleware.protobuf.gpsd.TimePositionVelocity tpv = 1;
560 }