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