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";
12 package jaiabot.protobuf;
17 Actual maximum size of message: 179 bytes / 1432 bits
18 dccl.id head...........................8
19 user head..............................0
20 body................................1423
21 padding to full byte...................1
22 Allowed maximum size of message: 250 bytes / 2000 bits
31 required uint32 bot_id = 1 [
32 (dccl.field) = { min: 0 max: 255 },
33 (jaia.field).rest_api.presence = OMITTED // specified in 'targets'
35 required uint64 time = 2 [
38 units { prefix: "micro" derived_dimensions: "time" }
39 precision: -6 // second precision
42 (jaia.field).rest_api.presence = OMITTED // written by API server
48 MISSION_PLAN = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
49 ACTIVATE = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
50 START_MISSION = 3 [(jaia.ev).rest_api.presence = GUARANTEED];
51 MISSION_PLAN_FRAGMENT = 4;
54 NEXT_TASK = 10 [(jaia.ev).rest_api.presence = GUARANTEED];
55 RETURN_TO_HOME = 11 [(jaia.ev).rest_api.presence = GUARANTEED];
56 STOP = 12 [(jaia.ev).rest_api.presence = GUARANTEED];
57 PAUSE = 13 [(jaia.ev).rest_api.presence = GUARANTEED];
58 RESUME = 14 [(jaia.ev).rest_api.presence = GUARANTEED];
60 // during remote control mission
61 REMOTE_CONTROL_SETPOINT = 20;
62 REMOTE_CONTROL_TASK = 21;
63 REMOTE_CONTROL_RESUME_MOVEMENT = 22;
66 RECOVERED = 30 [(jaia.ev).rest_api.presence = GUARANTEED];
67 SHUTDOWN = 31 [(jaia.ev).rest_api.presence = GUARANTEED];
68 RETRY_DATA_OFFLOAD = 32;
69 DATA_OFFLOAD_COMPLETE = 33;
70 DATA_OFFLOAD_FAILED = 34;
72 // debugging low level commands
73 RESTART_ALL_SERVICES = 40;
75 SHUTDOWN_COMPUTER = 42;
78 required CommandType type = 10
79 [(jaia.field).rest_api.presence = GUARANTEED];
83 // required for type == MISSION_PLAN
84 MissionPlan plan = 20 [(jaia.field).rest_api = { presence: GUARANTEED, doc: "Used with \"command\": { \"type\" : \"MISSION_PLAN\" }"}];
86 // required for type == REMOTE_CONTROL_SETPOINT
87 RemoteControl rc = 30 [(jaia.field).rest_api = { presence: GUARANTEED, doc: "Used with \"command\": { \"type\" : \"REMOTE_CONTROL_SETPOINT\" }"}];
89 // required for type == REMOTE_CONTROL_TASK
90 MissionTask rc_task = 31;
100 required uint32 hub_id = 1 [(jaia.field).rest_api.presence = OMITTED];
101 required uint64 time = 2 [
102 (dccl.field) = { units { prefix: "micro" derived_dimensions: "time" } },
103 (jaia.field).rest_api.presence = OMITTED
110 // debugging low level commands
111 RESTART_ALL_SERVICES = 40;
112 REBOOT_COMPUTER = 41;
113 SHUTDOWN_COMPUTER = 42;
115 // simulator commands
116 SET_HUB_LOCATION = 80 [(jaia.ev).rest_api.presence = GUARANTEED];
119 required HubCommandType type = 10
120 [(jaia.field).rest_api.presence = GUARANTEED];
122 optional uint32 scan_for_bot_id = 11;
124 optional GeographicCoordinate hub_location = 80
125 [(jaia.field).rest_api.presence = GUARANTEED];
131 Actual maximum size of message: 54 bytes / 432 bits
132 dccl.id head...........................8
133 user head..............................0
134 body.................................417
135 padding to full byte...................7
136 Allowed maximum size of message: 250 bytes / 2000 bits
138 option (dccl.msg) = {
145 required uint32 bot_id = 1 [
146 (dccl.field) = { min: 0 max: 255 },
147 (jaia.field).rest_api.presence = GUARANTEED
149 required uint64 time = 2 [
152 units { prefix: "micro" derived_dimensions: "time" },
154 (jaia.field).rest_api.presence = GUARANTEED
156 optional uint64 last_command_time = 3 [
159 units { prefix: "micro" derived_dimensions: "time" }
161 (jaia.field).rest_api.presence = GUARANTEED
164 optional goby.middleware.protobuf.HealthState health_state = 4
165 [(jaia.field).rest_api.presence = GUARANTEED];
166 repeated Error error = 5 [
167 (dccl.field).max_repeat = 5,
168 (jaia.field).rest_api.presence = GUARANTEED
170 repeated Warning warning = 6 [
171 (dccl.field).max_repeat = 5,
172 (jaia.field).rest_api.presence = GUARANTEED
176 HYDRO = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
177 ECHO = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
179 optional BotType bot_type = 7 [(jaia.field).rest_api.presence = GUARANTEED];
181 optional GeographicCoordinate location = 10
182 [(jaia.field).rest_api.presence = GUARANTEED];
184 optional double depth = 11 [
189 units: { derived_dimensions: "length" }
191 (jaia.field).rest_api.presence = GUARANTEED
196 optional double roll = 1 [
202 derived_dimensions: "plane_angle"
203 system: "angle::degree"
206 (jaia.field).rest_api.presence = GUARANTEED
208 optional double pitch = 2 [
214 derived_dimensions: "plane_angle"
215 system: "angle::degree"
218 (jaia.field).rest_api.presence = GUARANTEED
220 optional double heading = 3 [
226 derived_dimensions: "plane_angle"
227 system: "angle::degree"
230 (jaia.field).rest_api.presence = GUARANTEED
232 optional double course_over_ground = 4 [
238 derived_dimensions: "plane_angle"
239 system: "angle::degree"
242 (jaia.field).rest_api.presence = GUARANTEED
245 optional Attitude attitude = 20
246 [(jaia.field).rest_api.presence = GUARANTEED];
250 optional double over_ground = 1 [
255 units { derived_dimensions: "velocity" }
257 (jaia.field).rest_api.presence = GUARANTEED
259 optional double over_water = 2 [(dccl.field) = {
263 units { derived_dimensions: "velocity" }
266 optional Speed speed = 30 [(jaia.field).rest_api.presence = GUARANTEED];
268 optional MissionState mission_state = 40
269 [(jaia.field).rest_api.presence = GUARANTEED];
271 // bounds should match MissionPlan.goal max_repeat value *
272 // expected_fragments max
273 optional int32 active_goal = 41 [
274 (dccl.field) = { min: 0 max: 29 },
275 (jaia.field).rest_api.presence = GUARANTEED
277 optional double distance_to_active_goal = 42 [
282 units: { derived_dimensions: "length" }
284 (jaia.field).rest_api.presence = GUARANTEED
286 optional uint32 active_goal_timeout = 43 [
291 units { base_dimensions: "T" }
293 (jaia.field).rest_api.presence = GUARANTEED
295 optional int32 repeat_index = 44 [
296 (dccl.field) = { min: 0 max: 1000 precision: 0 },
297 (jaia.field).rest_api.presence = GUARANTEED
300 optional double salinity = 51
301 [(dccl.field) = { min: 0 max: 100 precision: 1 }];
303 optional double temperature = 52 [(dccl.field) = {
307 units { derived_dimensions: "temperature" system: "celsius" }
310 optional double thermocouple_temperature = 53 [(dccl.field) = {
314 units { derived_dimensions: "temperature" system: "celsius" }
317 optional double vv_current = 54 [(dccl.field) = {
321 units { derived_dimensions: "current" }
324 optional double vcc_current = 55 [(dccl.field) = {
328 units { derived_dimensions: "current" }
331 optional double vcc_voltage = 56 [(dccl.field) = {
335 units { derived_dimensions: "electric_potential" system: "si" }
338 optional double battery_percent = 57 [
339 (dccl.field) = { min: 0 max: 100 precision: 0 },
340 (jaia.field).rest_api.presence = GUARANTEED
343 optional int32 calibration_status = 58 [(dccl.field) = { min: 0 max: 3 }];
345 optional IMUCalibrationState calibration_state = 59;
347 optional double hdop = 60 [(dccl.field) = { min: 0 max: 100 precision: 2 }];
349 optional double pdop = 61 [(dccl.field) = { min: 0 max: 100 precision: 2 }];
351 optional int32 wifi_link_quality_percentage = 62 [
352 (dccl.field) = { min: 0 max: 100 precision: 0 },
353 (jaia.field).rest_api.presence = GUARANTEED
356 optional uint64 received_time = 63 [
359 units { prefix: "micro" derived_dimensions: "time" }
361 (jaia.field).rest_api.presence = GUARANTEED
367 option (dccl.msg) = {
371 optional int32 drift_duration = 1 [
377 units { base_dimensions: "T" }
379 (jaia.field).rest_api.presence = GUARANTEED
382 message EstimatedDrift
384 required double speed = 1 [
389 units { derived_dimensions: "velocity" }
391 (jaia.field).rest_api.presence = GUARANTEED
394 optional double heading = 3 [
400 derived_dimensions: "plane_angle"
401 system: "angle::degree"
404 (jaia.field).rest_api.presence = GUARANTEED
408 // should correspond to ocean current velocity
409 optional EstimatedDrift estimated_drift = 10
410 [(jaia.field).rest_api.presence = GUARANTEED];
413 optional GeographicCoordinate start_location = 11
414 [(jaia.field).rest_api.presence = GUARANTEED];
416 optional GeographicCoordinate end_location = 12
417 [(jaia.field).rest_api.presence = GUARANTEED];
419 // Significant wave height is defined as the average wave height,
420 // from trough to crest, of the highest one-third of the waves
421 optional double significant_wave_height = 13 [
426 units: { derived_dimensions: "length" }
428 (jaia.field).rest_api.presence = GUARANTEED
434 option (dccl.msg) = {
438 required double dive_rate = 10 [
443 units { derived_dimensions: "velocity" }
445 (jaia.field).rest_api.presence = GUARANTEED
448 optional double unpowered_rise_rate = 11 [
453 units { derived_dimensions: "velocity" }
455 (jaia.field).rest_api.presence = GUARANTEED
458 optional double powered_rise_rate = 12 [
463 units { derived_dimensions: "velocity" }
465 (jaia.field).rest_api.presence = GUARANTEED
468 required double depth_achieved = 13 [
473 units: { derived_dimensions: "length" }
475 (jaia.field).rest_api.presence = GUARANTEED
480 optional double mean_depth = 1 [
485 units: { derived_dimensions: "length" }
487 (jaia.field).rest_api.presence = GUARANTEED
490 optional double mean_temperature = 2 [
495 units { derived_dimensions: "temperature" system: "celsius" }
497 (jaia.field).rest_api.presence = GUARANTEED
500 optional double mean_salinity = 3 [
501 (dccl.field) = { min: 0 max: 45 precision: 1 },
502 (jaia.field).rest_api.presence = GUARANTEED
506 repeated Measurements measurement = 14 [
507 (dccl.field) = { max_repeat: 50 },
508 (jaia.field).rest_api.presence = GUARANTEED
512 optional GeographicCoordinate start_location = 15
513 [(jaia.field).rest_api.presence = GUARANTEED];
515 optional double duration_to_acquire_gps = 16 [
520 units { base_dimensions: "T" }
522 (jaia.field).rest_api.presence = GUARANTEED
525 // Did we reach seafloor?
526 optional bool bottom_dive = 17
527 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
529 // Did we reach min depth?
530 optional bool reached_min_depth = 18
531 [default = false, (jaia.field).rest_api.presence = GUARANTEED];
533 // If we reached bottom, what was the bottom type
536 HARD = 1 [(jaia.ev).rest_api.presence = GUARANTEED];
537 SOFT = 2 [(jaia.ev).rest_api.presence = GUARANTEED];
540 optional BottomType bottom_type = 19
541 [(jaia.field).rest_api.presence = GUARANTEED];
543 // For bottom characterization
544 optional double max_acceleration = 20 [
549 units { derived_dimensions: "acceleration" }
551 (jaia.field).rest_api.presence = GUARANTEED
558 Actual maximum size of message: 218 bytes / 1744 bits
559 dccl.id head..........................16
560 user head..............................0
561 body................................1728
562 padding to full byte...................0
563 Allowed maximum size of message: 250 bytes / 2000 bits
565 option (dccl.msg) = {
572 required uint32 bot_id = 1 [
573 (dccl.field) = { min: 0 max: 255 },
574 (jaia.field).rest_api.presence = GUARANTEED
576 required uint64 start_time = 2 [
579 units { prefix: "micro" derived_dimensions: "time" }
581 (jaia.field).rest_api.presence = GUARANTEED
583 required uint64 end_time = 3 [
586 units { prefix: "micro" derived_dimensions: "time" }
588 (jaia.field).rest_api.presence = GUARANTEED
590 required MissionTask.TaskType type = 4
591 [(jaia.field).rest_api.presence = GUARANTEED];
593 optional DivePacket dive = 10 [(jaia.field).rest_api.presence = GUARANTEED];
594 optional DriftPacket drift = 11
595 [(jaia.field).rest_api.presence = GUARANTEED];