3 import "dccl/option_extensions.proto";
4 import "jaiabot/messages/mission.proto";
5 import "jaiabot/messages/geographic_coordinate.proto";
6 import "jaiabot/messages/high_control.proto";
7 import "goby/middleware/protobuf/coroner.proto";
8 import "jaiabot/messages/health.proto";
9 import "jaiabot/messages/imu.proto";
10 import "jaiabot/messages/option_extensions.proto";
11 import "jaiabot/messages/link.proto";
13 package jaiabot.protobuf;
18 Actual maximum size of message: 196 bytes / 1568 bits
19 dccl.id head...........................8
20 user head..............................0
21 body................................1556
22 padding to full byte...................4
23 Allowed maximum size of message: 250 bytes / 2000 bits
32 required uint32 bot_id = 1 [
33 (dccl.field) = { min: 0 max: 255 },
34 (jaia.field).rest_api.presence = OMITTED // specified in 'targets'
36 required uint64 time = 2 [
39 units { prefix: "micro" derived_dimensions: "time" }
40 precision: -6 // second precision
43 (jaia.field).rest_api.presence = OMITTED // written by API server
46 // Special case: not sent in message - written upon receipt based on the Link traversed
47 optional Link link = 3 [(dccl.field).omit = true];
53 MISSION_PLAN = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
54 ACTIVATE = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
55 START_MISSION = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
56 MISSION_PLAN_FRAGMENT = 4;
59 NEXT_TASK = 10 [(jaia.ev).rest_api.presence = GUARANTEED];
60 RETURN_TO_HOME = 11 [(jaia.ev).rest_api.presence = GUARANTEED];
61 STOP = 12 [(jaia.ev).rest_api.presence = GUARANTEED];
62 PAUSE = 13 [(jaia.ev).rest_api.presence = GUARANTEED];
63 RESUME = 14 [(jaia.ev).rest_api.presence = GUARANTEED];
65 // during remote control mission
66 REMOTE_CONTROL_SETPOINT = 20;
67 REMOTE_CONTROL_TASK = 21;
68 REMOTE_CONTROL_RESUME_MOVEMENT = 22;
71 RECOVERED = 30 [(jaia.ev).rest_api.presence = GUARANTEED];
72 SHUTDOWN = 31 [(jaia.ev).rest_api.presence = GUARANTEED];
73 RETRY_DATA_OFFLOAD = 32;
74 DATA_OFFLOAD_COMPLETE = 33;
75 DATA_OFFLOAD_FAILED = 34;
77 // debugging low level commands
78 RESTART_ALL_SERVICES = 40;
80 SHUTDOWN_COMPUTER = 42;
83 required CommandType type = 10
84 [(jaia.field).rest_api.presence = GUARANTEED];
88 // required for type == MISSION_PLAN
89 MissionPlan plan = 20 [(jaia.field).rest_api = { presence: GUARANTEED, doc: "Used with \"command\": { \"type\" : \"MISSION_PLAN\" }"}];
91 // required for type == REMOTE_CONTROL_SETPOINT
92 RemoteControl rc = 30 [(jaia.field).rest_api = { presence: GUARANTEED, doc: "Used with \"command\": { \"type\" : \"REMOTE_CONTROL_SETPOINT\" }"}];
94 // required for type == REMOTE_CONTROL_TASK
95 MissionTask rc_task = 31;
100 message CommandForHub
102 option (dccl.msg) = {
106 required uint32 hub_id = 1 [(jaia.field).rest_api.presence = OMITTED];
107 required uint64 time = 2 [
108 (dccl.field) = { units { prefix: "micro" derived_dimensions: "time" } },
109 (jaia.field).rest_api.presence = OMITTED
116 // debugging low level commands
117 RESTART_ALL_SERVICES = 40;
118 REBOOT_COMPUTER = 41;
119 SHUTDOWN_COMPUTER = 42;
121 // simulator commands
122 SET_HUB_LOCATION = 80 [(jaia.ev).rest_api.presence = GUARANTEED];
125 required HubCommandType type = 10
126 [(jaia.field).rest_api.presence = GUARANTEED];
128 optional uint32 scan_for_bot_id = 11;
130 optional GeographicCoordinate hub_location = 80
131 [(jaia.field).rest_api.presence = GUARANTEED];
137 Actual maximum size of message: 46 bytes / 368 bits
138 dccl.id head...........................8
139 user head..............................0
140 body.................................359
141 padding to full byte...................1
142 Allowed maximum size of message: 250 bytes / 2000 bits
144 option (dccl.msg) = {
151 required uint32 bot_id = 1 [
152 (dccl.field) = { min: 0 max: 255 },
153 (jaia.field).rest_api.presence = GUARANTEED
155 required uint64 time = 2 [
158 units { prefix: "micro" derived_dimensions: "time" },
160 (jaia.field).rest_api.presence = GUARANTEED
162 optional uint64 last_command_time = 3 [
165 units { prefix: "micro" derived_dimensions: "time" }
167 (jaia.field).rest_api.presence = GUARANTEED
170 optional goby.middleware.protobuf.HealthState health_state = 4
171 [(jaia.field).rest_api.presence = GUARANTEED];
172 repeated Error error = 5 [
173 (dccl.field).max_repeat = 5,
174 (jaia.field).rest_api.presence = GUARANTEED
176 repeated Warning warning = 6 [
177 (dccl.field).max_repeat = 5,
178 (jaia.field).rest_api.presence = GUARANTEED
182 HYDRO = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
183 ECHO = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
184 BIO = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
186 optional BotType bot_type = 7 [(jaia.field).rest_api.presence = GUARANTEED];
188 // Special case: not sent in message - written upon receipt based on the Link traversed
189 optional Link link = 8 [(dccl.field).omit = true];
191 optional GeographicCoordinate location = 10
192 [(jaia.field).rest_api.presence = GUARANTEED];
194 optional double depth = 11 [
199 units: { derived_dimensions: "length" }
201 (jaia.field).rest_api.presence = GUARANTEED
206 optional double roll = 1 [
212 derived_dimensions: "plane_angle"
213 system: "angle::degree"
216 (jaia.field).rest_api.presence = GUARANTEED
218 optional double pitch = 2 [
224 derived_dimensions: "plane_angle"
225 system: "angle::degree"
228 (jaia.field).rest_api.presence = GUARANTEED
230 optional double heading = 3 [
236 derived_dimensions: "plane_angle"
237 system: "angle::degree"
240 (jaia.field).rest_api.presence = GUARANTEED
242 optional double course_over_ground = 4 [
248 derived_dimensions: "plane_angle"
249 system: "angle::degree"
252 (jaia.field).rest_api.presence = GUARANTEED
255 optional Attitude attitude = 20
256 [(jaia.field).rest_api.presence = GUARANTEED];
260 optional double over_ground = 1 [
265 units { derived_dimensions: "velocity" }
267 (jaia.field).rest_api.presence = GUARANTEED
269 optional double over_water = 2 [(dccl.field) = {
273 units { derived_dimensions: "velocity" }
276 optional Speed speed = 30 [(jaia.field).rest_api.presence = GUARANTEED];
278 optional MissionState mission_state = 40
279 [(jaia.field).rest_api.presence = GUARANTEED];
281 // bounds should match MissionPlan.goal max_repeat value *
282 // expected_fragments max
283 optional int32 active_goal = 41 [
284 (dccl.field) = { min: 0 max: 80 },
285 (jaia.field).rest_api.presence = GUARANTEED
287 optional double distance_to_active_goal = 42 [
292 units: { derived_dimensions: "length" }
294 (jaia.field).rest_api.presence = GUARANTEED
296 optional uint32 active_goal_timeout = 43 [
301 units { base_dimensions: "T" }
303 (jaia.field).rest_api.presence = GUARANTEED
305 optional int32 repeat_index = 44 [
306 (dccl.field) = { min: 0 max: 1000 precision: 0 },
307 (jaia.field).rest_api.presence = GUARANTEED
310 optional double salinity = 51
311 [(dccl.field) = { min: 0 max: 100 precision: 1 }];
313 optional double temperature = 52 [(dccl.field) = {
317 units { derived_dimensions: "temperature" system: "celsius" }
320 optional double battery_percent = 53 [
321 (dccl.field) = { min: 0 max: 100 precision: 0 },
322 (jaia.field).rest_api.presence = GUARANTEED
325 optional int32 calibration_status = 54 [(dccl.field) = { min: 0 max: 3 }];
327 optional IMUCalibrationState calibration_state = 55;
329 optional double hdop = 56 [(dccl.field) = { min: 0 max: 100 precision: 2 }];
331 optional double pdop = 57 [(dccl.field) = { min: 0 max: 100 precision: 2 }];
333 optional int32 wifi_link_quality_percentage = 58 [
334 (dccl.field) = { min: 0 max: 100 precision: 0 },
335 (jaia.field).rest_api.presence = GUARANTEED
338 optional uint64 received_time = 59 [
341 units { prefix: "micro" derived_dimensions: "time" }
343 (jaia.field).rest_api.presence = GUARANTEED
351 option (dccl.msg) = {
355 optional int32 drift_duration = 1 [
361 units { base_dimensions: "T" }
363 (jaia.field).rest_api.presence = GUARANTEED
366 message EstimatedDrift
368 required double speed = 1 [
373 units { derived_dimensions: "velocity" }
375 (jaia.field).rest_api.presence = GUARANTEED
378 optional double heading = 3 [
384 derived_dimensions: "plane_angle"
385 system: "angle::degree"
388 (jaia.field).rest_api.presence = GUARANTEED
392 // should correspond to ocean current velocity
393 optional EstimatedDrift estimated_drift = 10
394 [(jaia.field).rest_api.presence = GUARANTEED];
397 optional GeographicCoordinate start_location = 11
398 [(jaia.field).rest_api.presence = GUARANTEED];
400 optional GeographicCoordinate end_location = 12
401 [(jaia.field).rest_api.presence = GUARANTEED];
403 // Significant wave height is defined as the average wave height,
404 // from trough to crest, of the highest one-third of the waves
405 optional double significant_wave_height = 13 [
410 units: { derived_dimensions: "length" }
412 (jaia.field).rest_api.presence = GUARANTEED
418 option (dccl.msg) = {
422 required double dive_rate = 10 [
427 units { derived_dimensions: "velocity" }
429 (jaia.field).rest_api.presence = GUARANTEED
432 optional double unpowered_rise_rate = 11 [
437 units { derived_dimensions: "velocity" }
439 (jaia.field).rest_api.presence = GUARANTEED
442 optional double powered_rise_rate = 12 [
447 units { derived_dimensions: "velocity" }
449 (jaia.field).rest_api.presence = GUARANTEED
452 required double depth_achieved = 13 [
457 units: { derived_dimensions: "length" }
459 (jaia.field).rest_api.presence = GUARANTEED
464 optional double mean_depth = 1 [
469 units: { derived_dimensions: "length" }
471 (jaia.field).rest_api.presence = GUARANTEED
474 optional double mean_temperature = 2 [
479 units { derived_dimensions: "temperature" system: "celsius" }
481 (jaia.field).rest_api.presence = GUARANTEED
484 optional double mean_salinity = 3 [
485 (dccl.field) = { min: 0 max: 45 precision: 1 },
486 (jaia.field).rest_api.presence = GUARANTEED
490 repeated Measurements measurement = 14 [
491 (dccl.field) = { max_repeat: 50 },
492 (jaia.field).rest_api.presence = GUARANTEED
496 optional GeographicCoordinate start_location = 15
497 [(jaia.field).rest_api.presence = GUARANTEED];
499 optional double duration_to_acquire_gps = 16 [
504 units { base_dimensions: "T" }
506 (jaia.field).rest_api.presence = GUARANTEED
509 // Did we reach seafloor?
510 optional bool bottom_dive = 17
511 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
513 // Did we reach min depth?
514 optional bool reached_min_depth = 18
515 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
517 // If we reached bottom, what was the bottom type
520 HARD = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
521 SOFT = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
524 optional BottomType bottom_type = 19
525 [(jaia.field).rest_api.presence = GUARANTEED];
527 // For bottom characterization
528 optional double max_acceleration = 20 [
533 units { derived_dimensions: "acceleration" }
535 (jaia.field).rest_api.presence = GUARANTEED
542 Actual maximum size of message: 218 bytes / 1744 bits
543 dccl.id head..........................16
544 user head..............................0
545 body................................1728
546 padding to full byte...................0
547 Allowed maximum size of message: 250 bytes / 2000 bits
549 option (dccl.msg) = {
556 required uint32 bot_id = 1 [
557 (dccl.field) = { min: 0 max: 255 },
558 (jaia.field).rest_api.presence = GUARANTEED
560 required uint64 start_time = 2 [
563 units { prefix: "micro" derived_dimensions: "time" }
565 (jaia.field).rest_api.presence = GUARANTEED
567 required uint64 end_time = 3 [
570 units { prefix: "micro" derived_dimensions: "time" }
572 (jaia.field).rest_api.presence = GUARANTEED
574 required MissionTask.TaskType type = 4
575 [(jaia.field).rest_api.presence = GUARANTEED];
577 // Special case: not sent in message - written upon receipt based on the Link traversed
578 optional Link link = 5 [(dccl.field).omit = true];
580 optional DivePacket dive = 10 [(jaia.field).rest_api.presence = GUARANTEED];
581 optional DriftPacket drift = 11
582 [(jaia.field).rest_api.presence = GUARANTEED];
585 message ContactUpdate
587 option (dccl.msg) = {
594 optional int32 contact = 1 [(dccl.field) = { min: 1, max: 15 }];
595 required GeographicCoordinate location = 2;
596 optional double speed_over_ground = 3 [(dccl.field) = {
600 units { derived_dimensions: "velocity" }
602 optional double heading_or_cog = 5 [(dccl.field) = {
606 units { derived_dimensions: "plane_angle" system: "angle::degree" }