From 2c61f5361b8170585f6220f954ca8d566672c38a Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 18 Feb 2025 15:22:55 -0500 Subject: [PATCH 01/23] RFC-0020 dispersion payload --- dispersion_protocol/autopilot_control.png | Bin 0 -> 32399 bytes .../autopilot_pass_through.png | Bin 0 -> 38238 bytes .../companion_computer_control.png | Bin 0 -> 32118 bytes .../companion_computer_pass_through.png | Bin 0 -> 38794 bytes dispersion_protocol/control_sequence.png | Bin 0 -> 34297 bytes dispersion_protocol/discovery_sequence.png | Bin 0 -> 38763 bytes dispersion_protocol/messages.md | 183 ++++++++++++++++++ dispersion_protocol/microservice.md | 171 ++++++++++++++++ .../mission_control_sequence.png | Bin 0 -> 55485 bytes text/0020-dispersion-payload.md | 76 ++++++++ 10 files changed, 430 insertions(+) create mode 100644 dispersion_protocol/autopilot_control.png create mode 100644 dispersion_protocol/autopilot_pass_through.png create mode 100644 dispersion_protocol/companion_computer_control.png create mode 100644 dispersion_protocol/companion_computer_pass_through.png create mode 100644 dispersion_protocol/control_sequence.png create mode 100644 dispersion_protocol/discovery_sequence.png create mode 100644 dispersion_protocol/messages.md create mode 100644 dispersion_protocol/microservice.md create mode 100644 dispersion_protocol/mission_control_sequence.png create mode 100644 text/0020-dispersion-payload.md diff --git a/dispersion_protocol/autopilot_control.png b/dispersion_protocol/autopilot_control.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae55e32e7c3a4bae6e59da1e78a829c864f845e GIT binary patch literal 32399 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

CV2^zWg?W@)q=SV?&NfHDz(Mp^{Z8-DJ#_ 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 z z;eZr#YU7_v5Iv!3C+50P(9BRS!}@BmX_iNLDkS8YHeC7iMPYfp@Z>L?UWg&*B=*dz z6_(LZHPMyzSXY(sz!gLUBIM@GlLP*MA7xi2(=1L4x?JXa`F*OnM7D;}Uqzu5@ z5EV;c7#K$?*soQswVj*$*wWE!o#wmh;n*>>#IM>lWnDrg4bjmOH@R*+XH|c)@ zRrY2|sc*`>8&@XbPt6OA8SvI-1VwT~g#x0!5I~DXpZ7m@{Z``-%rT$!bp4nP9g0uC z=t&rpMyXMYdO0wSoa!yo#brRO#b7S0iuhy|wB{d34kj zziKu33QATiI4{mR=T8D|uGya*2}(H$^v(R2^q&gU)tZW2#6~XU=D||qipTC@F&)oCLqgDr`MJ<#UYjGGp?ccJ68;~| zesCblA_3_-rd+j?U9iUnr#AJsC15z8RZb9th0Ez4Uo(E@zd|vVdjGp%cunH&sUK*| z^#|Ef#h^usZLo#bAJ@Y-Q)I#P%DSU;CV@-LCgcYFIDeU1ya0YGRQZwR2Pv~TNsoxJ6D z+(gksI5AZzix@$PH)d+FNj=be%t}2cBhcPycG-?5f%vbBbK=N|j6$!I%ev)BRY%1} zxD1yRHzz2_MH8>dWY7Pm6uV;dN2g3n1AqG|P|U!PZ&8Q;@CPEguiX}ctYoX$KO!Wp zdj19n0`to)tiNL!zdwUVh%o%?1>g%=p7ryepZffKaoZ3) R>*T-z9W8xC{-s+_{sU?z703Vp literal 0 HcmV?d00001 diff --git a/dispersion_protocol/autopilot_pass_through.png b/dispersion_protocol/autopilot_pass_through.png new file mode 100644 index 0000000000000000000000000000000000000000..575365439bc742cfa81d592a0c2331f54ea68e41 GIT binary patch literal 38238 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

}`L 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 I^i%);0WBgWtpET3 literal 0 HcmV?d00001 diff --git a/dispersion_protocol/control_sequence.png b/dispersion_protocol/control_sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..059e4670ed2d9f4ad0587653af20d6546d6bd83f GIT binary patch literal 34297 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

Z*sQjKdAF&uQ)kS*AkC%kB5FB4{ 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

ic;HKoQ^8S0ix|3sH4Ok!hCYkirzgwz;nT%` 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 BPXqt} literal 0 HcmV?d00001 diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md new file mode 100644 index 0000000..53f0250 --- /dev/null +++ b/dispersion_protocol/messages.md @@ -0,0 +1,183 @@ +# Messages + +## DISPERSION_DEVICE_INFORMATION + +Information about a low level dispersion device. This message should be requested by a source such as the ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. + +| Field Name | Type | Units | Values | Description | +| :------------------ | :--------- | :------------------: | :---------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- | +| timestamp_ns | `uint64_t` | ns | | Unix time stamp | +| vendor_name | `char[32]` | | | Name of the payload vendor | +| model_name | `char[32]` | | | Name of the payload model | +| custom_name | `char[32]` | | | Custom name given by the user | +| firmware_version | `uint32_t` | | | Version of the payload firmware, encoded as: (Dev & 0xff) << 24 | +| hardware_version | `uint32_t` | | | Version of the payload hardware, encoded as: (Dev & 0xff) << 24 | +| uid | `uint64_t` | | Invalid:0 | Integer to uniquely identify this hardware. (0 if unknown) | +| cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device capability flags. | +| custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. flags. | +| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN, <0 | Minimum dispersion rate this device can support | +| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN, <=0 | Maximum dispersion rate this device can support | +| pressure_min | `uint32_t` | Pa | | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | +| pressure_max | `uint32_t` | Pa | invalid:0 | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | + +## DISPERSION_DEVICE_STATUS + +Message reporting the low level status of a dispersion device. + +This message should be published a low regular rate (e.g. 5 Hz) but also during key events such a flag change. It should also be published in response to a request. + +| Field Name | Type | Units | Values | Description | +| :---------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :----------------------------------------------------------------------------- | +| target_system | `uint8_t` | | | System ID uniquely identifying the vehicle this payload device is attached to | +| target_component | `uint8_t` | | | Component ID uniquely identifying this device on the system | +| timestamp_ns | `uint64_t` | ns | | Unix time stamp | +| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | +| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | +| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | +| custom_codes | `uint8_t` | | | Leave some flexibility for device specific custom state reporting | +| dispersion_rate | `float` | liters/min or kg/min | invalid:<0 | Current dispersion rate of the device | +| fill_level | `uint16_t` | liters or kg | | Current tank fill level. | +| pressure | `uint32_t` | Pa | | Current pressure of the dispersion system | +| request_signature | `char[6]` | | invalid:[0] | Message signature for most recently processed device request. | + +## DISPERSION_DEVICE_REQUEST + +Low level message to control a dispersion device. The core set of requests are on, off, and auto. Manual on immediately turns the system on at the configured rate until it is turned off. Manual off turns off the system immediately and makes the system ignore any corrections comming from an automated system. Only on use of the auto request will the system be configured and ready for automatic input again. All three request types are necessary to effectively handle emergency situations. These requests are acked through the [DISPERSION_DEVICE_STATUS](#dispersion_device_status) message request_signature field. + +| Field Name | Type | Units | Values | Description | +| :--------------------- | :--------- | :------------------: | :-------------------------------------------------------- | :---------------------------------------------------------------------------------------- | +| target_system | `uint8_t` | | | System ID uniquely identifying the vehicle this payload device is attached to | +| target_component | `uint8_t` | | | Component ID uniquely identifying this device on the system | +| timestamp_ns | `uint64_t` | ns | | Unix time stamp | +| requests | `uint16_t` | | [DISPERSION_DEVICE_REQUESTS](#dispersion_device_requests) | Request changes to dispersion device | +| target_speed | `float` | m/s | | Target system speed for target dispersion rate | +| target_dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Target system dispersion rate within the range specified below. | +| target_fill_level | `uint16_t` | liters or kg | | Target dispersion device payload amount for mission | +| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate the current configuration supports | +| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate the current configuration supports | +| pressure_min | `uint32_t` | Pa | | If this is a spray dispersion system, minimum pressure the current configuration supports | +| pressure_max | `uint32_t` | Pa | invalid:0 | If this is a spray dispersion system, maximum pressure the current configuration supports | + +> [!IMPORTANT] +> We must provide limits for pressure and rate of spray systems at runtime since it is customary to change nozzles based on the target job. The nozzle configurations support variable flow rates up to a point. They have upper and lower limits and each configuration is different. We therefore provide both pressure and flow rate factors to enable mapping between the sets. This is critical for dynamic spray control relative to speed which is essential for keeping lead in and lead out distances short. The problem with flow rate only is that systems might be slow to get from their minimum pressure to target flow rate. With a pressure range the system can stay at the target minimum pressure before turning the system on giving it instant correct flow rate. I would be open to arguments for removing the pressure requirement in order to simplify the protocol, but it seems essential to me. + +## AUTOPILOT_STATE_FOR_DISPERSION_DEVICE + +Low level message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the device component. The data of this message are for the device estimator corrections such as speed or wind rejection compensation. + +| Field Name | Type | Units | Values | Description | +| :------------------------------ | :--------- | :---: | :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| target_system | `uint8_t` | | | System ID uniquely identifying the vehicle this payload device is attached to | +| target_component | `uint8_t` | | | Component ID uniquely identifying this device on the system | +| timestamp_ns | `uint64_t` | ns | | Unix time stamp | +| q | float[4] | | | Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention). | +| q_estimated_delay_us | uint32_t | us | invalid:0 | Estimated delay of the attitude data. 0 if unknown. | +| vx | float | m/s | invalid:NaN | X Speed in NED (North, East, Down). NAN if unknown. | +| vy | float | m/s | invalid:NaN | Y Speed in NED (North, East, Down). NAN if unknown. | +| vz | float | m/s | invalid:NaN | Z Speed in NED (North, East, Down). NAN if unknown. | +| v_estimated_delay_us | uint32_t | us | invalid:0 | Estimated delay of the speed data. 0 if unknown. | +| feed_forward_angular_velocity_z | float | rad/s | invalid:NaN | Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing. | +| estimator_status | uint16_t | | [ESTIMATOR_STATUS_FLAGS](https://mavlink.io/en/messages/common.html#ESTIMATOR_STATUS_FLAGS) | Bitmap indicating which estimator outputs are valid. | +| landed_state | uint8_t | | invalid:MAV_LANDED_STATE_UNDEFINED MAV_LANDED_STATE | The landed state. Is set to [MAV_LANDED_STATE_UNDEFINED](https://mavlink.io/en/messages/common.html#MAV_LANDED_STATE_UNDEFINED) if landed state is unknown. | +| angular_velocity_z | float | rad/s | invalid:NaN | Z component of angular velocity in NED (North, East, Down). NaN if unknown. | + +> [!QUESTION] +> This table is an exact clone of AUTOPILOT_STATE_FOR_GIMBAL_DEVICE because it felt like a good representation of the information a dispersion controller might need to deliver quality corrections. It at a minimum needs velocity. Can we just use something like GLOBAL_POS_INT or the GIMBAL message? I dont love the redundancy. + +# Enumerated Types + +## MAV_TYPE + +MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA). + +| Value | Name | Description | +| :---- | :-------------------------------------------------------- | :----------------------------------- | +| ... | ... | ... | +| 45 | MAV_TYPE_DISPERSION | A device that can disperse a payload | + +## MAV_COMPONENT + +Component ids (values) for the different types and instances of onboard hardware/software that might make up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.). + +Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components. When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded. + +| Value | Name | Description | +| :---- | :-------------------------------------------------------------- | :------------------- | +| ... | ... | ... | +| 110 | MAV_COMP_ID_DISPERSION | Dispersion device #1 | +| ... | ... | ... | + +## DISPERSION_DEVICE_CAP_FLAGS + +(Bitmask) Dispersion device (low level) capability flags (bitmap). + +| Value | Name | Description | +| :---- | :---------------------------------------------------- | :-------------------------------------------------------------------------------- | +| 1 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | +| 2 | DISPERSION_DEVICE_CAP_FLAGS_SPRAYER | Device supports dispersing liquid payloads. | +| 4 | DISPERSION_DEVICE_CAP_FLAGS_SPREADER | Device supports dispersing granular payloads. | +| 8 | DISPERSION_DEVICE_CAP_FILL_LEVEL_DETECTION | Device supports measuring its own fill level. | + +## DISPERSION_DEVICE_STATUS_FLAGS + +(Bitmask) Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. + +| Value | Name | Description | +| :---- | :-------------------------------------------- | :----------------------------------------------------------- | +| 1 | DISPERSION_DEVICE_STATUS_FLAGS_DISPERSION_ON | Dispersion device is delivering payload | +| 2 | DISPERSION_DEVICE_STATUS_FLAGS_AUTO_MODE | True if in auto mode. False if in manual mode. | +| 4 | DISPERSION_DEVICE_STATUS_FLAGS_CONFIGURED | System has necessary parameters to properly disperse payload | +| 8 | DISPERSION_DEVICE_STATUS_FLAGS_FILL_AT_TARGET | Dispersion device tank is filled to target amount | + +## DISPERSION_DEVICE_REQUESTS + +Dispersion device (low level) requests. + +| Value | Name | Description | +| :---- | :------------------------------------ | :-------------------------------------------------------------------------- | +| 0 | DISPERSION_DEVICE_REQUESTS_DEFAULT | Stand in for no device request. | +| 1 | DISPERSION_DEVICE_REQUESTS_AUTO | Configure the dispersion device and mark ready for auto control | +| 2 | DISPERSION_DEVICE_REQUESTS_MANUAL_ON | Force the device to immediately deliver payload at configured rate | +| 3 | DISPERSION_DEVICE_REQUESTS_MANUAL_OFF | Ensure the device cannot be turned on by any auto source until reconfigured | +| 4 | DISPERSION_DEVICE_REQUESTS_AUTO_ON | Have device deliver payload at configured rate if configured for auto mode | +| 5 | DISPERSION_DEVICE_REQUESTS_AUTO_OFF | Have device stop delivering payload if configured for auto mode | + +## DISPERSION_DEVICE_ERRORS + +(Bitmask) Dispersion device (low level) error flags. Any error flag indicates the device has turned off. + +| Value | Name | Description | +| :---- | :-------------------------------------------------- | :---------------------------------------------------------- | +| 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error | +| 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged | +| 4 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed | +| 8 | DISPERSION_DEVICE_ERRORS_FILL_EMPTY | Device is empty | +| 16 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with device limits | +| 32 | DISPERSION_DEVICE_ERRORS_OVER_SPEED | System is moving faster than the device can deliver | +| 64 | DISPERSION_DEVICE_ERRORS_UNDER_SPEED | System is moving slower than the device can support | +| 128 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | +| 256 | DISPERSION_DEVICE_ERRORS_NO_CONFIGURATION | Device was not configured before trying to disperse payload | +| 512 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintain pressure as expected | +| 1024 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | + +## DISPERSION_DEVICE_WARNINGS + +(Bitmask) Dispersion device (low level) warning flags. Any warning flag indicates an issue that does not block operation of the device. + +| Value | Name | Description | +| :---- | :---------------------------------- | :-------------------------------------------- | +| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown error | +| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | + +# Commands + +## MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION + +Set dispersion device on/off setpoints (low rate command). This should only be sent by automated controllers. It is not for manual assignment nor initial configuration. + +| Param (Label) | Description | Values | +| :----------------------- | :----------------------------------------------------------------------------------------- | :------------------- | +| 1 (Device On) | Flag indicating if device should be on. This is the same as an AUTO_ON or AUTO_OFF request | 0: off, otherwise on | +| 2 target_dispersion_rate | Target dispersion rate for the system in liters/min or kg/min | Invalid:NaN | + +> [!IMPORTANT] this command is necessary to support turning the device on and off during a mission. It also allows control of dispersion rate. If a rate is not provided it defaults to device configuration set by [DISPERSION_DEVICE_REQUEST](#dispersion_device_request). diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md new file mode 100644 index 0000000..8eeba0a --- /dev/null +++ b/dispersion_protocol/microservice.md @@ -0,0 +1,171 @@ +# Dispersion Microservice + +## Introduction + +The dispersion protocol allows MAVLink control over the dispersion devices mounted on a vehicle from a variety of sources. The dispersion state can be managed manually by an operator in real time or set as part of an auto mission. + +The protocol also defines what information is published, in what order for key workflow sequences for developers, configurators, and users of the vehicle. + +The protocol supports a variety of hardware configurations, and enables dispersion systems with a variety of capabilities. + +## Concepts + +The dispersion device control requests fit into two main categories AUTO and MANUAL. A manual request will always override an AUTO command and should immediately take effect. MANUAL requests should be directly tied to a deliberate user action. An AUTO request, on the other hand, should only come from an automated control device and only be allowed if the dispersion device is configured for an AUTO mode before those control requests are received. + +### Common Hardware Set-ups + +This section outlines the most common hardware set-ups. All set-ups are based on the general understanding that some compute whether a companion device or autopilot is providing real time flight data and control to the dispersion device during an automated mission while another device might provide a user interface for manual control of the device. + +#### Dispersion Device Connected to Autopilot + +In this model an autopilot is connected the mavlink dispersion device and provides real time flight and control data during an automated mission and a user interface allows an operator to take over manual control. This concept applies whether the user interface computer directly communicates with the dispersion device or passes through the autopilot. + +![autopilot control dispersion device](autopilot_control.png) + +![autopilot control with manual pass through](autopilot_pass_through.png) + +#### Dispersion Device Connected to Companion Computer + +In this model a companion computer is connected the mavlink dispersion device and provides real time flight and control data during an automated mission and a user interface allows an operator to take over manual control. This concept applies whether the user interface computer directly communicates with the dispersion device or passes through the companion computer. + +![companion compute control dispersion device](companion_computer_control.png) + +![companion computer control with manual pass through](companion_computer_pass_through.png) + +### Logging + +The data outlined in this microservice is essential for compliance and efficacy of job done reporting. It is strongly recommended that this information be logged in a predictable manner. + +## Implementation and Messages + +### Discovery of Dispersion Device + +The MAVlink nodes that need to communicate with Dispersion Devices do so by sending a broadcast [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) for [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). Every dispersion device should respond with [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). + +The MAVLink node should then create as many interface instances as Dispersion Devices found. + +### Control of a Dispersion Device + +To control the pressure or dispersion rate of the Dispersion Device, use the message [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) with request type MANUAL_ON, or AUTO_ON and the associated parameters. Request types MANUAL_OFF and AUTO_OFF can be sent without parameters to turn off the device. Each request will be acked by a [DISPERSION_DEVICE_STATUS](#dispersion_device_status) with the request message's signature. The dispersion device will respond to control messages in the order that they are received. + +Autopilots can also use the mavlink command [MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) for real time dispersion device control but in a limited scope. This command with always be treated the same as either AUTO_ON or AUTO_OFF and the only parameter that can be assigned is the dispersion rate. + +> [!NOTE] +> Be discipline about conflicting control sources of the same type (MANUAL OR AUTO) as they will be processed in the order in which that are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. + +### Configure a Dispersion Device for Swappable Hardware + +To configure the Dispersion Device parameters due to in field configuration changes such as nozzle swapping, the [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) can be used with request type AUTO, MANUAL_ON, or AUTO_ON and by providing the software defined min/max dispersion rate and pressure map parameters. Each request will be acked by a [DISPERSION_DEVICE_STATUS](#dispersion_device_status) with the request message's signature. + +### Autopilot State for Dispersion Device + +The autopilot should also send the message [AUTOPILOT_STATE_FOR_DISPERSION_DEVICE](#autopilot_state_for_dispersion_device) to the dispersion device. This data is required by the Dispersion Device control system to make effective dynamic dispersion rate corrections based on system current and projected speed. It will also send the relevant [MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) commands when tagging the associated waypoints. + +### Dispersion Device Broadcast/Status Messages + +The dispersion device should send out its status in [DISPERSION_DEVICE_STATUS](#dispersion_device_status) at a regular rate, e.g. 10 Hz, and when key events such as a new request occurs. + +This message is a meant as broadcast, so it's sent to all parties on the network. + +## Messages/Command/Enum Summary + +This is the set of messages/enums for communication between a mavlink node and a dispersion device. + +| Message | Description | +| :------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) | Information about a low level dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | +| [DISPERSION_DEVICE_STATUS](#dispersion_device_status) | Message reporting the low level status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events such a flag change. | +| [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) | Low level message to control a dispersion device's application rate. For certain requests you can expect some parameters to be ignored. (e.g. a dispersion off request will not use any rate, pressure, or speed values) | +| [AUTOPILOT_STATE_FOR_DISPERSION_DEVICE](#autopilot_state_for_dispersion_device) | Low level message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | + +| Command | Description | +| :-------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) | Request the target system(s) emit a single instance of a specified message. This is used to request [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). | + +| Enum | Description | +| :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | +| [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Dispersion device low level capability flags (bitmap). Used in [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). | +| [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Flags for dispersion device (low level) operation (bitmap). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | +| [DISPERSION_DEVICE_REQUESTS](#dispersion_device_requests) | Dispersion device (low level) requests. Used in [DISPERSION_DEVICE_REQUEST](#dispersion_device_request). | +| [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Dispersion device (low level) error flags (bitmap, 0 means no error). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | + +## Sequences + +Depicted below are message sequences for common scenarios. + +### Discovery + +The following diagram shows a possible sequence on startup that enables a ground station to discover a dispersion device and get its associated information. + +![discovery sequence diagram](discovery_sequence.png) + +### Control / Configuration + +Control of the dispersion system should be event driven, though the dispersion device status should be both at a regular cadence as well as driven by key events such as dispersion on and dispersion off. This sequence applies to requesting dispersion on and off as well as manually configuring the dispersion device before starting an automated mission. The user has the ability to swap out nozzles fairly regularly so the configuration step is needed to handle nozzle specific configuration data. Each request message has a request type and optional parameters to support the different control and configuration needs. + +![manual control sequence diagram](control_sequence.png) + +### Autopilot Control + +For this case the dispersion device is controlled via an autopilot which can send dispersion control requests throughout an automated mission via the [MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) command. + +![autopilot control sequence diagram](mission_control_sequence.png) + +## How to Implement the Dispersion Device Interface + +### Messages to Send + +The messages listed should be broadcast on the network/on all connections (sent to everyone). + +[HEARTBEAT](https://mavlink.io/en/messages/common.html#HEARTBEAT) + +Heartbeats should always be sent (usually at 1 Hz). + +> [!WARNING] +> Dispersion devices that set their `sysid` from the autopilot will need to wait for the autopilot's heartbeat before emitting their own (note that if the dispersion device can receive heartbeats from multiple autopilots then the `sysid` must be explicitly/statically configured). + +- `sysid`: the same sysid as the autopilot (this can either be done by configuration, or by listening to the autopilot's heartbeat first and then copying the sysid, default: 1) +- `compid`: [MAV_COMP_ID_DISPERSIONER](#mav_comp_id_dispersion) +- `type`: [MAV_TYPE_DISPERSIONER](#mav_type_dispersion) +- `autopilot`: [MAV_AUTOPILOT_INVALID](https://mavlink.io/en/messages/common.html#MAV_AUTOPILOT_INVALID) +- `base_mode`: 0 +- `custom_mode`: 0 +- `system_status`: `MAV_STATE_UNINIT` + +[DISPERSION_DEVICE_STATUS](#dispersion_device_status) + +The dispersion device should out its status at a regular rate, e.g. 10 Hz and on key events like dispersion on and dispersion off. The fields like target_system and target_component can be set to 0 (broadcast) by default. + +[DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) + +The static information about the dispersion device needs to be sent out when requested using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). + +### Messages to Listen To/Handle + +[DISPERSION_DEVICE_REQUEST](#dispersion_device_request) + +This is the request that the dispersion device should follow. The primary purpose is to turn on and off the dispersion system but this can also be used for run time dispersion system configuration. + +[MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) + +This is a subset of the [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) brought into the Mavlink command structure so that autopilots can easily integrate control functionality into automated missions. + +[AUTOPILOT_STATE_FOR_DISPERSION_DEVICE](#autopilot_state_for_dispersion_device) + +The dispersion device should be able to get all the information from the autopilot that it requires in this one message. If something is missing that should be streamed at a high rate, it should be added to this message. + +If this message is not sent by default by the autopilot, or the rate is not ok, the command [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) can be used to request it at a certain rate. + +[COMMAND_LONG](https://mavlink.io/en/messages/common.html#COMMAND_LONG) + +The dispersion device needs to check for commands. See below which commands should get answered. + +### Commands to Answer + +[MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) + +The dispersion device should send out messages when they get requested, e.g. DISPERSION_DEVICE_INFORMATION. + +[MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) + +The dispersion device should stream messages at the rate requested. diff --git a/dispersion_protocol/mission_control_sequence.png b/dispersion_protocol/mission_control_sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..091128591f5405cabfe38087c4839e5ead4d1581 GIT binary patch literal 55485 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

|zcf;myaH$e0K#A#FE@K3 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 H`R9KCdUpR- literal 0 HcmV?d00001 diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md new file mode 100644 index 0000000..181ecf5 --- /dev/null +++ b/text/0020-dispersion-payload.md @@ -0,0 +1,76 @@ +# Dispersion Payload Protocol + +- Start date: 2025-02-18 +- Contributors: Wesley Murray , ... +- Related issues: N/A + +## Summary + +The scope of this document is to define a message definition set and protocol for interacting with a dispersion payload to ensure effective control as well as compliance and efficacy reporting. The goal is to create an agreed-on standard for what data is necessary and how it should be used so that there can be more transparency in the UAV crop protection space. + +## Motivation + +There is an increasing demand for using UAVs to deliver chemicals in agriculture for crop protection. This most commonly happens in the form of sprayers or spreaders. Sprayers are typically for liquid payloads and spreaders for granualar solids. This has resulted on many indepent solutions to the problem, all using their own version of a black box. This often leaves aerial applicators unable to provide transparency into their service from a regulatory compliance side of things or for customer satisfaction in a situation where very hazardous chemical are frequently applied. This should not be the case. + +From the technical side of things, the concept of operations around agricultural applications provide the opportunity to push the techical envelope without a safety risk to people. Thus expanding MAVLink support into the space will inherently increase adoption of MAVLink which will help validate other aspects of the standard in an unstructured enviornment. So putting a little investment in agriculture specific solutions IMO has out sized benefits. + +## Detailed Design + +### Background + +For those not familiar with aerial application in Agriculture, I strongly recommend using the [Aerial Applicator's Manual](https://www.epa.gov/system/files/documents/2023-11/national-aerial-applicator-manual-2014.pdf). Specifically Chapter 4. + +I used the [MAVLink Gimbal Protocol](https://mavlink.io/en/services/gimbal_v2.html) as my template. I must admit that I do not like the concept of splitting the manager and device. I think it over complicates but I still followed the pattern since there is context I am likely missing. In this PR you will see a proposal that is the device only, but adding on the manager layer is pretty trivial. That being said, I would like to see strong justification for the addition of a manager before I will agree to add it in during the implementation. + +### Test Cases + +A procotol can be very difficult to analyze in isolation so I started by creating the following set of test cases. These test cases are effectively situations and workflows the protocol must support to provide any value. I then used the proposed protocol to accomplish said test cases. This is an excellent review point for industry specific individuals who might not have a technical background. For those with a technical background this is still a useful starting point because it provides context. + +[x] user needs to manually rinse out the system and must be able to control via some sort of interface (physical or digital) +[x] user might need to stop spray mid flight for an emergency without the autopilot being able to override +[x] payload gets overfilled during servicing +[x] payload is not full enough when trying to take off +[x] clogged nozzle during flight +[x] motor (spray pump, or spreader motor) failure during flight +[x] spray system leaks +[x] autopilot control of spray system +[x] aircraft exceeds speed at which the device can keep up +[x] device is turned on before aircraft is at minimum speed +[x] dynamically adjust deposition rate based on aircraft speed +[x] get payload information for planning (ie lead in/out distances, spray leg length, etc) + + - Swath width will be configured during planning so OOS + +[x] data for compliance and efficancy reporting can be extracted + + - Factors that cannot be known by the dispersion device is OOS and can be collected in other parts of the system (ie wind, chemical being applied, etc) + +[x] payload is at target fill and ready to go +[x] spot spraying. This happens at the planning level. This protocol supports setting flow rate at specific locations which is enough for spot spraying. +[x] communication buses might be lossy so protocol must handle failure detection. + +### Implementation + +After reviewing other submissions, I think I might have gone too far down this path but I wanted something complete to get reviewed by industry relevant people in my network before submitting here to the MAVLink community. I created a messages.md file with the full set of message definitions and a microservice.md file detailing how the protocol should work that is submitted with this PR. I have a couple of versions: one with a manager and one without. I used the one without because it is less complex and conveys the same concept. + +### Questions + +1. This is a combined protocol for spraying and spreading since there are many common elements. Should this be split up? +1. For any kind of effective reporting, not only do the messages needs to be defined but there should also be a degree of standardization on how that information gets logged so utilities can interact with it. Making logging suggestions seemed out of scope here but is there anything I should add to nudge people in the right direction? +1. Is a dispersion manager needed? I genuinely believe the source should not matter. Anything should be able to send a request and it get processed in the order it is received. The only time any prioritization should occur is manual triggers vs automated. No this could be handled through a manager but it is pretty easy implement with just the deivce using the MANUAL vs AUTO request type. I also expect there to be multiple possible viable sources for manual on/off live at any given moment. All should be immediately respected. I feel like the overhead with a manager only allowign two control sources could make this over complicated. +1. Am I missing any critical workflows or test cases? Ie Debug level motor controller and motor information (deemed out of scope, should be a separate protocol for general motor controller and motor information) + +## Alternatives + +1. Do nothing. Solutions are already evolving organically. While the problem will be solved, it is subject to the issues documented in the motivation section. +1. Create documentation on how to use the generic payload messaging infrastructure to accomplish this goal. (I think this will lose a lot of critical information) + +## References + +- Aerial Applicator's Manual: https://www.epa.gov/system/files/documents/2023-11/national-aerial-applicator-manual-2014.pdf +- MAVLink Gimbal Protocol: https://mavlink.io/en/services/gimbal_v2.html +- XAG P150: https://www.xa.com/en/p150 +- DJI Agras T40: https://www.dji.com/t40 +- Hylio: https://www.hyl.io/ +- Rotor: https://rotor.ai/ +- Guardian Agriculture: https://guardian.ag/ \ No newline at end of file From f880e74740e6f5436573478878a2da2bd86fe923 Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 18 Feb 2025 15:35:28 -0500 Subject: [PATCH 02/23] add pyka reference --- text/0020-dispersion-payload.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 181ecf5..5ec4081 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -73,4 +73,5 @@ After reviewing other submissions, I think I might have gone too far down this p - DJI Agras T40: https://www.dji.com/t40 - Hylio: https://www.hyl.io/ - Rotor: https://rotor.ai/ -- Guardian Agriculture: https://guardian.ag/ \ No newline at end of file +- Guardian Agriculture: https://guardian.ag/ +- PYKA: https://www.flypyka.com/ \ No newline at end of file From 18de87307cfb54527bab8516e10a6dd42122607c Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 18 Feb 2025 15:47:39 -0500 Subject: [PATCH 03/23] address come typos --- text/0020-dispersion-payload.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 5ec4081..c5242d1 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -10,9 +10,9 @@ The scope of this document is to define a message definition set and protocol fo ## Motivation -There is an increasing demand for using UAVs to deliver chemicals in agriculture for crop protection. This most commonly happens in the form of sprayers or spreaders. Sprayers are typically for liquid payloads and spreaders for granualar solids. This has resulted on many indepent solutions to the problem, all using their own version of a black box. This often leaves aerial applicators unable to provide transparency into their service from a regulatory compliance side of things or for customer satisfaction in a situation where very hazardous chemical are frequently applied. This should not be the case. +There is an increasing demand for using UAVs to deliver chemicals in agriculture for crop protection. This most commonly happens in the form of sprayers or spreaders. Sprayers are typically for liquid payloads and spreaders for granular solids. This has resulted in many indepent solutions to the problem, all using their own version of a black box. This often leaves aerial applicators unable to provide transparency into their service from a regulatory compliance side of things or for customer satisfaction in a situation where very hazardous chemical are frequently applied. This should not be the case. -From the technical side of things, the concept of operations around agricultural applications provide the opportunity to push the techical envelope without a safety risk to people. Thus expanding MAVLink support into the space will inherently increase adoption of MAVLink which will help validate other aspects of the standard in an unstructured enviornment. So putting a little investment in agriculture specific solutions IMO has out sized benefits. +From the technical side of things, the concept of operations around agricultural applications provide the opportunity to push the techical envelope without a safety risk to people. Thus, expanding MAVLink support into the space will inherently increase adoption of MAVLink which will help validate other aspects of the standard in an unstructured enviornment. So putting a little investment in agriculture specific solutions IMO has out sized benefits. ## Detailed Design @@ -20,7 +20,7 @@ From the technical side of things, the concept of operations around agricultural For those not familiar with aerial application in Agriculture, I strongly recommend using the [Aerial Applicator's Manual](https://www.epa.gov/system/files/documents/2023-11/national-aerial-applicator-manual-2014.pdf). Specifically Chapter 4. -I used the [MAVLink Gimbal Protocol](https://mavlink.io/en/services/gimbal_v2.html) as my template. I must admit that I do not like the concept of splitting the manager and device. I think it over complicates but I still followed the pattern since there is context I am likely missing. In this PR you will see a proposal that is the device only, but adding on the manager layer is pretty trivial. That being said, I would like to see strong justification for the addition of a manager before I will agree to add it in during the implementation. +I used the [MAVLink Gimbal Protocol](https://mavlink.io/en/services/gimbal_v2.html) as my template. I must admit, I do not like the concept of splitting the manager and device. I think it over complicates the protocol but I still followed the pattern since there is context I am likely missing. In this PR you will see a proposal that is the device only, but adding on the manager layer is pretty trivial. That being said, I would like to see strong justification for the addition of a manager before I will agree to add it in during the implementation. ### Test Cases From 93e51a93dda9a32f307d177b41be91429f53bf6a Mon Sep 17 00:00:00 2001 From: Wesley Murray <77159128+wes-public-apps@users.noreply.github.com> Date: Thu, 20 Feb 2025 08:32:52 -0500 Subject: [PATCH 04/23] Remove target component and system since this is a broadcast Co-authored-by: Hamish Willee --- dispersion_protocol/messages.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index 53f0250..c3f369d 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -28,8 +28,6 @@ This message should be published a low regular rate (e.g. 5 Hz) but also during | Field Name | Type | Units | Values | Description | | :---------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :----------------------------------------------------------------------------- | -| target_system | `uint8_t` | | | System ID uniquely identifying the vehicle this payload device is attached to | -| target_component | `uint8_t` | | | Component ID uniquely identifying this device on the system | | timestamp_ns | `uint64_t` | ns | | Unix time stamp | | flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | | failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | From 54ee701223b0e91163b7d0c61eb9e798ce570ead Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 25 Feb 2025 14:07:16 -0500 Subject: [PATCH 05/23] v2 - switch to command infrastructure and document as standalone mavlink device --- dispersion_protocol/autopilot_control.png | Bin 32399 -> 0 bytes .../autopilot_pass_through.png | Bin 38238 -> 0 bytes .../companion_computer_control.png | Bin 32118 -> 0 bytes .../companion_computer_pass_through.png | Bin 38794 -> 0 bytes .../configuration_sequence.png | Bin 0 -> 82272 bytes dispersion_protocol/control_sequence.png | Bin 34297 -> 97241 bytes dispersion_protocol/hardware_config.png | Bin 0 -> 78699 bytes dispersion_protocol/messages.md | 212 ++++++++---------- dispersion_protocol/microservice.md | 180 +++++++++------ .../mission_control_sequence.png | Bin 55485 -> 0 bytes text/0020-dispersion-payload.md | 29 ++- 11 files changed, 232 insertions(+), 189 deletions(-) delete mode 100644 dispersion_protocol/autopilot_control.png delete mode 100644 dispersion_protocol/autopilot_pass_through.png delete mode 100644 dispersion_protocol/companion_computer_control.png delete mode 100644 dispersion_protocol/companion_computer_pass_through.png create mode 100644 dispersion_protocol/configuration_sequence.png create mode 100644 dispersion_protocol/hardware_config.png delete mode 100644 dispersion_protocol/mission_control_sequence.png diff --git a/dispersion_protocol/autopilot_control.png b/dispersion_protocol/autopilot_control.png deleted file mode 100644 index 4ae55e32e7c3a4bae6e59da1e78a829c864f845e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32399 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

CV2^zWg?W@)q=SV?&NfHDz(Mp^{Z8-DJ#_ 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 z z;eZr#YU7_v5Iv!3C+50P(9BRS!}@BmX_iNLDkS8YHeC7iMPYfp@Z>L?UWg&*B=*dz z6_(LZHPMyzSXY(sz!gLUBIM@GlLP*MA7xi2(=1L4x?JXa`F*OnM7D;}Uqzu5@ z5EV;c7#K$?*soQswVj*$*wWE!o#wmh;n*>>#IM>lWnDrg4bjmOH@R*+XH|c)@ zRrY2|sc*`>8&@XbPt6OA8SvI-1VwT~g#x0!5I~DXpZ7m@{Z``-%rT$!bp4nP9g0uC z=t&rpMyXMYdO0wSoa!yo#brRO#b7S0iuhy|wB{d34kj zziKu33QATiI4{mR=T8D|uGya*2}(H$^v(R2^q&gU)tZW2#6~XU=D||qipTC@F&)oCLqgDr`MJ<#UYjGGp?ccJ68;~| zesCblA_3_-rd+j?U9iUnr#AJsC15z8RZb9th0Ez4Uo(E@zd|vVdjGp%cunH&sUK*| z^#|Ef#h^usZLo#bAJ@Y-Q)I#P%DSU;CV@-LCgcYFIDeU1ya0YGRQZwR2Pv~TNsoxJ6D z+(gksI5AZzix@$PH)d+FNj=be%t}2cBhcPycG-?5f%vbBbK=N|j6$!I%ev)BRY%1} zxD1yRHzz2_MH8>dWY7Pm6uV;dN2g3n1AqG|P|U!PZ&8Q;@CPEguiX}ctYoX$KO!Wp zdj19n0`to)tiNL!zdwUVh%o%?1>g%=p7ryepZffKaoZ3) R>*T-z9W8xC{-s+_{sU?z703Vp diff --git a/dispersion_protocol/autopilot_pass_through.png b/dispersion_protocol/autopilot_pass_through.png deleted file mode 100644 index 575365439bc742cfa81d592a0c2331f54ea68e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38238 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

Z*sQjKdAF&uQ)kS*AkC%kB5FB4{ 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 YS0qXKoGH8sxdMJ^sp+ehDcgkp56UDwQ~&?~ literal 0 HcmV?d00001 diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index c3f369d..b145f06 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -2,7 +2,7 @@ ## DISPERSION_DEVICE_INFORMATION -Information about a low level dispersion device. This message should be requested by a source such as the ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. +Information about a dispersion device. This message should be requested by a source such as the ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | Field Name | Type | Units | Values | Description | | :------------------ | :--------- | :------------------: | :---------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- | @@ -15,72 +15,30 @@ Information about a low level dispersion device. This message should be requeste | uid | `uint64_t` | | Invalid:0 | Integer to uniquely identify this hardware. (0 if unknown) | | cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device capability flags. | | custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. flags. | +| logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | | dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN, <0 | Minimum dispersion rate this device can support | | dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN, <=0 | Maximum dispersion rate this device can support | | pressure_min | `uint32_t` | Pa | | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | | pressure_max | `uint32_t` | Pa | invalid:0 | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | +| max_capacity | `float` | liters or kg | invalid:NaN, <=0 | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders | ## DISPERSION_DEVICE_STATUS -Message reporting the low level status of a dispersion device. - -This message should be published a low regular rate (e.g. 5 Hz) but also during key events such a flag change. It should also be published in response to a request. - -| Field Name | Type | Units | Values | Description | -| :---------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :----------------------------------------------------------------------------- | -| timestamp_ns | `uint64_t` | ns | | Unix time stamp | -| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | -| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | -| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | -| custom_codes | `uint8_t` | | | Leave some flexibility for device specific custom state reporting | -| dispersion_rate | `float` | liters/min or kg/min | invalid:<0 | Current dispersion rate of the device | -| fill_level | `uint16_t` | liters or kg | | Current tank fill level. | -| pressure | `uint32_t` | Pa | | Current pressure of the dispersion system | -| request_signature | `char[6]` | | invalid:[0] | Message signature for most recently processed device request. | - -## DISPERSION_DEVICE_REQUEST - -Low level message to control a dispersion device. The core set of requests are on, off, and auto. Manual on immediately turns the system on at the configured rate until it is turned off. Manual off turns off the system immediately and makes the system ignore any corrections comming from an automated system. Only on use of the auto request will the system be configured and ready for automatic input again. All three request types are necessary to effectively handle emergency situations. These requests are acked through the [DISPERSION_DEVICE_STATUS](#dispersion_device_status) message request_signature field. - -| Field Name | Type | Units | Values | Description | -| :--------------------- | :--------- | :------------------: | :-------------------------------------------------------- | :---------------------------------------------------------------------------------------- | -| target_system | `uint8_t` | | | System ID uniquely identifying the vehicle this payload device is attached to | -| target_component | `uint8_t` | | | Component ID uniquely identifying this device on the system | -| timestamp_ns | `uint64_t` | ns | | Unix time stamp | -| requests | `uint16_t` | | [DISPERSION_DEVICE_REQUESTS](#dispersion_device_requests) | Request changes to dispersion device | -| target_speed | `float` | m/s | | Target system speed for target dispersion rate | -| target_dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Target system dispersion rate within the range specified below. | -| target_fill_level | `uint16_t` | liters or kg | | Target dispersion device payload amount for mission | -| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate the current configuration supports | -| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate the current configuration supports | -| pressure_min | `uint32_t` | Pa | | If this is a spray dispersion system, minimum pressure the current configuration supports | -| pressure_max | `uint32_t` | Pa | invalid:0 | If this is a spray dispersion system, maximum pressure the current configuration supports | - -> [!IMPORTANT] -> We must provide limits for pressure and rate of spray systems at runtime since it is customary to change nozzles based on the target job. The nozzle configurations support variable flow rates up to a point. They have upper and lower limits and each configuration is different. We therefore provide both pressure and flow rate factors to enable mapping between the sets. This is critical for dynamic spray control relative to speed which is essential for keeping lead in and lead out distances short. The problem with flow rate only is that systems might be slow to get from their minimum pressure to target flow rate. With a pressure range the system can stay at the target minimum pressure before turning the system on giving it instant correct flow rate. I would be open to arguments for removing the pressure requirement in order to simplify the protocol, but it seems essential to me. - -## AUTOPILOT_STATE_FOR_DISPERSION_DEVICE - -Low level message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the device component. The data of this message are for the device estimator corrections such as speed or wind rejection compensation. - -| Field Name | Type | Units | Values | Description | -| :------------------------------ | :--------- | :---: | :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| target_system | `uint8_t` | | | System ID uniquely identifying the vehicle this payload device is attached to | -| target_component | `uint8_t` | | | Component ID uniquely identifying this device on the system | -| timestamp_ns | `uint64_t` | ns | | Unix time stamp | -| q | float[4] | | | Quaternion components of autopilot attitude: w, x, y, z (1 0 0 0 is the null-rotation, Hamilton convention). | -| q_estimated_delay_us | uint32_t | us | invalid:0 | Estimated delay of the attitude data. 0 if unknown. | -| vx | float | m/s | invalid:NaN | X Speed in NED (North, East, Down). NAN if unknown. | -| vy | float | m/s | invalid:NaN | Y Speed in NED (North, East, Down). NAN if unknown. | -| vz | float | m/s | invalid:NaN | Z Speed in NED (North, East, Down). NAN if unknown. | -| v_estimated_delay_us | uint32_t | us | invalid:0 | Estimated delay of the speed data. 0 if unknown. | -| feed_forward_angular_velocity_z | float | rad/s | invalid:NaN | Feed forward Z component of angular velocity (positive: yawing to the right). NaN to be ignored. This is to indicate if the autopilot is actively yawing. | -| estimator_status | uint16_t | | [ESTIMATOR_STATUS_FLAGS](https://mavlink.io/en/messages/common.html#ESTIMATOR_STATUS_FLAGS) | Bitmap indicating which estimator outputs are valid. | -| landed_state | uint8_t | | invalid:MAV_LANDED_STATE_UNDEFINED MAV_LANDED_STATE | The landed state. Is set to [MAV_LANDED_STATE_UNDEFINED](https://mavlink.io/en/messages/common.html#MAV_LANDED_STATE_UNDEFINED) if landed state is unknown. | -| angular_velocity_z | float | rad/s | invalid:NaN | Z component of angular velocity in NED (North, East, Down). NaN if unknown. | - -> [!QUESTION] -> This table is an exact clone of AUTOPILOT_STATE_FOR_GIMBAL_DEVICE because it felt like a good representation of the information a dispersion controller might need to deliver quality corrections. It at a minimum needs velocity. Can we just use something like GLOBAL_POS_INT or the GIMBAL message? I dont love the redundancy. +Message reporting the status of a dispersion device. + +This message should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. + +| Field Name | Type | Units | Values | Description | +| :-------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp_ns | `uint64_t` | ns | | Unix time stamp | +| dispersion_type | `uint32_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | +| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | +| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | +| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | +| custom_codes | `uint8_t` | | | Leave some flexibilty for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | +| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. | +| fill_level | `uint16_t` | liters or kg | | Current tank fill level. This field should be ignored if the device capability flags indicate fill level detection is not supported. | +| pressure | `uint32_t` | Pa | | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | # Enumerated Types @@ -88,10 +46,10 @@ Low level message containing autopilot state relevant for a dispersion device. T MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA). -| Value | Name | Description | -| :---- | :-------------------------------------------------------- | :----------------------------------- | -| ... | ... | ... | -| 45 | MAV_TYPE_DISPERSION | A device that can disperse a payload | +| Value | Name | Description | +| :---- | :------------------ | :----------------------------------- | +| ... | ... | ... | +| 45 | MAV_TYPE_DISPERSION | A device that can disperse a payload | ## MAV_COMPONENT @@ -99,11 +57,21 @@ Component ids (values) for the different types and instances of onboard hardware Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components. When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded. -| Value | Name | Description | -| :---- | :-------------------------------------------------------------- | :------------------- | -| ... | ... | ... | -| 110 | MAV_COMP_ID_DISPERSION | Dispersion device #1 | -| ... | ... | ... | +| Value | Name | Description | +| :---- | :--------------------- | :------------------- | +| ... | ... | ... | +| 110 | MAV_COMP_ID_DISPERSION | Dispersion device #1 | +| ... | ... | ... | + +## MAV_DISPERSION_TYPE + +The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. + +| Value | Name | Description | +| :---- | :-------------------------- | :------------------------------------------------------------------------------------------------------------------ | +| 0 | MAV_DISPERSION_TYPE_UNKNOWN | Not specified | +| 1 | MAV_DISPERSION_TYPE_SPRAY | A generic liquid payload is being dispersed. Units are in Liters for capacity and Liters/min for dispersion rate | +| 2 | MAV_DISPERSION_TYPE_SPREAD | A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate | ## DISPERSION_DEVICE_CAP_FLAGS @@ -111,34 +79,21 @@ Components must use the appropriate ID in their source address when sending mess | Value | Name | Description | | :---- | :---------------------------------------------------- | :-------------------------------------------------------------------------------- | -| 1 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | -| 2 | DISPERSION_DEVICE_CAP_FLAGS_SPRAYER | Device supports dispersing liquid payloads. | -| 4 | DISPERSION_DEVICE_CAP_FLAGS_SPREADER | Device supports dispersing granular payloads. | +| 1 | DISPERSION_DEVICE_CAP_FLAGS_SPRAYER | Device supports dispersing liquid payloads. | +| 2 | DISPERSION_DEVICE_CAP_FLAGS_SPREADER | Device supports dispersing granular payloads. | +| 4 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | | 8 | DISPERSION_DEVICE_CAP_FILL_LEVEL_DETECTION | Device supports measuring its own fill level. | ## DISPERSION_DEVICE_STATUS_FLAGS (Bitmask) Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. -| Value | Name | Description | -| :---- | :-------------------------------------------- | :----------------------------------------------------------- | -| 1 | DISPERSION_DEVICE_STATUS_FLAGS_DISPERSION_ON | Dispersion device is delivering payload | -| 2 | DISPERSION_DEVICE_STATUS_FLAGS_AUTO_MODE | True if in auto mode. False if in manual mode. | -| 4 | DISPERSION_DEVICE_STATUS_FLAGS_CONFIGURED | System has necessary parameters to properly disperse payload | -| 8 | DISPERSION_DEVICE_STATUS_FLAGS_FILL_AT_TARGET | Dispersion device tank is filled to target amount | - -## DISPERSION_DEVICE_REQUESTS - -Dispersion device (low level) requests. - -| Value | Name | Description | -| :---- | :------------------------------------ | :-------------------------------------------------------------------------- | -| 0 | DISPERSION_DEVICE_REQUESTS_DEFAULT | Stand in for no device request. | -| 1 | DISPERSION_DEVICE_REQUESTS_AUTO | Configure the dispersion device and mark ready for auto control | -| 2 | DISPERSION_DEVICE_REQUESTS_MANUAL_ON | Force the device to immediately deliver payload at configured rate | -| 3 | DISPERSION_DEVICE_REQUESTS_MANUAL_OFF | Ensure the device cannot be turned on by any auto source until reconfigured | -| 4 | DISPERSION_DEVICE_REQUESTS_AUTO_ON | Have device deliver payload at configured rate if configured for auto mode | -| 5 | DISPERSION_DEVICE_REQUESTS_AUTO_OFF | Have device stop delivering payload if configured for auto mode | +| Value | Name | Description | +| :---- | :-------------------------------------------- | :------------------------------------------------------------- | +| 1 | DISPERSION_DEVICE_STATUS_FLAGS_DISPERSION_ON | Dispersion device is delivering payload | +| 2 | DISPERSION_DEVICE_STATUS_FLAGS_LOCKED | Dispersion device is locked and wont respond to control inputs | +| 4 | DISPERSION_DEVICE_STATUS_FLAGS_CONFIGURED | System has necessary parameters to properly disperse payload | +| 8 | DISPERSION_DEVICE_STATUS_FLAGS_FILL_AT_TARGET | Dispersion device tank is filled to target amount | ## DISPERSION_DEVICE_ERRORS @@ -149,33 +104,64 @@ Dispersion device (low level) requests. | 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error | | 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged | | 4 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed | -| 8 | DISPERSION_DEVICE_ERRORS_FILL_EMPTY | Device is empty | -| 16 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with device limits | -| 32 | DISPERSION_DEVICE_ERRORS_OVER_SPEED | System is moving faster than the device can deliver | -| 64 | DISPERSION_DEVICE_ERRORS_UNDER_SPEED | System is moving slower than the device can support | -| 128 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | -| 256 | DISPERSION_DEVICE_ERRORS_NO_CONFIGURATION | Device was not configured before trying to disperse payload | -| 512 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintain pressure as expected | -| 1024 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | +| 8 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with device limits | +| 16 | DISPERSION_DEVICE_ERRORS_OVER_SPEED | System is moving faster than the device can deliver | +| 32 | DISPERSION_DEVICE_ERRORS_UNDER_SPEED | System is moving slower than the device can support | +| 64 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | +| 128 | DISPERSION_DEVICE_ERRORS_NO_CONFIGURATION | Device was not configured before trying to disperse payload | +| 256 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintain pressure as expected | +| 512 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | ## DISPERSION_DEVICE_WARNINGS (Bitmask) Dispersion device (low level) warning flags. Any warning flag indicates an issue that does not block operation of the device. -| Value | Name | Description | -| :---- | :---------------------------------- | :-------------------------------------------- | -| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown error | -| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | +| Value | Name | Description | +| :---- | :---------------------------------------------------- | :----------------------------------------------------- | +| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown error | +| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | +| 4 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_DETECTOR_BROKEN | There is an issue with the fill level detector system. | # Commands -## MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION - -Set dispersion device on/off setpoints (low rate command). This should only be sent by automated controllers. It is not for manual assignment nor initial configuration. - -| Param (Label) | Description | Values | -| :----------------------- | :----------------------------------------------------------------------------------------- | :------------------- | -| 1 (Device On) | Flag indicating if device should be on. This is the same as an AUTO_ON or AUTO_OFF request | 0: off, otherwise on | -| 2 target_dispersion_rate | Target dispersion rate for the system in liters/min or kg/min | Invalid:NaN | - -> [!IMPORTANT] this command is necessary to support turning the device on and off during a mission. It also allows control of dispersion rate. If a rate is not provided it defaults to device configuration set by [DISPERSION_DEVICE_REQUEST](#dispersion_device_request). +## MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS + +This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. + +| Param (Label) | Description | Values | +| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | +| 1 dispersion_type | The type of dispersion this device supports. This indicates target units as outlined in enum | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | +| 2 reference_speed | The target speed for which any target dispersion rate applies, since the rate should change with speed | Invalid:NaN Units: m/s | +| 3 dispersion_rate_min | Minimum dispersion rate the current configuration supports | liters/min or kg/min | +| 4 dispersion_rate_max | Maximum dispersion rate the current configuration supports | liters/min or kg/min | +| 5 pressure_min | If this is a spray dispersion system, minimum pressure the current configuration supports | Invalid:NaN, <0 Units:Pa | +| 6 pressure_max | If this is a spray dispersion system, maximum pressure the current configuration supports | Invalid:NaN, [!NOTE] -> Be discipline about conflicting control sources of the same type (MANUAL OR AUTO) as they will be processed in the order in which that are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. +![sequence diagram for control messages](control_sequence.png) -### Configure a Dispersion Device for Swappable Hardware +> [!NOTE] +> Be discipline about conflicting control sources that are not the lock, as they will be processed in the order in which that are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. -To configure the Dispersion Device parameters due to in field configuration changes such as nozzle swapping, the [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) can be used with request type AUTO, MANUAL_ON, or AUTO_ON and by providing the software defined min/max dispersion rate and pressure map parameters. Each request will be acked by a [DISPERSION_DEVICE_STATUS](#dispersion_device_status) with the request message's signature. +> [!NOTE] +> The [MAV_CMD_SET_DISPERSION_DEVICE_LOCK](#mav-cmd-set-dispersion-device-lock) messages should only be used as an emergency shutoff. All normal control should happen through the [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) message. As an example, the lock message should be used to shut off the spray system when taking fallback actions like landing in place or returning home. The lock should not be used to turn the dispersion on or off at waypoints in an automated mission. In fact, a normal mission in general should never need to use the lock. ### Autopilot State for Dispersion Device -The autopilot should also send the message [AUTOPILOT_STATE_FOR_DISPERSION_DEVICE](#autopilot_state_for_dispersion_device) to the dispersion device. This data is required by the Dispersion Device control system to make effective dynamic dispersion rate corrections based on system current and projected speed. It will also send the relevant [MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) commands when tagging the associated waypoints. +The autopilot should send the [GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) message to the dispersion device. This data is required by the Dispersion Device control system to make effective dynamic dispersion rate corrections based on system current speed. This message is not as critical as the timing for dispersion on and off but it does have an impact on coverage quality. A relatively low rate publish frequency of 10Hz or faster is likely ample. ### Dispersion Device Broadcast/Status Messages -The dispersion device should send out its status in [DISPERSION_DEVICE_STATUS](#dispersion_device_status) at a regular rate, e.g. 10 Hz, and when key events such as a new request occurs. +The dispersion device should send out its status in [DISPERSION_DEVICE_STATUS](#dispersion_device_status) at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. This message is a meant as broadcast, so it's sent to all parties on the network. @@ -71,47 +71,89 @@ This message is a meant as broadcast, so it's sent to all parties on the network This is the set of messages/enums for communication between a mavlink node and a dispersion device. -| Message | Description | -| :------------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) | Information about a low level dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | -| [DISPERSION_DEVICE_STATUS](#dispersion_device_status) | Message reporting the low level status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events such a flag change. | -| [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) | Low level message to control a dispersion device's application rate. For certain requests you can expect some parameters to be ignored. (e.g. a dispersion off request will not use any rate, pressure, or speed values) | -| [AUTOPILOT_STATE_FOR_DISPERSION_DEVICE](#autopilot_state_for_dispersion_device) | Low level message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | +| Message | Description | +| :------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information) | Information about te dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | +| [DISPERSION_DEVICE_STATUS](#dispersion-device-status) | Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events. | +| [GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) | Message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | + +| Command | Description | +| :-------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) | Request the target system(s) emit a single instance of a specified message. This is used to request [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). | +| [MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav-cmd-config-dispersion-device-params) | This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. | +| [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) | Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav_cmd_config_dispersion_device_params). | +| [MAV_CMD_SET_DISPERSION_DEVICE_LOCK](#mav-cmd-set-dispersion-device-lock) | Command for locking/unlocking the device from responding to [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) messages. When locked, the device should stop dispersing. | + +| Enum | Description | +| :---------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | +| [DISPERSION_DEVICE_CAP_FLAGS](#dispersion-device-cap-flags) | Dispersion device capability flags (bitmap). Used in [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). | +| [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion-device-status-flags) | Flags for dispersion device operation (bitmap). Used in [DISPERSION_DEVICE_STATUS](#dispersion-device-status). | +| [DISPERSION_DEVICE_ERRORS](#dispersion-device-errors) | Dispersion device error flags (bitmap, 0 means no error). Used in [DISPERSION_DEVICE_STATUS](#dispersion-device-status). | +| [DISPERSION_DEVICE_WARNINGS](#dispersion-device-warnings) | Dispersion device warning flags (bitmap, 0 means no warning). Used in [DISPERSION_DEVICE_STATUS](#dispersion-device-status). | +| [MAV_DISPERSION_TYPE](#mav-dispersion-type) | The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. | + +## How to Implement the Dispersion Device Interface -| Command | Description | -| :-------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) | Request the target system(s) emit a single instance of a specified message. This is used to request [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). | +### Additional Microservice Dependencies -| Enum | Description | -| :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | -| [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Dispersion device low level capability flags (bitmap). Used in [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). | -| [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Flags for dispersion device (low level) operation (bitmap). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | -| [DISPERSION_DEVICE_REQUESTS](#dispersion_device_requests) | Dispersion device (low level) requests. Used in [DISPERSION_DEVICE_REQUEST](#dispersion_device_request). | -| [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Dispersion device (low level) error flags (bitmap, 0 means no error). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | +The disperison device is targeted to be a stand alone MAVLink device meaning it needs to support some existing MAVLink microservices beyond the dispersion microservice outlines above. The following microservices are required: -## Sequences +- [Heartbeat/Connection](https://mavlink.io/en/services/heartbeat.html) +- [Command](https://mavlink.io/en/services/command.html) +- [File Transfer Protocol](https://mavlink.io/en/services/ftp.html) +- [Ping](https://mavlink.io/en/services/ping.html) +- [Time Synchronization](https://mavlink.io/en/services/timesync.html) -Depicted below are message sequences for common scenarios. +### Logging Implementation -### Discovery +#### File Management -The following diagram shows a possible sequence on startup that enables a ground station to discover a dispersion device and get its associated information. +The dispersion device must be hosting a MAVFTP server to facilite the offloading of generated log data. -![discovery sequence diagram](discovery_sequence.png) +The device should be continuously logging every message in full fidelity using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with it's count like follows: log.dspf, log.dspf.1, log.dspf.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.dspf.12". -### Control / Configuration +There should be an additional abbreviated log file that only logs during key events such as while dispersion is on or there are device errors. A configurable rolling window of messages (ie 30 seconds) should be maintained for before and after key events to additionally be logged. This abbreviated file format should also follow the same rotating habits as the continuous log. -Control of the dispersion system should be event driven, though the dispersion device status should be both at a regular cadence as well as driven by key events such as dispersion on and dispersion off. This sequence applies to requesting dispersion on and off as well as manually configuring the dispersion device before starting an automated mission. The user has the ability to swap out nozzles fairly regularly so the configuration step is needed to handle nozzle specific configuration data. Each request message has a request type and optional parameters to support the different control and configuration needs. +Both of the log files above should follow the format outlined below and use the file extensions ".dspf" and ".dsp" respectively. -![manual control sequence diagram](control_sequence.png) +#### Log File Format -### Autopilot Control +This log file should be a binary file with a maximum size limit dictated by the underlying device compute system. On log file creation, the file header as specified below should be written. After the header is the mavlink message definitions. The mavlink message definitions are to be written in the format of a single entry as noted below by writing the entire XML file repersentation as an entry payload. After the header, any number of entries can be added. This file can contain any data. Each entry into the file will have a header and payload. -For this case the dispersion device is controlled via an autopilot which can send dispersion control requests throughout an automated mission via the [MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) command. +The file structure has the following sections: -![autopilot control sequence diagram](mission_control_sequence.png) +1. Header +1. Mavlink Definitions +1. Entries -## How to Implement the Dispersion Device Interface +File Header (28bytes) + +| Field | Type | Description | +| :------------- | :-------- | :------------------------------------------------------------ | +| uuid | uint128_t | A unique identifier for this log file. | +| timestamp_ns | uint64_t | Unix timstamp that notes when logging started in nanoseconds. | +| format_version | uint32_t | Version number for this file format. | + +Mavlink Message Definitions + +| Field | Type | Description | +| :---------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | +| mav_version_major | uint32_t | MAVLink protocol major version. | +| mav_version_minor | uint32_t | MAVLink protocol minor version. | +| mav_dialect | char[32] | [mavlink message dialect](https://mavlink.io/en/messages/) being used. | +| size | uint16_t | Size of the following payload. 0 if definition xml file is not retrievable. | +| payload | N/A | This payload is the utf-8 encoding of the xml file definition for the mavlink messages being used during this logging process. This payload can be empty. | + +Entries + +As many entries as there are room to write can be appended to the file content post mavlink definitions. Each entry should have the following structure. + +| Field | Type | Description | +| :----------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | int32_t | This indicates the payload type. All numbers that match an existing MAVLink message id will indicate the payload is a packed mavlink message of that type. -1 indicated bad data. -2 indicates the payload is not mavlink and will be left as bytes. -3 indicate a utf-8 encoded text string. | +| timestamp_ns | uint64_t | Unix timestamp in nanoseconds for which this corresponding payload was acted upon. NOTE: this is not intended to be time logged! | +| size | uint16_t | Size of the entry in bytes without the header. | +| payload | N/A | Any bytes content. | ### Messages to Send @@ -126,7 +168,7 @@ Heartbeats should always be sent (usually at 1 Hz). - `sysid`: the same sysid as the autopilot (this can either be done by configuration, or by listening to the autopilot's heartbeat first and then copying the sysid, default: 1) - `compid`: [MAV_COMP_ID_DISPERSIONER](#mav_comp_id_dispersion) -- `type`: [MAV_TYPE_DISPERSIONER](#mav_type_dispersion) +- `type`: [MAV_TYPE_DISPERSION](#mav_type_dispersion) - `autopilot`: [MAV_AUTOPILOT_INVALID](https://mavlink.io/en/messages/common.html#MAV_AUTOPILOT_INVALID) - `base_mode`: 0 - `custom_mode`: 0 @@ -134,7 +176,7 @@ Heartbeats should always be sent (usually at 1 Hz). [DISPERSION_DEVICE_STATUS](#dispersion_device_status) -The dispersion device should out its status at a regular rate, e.g. 10 Hz and on key events like dispersion on and dispersion off. The fields like target_system and target_component can be set to 0 (broadcast) by default. +The dispersion device should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. The fields like target_system and target_component can be set to 0 (broadcast) by default. [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) @@ -142,17 +184,9 @@ The static information about the dispersion device needs to be sent out when req ### Messages to Listen To/Handle -[DISPERSION_DEVICE_REQUEST](#dispersion_device_request) - -This is the request that the dispersion device should follow. The primary purpose is to turn on and off the dispersion system but this can also be used for run time dispersion system configuration. - -[MAV_CMD_DO_DISPERSION_DEVICE_SET_DISPERSION](#mav_cmd_do_dispersion_device_set_dispersion) +[GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) -This is a subset of the [DISPERSION_DEVICE_REQUEST](#dispersion_device_request) brought into the Mavlink command structure so that autopilots can easily integrate control functionality into automated missions. - -[AUTOPILOT_STATE_FOR_DISPERSION_DEVICE](#autopilot_state_for_dispersion_device) - -The dispersion device should be able to get all the information from the autopilot that it requires in this one message. If something is missing that should be streamed at a high rate, it should be added to this message. +The dispersion device should be able to get all the information from the autopilot that it requires in this one message. If this message is not sent by default by the autopilot, or the rate is not ok, the command [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) can be used to request it at a certain rate. @@ -169,3 +203,15 @@ The dispersion device should send out messages when they get requested, e.g. DIS [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) The dispersion device should stream messages at the rate requested. + +[MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav-cmd-config-dispersion-device-params) + +This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. + +[MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) + +Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav_cmd_config_dispersion_device_params). + +[MAV_CMD_SET_DISPERSION_DEVICE_LOCK](#mav-cmd-set-dispersion-device-lock) + +Command for locking/unlocking the device from responding to [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) messages. When locked, the device should stop dispersing. diff --git a/dispersion_protocol/mission_control_sequence.png b/dispersion_protocol/mission_control_sequence.png deleted file mode 100644 index 091128591f5405cabfe38087c4839e5ead4d1581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55485 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

|zcf;myaH$e0K#A#FE@K3 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 H`R9KCdUpR- diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index c5242d1..66defa5 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -2,8 +2,8 @@ - Start date: 2025-02-18 - Contributors: Wesley Murray , ... -- Related issues: N/A - +- Related issues: N/A + ## Summary The scope of this document is to define a message definition set and protocol for interacting with a dispersion payload to ensure effective control as well as compliance and efficacy reporting. The goal is to create an agreed-on standard for what data is necessary and how it should be used so that there can be more transparency in the UAV crop protection space. @@ -39,15 +39,16 @@ A procotol can be very difficult to analyze in isolation so I started by creatin [x] dynamically adjust deposition rate based on aircraft speed [x] get payload information for planning (ie lead in/out distances, spray leg length, etc) - - Swath width will be configured during planning so OOS +- Swath width will be configured during planning so OOS [x] data for compliance and efficancy reporting can be extracted - - Factors that cannot be known by the dispersion device is OOS and can be collected in other parts of the system (ie wind, chemical being applied, etc) +- Factors that cannot be known by the dispersion device is OOS and can be collected in other parts of the system (ie wind, chemical being applied, etc) [x] payload is at target fill and ready to go [x] spot spraying. This happens at the planning level. This protocol supports setting flow rate at specific locations which is enough for spot spraying. [x] communication buses might be lossy so protocol must handle failure detection. +[x] ability to construct a synchronized timestamp across mavlink nodes to account for latency in commands when generating reports ### Implementation @@ -55,10 +56,19 @@ After reviewing other submissions, I think I might have gone too far down this p ### Questions -1. This is a combined protocol for spraying and spreading since there are many common elements. Should this be split up? -1. For any kind of effective reporting, not only do the messages needs to be defined but there should also be a degree of standardization on how that information gets logged so utilities can interact with it. Making logging suggestions seemed out of scope here but is there anything I should add to nudge people in the right direction? -1. Is a dispersion manager needed? I genuinely believe the source should not matter. Anything should be able to send a request and it get processed in the order it is received. The only time any prioritization should occur is manual triggers vs automated. No this could be handled through a manager but it is pretty easy implement with just the deivce using the MANUAL vs AUTO request type. I also expect there to be multiple possible viable sources for manual on/off live at any given moment. All should be immediately respected. I feel like the overhead with a manager only allowign two control sources could make this over complicated. +1. ~~This is a combined protocol for spraying and spreading since there are many common elements. Should this be split up?~~ +1. ~~For any kind of effective reporting, not only do the messages needs to be defined but there should also be a degree of standardization on how that information gets logged so utilities can interact with it. Making logging suggestions seemed out of scope here but is there anything I should add to nudge people in the right direction?~~ +1. ~~Is a dispersion manager needed? I genuinely believe the source should not matter. Anything should be able to send a request and it get processed in the order it is received. The only time any prioritization should occur is manual triggers vs automated. No this could be handled through a manager but it is pretty easy implement with just the deivce using the MANUAL vs AUTO request type. I also expect there to be multiple possible viable sources for manual on/off live at any given moment. All should be immediately respected. I feel like the overhead with a manager only allowign two control sources could make this over complicated.~~ 1. Am I missing any critical workflows or test cases? Ie Debug level motor controller and motor information (deemed out of scope, should be a separate protocol for general motor controller and motor information) +1. should we encourage using something like the parameter protocol rather than a command message for configuration? + +### Tentative Decisions + +1. the combined protocol makes sense with the addition of an enum indicating type in the relevant messages +1. dispersion payloads will be implemented as standalone MAVLink devices +1. a logging infrastructure is proposed +1. a dispersion manager will not be used +1. eliminate request message in favor of mav command infrastructure ## Alternatives @@ -67,11 +77,12 @@ After reviewing other submissions, I think I might have gone too far down this p ## References +- Pix4D Spot Spraying Article: https://www.pix4d.com/blog/variable-rate-application-wheat-field/ - Aerial Applicator's Manual: https://www.epa.gov/system/files/documents/2023-11/national-aerial-applicator-manual-2014.pdf -- MAVLink Gimbal Protocol: https://mavlink.io/en/services/gimbal_v2.html +- MAVLink Gimbal Protocol: https://mavlink.io/en/services/gimbal_v2.html - XAG P150: https://www.xa.com/en/p150 - DJI Agras T40: https://www.dji.com/t40 - Hylio: https://www.hyl.io/ - Rotor: https://rotor.ai/ - Guardian Agriculture: https://guardian.ag/ -- PYKA: https://www.flypyka.com/ \ No newline at end of file +- PYKA: https://www.flypyka.com/ From 6202bb55b545ea4f88a8605d74968a152b8d6cb2 Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 25 Feb 2025 18:52:46 -0500 Subject: [PATCH 06/23] rename commands to match naming convention per mission microservice --- dispersion_protocol/messages.md | 16 ++++++++-------- dispersion_protocol/microservice.md | 24 ++++++++++++------------ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index b145f06..33ec424 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -97,7 +97,7 @@ The dispersion type a device is setup for. Dispersion types specify the units fo ## DISPERSION_DEVICE_ERRORS -(Bitmask) Dispersion device (low level) error flags. Any error flag indicates the device has turned off. +(Bitmask) Dispersion device error flags. Any error flag indicates the device has turned off. | Value | Name | Description | | :---- | :-------------------------------------------------- | :---------------------------------------------------------- | @@ -114,17 +114,17 @@ The dispersion type a device is setup for. Dispersion types specify the units fo ## DISPERSION_DEVICE_WARNINGS -(Bitmask) Dispersion device (low level) warning flags. Any warning flag indicates an issue that does not block operation of the device. +(Bitmask) Dispersion device warning flags. Any warning flag indicates an issue that does not block operation of the device. | Value | Name | Description | | :---- | :---------------------------------------------------- | :----------------------------------------------------- | -| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown error | +| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown warning | | 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | | 4 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_DETECTOR_BROKEN | There is an issue with the fill level detector system. | # Commands -## MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS +## MAV_CMD_DO_CONFIG_DISPERSION_PARAMS This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. @@ -138,9 +138,9 @@ This command provides the necessary run time information for the dispersion devi | 6 pressure_max | If this is a spray dispersion system, maximum pressure the current configuration supports | Invalid:NaN, Be discipline about conflicting control sources that are not the lock, as they will be processed in the order in which that are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. > [!NOTE] -> The [MAV_CMD_SET_DISPERSION_DEVICE_LOCK](#mav-cmd-set-dispersion-device-lock) messages should only be used as an emergency shutoff. All normal control should happen through the [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) message. As an example, the lock message should be used to shut off the spray system when taking fallback actions like landing in place or returning home. The lock should not be used to turn the dispersion on or off at waypoints in an automated mission. In fact, a normal mission in general should never need to use the lock. +> The [MAV_CMD_DO_SET_DISPERSION_LOCK](#mav-cmd-do-set-dispersion-lock) messages should only be used as an emergency shutoff. All normal control should happen through the [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) message. As an example, the lock message should be used to shut off the spray system when taking fallback actions like landing in place or returning home. The lock should not be used to turn the dispersion on or off at waypoints in an automated mission. In fact, a normal mission in general should never need to use the lock. ### Autopilot State for Dispersion Device @@ -80,9 +80,9 @@ This is the set of messages/enums for communication between a mavlink node and a | Command | Description | | :-------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) | Request the target system(s) emit a single instance of a specified message. This is used to request [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). | -| [MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav-cmd-config-dispersion-device-params) | This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. | -| [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) | Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav_cmd_config_dispersion_device_params). | -| [MAV_CMD_SET_DISPERSION_DEVICE_LOCK](#mav-cmd-set-dispersion-device-lock) | Command for locking/unlocking the device from responding to [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) messages. When locked, the device should stop dispersing. | +| [MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params) | This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. | +| [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) | Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params). | +| [MAV_CMD_DO_SET_DISPERSION_LOCK](#mav-cmd-do-set-dispersion-lock) | Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) messages. When locked, the device should stop dispersing. | | Enum | Description | | :---------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | @@ -204,14 +204,14 @@ The dispersion device should send out messages when they get requested, e.g. DIS The dispersion device should stream messages at the rate requested. -[MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav-cmd-config-dispersion-device-params) +[MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params) This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. -[MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) +[MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) -Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS](#mav_cmd_config_dispersion_device_params). +Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params). -[MAV_CMD_SET_DISPERSION_DEVICE_LOCK](#mav-cmd-set-dispersion-device-lock) +[MAV_CMD_DO_SET_DISPERSION_LOCK](#mav-cmd-do-set-dispersion-lock) -Command for locking/unlocking the device from responding to [MAV_CMD_SET_DISPERSION_DEVICE_RATE](#mav-cmd-set-dispersion-device-rate) messages. When locked, the device should stop dispersing. +Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) messages. When locked, the device should stop dispersing. From 18a18fc173100004b77e937c17d5659e7ec17f23 Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 25 Feb 2025 18:57:16 -0500 Subject: [PATCH 07/23] add xml definition --- dispersion_protocol/dispersion.xml | 184 +++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 dispersion_protocol/dispersion.xml diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml new file mode 100644 index 0000000..45ec71d --- /dev/null +++ b/dispersion_protocol/dispersion.xml @@ -0,0 +1,184 @@ + + + standard.xml + 3 + 0 + + + + MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA). + + A device that can disperse a payload + + + + + Component ids (values) for the different types and instances of onboard hardware/software that might make up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.). + Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components. + When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded. + + + Dispersion device #1 + + + + + + Gimbal device (low level) capability flags (bitmap). + + Device supports dispersing granular payloads. + + + Device supports dispersing liquid payloads. + + + Device supports varying dispersion rate with speed changes up to provided limits. + + + Device supports measuring its own fill level. + + + + Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. + + Dispersion device is delivering payload + + + Dispersion device is locked and wont respond to control inputs + + + System has necessary parameters to properly disperse payload + + + Dispersion device tank is filled to target amount + + + + Dispersion device error flags. Any error flag indicates the device has turned off. + + Device has had an unknown error + + + Device is clogged + + + Device dispersion motor or pump has failed + + + Device configuration is not compatible with device limits + + + System is moving faster than the device can deliver + + + System is moving slower than the device can support + + + Device tank was filled to an unexpected level + + + Device was not configured before trying to disperse payload + + + Device is not maintaining pressure as expected + + + Device detected an unexpected event like a crash + + + + Dispersion device warning flags. Any warning flag indicates an issue that does not block operation of the device. + + Device has had an unknown warning + + + Device log file has reached its memory limit. + + + There is an issue with the fill level detector system. + + + + The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. + + Not specified + + + A generic liquid payload is being dispersed. Units are in Liters for capacity and Liters/min for dispersion rate + + + A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate + + + + Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. NaN and INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current yaw or latitude rather than a specific value). See https://mavlink.io/en/guide/xml_schema.html#MAV_CMD for information about the structure of the MAV_CMD entries + + + This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. + The type of dispersion this device supports. This indicates target units as outlined in enum + The target speed for which any target dispersion rate applies, since the rate should change with speed + Minimum dispersion rate the current configuration supports + Maximum dispersion rate the current configuration supports + If this is a spray dispersion system, minimum pressure the current configuration supports + If this is a spray dispersion system, maximum pressure the current configuration supports + Target payload amount for device. This will be ignored if the capability flags do not indicate fill level detection support + + + Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS. + The unix timestamp for message creation + The type of dispersion this device supports. This indicates units as outlined in enum + Target dispersion rate for the system + Empty + Empty + Empty + Empty + + + Command for locking/unlocking the device from responding to MAV_CMD_SET_DISPERSION_DEVICE_RATE messages. When locked, the device should stop dispersing. + The unix timestamp for message creation + Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. 1 for locked. Otherwise unlocked. + Empty + Empty + Empty + Empty + Empty + + + + + + + + + Information about a dispersion device. This message should be requested by a source such as the ground control station using MAV_CMD_REQUEST_MESSAGE. The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. + Unix time stamp in nanoseconds + Name of the payload vendor + Name of the payload model + Custom name given by the user + Version of the payload firmware, encoded as: (Dev & 0xff) << 24 + Version of the payload hardware, encoded as: (Dev & 0xff) << 24 + Integer to uniquely identify this hardware. (0 if unknown) + Bitmap of dispersion device capability flags. + Bitmap for use for dispersion-specific capability flags. flags. + File transfer protocol (FTP) url-like string pointing to the directory of log files + Minimum dispersion rate this device can support + Maximum dispersion rate this device can support + If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration + If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration + Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders + + + Message reporting the status of a dispersion device. This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. + Unix time stamp in nanoseconds + Dispersion type. Defines units for device capacity and dispersion rate + Current flags set by the device + Bitmap for failure flags (0 for no failure). Any failure indicates the system has stopped + Bitmap for warning flags (0 for no warning) + Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. + Current dispersion rate of the device. Negative during refill. + Current tank fill level. This field should be ignored if the device capability flags indicate fill level detection is not supported. + Current pressure of the dispersion system if dispersion type indicates it is a sprayer + + + + From fd7519f5741aea74174734536c847b8162b3956a Mon Sep 17 00:00:00 2001 From: Wesley Murray <77159128+wes-public-apps@users.noreply.github.com> Date: Wed, 26 Feb 2025 11:18:29 -0500 Subject: [PATCH 08/23] dispersion on -> active Co-authored-by: Hamish Willee --- dispersion_protocol/dispersion.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml index 45ec71d..c3a0250 100644 --- a/dispersion_protocol/dispersion.xml +++ b/dispersion_protocol/dispersion.xml @@ -40,7 +40,7 @@ Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. - + Dispersion device is delivering payload From 0f41c4104ad2e5b2d2650a6a16e373e68feac3a9 Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 26 Feb 2025 11:38:22 -0500 Subject: [PATCH 09/23] address comments update xml to use valid units apply minor content description updates --- dispersion_protocol/dispersion.xml | 45 ++++++------ dispersion_protocol/messages.md | 114 ++++++++++++++--------------- 2 files changed, 80 insertions(+), 79 deletions(-) diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml index c3a0250..6fa9863 100644 --- a/dispersion_protocol/dispersion.xml +++ b/dispersion_protocol/dispersion.xml @@ -1,3 +1,4 @@ + standard.xml @@ -26,15 +27,15 @@ Gimbal device (low level) capability flags (bitmap). - Device supports dispersing granular payloads. + Device supports dispersing liquid payloads. - Device supports dispersing liquid payloads. + Device supports dispersing granular payloads. Device supports varying dispersion rate with speed changes up to provided limits. - + Device supports measuring its own fill level. @@ -67,10 +68,10 @@ Device configuration is not compatible with device limits - + System is moving faster than the device can deliver - + System is moving slower than the device can support @@ -117,25 +118,25 @@ This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. The type of dispersion this device supports. This indicates target units as outlined in enum The target speed for which any target dispersion rate applies, since the rate should change with speed - Minimum dispersion rate the current configuration supports - Maximum dispersion rate the current configuration supports + Minimum dispersion rate the current configuration supports. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) + Maximum dispersion rate the current configuration supports. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) If this is a spray dispersion system, minimum pressure the current configuration supports If this is a spray dispersion system, maximum pressure the current configuration supports - Target payload amount for device. This will be ignored if the capability flags do not indicate fill level detection support + Target payload amount for device. This will be ignored if the capability flags do not indicate fill level measurement is supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS. - The unix timestamp for message creation + The unix timestamp for message creation in microseconds The type of dispersion this device supports. This indicates units as outlined in enum - Target dispersion rate for the system + Target dispersion rate for the system. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) Empty Empty Empty Empty - Command for locking/unlocking the device from responding to MAV_CMD_SET_DISPERSION_DEVICE_RATE messages. When locked, the device should stop dispersing. - The unix timestamp for message creation + Command for locking/unlocking the device. The lock is intended to serve as an emergency off by preventing the device from responding to MAV_CMD_SET_DISPERSION_DEVICE_RATE messages. When locked, the device should stop dispersing. + The unix timestamp for message creation in microseconds Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. 1 for locked. Otherwise unlocked. Empty Empty @@ -151,7 +152,7 @@ Information about a dispersion device. This message should be requested by a source such as the ground control station using MAV_CMD_REQUEST_MESSAGE. The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. - Unix time stamp in nanoseconds + Unix time stamp in microseconds Name of the payload vendor Name of the payload model Custom name given by the user @@ -161,23 +162,23 @@ Bitmap of dispersion device capability flags. Bitmap for use for dispersion-specific capability flags. flags. File transfer protocol (FTP) url-like string pointing to the directory of log files - Minimum dispersion rate this device can support - Maximum dispersion rate this device can support - If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration - If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration - Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders + Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) + Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) + If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration + If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration + Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) Message reporting the status of a dispersion device. This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. - Unix time stamp in nanoseconds + Unix time stamp in microseconds Dispersion type. Defines units for device capacity and dispersion rate Current flags set by the device Bitmap for failure flags (0 for no failure). Any failure indicates the system has stopped Bitmap for warning flags (0 for no warning) Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. - Current dispersion rate of the device. Negative during refill. - Current tank fill level. This field should be ignored if the device capability flags indicate fill level detection is not supported. - Current pressure of the dispersion system if dispersion type indicates it is a sprayer + Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) + Current tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) + Current pressure of the dispersion system if dispersion type indicates it is a sprayer diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index 33ec424..8ece358 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -4,23 +4,23 @@ Information about a dispersion device. This message should be requested by a source such as the ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. -| Field Name | Type | Units | Values | Description | -| :------------------ | :--------- | :------------------: | :---------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------- | -| timestamp_ns | `uint64_t` | ns | | Unix time stamp | -| vendor_name | `char[32]` | | | Name of the payload vendor | -| model_name | `char[32]` | | | Name of the payload model | -| custom_name | `char[32]` | | | Custom name given by the user | -| firmware_version | `uint32_t` | | | Version of the payload firmware, encoded as: (Dev & 0xff) << 24 | -| hardware_version | `uint32_t` | | | Version of the payload hardware, encoded as: (Dev & 0xff) << 24 | -| uid | `uint64_t` | | Invalid:0 | Integer to uniquely identify this hardware. (0 if unknown) | -| cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device capability flags. | -| custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. flags. | -| logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | -| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN, <0 | Minimum dispersion rate this device can support | -| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN, <=0 | Maximum dispersion rate this device can support | -| pressure_min | `uint32_t` | Pa | | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | -| pressure_max | `uint32_t` | Pa | invalid:0 | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | -| max_capacity | `float` | liters or kg | invalid:NaN, <=0 | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders | +| Field Name | Type | Units | Values | Description | +| :------------------ | :--------- | :------------------: | :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | +| vendor_name | `char[32]` | | | Name of the payload vendor | +| model_name | `char[32]` | | | Name of the payload model | +| custom_name | `char[32]` | | | Custom name given by the user | +| firmware_version | `uint32_t` | | | Version of the payload firmware, encoded as: (Dev & 0xff) << 24 | +| hardware_version | `uint32_t` | | | Version of the payload hardware, encoded as: (Dev & 0xff) << 24 | +| uid | `uint64_t` | | Invalid:0 | Integer to uniquely identify this hardware. (0 if unknown) | +| cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device capability flags. | +| custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. flags. | +| logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | +| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | +| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | +| pressure_min | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | +| pressure_max | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | +| max_capacity | `float` | liters or kg | invalid:NaN | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) | ## DISPERSION_DEVICE_STATUS @@ -28,17 +28,17 @@ Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. -| Field Name | Type | Units | Values | Description | -| :-------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp_ns | `uint64_t` | ns | | Unix time stamp | -| dispersion_type | `uint32_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | -| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | -| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | -| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | -| custom_codes | `uint8_t` | | | Leave some flexibilty for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | -| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. | -| fill_level | `uint16_t` | liters or kg | | Current tank fill level. This field should be ignored if the device capability flags indicate fill level detection is not supported. | -| pressure | `uint32_t` | Pa | | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | +| Field Name | Type | Units | Values | Description | +| :-------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | +| dispersion_type | `uint32_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | +| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | +| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | +| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | +| custom_codes | `uint8_t` | | | Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | +| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | +| fill_level | `float` | liters or kg | invalid:NaN | Current tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) | +| pressure | `uint32_t` | Pa | invalid:UINT32_MAX | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | # Enumerated Types @@ -82,18 +82,18 @@ The dispersion type a device is setup for. Dispersion types specify the units fo | 1 | DISPERSION_DEVICE_CAP_FLAGS_SPRAYER | Device supports dispersing liquid payloads. | | 2 | DISPERSION_DEVICE_CAP_FLAGS_SPREADER | Device supports dispersing granular payloads. | | 4 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | -| 8 | DISPERSION_DEVICE_CAP_FILL_LEVEL_DETECTION | Device supports measuring its own fill level. | +| 8 | DISPERSION_DEVICE_CAP_FILL_LEVEL_MEASURE | Device supports measuring its own fill level. | ## DISPERSION_DEVICE_STATUS_FLAGS (Bitmask) Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. -| Value | Name | Description | -| :---- | :-------------------------------------------- | :------------------------------------------------------------- | -| 1 | DISPERSION_DEVICE_STATUS_FLAGS_DISPERSION_ON | Dispersion device is delivering payload | -| 2 | DISPERSION_DEVICE_STATUS_FLAGS_LOCKED | Dispersion device is locked and wont respond to control inputs | -| 4 | DISPERSION_DEVICE_STATUS_FLAGS_CONFIGURED | System has necessary parameters to properly disperse payload | -| 8 | DISPERSION_DEVICE_STATUS_FLAGS_FILL_AT_TARGET | Dispersion device tank is filled to target amount | +| Value | Name | Description | +| :---- | :----------------------------------------------- | :------------------------------------------------------------- | +| 1 | DISPERSION_DEVICE_STATUS_FLAGS_DISPERSION_ACTIVE | Dispersion device is delivering payload | +| 2 | DISPERSION_DEVICE_STATUS_FLAGS_LOCKED | Dispersion device is locked and wont respond to control inputs | +| 4 | DISPERSION_DEVICE_STATUS_FLAGS_CONFIGURED | System has necessary parameters to properly disperse payload | +| 8 | DISPERSION_DEVICE_STATUS_FLAGS_FILL_AT_TARGET | Dispersion device tank is filled to target amount | ## DISPERSION_DEVICE_ERRORS @@ -105,11 +105,11 @@ The dispersion type a device is setup for. Dispersion types specify the units fo | 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged | | 4 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed | | 8 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with device limits | -| 16 | DISPERSION_DEVICE_ERRORS_OVER_SPEED | System is moving faster than the device can deliver | -| 32 | DISPERSION_DEVICE_ERRORS_UNDER_SPEED | System is moving slower than the device can support | +| 16 | DISPERSION_DEVICE_ERRORS_OVERSPEED | System is moving faster than the device can deliver | +| 32 | DISPERSION_DEVICE_ERRORS_UNDERSPEED | System is moving slower than the device can support | | 64 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | | 128 | DISPERSION_DEVICE_ERRORS_NO_CONFIGURATION | Device was not configured before trying to disperse payload | -| 256 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintain pressure as expected | +| 256 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintaining pressure as expected | | 512 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | ## DISPERSION_DEVICE_WARNINGS @@ -128,29 +128,29 @@ The dispersion type a device is setup for. Dispersion types specify the units fo This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. -| Param (Label) | Description | Values | -| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | -| 1 dispersion_type | The type of dispersion this device supports. This indicates target units as outlined in enum | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | -| 2 reference_speed | The target speed for which any target dispersion rate applies, since the rate should change with speed | Invalid:NaN Units: m/s | -| 3 dispersion_rate_min | Minimum dispersion rate the current configuration supports | liters/min or kg/min | -| 4 dispersion_rate_max | Maximum dispersion rate the current configuration supports | liters/min or kg/min | -| 5 pressure_min | If this is a spray dispersion system, minimum pressure the current configuration supports | Invalid:NaN, <0 Units:Pa | -| 6 pressure_max | If this is a spray dispersion system, maximum pressure the current configuration supports | Invalid:NaN, Date: Wed, 26 Feb 2025 11:41:36 -0500 Subject: [PATCH 10/23] update missed detector reference --- dispersion_protocol/dispersion.xml | 4 ++-- dispersion_protocol/messages.md | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml index 6fa9863..135f47c 100644 --- a/dispersion_protocol/dispersion.xml +++ b/dispersion_protocol/dispersion.xml @@ -95,8 +95,8 @@ Device log file has reached its memory limit. - - There is an issue with the fill level detector system. + + There is an issue with the fill level measuring system. diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index 8ece358..a4a13ff 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -116,11 +116,11 @@ The dispersion type a device is setup for. Dispersion types specify the units fo (Bitmask) Dispersion device warning flags. Any warning flag indicates an issue that does not block operation of the device. -| Value | Name | Description | -| :---- | :---------------------------------------------------- | :----------------------------------------------------- | -| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown warning | -| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | -| 4 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_DETECTOR_BROKEN | There is an issue with the fill level detector system. | +| Value | Name | Description | +| :---- | :--------------------------------------------------- | :------------------------------------------------------ | +| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown warning | +| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | +| 4 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_MEASURE_BROKEN | There is an issue with the fill level measuring system. | # Commands From bfe8b6a355aa8f4f7e4f98de2fa2fd2cb235f0f9 Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 26 Feb 2025 13:04:56 -0500 Subject: [PATCH 11/23] update logging format to be consistent with message timestamps. microseconds provides more than enough resolution. --- dispersion_protocol/microservice.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index 5335ca7..74a713d 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -128,11 +128,11 @@ The file structure has the following sections: File Header (28bytes) -| Field | Type | Description | -| :------------- | :-------- | :------------------------------------------------------------ | -| uuid | uint128_t | A unique identifier for this log file. | -| timestamp_ns | uint64_t | Unix timstamp that notes when logging started in nanoseconds. | -| format_version | uint32_t | Version number for this file format. | +| Field | Type | Description | +| :------------- | :-------- | :------------------------------------------------------------- | +| uuid | uint128_t | A unique identifier for this log file. | +| timestamp_us | uint64_t | Unix timstamp that notes when logging started in microseconds. | +| format_version | uint32_t | Version number for this file format. | Mavlink Message Definitions @@ -151,7 +151,7 @@ As many entries as there are room to write can be appended to the file content p | Field | Type | Description | | :----------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | type | int32_t | This indicates the payload type. All numbers that match an existing MAVLink message id will indicate the payload is a packed mavlink message of that type. -1 indicated bad data. -2 indicates the payload is not mavlink and will be left as bytes. -3 indicate a utf-8 encoded text string. | -| timestamp_ns | uint64_t | Unix timestamp in nanoseconds for which this corresponding payload was acted upon. NOTE: this is not intended to be time logged! | +| timestamp_us | uint64_t | Unix timestamp in microseconds for which this corresponding payload was acted upon. NOTE: this is not intended to be time logged! | | size | uint16_t | Size of the entry in bytes without the header. | | payload | N/A | Any bytes content. | From 9a7862e6a150c48d53b912073284dfd2ed71baa7 Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 26 Feb 2025 13:16:34 -0500 Subject: [PATCH 12/23] update uuid to be 128bit char --- dispersion_protocol/microservice.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index 74a713d..4faa4e3 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -120,6 +120,8 @@ Both of the log files above should follow the format outlined below and use the This log file should be a binary file with a maximum size limit dictated by the underlying device compute system. On log file creation, the file header as specified below should be written. After the header is the mavlink message definitions. The mavlink message definitions are to be written in the format of a single entry as noted below by writing the entire XML file repersentation as an entry payload. After the header, any number of entries can be added. This file can contain any data. Each entry into the file will have a header and payload. +It is expected that endianness match the mavlink spec for [pack format](https://mavlink.io/en/guide/serialization.html#packet_format) (little-endian). + The file structure has the following sections: 1. Header @@ -128,11 +130,11 @@ The file structure has the following sections: File Header (28bytes) -| Field | Type | Description | -| :------------- | :-------- | :------------------------------------------------------------- | -| uuid | uint128_t | A unique identifier for this log file. | -| timestamp_us | uint64_t | Unix timstamp that notes when logging started in microseconds. | -| format_version | uint32_t | Version number for this file format. | +| Field | Type | Description | +| :------------- | :------- | :------------------------------------------------------------- | +| uuid | char[16] | A unique identifier for this log file. | +| timestamp_us | uint64_t | Unix timstamp that notes when logging started in microseconds. | +| format_version | uint32_t | Version number for this file format. | Mavlink Message Definitions From ff51a20fd2d811d14a49e800a8816efc564d1675 Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 26 Feb 2025 19:01:03 -0500 Subject: [PATCH 13/23] update logging format --- dispersion_protocol/microservice.md | 50 ++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index 4faa4e3..44d3794 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -128,34 +128,50 @@ The file structure has the following sections: 1. Mavlink Definitions 1. Entries -File Header (28bytes) +File Header (30 bytes) -| Field | Type | Description | -| :------------- | :------- | :------------------------------------------------------------- | -| uuid | char[16] | A unique identifier for this log file. | -| timestamp_us | uint64_t | Unix timstamp that notes when logging started in microseconds. | -| format_version | uint32_t | Version number for this file format. | +| Field | Type | Description | +| :------------- | :------- | :------------------------------------------------------------------------------------------------------- | +| uuid | char[16] | A unique identifier for this log file. | +| timestamp_us | uint64_t | Unix timstamp that notes when logging started in microseconds. | +| format_version | uint32_t | Version number for this file format. | +| flags | uint16_t | Set of flags to allow for various format changes. 0 means none of the flags apply. See FLAGS enum below. | -Mavlink Message Definitions +FLAGS Enum + +| Value | Name | Description | +| :---- | :-------------- | :-------------------------------------------------------------- | +| 1 | MAVLINK_ONLY | Flag indicating this file only contains packed mavlink content. | +| 2 | NOT_TIMESTAMPED | Flag indicating each entity has a timestamp | + +Mavlink Message Definitions (44 bytes without payload) | Field | Type | Description | | :---------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | | mav_version_major | uint32_t | MAVLink protocol major version. | | mav_version_minor | uint32_t | MAVLink protocol minor version. | | mav_dialect | char[32] | [mavlink message dialect](https://mavlink.io/en/messages/) being used. | -| size | uint16_t | Size of the following payload. 0 if definition xml file is not retrievable. | +| size | uint32_t | Size of the following payload in bytes. 0 if definition xml file is not retrievable. | | payload | N/A | This payload is the utf-8 encoding of the xml file definition for the mavlink messages being used during this logging process. This payload can be empty. | -Entries +Entries (0-11 bytes without payload) + +As many entries as there are room to write can be appended to the file content post mavlink definitions. Each entry could have up to the following structure. Each field in the following structure is optional as determined by the flags listed above. -As many entries as there are room to write can be appended to the file content post mavlink definitions. Each entry should have the following structure. +| Field | Type | Description | +| :----------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | +| type | uint8_t | This indicates the payload type. See ENTRY_TYPE enum below. This field is NOT present if the MAVLINK_ONLY flag is set. | +| timestamp_us | uint64_t | Unix timestamp in microseconds for which this corresponding payload was acted upon. This field is NOT present if the NOT_TIMESTAMPED flag is set. | +| size | uint16_t | Size of the entry in bytes without the header. This field is NOT present if the MAVLINK_ONLY flag is set. | +| payload | N/A | Any bytes content. | -| Field | Type | Description | -| :----------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | int32_t | This indicates the payload type. All numbers that match an existing MAVLink message id will indicate the payload is a packed mavlink message of that type. -1 indicated bad data. -2 indicates the payload is not mavlink and will be left as bytes. -3 indicate a utf-8 encoded text string. | -| timestamp_us | uint64_t | Unix timestamp in microseconds for which this corresponding payload was acted upon. NOTE: this is not intended to be time logged! | -| size | uint16_t | Size of the entry in bytes without the header. | -| payload | N/A | Any bytes content. | +ENTRY_TYPE Enum + +| Value | Name | Description | +| :---- | :------ | :--------------------------- | +| 0 | RAW | Catch all for raw bytes data | +| 1 | MAVLINK | Entry is a mavlink message | +| 2 | TEXT | Entry is UTF-8 encoded text | ### Messages to Send @@ -180,6 +196,8 @@ Heartbeats should always be sent (usually at 1 Hz). The dispersion device should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. The fields like target_system and target_component can be set to 0 (broadcast) by default. +> ![IMPORTANT] When publishing the status message in response to key events, it is essential that the status message timestamp aligns with when that event was enacted otherwise leading and falling edge detection during post processing of the data will incorrectly represent the world. + [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) The static information about the dispersion device needs to be sent out when requested using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). From 8f050dbb3dc713474f38bffe8728a8ccc0bc6116 Mon Sep 17 00:00:00 2001 From: wesley Date: Thu, 27 Feb 2025 16:06:17 -0500 Subject: [PATCH 14/23] Add support for COMPONENT_BASIC_INFORMATION --- dispersion_protocol/discovery_sequence.png | Bin 38763 -> 88841 bytes dispersion_protocol/dispersion.xml | 6 ------ dispersion_protocol/messages.md | 6 ------ dispersion_protocol/microservice.md | 23 ++++++++++++++------- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/dispersion_protocol/discovery_sequence.png b/dispersion_protocol/discovery_sequence.png index 192608fcefd83efe0e50ac90989f6fdd0e6e7dae..dcee2897772931a809a0694e8607d0ad5afb7865 100644 GIT binary patch literal 88841 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 WI+2*Xq=ni9elSZ13zC`F_5T7mA literal 38763 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

ic;HKoQ^8S0ix|3sH4Ok!hCYkirzgwz;nT%` z8k|hMFoV%N5PAd!avP35PhDC3cv z5Z$ad+J^7cOy~v*Vo*QrM=`w`!Kz&O8F5co7&~3)gx_vjm>O{dVd7TrV6~&ENKKy~ z@+}>{#Wb(8>Mo_0lg2CC-WU+Jb$kwPPNyZ+ilQ!J?t9V!iCYjTzFR-h?$fFF2CeQ< zdxz8SuTt+|D508Xp~w^Mv6DL>iojt8BN4bHimOYt&D)#=xfptoTSdtr+9Q`l!e6&* z4a46WHBHM)D;e$>IS-7Jhqw`~_I{`sAw-<9VKyTbCF#A3ZAyWxu#IWn;^e$Od6S}s z>@}uqbDfVWqtQ9~P)oglPUtdO5_tew#3#4e4A;>zkTAS7XoINA7JOf}oLaB=msYWb-HhfKc^CaiX0rJg@J-+VF?kK0D) zeJYLf)UDS20@^9b)QO_R*n;Eshl>n-@vH`-6>G)1$MD*n&pC2RRTQid(e3RN#@Da! zO)KEBkYA|+o(sQZvlQ$a5>)Nuupl8`p*%&Wx9z@>n)rc@UHLd{c|#J%>)XtIviJ@R z5e&&7KyLfzqEP7XWuTy?7A#Lo89u$&M-bjMFBRGJ%KBal7f5L%DE4|d)8yZQ$w8Vm zLnjJsHi0=-Jo?~>@7AP?P40GdS5uD&1MS|rDWgdeDg^@FiMZG_9iVz2vS4>}ul_ko zip=cio6e^^4o^G}X0AKgUEd?Zr+ypF%p+>|IGQ4fR)Ivb!Xkd`-HdrwXa6St@OyKP zNK#CNtZH((&veBoNNy0pX<^X?LN`&2IoGXk!B`<9MM#+Wv3fy|8_td_wJlNsC2F7U z1<{$lmrSYqop;ue=)kv}F$foluPnFeJ%&qD#hPl0S6mHTudiT1iVk4)r;GpQ{2uLeG} zkJ0RJJ}b7&68xaqrpJTrnAHhzRN=^R@5RD>DDNzMufLf4r%`wp7oY2Tsh$l3{j6fGDe;fzm4U3Scyn+VWroVb3gPD^1@g4@dKbQ3S!MKiL*}CWtPJEFSpW~6L z+vn*MKE{X?C{My*zM6`og#CQ^492w-8YDI|W|x}CP4Y2s6%>1(>&o_@=zXM~iyaYB zu&o`vZ`a4D`i{*-^b9T#o8DCdxo|=BoaYK=H_;Guf9(rH%|hOS1Gk`anwa-{t`hWa zx>f^B4M&Lb`(Af%l)?`aN-)_9n`rsXS#HS)yP|0kgrPwlJJvvQ zENK7ru2miabjYnW4oHP!<5hV9NV*aRlLYkIKBgZq4avqZ#Gj7%eZjxh%Mqjt2_U!n zgvMFOhBoLEdvn~u`AIru?=?1fni0Zp-QB&kYqViF+fPRjEh(-0?$q2n)Z5MyGMz&2 zh9qz>7xtkDoO)Kw&o3N*#Aqp8Q+M9K^?jPT4rBYh82QMx`p!?+qNVN~G}a3#SO;Wu zE~Zg7gaU>+8o>=-9myKL`b9v7YL_x2g0*) z{dR+xRxG*9#tsoCYZ;PnS%`oFkKL7HAG@%sA178GEVs9pT#nfynstq$1;e#9YZ^(| z*yH?ke?5qqC&kXMmxRLhd;c)ebAPa|5~XSf6DKnGh~CHZllMR zK3u_2oklmsS=7Q{w+kTWicSg$LMM`OJ{2Yt)_95LhkHgEfsr8)Wat;LAUcjQZ8yS- zOAL~}+zSOI{jO0EWK0sZh}?J>O(8x|ProAV$I~dt5QZ+#>&M%Sw?fdiy9}w>fP<$P z(tJXmVKp)v;Pn2<*Gbk;=8?PdsLejNq@Fi9b1P4iF_Z0Kjv`ruGw=;Wb~*6ol+C(N z!4P(gJ}X9mr_3Df85Br$&_ne6DmR2{+UhAIg@Fs5uRtJ1deGV!|L34o17^D&dxfPS z=5lmG--jQxL{MwW96v;0UJFq4d-I`$d%P-IZ=roZDd&{;$kUFxhREKYy5=4@MqJ&9 z`bgB?xfRcr8J4v*+IuIP5U9uqMTY-6;|P~>gu(WRCCU|ax1E7Uilpe}8_t3L2%^b9 z>7C?^AM_47awBgWsU(kX5CVRV^7F_IaR#F1t3(DPLbZ)GUJ9^~h;i^*DVaS+_M10;z*N9Y3tmHX-`~3&RcaZIa%!ny?F&gRCjzpeN z4#8i#YadRI zAfypOJW=n5EMzH;Ss7oWuBxvu`pP}6Rw_muF@0L!b=@4#Et^buL-@)u7J0YgO5{Vy zftz8hHtx=u#93ucp7-QPp*yL}E76b}&nSBXa!H%XC^Ul{W_*zLa4Eh9vWX!XetPS? z+7`+?`-Ep1<3%xH7|wEthh+dUfqdQj8~X$qstf%uKm?e>zkXvHaWQy=)+{Thy38?C z!H8+I=nz5KF$-n5=2&mLTu8Uqe|fd~Etc-v$=G#u$!O8zbxI?TlrKeifwcRvv>7O~ z5;X8@BF3E4Zs@(-BdE=9Bf6&fajXqk@KBKbxL_1wFniyR>sW3p243)(k%W`SNRdUl zb1Z-{!+m4#8~v4g_JKS;W=4RSN8*QfVf7EfXGa2_>>c3A0vfTB@h6SwgCq{8uovCu zpEG?2GZ{`9AzH@5>#I&P$z4fF_~=NuQgVzp-`oA8ZC5EegBD?g;W)!j!q8g<-Y$Q2 zivN)gs)3(s=VxY@n9x|%l66%2I0*|av;A3fH=YtK`k;s#^6MW2Nf~jo>J54l3)E3G zo=3W_tOE3|>y3W3;+4Yi>sUXyMi2eZ|21ht z78+K--k6V;X1i~^zm8@q{g0T|P~_&|Tatj}pag`L;`wMO%Ri!P_3l3e*^Yfxw))7Z zsH*2q%R@{-2O0l>ah;w+05NC^VCSio0cPPb#wL!Cr~58P=R1T9gqSd~ciszzzvD7L z!b?apWEKOtTYIb8<19waLF5${gE7}oZYx50*=~n0n?B5dr1x$R23(?vy%Fvs;4R)r zkE%Y^X zHNLh2ucd#dX;D4Ihj&*{-$+Qx2+d$T82XTOnYyOh5Q4vVI$li=8+kL-_fL}&z3&a$ z$c_h@{V%WmA41ks;QIuklgg}5)|mj_$YFg_KsrsZuH3v|f)BdzFu8qcu)t)b*x)it z1~^V?Kol+|0XI(8{|1in-pXhnXhDVm$Wj`>&PEHJ9ekKw4nt%m87NZ947i^r_+_ZD zcM3etdeoIvIpw@GAl;WOOM6fS3C1e*I`<4FxSM})a3BT9z-+*d_T?&3Myh|*JU443 z=H8jAak4a@cw4fx{;fSWq!*BogCiO+QESxx85*gy{uLStf*`=I8@24SIG4?@?TKtg zR4T9TJN$*B(=0U(26V6}Oor789>kmWq_(Husv1a9hORN>|M(TqvhtY z;f>Lhl36nG3^E__fABDfG;&E)`|DHcr!V-NWB`3^a?90>_Q}qI!_kg;Fh0ktqq@2U zb_hB`AE2YN0ROy{wD#qlTe(d4(Y{}@CRDe>t;-~Z4 z{wo9|Ohr))h*g~ML%YSY&+fpa8n|9yPefL;x__=JsgEy+>rhpNZ zfrgU^XmzIvv4FsOG&a3*uB_Y60yzc|;O!~_^-;)iM6a3~W#I)F73D%5-aP$=dO4^F z74TXDVZ1g@o+CBjkSeXmUw!vuYl$SCT9x5lp1Nfdu#m4;SA$hKZQApB70%@fEIb7f zy@>lf`xW=0!1Q6(t;vVqea2jr{t(m>u^_Y3|Qz&w*BSbeEc3x26xWkcV4*RUCh z+Pm+STtSAkkB<+70~a7lHuv|dU~?3c40>2$HL5%~UhSA;;k7ze!PR?>oXc|PPJ5bA zgN)nBLS|%&M9rtG3V^adIa)4~X|84{JaTTkxhe|1Ydfj4tM=B;0H57himDV9Egps* zz6w8gcK4S;0XyrBU1!`LLoYI$OO}m(T&Y+0WVgEw2!h&imR^IW^(~Ow0fts_%X_>! zM*Z|U`ZG{NdaB;zDPUHH(>WmR?8YBoW{6?f0bx?I7UsmKKtD$#;!zY|`riFwIeOt} zr(Yo(Q0+GTCpx?95y|8=7)+4Euc0iyE7GA5nx=GE8ooD7ql34*39R8^F}3L~gs`24 z!|i$gl<(jziFmqWz*feOu;D^#2)L|r1vx^=f+!(b7+)9^UwVhQ1A|CseTi@7`O(2_ zieYQ9fbm1rEj6w(CMjyrBM>*Ok90xKvHy_B^z!gcy{6cAZnT`lL+ zce9Uzn0I_U?1Ng#uVER6`@=S?_62x@97H0+e+BKpX2IF}_3vWP%OtXSniH(R8(WZQ$L9kB*${XKXjL2+?NC_e8$gypa-!~#cV_}K zj|8Qz8nI|sz6Q&J5BoXC=RdLU_|-+A(nkt14R*}Jw!brh#RT{!42B@IL{4pESIZ}V z{IpRRfUH9vhQxjjElCf2LGI!7^DG zneqyHsxY=Ca2YK~@s%maSs!(|{K^HW4}*_>nmZ0o=R9IT^a&LLI)$8+WV0TddW-J4 zQ~|WD>+ItJh-&4tJuNytdn;wkPQ(DaGjBm8{dq>`o9GdJ;a?%!=&;6ET7@{errr%6 z)(<>yia}JR@;TX8PUwOnPIbs_rldFqHJR)qkF9pvC4%FRw=#G~I@NOIiE}bgc8PSW z9(55o(Y3aO;!>M*#EFmEhBRI4xtr!MlejJ|^naj@@v^Ls*i5RrH#P-3a(Q`qM8dx0co$jB4>||GL!GDJ! z4r1TK5n+gimOx3cJA9K01_yJ`<4E-%*M5}A*8D6jEp2-Lpl5hk9mF%UzA*nO-VQP& zLGob+Fv>0Qx-umrRgF6_v;o7evI@{%1JK=>Uugc)pz5N5HJ;p4#GA&Wr6yZjbF$i} zAYR!4A|Vyye-7JYZ9Ikt2sqNZGK>I+Cs z77LV_?|xA+Zt|!2Kh}l>$jCFt7X8OmHUE@apbheBlz^weHPxT} zx48g647dMHNchjovhb0TducmW&koctOnj%$6q32#a9WKhKG|KO2JfCLI?95u>>Z6_ zVVO9(bkDur-FOhxYzLA_1*{w8x+hNf+%_rT9az~TzZuLaHuI4#BP ztbNh0w4Gvxy+*1acnASQkvlC7C=CM}Q*%(a((3uZYt4SHLJ%^}tK2Lq+XB(;7BW~! z8)jHs3Tda4tsWm7)b@X>bK9o^QAr1&0e~&%7S&UNmgp8sBS!_M=3B1_fAy*f2u84b z96_ty4@<%SIiPAWT=)jhyM&EY@)X~iC%Na-bB;l+%$o{td9-_guFF#|N}Xu%(g#@v zl#CBvN4;}iXE?SPE6+RG_<(L0hW@w$*s#fR-X_2ZgK3|TV73Sl3M{Dk4$u6{9^SKL zZCMBCk&c({es(zDQLp%r;}I90`n$)gs>GkJx4h`WTb@i8yAD&5Z)`s~0#n$c{tf`+ zA#y;N9%@MF4a(6V;BAyeHzJx7EIOO^_^QtRmhdpu55jJVIx|svK*5QZ#m=5!?DhiL;|+ z7HMEs0n11{xDXaYMs5MNv{c!nu5arN=MQGNB5|Fz=6hJI$I7E0ywQ?AIoO=5n(~YV zCL_ZPyvWs@vvJ!7wXch?*!7ic${Mgx(!up`LT=-;lS5!JVQ4mZ)?u^g=~Tds`f9rw zU$NPvrGlb3JRdXm4zKgmoMybCt1aMlaJ&R&-FyUbz{}487X&y9xYTsq)??o)h174` zu+&W0m*}%Njr2V!vhk4D{h+vVft`=d4;zA*Vuo~+XItVBWH(TQ1PBIS z5MXA~D#t*=gV=tW8`k$yYr465a(289OBm}WrK|}P1V@>bvI(r18XOS} zEQ~0yZORl_bMt9l4@B{H$%jyTukC>>ifG^~(9amgwMCM4vNW7f00T=MQ$U@fC*FTN zl=(+wG)MtbUCbphfbBua7kDVF_*LJn*WZ%W6jDt#fsyX}S;*_Gc4f3oGFS;as0Re` z3-&-pIFkG8{g2U<**et@$_<_#Ouci#U9}+dL-1hwD!!0sZAg^O#M|hMPA&ZxDNM)+ zK$JmN+VQiOKkc@l0fZFZE<06BO>YhMP`oUk_tDl<^>s3YezTDSkW3y6bR~R9H3+Qd zFx6lzimJjZF$Becs9Sz{3BVJ2CBKry7Ti_?5|(Dlj5|TC&rvc&ON`o{fw(+l8!;Lm z1xrwf2&(%|uO#@dh=AFu1i!Y}pHphohL%8qgmy1O7=u1rCSLgiq=u5h4@2ouFQ7#j z7Dq}l4QF1z4Sl@`Onq3$7)ct*I170UH!HTO6~n$9SN9>}OlX{}Sh?ZN_qQ-bUh~JO zMLhxMdEvr97y!)Vc}nOGa8OjX;!TLx+$+I{Xd4Ixq0M(DD14y>CZ$mpqp}yF!v+}g^cqRWLe{Xr(vHV)#ZIJ&?yS12;mM^6Wa#RM_$r3TlwQF5UupA_`5=$gI z@9C{LYt_3~TMH$*mSC`n5Za~8q=>yn1)fVb8}QY*AsNdv9|9R1{!e>n9TnBr|9cS> z1d&o&X^`$NfuW^4h8ntK009B%lo){#0cns1DQTpoyE_D=8_9d{`+Sw}^W62jcdfhD z{p;bcS&KPm@7ZUcy+8GS?Z8iDEr{RkB90A+f%>Y?nd4;S{?A9l3D{#$S`r%{4Lk<& zEnmDY_9Q22T#IA}Rtkm9Vz(&3+g}XoqOw9%`JF_T&DQ!;VLDFpyEG@K#x8m`Ti^KyYMdu4`g|_7lijnq$7d5 zD3oVBjOoDtrf}hr_zOb(W0r|9I#AY+(Skg3aGMBG+cP%F`OWqrpmGK1sN@)sFCDDG zd>}?hIEc}+6ac{}F-tbOZ$_~6HI-P3m80ce8iSOT&KLVs8Kr|mQgny{oK*s(i;3{{ zl!eK4-An4Lm^Se^DVu+t!ol|*m7aKUyhL}9Ba5jS6~|x0gX!$|oC}ZG)+dQDQBMajrH5hT;lf*{7-@0GTk zMXQsvTJrVkw0Ud3#|VMI_CH7-Mcc>P-dC(nrcg#g#*4;DG)HzoOjXTM&Lo{~I9){J zydTVb@GAO#2;Xt`H^T;Ppl)OtNdL+_2GWRcjT-RM7fwmeyFN9CqQJ1+?F04@0kTtvPHGUD0(1DVei*U91M^>1tm5ed)QzY& zd#GtP!MY|Uhy6H~NTYN>;5$oVf=Cslg;R<;j3%^e3^NjoH&P=*Pt=afo{mUr6Oapx zr#o#=^HSB@_ahz0EMPqK!uWd6?CH9-=|Dg*rdLp%QgAIPdM~C(a2)Af(})cGB_GTe z!|OnG(-<~5`18EEQ#YbVRevSmx{2ORBvX!BG$+opi+~!w4xSbvUN{s5g_F9J+?V?1 z-@jKTEE%^g16^?UU@9CXYC@t-m5OemzZZ3kOcn~jI~?bMVAu#I@zV?+irJE0%#`m( zU(dwCMdu9)rMB3~!J1t_w2khZ6AwgRg2x0bC|n*c&hDu+To8~hFyOp?Nb4MxUzrn+u4UbHNo(e+9J@7P8J^Tl(*Y_w{3JKQ#Z z6g<>pHXmW-1^eY%rA=`>V7Ptjz?f#^euqb6`gxGifrjkMdy>!zCx^;e9yKf_;fy!r zzNoB`Wg>~h7Qr&Wq{m`F;mT+AkK@G-S)(7tr~tq^K!NC|W(88sEe!RqXJ6|tE-nPH z!5_!NDFy=05!M4R!@{9j8y+#GR5$4so11uZ*c|3RBGi~he>p=EpufHN-~axP!t2Ja z2L{aekEZNZqxOSc1H|KeU46*Z`jkXM$>r0G|BBQ1Q~Y{g`;0(euoM&U|Kam##{U(M zx%_|h#s99^{*Mm+4StjQT^Zg$pZ-;rDO(}AP|xz)uYkbspGVo~x28LBM?YfIKjJ1u z3t0Wn33wedKw-FYAB8+S&u^y*Ztk4zT~h|=GcZ7KvI=0Nhn4pK_J&)C!v7K42b6z6 zHh{+!!GGkoFDys(moJQyXsQ+Tj|*yHcTS+Z`sxzZxYOYL1;WXI z6*5Y1_gFskAJ>SAlCrR{P>$49Fp0y_23n=yW0Qh361Q>_n4Li0!ze>`Dx+Is$y{Nq zKUFN#X|;E9>+|iZd_agt0sJhWSiS~$t;mkuex9E09*WxJ{-ZX2z5tL)J+CgaN!VE* z{Lc#gUr~ksR@DDjCh#jq2PixKE9m(9W&OPt{a2;(|5P7F4Hi6l&-$9ut?3Jl0xU}VUa*Q%7N5ol<9+%qwk0zqpcUI^urxpGQv%{F zh<@xxR65KZvqRjJW?3;X0H6q4ZvKMJE>Skm(aN{*Vjj@hIj(-isd|0+F|pQOEOc3l z*16LZHR$8Sy;~xvJHMn`E|~v&c5A3^MY;qU;-u#$OyKpQs^IDimDrMB;{%(B`Zo&2%Y%zl1(&T;FzCm_{JZk4t_`?Kd^ zx&Yzopr=#2w!B}iO5@f@a*jrER|n&QHe^u(l52>+XHxq6!qJ;j zxARfqza)1FR}%M#VOb-nteO2`*2t-Yym`m6krF@Mz69bG&}aYNXLqlFtftqs6(%kP z$}jG#cFj3#+Ur6hbXAT77h;yM6Wv&t4yRm47E-RlA3GLgLah0%*4t$R{K-0N5xJp( zUmVsBamM%bNf|P6jUMY-P}4D6!5BmuCMP?%_*nAL@2gOVfUBAVtw82#zjTbw3AOKX z0R1zpwXxN1^X}2xwHS}Q^;6`{n2@BdR~v^s z%zxx#D6TiRf9m$d<`;LRp<5eAdC#_ui-Zu?E;5hKs$aV;L*AAg_!dd0Pot{ z8q>M~R_vR}kpr@M*kf81tD~*;Rz8U(i-g)+TE2Xs0->u$Lm%j(#(?wE4`DXjAIz{K zMb;_QG7DuDd18J_Kz|*i2?bOrsy8%&J)vL{y0ncsD~(LKY(3@cjh!Yiw9f57qMjjE zhx)2a>a+1VXnVGb>H!W_$%DpzE<-@{zg0i+?9crFWoy{!j$9|a1Nc0JY4ngRYitUM zmjou*9%*pzL8C|3W{D-P(8-U`MEk#nt?R3|tC7eL^4C4e&-r6Nq(1(_1b%W3P z@i#upPg2eSf1NIhGX%Q9{*tQ@3=li3D4hwpVn?5Pgzyd?osH02Xzw`DUTRVOECipB zs{2T3Bn9>uPX}LpHe8kdN$Tb6N)F!8V2+md@>?0%7=v+GI1(&!i?bPbQZwrb!1a=} zI~Fc$sKj%J_oWM8(^&?hOs|BkX4+MbI-ZZpg#fYR!=oh9pQyN=?c`VpE#4}tg^I~5 z-=Z3E*C#97l1_gf$7wL@OMfW4L2nVjINUn_XUHMI(=9ijlDmJ=FYiKJO(`^x_6??Q zMvn#EK6J2{s*1!0bJ9PKp`LS&B0Q>BPlKe*VFKcaVx~mlbaJETH)88eUPswz>=okB zLeYtLvVL~jGH^YyWRZ@GuB9Bqs(@|#Zb<01@ENrQ|PO6w<-?dzT-Ssb|Rw|NdLRPu)h7TIR z;R`2)to5hW$Ix8|V0)PktSsTk(ZzPtBG6anp^WF#LRR{HX4u?DVgJW*ao%Cq%{q&W zYMZNw9bBQ$d9Kp_%+EO7&Msli{punfn^Z_h$npF;IxU#gFY#(M{=#X6IY%Yu{icwE z93_il=yw?^`by#$eNRj6ow}@2@Nu8;?Nshf@Ooo4RTANUUV>Djpk?q ze@@78XWPbNth~r_qa)zFf;8zCF(5P!mCc{+Cwm9LxuUX)&=moV%_ixX^n~7H zV>c)`yBwmq&bid1DH2fX_SFHFmM@;gx85Jk5P+ZHT2%21ZnZHvLjT#b%Y9w&RX70m zlHuCorGIM`R~k}SPLJCOa1~IMuZx8@x^p0o-zU+^jYfpKm@i+`eClh9++;>m-+2gQ zG6z!9(S@xWE;-L1hwdE=(I_DKqTbECSXDDQ%t(H!?MGIC+t+V|qRiBY%>w!_sLNaB118{hzqNv7aTPIZdi`|zDCUaxF3bwS29yw#UD&_`-K zMd{s27+twvIE8C9hH+Q@K}DGeMV+vpg{Z@Qe#g)tGK{`aEG}+v6%*RzD^^KFL8%x)bGYU=QlnLZkr674B`P z8~gbl+azc#X0Le}ATI4M{&bQ~5K5O3gSxn<(hrPe*ou!x4pk@1p42yIHo-Y(OHcrz zz-gW~Q}XM%@}f{9vJU}LV{M#W#-@#gYIs4fUO>r0N3vyQzv-j|bJ$EMd2#_fAGeEL zpR%1kz-}q2~ zpjFS5ODr8H(WjVZ0F-nC5W}XittGvL_rmounI^OGB*JjPxiR19fjJcgC1A_*G^EGv zgL~C4i5ZUo?3A$OXx`v@_u1yV*xBJ0BLvQ-tSMI*%x%sb-J`B(_NFMUvlE*XO&@}Fatr?--FeNmQDgv63 zk2`{WW`>1I%z>G`E(I_wULrTO{jm`nWpCb=Z=!thfj9Kmm6?k9y-jF%+meJE*`M7Q zNZ;{Ux*mnK`^)W4(@F9tXN4&!;W~D2J5R5IUl9l9D9YxNyu*o}d$f zq@!#I2bM`UG4h}OfsF4~r=eXLm7eKK9j>tsmkGU$(UgIoi}GDI9QX3m{Ydv%iX-kZpW(9Y%Zep#5r`N!p*Y$nG3sfi~mbn0?0 zA!nD%WF`bEbMlZW_~5B_B6ViTDes?AiMq4PlxCGLt51bbc|UHsWz#}$yp)}ALFs%~ zyn@-`JUO8wPB3U-aVf^gPOO(Xjh@P*{4Ba<9OK!vN_hB8SxX;@F7%tk2(3O!gUz_# z;#{nBqbRZLY!yts-kj^u;hE2Te0?x4^ucu%6afNGv|l|ImP#f=3=AhOnl0gbZNMzS ztfQhUNt zYyJ!Mwp>qk9jHB2Ig()GL+u6?5iJJ!xkpW&0~N$7g|+VH-IYQDCtNi8%!i`i+}cWVA)RM^c} zJHa0+(Cs%nyaZ~!F(7q!70Uw)2px~hLQwQekk$t?#f~PA7QQd!v02%*%^ISu8dyjb zV|(*DtpxUki_^)E^+5}+J*iAj-AT7w(U!a8i9XhsDt$3`P#cI-eOPD*uV0ht)N@-> zhmls=&b}!x=af)*AAuU1m%f6bHqbut#6?c~Q<1G6UPKDP>}e}Ksn8JBi1ScgJDJf6 zcIzkEK7_UJ9F$s*v~?AM>GxF}jsp9(%`|?|o?~p2t1Ez~%?}OedM}M>AZOi`HW#HN zbCD?cG%Pt`v?;F6%znM;C#AT?+C}{C$)2K#AFq>VW=z?IC`-Qyu{Hf6a?2{qs zO)3c9l55oj&m}5wPLsq&m&HRi{Q4Q4PW|{88URlJ-VrlF*h8e=bdk9cy9*nint~v4 zZ3*REdHiS@(5#@oA73Ec{^psDQh_NLy3Km$tmLGwrqWQO&Oh|+3VwgCNf>FYHY~Wm zhuNsR-s@hh6s@_+<1SI(5^`%H^}=gJ>DGBM33qDykPHyKzRoC23@&6oRe~JxbQXiA zJuZ0GRi5f4$iV%aSrJmr<0>8kGf}K^PkJ=~)D8D0t%OCX>Fff;RgMCUX9!O4rDPp$ z*m6p%S@~b@Sb9U3=&F&$@*|UXF}RZ>&#~;1pTF|a&IH*a1xV1bQfSeg@6a#ySJlXL zOIb~2P`jh!`w;Uw(a=}B*hDsMisy~E;`X68?xiEE-7k<^`oLrVz2fW|_JAI|>$J%O zWgRHhBF|F4s=njlYNPUKvQS0gkbnnUU0wY_OAOD&yY@&`5(`KmKbc+q-CR4PG+BRL zWtS(Noc@mbavANl5Asmyk@uZU0TR@~*;MrrngpROM)pZB z2H(cUtPM^O;bZ$ql*`hir|{cS5-^Q92z4Ad3zgZbBGyEL5%d})jt1SZN=$@p=c);q zt96lG+AFDK)2((yEM*3slFLY9Y$Z`5GYWkIxXANqHyBv_RlXOrsutt`rC8>GKp2}! zHr5YPhqOV@oxHA_YHgcL)y<&$f zN%PS8NATL^>hlA-0GRJgUbx@S999L%h&smN-8&XHcOgO4wEyO-qEX7khh)piqzlb+B=ZUM```(l)c0* zx1aQxOAE8==w{*0b(;g=6OSq(i7U9%ecBH?>_v9}~?fATSeB%wmI^!}5Py#zc5 zhxc4=`MD@V4N_uK^}YGMbZ@1?4m>-PYRb2Cs8`u>TTATLY?20z#vSqW4ZO10!L(Y}2WEXN z1I(HxUnS7j18RSwQPWmK;|p6hv9kfy(Bko??4KM-mUyFLT3(XpQ#HQltI^msf{M0N z&xUIREyv2m%C(Oc`fCe;Q!ywT4_5mWbKh_tCspULfm=hpvyHa66DS3sC6!lZOO0r|&~&qgg&%oiMVAFkZL$%5xEO2}15|6 zXQT7iK5*DPvy7#`vqOM3;zlc-cP4MI(txt2?@jxo!SHC&e4qly{g5b&Ykj8+ufM^A zsLWw4@Dcc&E(mykr1#)+XzS>r=0o7X{!?}gZu?sESxyy@oHY=(P!77Jti!-oGD2w~O{rWrDN{ME=}>ZPZpcl#$50y_@!9ZlYqZ zC z&zFR@7hz59?T^TomF4Arwqui5CNBGu9(VfF&#W36*g+k{^gck=J4q}sJYF%!QjQ1R zQAMLe)Nn$Y# z&PA{pN+oK-y=OGB!ym=%or;uC)kUo_O)_4C#;n&ub`Iwq$OYp$e|+gB_@1>D=V0~J zus9F7o?Zou36XdNoyAD9S)ym2?-PG5A};yyc}1gH4n_j0Kq=);e@MP5HU2jBF zgW$M+<0m$E_am(b58dvIrMFr<zNJ&8WP!$xFF~$_1EE;YH-|sf#f^y%UNa0(N$M^8m~bs&_hSP}LIPLj z!R|G{K<~kC4fwNlHcA3@)<;+i-fwaML*Ox(#6WDY=`rv%#_?v(TVHFZ-em=iwO35Q zzK`A9P77v63CY9FCS&{a%8>fR0Hw&8-Om|Mel?l7lEgJXSW zgJCPojc&;KsMBP8tmw@g*QSU_LYgKncK8#+gA&I}5>0%Lr|j9`?QJt99akpuFNygd zM?Sj@d!TX`=Ly)V8BX>pE7JV|KP0Ogf3&C++q}8`RceS0!OQoA#QMt552U^=9L{G3 zPS_y6O#@~+2UXB5p=2old^H)JvLZ0621*%x`-EhRIuC7UzTBUZ3BWo}rpdttlNWOp zp-C#5XYAkqW*N(L%KIp>>g`+{Q_C!Pip68V62OacnplIG8NaVQON)_UVTX4bkt zbN)!}5&}4Pu1!)P(9>74&?G*G$I6cQb=S4hZe-$cX&Yp`->gQ1`!}=F0OuX6i0nn8 zDLWVjMg_B=F)uEX;u$9jI3NLGPTBG`)Wc-|gH`$FDQ^*h&VSh@S_OAMtJzIp=$shbK-r8jwAVF8$6AJ*oi-PP@t>yem9z6F@flVJlXgfG8OzdOrPu5x2 zNBejT`Jl0dOOM^tJ&GGAw)Q7#BQwiGz-f)$-wG(wPj@Vz#21{!h-cHG-{bO*Ah}=T zo}zMcrTL5xk9CTR%wXH`-M%QW@F=6L8r@pNLBL`fzt)CtuBE-W%0XZKu!U~G5Cjbw zhfSfP&$v66X{9%tMM$y=V|8FpxKFz06JsemZ303>$I|iCkAmJl z0ny$~mHIYeCNG+AMgRJd@P&y!d|D6B=Jb*;U)z7c9}J-1$?OXAvmlHbMwoXsY-ii+ zA$Y9QslFm@OQe5(;)}a?mdp;0?iTDh<%*9@&fwW^EXWQsm_h0f8HPWDgP2KIueDO8 z(YFf%s_*pt&bzYQMQH1jcw>(X$|1?7G> zM~bk7ZE#_&TTcQxbPY-73}IrGu~a$u-W%ANiTe5>5pOoagH3)f0u9^g6)h%2w%c3f zE;Z2A?@Ks4gu+(1;1d!-NyQci;~p3RXXoTDS2M?&7z}&HbNTMJ@T+jW9vQMc=Q9rT zd+?Wkyao%uJ4>r&B?{jP_C1%(deUSo@ug$8L+S#R#Sc>Y$0nke(5z5daE@slV!XEn zn_BZ+?JuS|Rq5k{r~;^K^>qpVUI^a@-@tT-Ny+B@J6V-lebLOe;T^%)Oyby(V_ z5b(HSvxzQC88MZz3z(kBSNg2TrOFhY05{d_pB+;DZ6gekHJ(mDkI6G*@!7n*mJO=|+U?q}h?fUv>_WUZNV*tdH@Jx?8TeqmrH!ZTz z0ryE?T$%s#5P#L<#mNKf!Jy!q<9|EF7e5xbkJ6r_{qOGn^+6Uu+MBFDdvX46?S=#F z<*rY!czOOFqrU`uZ!&?SMn6L_QZE0kT?wjPeYlvNnS`Ia#vR~KT3jAfC~DyQzW~Sl BPXqt} diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml index 135f47c..dbbae4b 100644 --- a/dispersion_protocol/dispersion.xml +++ b/dispersion_protocol/dispersion.xml @@ -153,12 +153,6 @@ Information about a dispersion device. This message should be requested by a source such as the ground control station using MAV_CMD_REQUEST_MESSAGE. The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. Unix time stamp in microseconds - Name of the payload vendor - Name of the payload model - Custom name given by the user - Version of the payload firmware, encoded as: (Dev & 0xff) << 24 - Version of the payload hardware, encoded as: (Dev & 0xff) << 24 - Integer to uniquely identify this hardware. (0 if unknown) Bitmap of dispersion device capability flags. Bitmap for use for dispersion-specific capability flags. flags. File transfer protocol (FTP) url-like string pointing to the directory of log files diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index a4a13ff..948da2b 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -7,12 +7,6 @@ Information about a dispersion device. This message should be requested by a sou | Field Name | Type | Units | Values | Description | | :------------------ | :--------- | :------------------: | :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | | timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| vendor_name | `char[32]` | | | Name of the payload vendor | -| model_name | `char[32]` | | | Name of the payload model | -| custom_name | `char[32]` | | | Custom name given by the user | -| firmware_version | `uint32_t` | | | Version of the payload firmware, encoded as: (Dev & 0xff) << 24 | -| hardware_version | `uint32_t` | | | Version of the payload hardware, encoded as: (Dev & 0xff) << 24 | -| uid | `uint64_t` | | Invalid:0 | Integer to uniquely identify this hardware. (0 if unknown) | | cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device capability flags. | | custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. flags. | | logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index 44d3794..3d7278e 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -31,7 +31,7 @@ To accomodate the creation of effectiveness and compliance reports for a specifi ### Discovery of Dispersion Device -The MAVlink nodes that need to communicate with Dispersion Devices start the process by sending a broadcast [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) for [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). Every dispersion device should respond with [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). +The MAVlink nodes that need to communicate with Dispersion Devices start the process by sending a broadcast [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) for [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC). Every dispersion device should respond with a [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC). For more information specific to the dispersion device and its capability, a [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) for [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information) should be sent. The target dispersion device should respond with [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). The MAVLink node should then create as many interface instances as Dispersion Devices found. @@ -71,11 +71,12 @@ This message is a meant as broadcast, so it's sent to all parties on the network This is the set of messages/enums for communication between a mavlink node and a dispersion device. -| Message | Description | -| :------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information) | Information about te dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | -| [DISPERSION_DEVICE_STATUS](#dispersion-device-status) | Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events. | -| [GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) | Message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | +| Message | Description | +| :---------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information) | Information about te dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | +| [DISPERSION_DEVICE_STATUS](#dispersion-device-status) | Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events. | +| [GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) | Message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | +| [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) | Message providing basic information about a MAVLink component. This message is meant to be sent by the dispersion device on request via [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). | | Command | Description | | :-------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -96,7 +97,7 @@ This is the set of messages/enums for communication between a mavlink node and a ### Additional Microservice Dependencies -The disperison device is targeted to be a stand alone MAVLink device meaning it needs to support some existing MAVLink microservices beyond the dispersion microservice outlines above. The following microservices are required: +The disperison device is targeted to be a stand alone MAVLink device meaning it needs to support some existing MAVLink microservices beyond the dispersion microservice outlined above. The following microservices are required: - [Heartbeat/Connection](https://mavlink.io/en/services/heartbeat.html) - [Command](https://mavlink.io/en/services/command.html) @@ -104,6 +105,8 @@ The disperison device is targeted to be a stand alone MAVLink device meaning it - [Ping](https://mavlink.io/en/services/ping.html) - [Time Synchronization](https://mavlink.io/en/services/timesync.html) +NOTE: there is not a microservice definition for this but there is a requirement to support [COMPONENT_INFORMATION_BASIC](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) + ### Logging Implementation #### File Management @@ -198,6 +201,10 @@ The dispersion device should be published a low regular rate (e.g. 5 Hz) but als > ![IMPORTANT] When publishing the status message in response to key events, it is essential that the status message timestamp aligns with when that event was enacted otherwise leading and falling edge detection during post processing of the data will incorrectly represent the world. +[COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) + +This information should be published in response to a [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) on startup. + [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) The static information about the dispersion device needs to be sent out when requested using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). @@ -218,7 +225,7 @@ The dispersion device needs to check for commands. See below which commands shou [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) -The dispersion device should send out messages when they get requested, e.g. DISPERSION_DEVICE_INFORMATION. +The dispersion device should send out messages when they get requested, e.g. DISPERSION_DEVICE_INFORMATION, [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC). [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) From 18adb1c8064060b51300cf5c69dfbc0e57f7727a Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 4 Mar 2025 15:42:27 -0500 Subject: [PATCH 15/23] v3 major changes to support ground rig systems with independent nozzle control --- .../configuration_sequence.png | Bin 82272 -> 0 bytes dispersion_protocol/discovery_sequence.png | Bin 88841 -> 103352 bytes dispersion_protocol/dispersion.xml | 96 +++++----- dispersion_protocol/hardware_config.png | Bin 78699 -> 69120 bytes dispersion_protocol/messages.md | 172 +++++++++--------- dispersion_protocol/microservice.md | 147 +++++++++------ text/0020-dispersion-payload.md | 18 ++ 7 files changed, 252 insertions(+), 181 deletions(-) delete mode 100644 dispersion_protocol/configuration_sequence.png diff --git a/dispersion_protocol/configuration_sequence.png b/dispersion_protocol/configuration_sequence.png deleted file mode 100644 index 95bb4970037374bad9a50f56b627f8ad14e5527d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82272 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 delta 18161 zcmc({cT`i|wmz&VpdcuMARvOE^r93Ikls6jiXZ_|dM}}u4bnuEUIe6R=n#}Dq1lk$ zLWy*cme8UQhy((^4T|r3&mH%>XMAUzd;Wpp-t4v3o@=f-pXZr#`!1g>vYIrO{=(7e z6J$q@97$Rp@CJV!b=Ox_I0Em!fH`sm{`jr%#Vbce6KEj033|NeDkwP_j{f;4eZ>UV zN2&xTueAg+ahe1@VT%fK@yMg`=1vv6H{BA9#f%)h_wQ$ytrIs?(DI)$THTk`#oJYVlQ{5 zd6gKz13P0>fz@mmPQK<@9v=H-*}j!NF2Icac59=h+5Fzmmo3GzRZ$SiB*C^UHUn9@;lG2dKIwH%tLxu>8sDKtPM+h9fY*td&N!Ho0W z$n*e!l@fdO0HV)+aG?lWTD#agSmmgy}Y z3SBgEX(;ssL8L&035U;&ZnW*PIbTx@4Kn1KL?Uw>2EVA83L29XQ}Oj;WK z@WM`{PS#^dv2dBu2)pN!4~bTPeAgnmSo^2Tt>`b1W9kHPJcrMhCmMRS*QolgV! z2g8{ra)z%4@TVb^?{99=NRW`kQ1$` zcV7qo>jd8)247MPS4-g3o(*F#J+UcxV3v-oUuHSM7IcIJ{1L=Jd0Fd)-bERI?hGlf z>wCwk%nnRHr+Z-f!?%!oA4M8Y#mp(~x0x6ebYxw(C7R_}m=K{SRB&l6-=?I^Cg=#T zKi>YJQ*$Id`mk8d6v5Owtynhs?C(i8TpzAmSGSO6Qp$0DMfCPIhab%T`$sV8!{(<~ zVlGO%0oRz>RM*V)~0gUhAoE(}Rs$Ak` z6Lv5Ta4ivld_EH0j9z8*Q@P>Z!Fwm)5WHG*_b2=jMe?^BT=Z;E8bnFdlUHwneRum~*AP$Gg<5$NmcXzhjw$?1$UR--E>O5g$ zT;sITn9v->pt-k8v;_Yko=u*F$GEcKCxM_bQSZ|wQ*2n4>^9flmdIlOlMf*aK3;C! zBe?HuW&jZo8{4j>&PKgnDZX3EOUtR{!iw@}^jV)*ud*8)GjkrTF12WlmB&q9(MXJ) z1oj~NPA4NH6VGQTXxpFne4zBc_?Rv?Y<=nIN4NfUar+^y#ld3h?iye(@R6u>_XT%H zhy4>%L(#i`(oxryA8D%`JAUSgJjrQRnZz1k!dEjB*!5u)ws>OE7O!0GILet7u$e0A z@Kw(jhrZ;#(4F+RyG(txh0`(V)@Vuh`Db)OrY7OkEKJ;&!1HJ-zFbGx?Npg`}E z`wqBg>Z!t(v#(=h+#&?2B83`%zMAdM7=1PnMvpLQxnJXyQOnhk_c@X_Vhg4q33!j0 z

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 diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml index dbbae4b..8ac0d54 100644 --- a/dispersion_protocol/dispersion.xml +++ b/dispersion_protocol/dispersion.xml @@ -25,17 +25,20 @@ - Gimbal device (low level) capability flags (bitmap). + Dispersion device (low level) capability flags (bitmap). Device supports dispersing liquid payloads. Device supports dispersing granular payloads. - + + Device supports control of droplet size at individual nozzles. + + Device supports varying dispersion rate with speed changes up to provided limits. - + Device supports measuring its own fill level. @@ -77,13 +80,10 @@ Device tank was filled to an unexpected level - - Device was not configured before trying to disperse payload - - + Device is not maintaining pressure as expected - + Device detected an unexpected event like a crash @@ -104,45 +104,47 @@ Not specified - - A generic liquid payload is being dispersed. Units are in Liters for capacity and Liters/min for dispersion rate + + A generic liquid payload is being dispersed via fixed droplet size nozzles. Units are in Liters for capacity and Liters/min for dispersion rate - + + A generic liquid payload is being dispersed via a nozzle that supports variable droplet sizes. Units are in Liters for capacity, Liters/min for dispersion rate, and micrometers for target droplet size. + + A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate + + The reference frame for dispersion device command values. + + Not specified. + + + Dispersion control values should be set to the exact values provided in control message. + + + Default dispersion control values should be offset by the amount specified in the control message. + + Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. NaN and INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current yaw or latitude rather than a specific value). See https://mavlink.io/en/guide/xml_schema.html#MAV_CMD for information about the structure of the MAV_CMD entries - - This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. - The type of dispersion this device supports. This indicates target units as outlined in enum - The target speed for which any target dispersion rate applies, since the rate should change with speed - Minimum dispersion rate the current configuration supports. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - Maximum dispersion rate the current configuration supports. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - If this is a spray dispersion system, minimum pressure the current configuration supports - If this is a spray dispersion system, maximum pressure the current configuration supports - Target payload amount for device. This will be ignored if the capability flags do not indicate fill level measurement is supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) - - + Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS. The unix timestamp for message creation in microseconds - The type of dispersion this device supports. This indicates units as outlined in enum - Target dispersion rate for the system. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - Empty - Empty - Empty - Empty - - + Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). + Subcomponent id (ie nozzle) to address, 0 for device. 1 or greater for a subcomponent. Send command multiple times for multiple subcomponents. + The type of dispersion this device supports. This indicates units as outlined in enum + The reference frame for the provided target values that allows use of relative or absolute corrections. + Target dispersion rate for the system. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) + Target droplet size for spray nozzles if dispersion type indicates atomizer spray. Invalid:NaN, <=0. Droplet diameter in micrometers. + + Command for locking/unlocking the device. The lock is intended to serve as an emergency off by preventing the device from responding to MAV_CMD_SET_DISPERSION_DEVICE_RATE messages. When locked, the device should stop dispersing. The unix timestamp for message creation in microseconds - Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. 1 for locked. Otherwise unlocked. - Empty - Empty - Empty - Empty - Empty + Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). + Subcomponent id (ie nozzle) to address, 0 for all subcomponents. Send command multiple times for multiple subcomponents. + Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. 1 to lock. 0 or any other value to unlock. @@ -150,29 +152,37 @@ + Information about a dispersion device. This message should be requested by a source such as the ground control station using MAV_CMD_REQUEST_MESSAGE. The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. Unix time stamp in microseconds - Bitmap of dispersion device capability flags. - Bitmap for use for dispersion-specific capability flags. flags. + Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send information multiple times for multiple subcomponents. + Number of controllable subcomponents this dispersion device has. (ie variable nozzle bodies or boom segment control). 0 or 1 indicates the subcomponent and device are the same. + Bitmap of dispersion device or subcomponent capability flags. + Bitmap for use for dispersion-specific capability flags. File transfer protocol (FTP) url-like string pointing to the directory of log files + File transfer protocol (FTP) url-like string pointing to the prescription map target location Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration - Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) + Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) + Maximum supported droplet diameter if system supports variable droplet size nozzles + Minimum supported droplet diameter if system supports variable droplet size nozzles Message reporting the status of a dispersion device. This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. Unix time stamp in microseconds - Dispersion type. Defines units for device capacity and dispersion rate + Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. + Dispersion type. Defines units for device capacity and dispersion rate Current flags set by the device - Bitmap for failure flags (0 for no failure). Any failure indicates the system has stopped - Bitmap for warning flags (0 for no warning) + Failure flags (0 for no failure). Any failure indicates the system has stopped + Warning flags (0 for no warning) Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. + Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - Current tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) Current pressure of the dispersion system if dispersion type indicates it is a sprayer + Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE diff --git a/dispersion_protocol/hardware_config.png b/dispersion_protocol/hardware_config.png index 2117c9df54e7718e1bd7cc61def1817792826cc9..34f84c47fcecefc8e561e067748bfbe3a7924abd 100644 GIT binary patch literal 69120 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 YS0qXKoGH8sxdMJ^sp+ehDcgkp56UDwQ~&?~ diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index 948da2b..d7dad6d 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -4,35 +4,42 @@ Information about a dispersion device. This message should be requested by a source such as the ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. -| Field Name | Type | Units | Values | Description | -| :------------------ | :--------- | :------------------: | :---------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device capability flags. | -| custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. flags. | -| logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | -| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | -| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | -| pressure_min | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | -| pressure_max | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | -| max_capacity | `float` | liters or kg | invalid:NaN | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) | +| Field Name | Type | Units | Values | Description | +| :------------------- | :--------- | :------------------: | :---------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | +| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send infromation multiple times for multiple subcomponents. | +| subcomponent_count | `uint8_t` | | invalid:UINT8_MAX | Number of controllable subcomponents this dispersion device has. (ie variable nozzle bodies or boom segment control). 0 or 1 indicates the subcomponent and device are the same. | +| cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device or subcomponent capability flags. | +| custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. | +| logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | +| prescription_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the prescription map target location | +| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | +| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | +| capacity_max | `float` | liters or kg | invalid:NaN | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) | +| pressure_min | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | +| pressure_max | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | +| droplet_diameter_min | `uint16_t` | um (microns) | invalid: 0 | Minimum supported droplet diameter if system supports variable droplet size nozzles | +| droplet_diameter_max | `uint16_t` | um (microns) | invalid: 0 | Maximum supported droplet diameter if system supports variable droplet size nozzles | ## DISPERSION_DEVICE_STATUS -Message reporting the status of a dispersion device. +Message reporting the status of a dispersion device and its subcomponents. -This message should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. +This message should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. If a message creation is in response to a key event, the timestamp field should note when the key event occurred and not when the message was created. For all other status messages, the timestamp should just be when the message gets created. -| Field Name | Type | Units | Values | Description | -| :-------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| dispersion_type | `uint32_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | -| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | -| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | -| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | -| custom_codes | `uint8_t` | | | Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | -| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | -| fill_level | `float` | liters or kg | invalid:NaN | Current tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) | -| pressure | `uint32_t` | Pa | invalid:UINT32_MAX | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | +| Field Name | Type | Units | Values | Description | +| :--------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | +| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. | +| dispersion_type | `uint8_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | +| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | +| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | +| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | +| custom_codes | `uint8_t` | | | Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | +| fill_level | `float` | liters or kg | invalid:NaN | Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) | +| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | +| pressure | `uint32_t` | Pa | invalid:UINT32_MAX | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | +| droplet_diameter | `uint16_t` | um (microns) | invalid: 0 | Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE | # Enumerated Types @@ -61,11 +68,22 @@ Components must use the appropriate ID in their source address when sending mess The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. -| Value | Name | Description | -| :---- | :-------------------------- | :------------------------------------------------------------------------------------------------------------------ | -| 0 | MAV_DISPERSION_TYPE_UNKNOWN | Not specified | -| 1 | MAV_DISPERSION_TYPE_SPRAY | A generic liquid payload is being dispersed. Units are in Liters for capacity and Liters/min for dispersion rate | -| 2 | MAV_DISPERSION_TYPE_SPREAD | A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate | +| Value | Name | Description | +| :---- | :-------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | MAV_DISPERSION_TYPE_UNKNOWN | Not specified | +| 1 | MAV_DISPERSION_TYPE_SPRAY_FIXED_SIZE | A generic liquid payload is being dispersed via fixed droplet size nozzles. Units are in Liters for capacity and Liters/min for dispersion rate | +| 2 | MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE | A generic liquid payload is being dispersed via a nozzle that supports variable droplet sizes. Units are in Liters for capacity, Liters/min for dispersion rate, and micrometers for target droplet size. | +| 3 | MAV_DISPERSION_TYPE_SPREAD | A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate | + +## MAV_DISPERSION_FRAME + +The reference frame for dispersion device command values. + +| Value | Name | Description | +| :---- | :---------------------------- | :-------------------------------------------------------------------------------------------------------- | +| 0 | MAV_DISPERSION_FRAME_UNKNOWN | Not specified. | +| 1 | MAV_DISPERSION_FRAME_ABSOLUTE | Dispersion device control values should be set to the exact values provided in control message. | +| 2 | MAV_DISPERSION_FRAME_OFFSET | Default dispersion device control values should be offset by the amount specified in the control message. | ## DISPERSION_DEVICE_CAP_FLAGS @@ -75,8 +93,9 @@ The dispersion type a device is setup for. Dispersion types specify the units fo | :---- | :---------------------------------------------------- | :-------------------------------------------------------------------------------- | | 1 | DISPERSION_DEVICE_CAP_FLAGS_SPRAYER | Device supports dispersing liquid payloads. | | 2 | DISPERSION_DEVICE_CAP_FLAGS_SPREADER | Device supports dispersing granular payloads. | -| 4 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | -| 8 | DISPERSION_DEVICE_CAP_FILL_LEVEL_MEASURE | Device supports measuring its own fill level. | +| 4 | DISPERSION_DEVICE_CAP_FLAGS_VARIABLE_DROP_SIZE | Device supports control of droplet size at individual nozzles. | +| 8 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | +| 16 | DISPERSION_DEVICE_CAP_FILL_LEVEL_MEASURE | Device supports measuring its own fill level. | ## DISPERSION_DEVICE_STATUS_FLAGS @@ -93,18 +112,17 @@ The dispersion type a device is setup for. Dispersion types specify the units fo (Bitmask) Dispersion device error flags. Any error flag indicates the device has turned off. -| Value | Name | Description | -| :---- | :-------------------------------------------------- | :---------------------------------------------------------- | -| 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error | -| 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged | -| 4 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed | -| 8 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with device limits | -| 16 | DISPERSION_DEVICE_ERRORS_OVERSPEED | System is moving faster than the device can deliver | -| 32 | DISPERSION_DEVICE_ERRORS_UNDERSPEED | System is moving slower than the device can support | -| 64 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | -| 128 | DISPERSION_DEVICE_ERRORS_NO_CONFIGURATION | Device was not configured before trying to disperse payload | -| 256 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintaining pressure as expected | -| 512 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | +| Value | Name | Description | +| :---- | :-------------------------------------------------- | :-------------------------------------------------- | +| 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error | +| 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged | +| 4 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed | +| 8 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not viable | +| 16 | DISPERSION_DEVICE_ERRORS_OVERSPEED | System is moving faster than the device can deliver | +| 32 | DISPERSION_DEVICE_ERRORS_UNDERSPEED | System is moving slower than the device can support | +| 64 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | +| 128 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintaining pressure as expected | +| 256 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | ## DISPERSION_DEVICE_WARNINGS @@ -118,44 +136,30 @@ The dispersion type a device is setup for. Dispersion types specify the units fo # Commands -## MAV_CMD_DO_CONFIG_DISPERSION_PARAMS - -This command provides the necessary run time information for the dispersion device to support a specific configuration associated with the target dispersion profile. - -| Param (Label) | Description | Values | -| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------ | -| 1 dispersion_type | The type of dispersion this device supports. This indicates target units as outlined in enum | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | -| 2 reference_speed | The target speed for which any target dispersion rate applies, since the rate should change with speed | Invalid:NaN Units: m/s | -| 3 dispersion_rate_min | Minimum dispersion rate the current configuration supports. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | -| 4 dispersion_rate_max | Maximum dispersion rate the current configuration supports. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | -| 5 pressure_min | If this is a spray dispersion system, minimum pressure the current configuration supports | Invalid:NaN, <0 Units:Pa | -| 6 pressure_max | If this is a spray dispersion system, maximum pressure the current configuration supports | Invalid:NaN, [!NOTE] +> **NOTE** > Be discipline about conflicting control sources that are not the lock, as they will be processed in the order in which that are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. -> [!NOTE] -> The [MAV_CMD_DO_SET_DISPERSION_LOCK](#mav-cmd-do-set-dispersion-lock) messages should only be used as an emergency shutoff. All normal control should happen through the [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) message. As an example, the lock message should be used to shut off the spray system when taking fallback actions like landing in place or returning home. The lock should not be used to turn the dispersion on or off at waypoints in an automated mission. In fact, a normal mission in general should never need to use the lock. +> **NOTE** +> The [MAV_CMD_SET_DISPERSION_LOCK](#mav_cmd_set_dispersion_lock) messages should only be used as an emergency shutoff. All normal control should happen through the [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) message. As an example, the lock message should be used to shut off the spray system when taking fallback actions like landing in place or returning home. The lock should not be used to turn the dispersion on or off at waypoints in an automated mission. In fact, a normal mission in general should never need to use the lock. ### Autopilot State for Dispersion Device -The autopilot should send the [GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) message to the dispersion device. This data is required by the Dispersion Device control system to make effective dynamic dispersion rate corrections based on system current speed. This message is not as critical as the timing for dispersion on and off but it does have an impact on coverage quality. A relatively low rate publish frequency of 10Hz or faster is likely ample. +The autopilot should send the [GLOBAL_POSITION_INT_COV](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT_COV) or [LOCAL_POSITION_NED_COV](#https://mavlink.io/en/messages/common.html#LOCAL_POSITION_NED_COV) message to the dispersion device. This data is required by the Dispersion Device control system to make effective dynamic dispersion rate corrections based on system current velocity. This message is not as critical as the timing for dispersion on and off but it does have an impact on coverage quality. A relatively low rate publish frequency of 10Hz or faster is likely ample since extrapolation can be utilized. ### Dispersion Device Broadcast/Status Messages @@ -71,31 +87,30 @@ This message is a meant as broadcast, so it's sent to all parties on the network This is the set of messages/enums for communication between a mavlink node and a dispersion device. -| Message | Description | -| :---------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information) | Information about te dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | -| [DISPERSION_DEVICE_STATUS](#dispersion-device-status) | Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events. | -| [GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) | Message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | -| [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) | Message providing basic information about a MAVLink component. This message is meant to be sent by the dispersion device on request via [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). | +| Message | Description | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) | Information about the dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | +| [DISPERSION_DEVICE_STATUS](#dispersion_device_status) | Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events. | +| [GLOBAL_POSITION_INT_COV](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT_COV) or [LOCAL_POSITION_NED_COV](#https://mavlink.io/en/messages/common.html#LOCAL_POSITION_NED_COV) | Message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | +| [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) | Message providing basic information about a MAVLink component. This message is meant to be sent by the dispersion device on request via [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). | -| Command | Description | -| :-------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) | Request the target system(s) emit a single instance of a specified message. This is used to request [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). | -| [MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params) | This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. | -| [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) | Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params). | -| [MAV_CMD_DO_SET_DISPERSION_LOCK](#mav-cmd-do-set-dispersion-lock) | Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) messages. When locked, the device should stop dispersing. | +| Command | Description | +| :-------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE) | Request the target system(s) emit a single instance of a specified message. This is used to request [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). | +| [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) | Command to provide real time adjustment to dispersion device and subcomponent output. | +| [MAV_CMD_SET_DISPERSION_LOCK](#mav_cmd_set_dispersion_lock) | Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) messages. When locked, the device should stop dispersing. | | Enum | Description | | :---------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------- | -| [DISPERSION_DEVICE_CAP_FLAGS](#dispersion-device-cap-flags) | Dispersion device capability flags (bitmap). Used in [DISPERSION_DEVICE_INFORMATION](#dispersion-device-information). | -| [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion-device-status-flags) | Flags for dispersion device operation (bitmap). Used in [DISPERSION_DEVICE_STATUS](#dispersion-device-status). | -| [DISPERSION_DEVICE_ERRORS](#dispersion-device-errors) | Dispersion device error flags (bitmap, 0 means no error). Used in [DISPERSION_DEVICE_STATUS](#dispersion-device-status). | -| [DISPERSION_DEVICE_WARNINGS](#dispersion-device-warnings) | Dispersion device warning flags (bitmap, 0 means no warning). Used in [DISPERSION_DEVICE_STATUS](#dispersion-device-status). | -| [MAV_DISPERSION_TYPE](#mav-dispersion-type) | The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. | +| [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Dispersion device capability flags (bitmap). Used in [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). | +| [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Flags for dispersion device operation (bitmap). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | +| [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Dispersion device error flags (bitmap, 0 means no error). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | +| [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Dispersion device warning flags (bitmap, 0 means no warning). Used in [DISPERSION_DEVICE_STATUS](#dispersion_device_status). | +| [MAV_DISPERSION_TYPE](#mav_dispersion_type) | The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. | ## How to Implement the Dispersion Device Interface -### Additional Microservice Dependencies +### Microservice Dependencies The disperison device is targeted to be a stand alone MAVLink device meaning it needs to support some existing MAVLink microservices beyond the dispersion microservice outlined above. The following microservices are required: @@ -104,8 +119,31 @@ The disperison device is targeted to be a stand alone MAVLink device meaning it - [File Transfer Protocol](https://mavlink.io/en/services/ftp.html) - [Ping](https://mavlink.io/en/services/ping.html) - [Time Synchronization](https://mavlink.io/en/services/timesync.html) +- [Parameter Protocol](https://mavlink.io/en/services/parameter.html) + +> **NOTE** +> There is not a microservice definition for this but there is a requirement to support [COMPONENT_INFORMATION_BASIC](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) + +### Device Parameters (Hardware Configuration) + +A dispersion device can take many form factors with spray devices being the most variable. It is very common to have different spray boom widths and variable nozzle spacing. Each nozzle can also have a unique limit range for flow rate, pressure, and droplet size. Since you might have anywhere from one nozzle to a couple hundred nozzles. While this hardware configuration can change, it is not typically during the middle of a job and is something you would expect to persist through power cycles. That makes the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) a really good candidate for this scenario. It also provides a good infrastructure to save common configurations as param files. + +The definition of these parameters is an implementation detail so only a potential example parameter set for hardware configuration is proposed. It might look something like as follows: -NOTE: there is not a microservice definition for this but there is a requirement to support [COMPONENT_INFORMATION_BASIC](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) +| Name | Type | Units | Values | Description | +| :------------------------------- | :------ | :------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| FILL_CAPACITY_MAX | `float` | liters or kg | positive | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) | +| SUBCOMPONENT_COUNT | `float` | | | Number of subcomponents this device has. | +| COMPONENT_1_OFFSET_X | `float` | m | positive | component 1 x position offset relative to device in meters | +| COMPONENT_1_OFFSET_Y | `float` | m | positive | component 1 y position offset relative to device in meters | +| COMPONENT_1_OFFSET_Z | `float` | m | positive | component 1 z position offset relative to device in meters | +| COMPONENT_1_RATE_MAX | `float` | liters/min or kg/min | positive | Maximum dispersion rate component 1 supports | +| COMPONENT_1_RATE_MIN | `float` | liters/min or kg/min | positive | Minimum dispersion rate component 1 supports | +| COMPONENT_1_PRESSURE_MAX | `float` | Pa | positive | Maximum pressure component 1 supports | +| COMPONENT_1_PRESSURE_MIN | `float` | Pa | positive | Minimum pressure component 1 supports | +| COMPONENT_1_DROPLET_DIAMETER_MAX | `float` | um | positive | Maximum droplet diameter component 1 supports | +| COMPONENT_1_DROPLET_DIAMETER_MIN | `float` | um | positive | Minimum droplet diameter component 1 supports | +| ... | ... | ... | ... | ... | ### Logging Implementation @@ -178,17 +216,17 @@ ENTRY_TYPE Enum ### Messages to Send -The messages listed should be broadcast on the network/on all connections (sent to everyone). +The messages listed below should be broadcast on the network/on all connections (sent to everyone). This set is not comprehensive in that it does not necessarily reiterate what is already defined in the pre-existing microservices documented as a dependency above. It is expected those messages get implemented as well. [HEARTBEAT](https://mavlink.io/en/messages/common.html#HEARTBEAT) Heartbeats should always be sent (usually at 1 Hz). -> [!WARNING] +> **WARNING** > Dispersion devices that set their `sysid` from the autopilot will need to wait for the autopilot's heartbeat before emitting their own (note that if the dispersion device can receive heartbeats from multiple autopilots then the `sysid` must be explicitly/statically configured). - `sysid`: the same sysid as the autopilot (this can either be done by configuration, or by listening to the autopilot's heartbeat first and then copying the sysid, default: 1) -- `compid`: [MAV_COMP_ID_DISPERSIONER](#mav_comp_id_dispersion) +- `compid`: [MAV_COMP_ID_DISPERSIONER](#mav_comp_id_dispersioner) - `type`: [MAV_TYPE_DISPERSION](#mav_type_dispersion) - `autopilot`: [MAV_AUTOPILOT_INVALID](https://mavlink.io/en/messages/common.html#MAV_AUTOPILOT_INVALID) - `base_mode`: 0 @@ -197,9 +235,10 @@ Heartbeats should always be sent (usually at 1 Hz). [DISPERSION_DEVICE_STATUS](#dispersion_device_status) -The dispersion device should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. The fields like target_system and target_component can be set to 0 (broadcast) by default. +The dispersion device status should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change for each subcomponent and the device itself. -> ![IMPORTANT] When publishing the status message in response to key events, it is essential that the status message timestamp aligns with when that event was enacted otherwise leading and falling edge detection during post processing of the data will incorrectly represent the world. +> **IMPORTANT** +> When publishing the status message in response to key events, it is essential that the status message timestamp aligns with when that event was enacted otherwise leading and falling edge detection during post processing of the data will incorrectly represent the world. [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) @@ -211,11 +250,15 @@ The static information about the dispersion device needs to be sent out when req ### Messages to Listen To/Handle -[GLOBAL_POSITION_INT](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT) +This set is not comprehensive in that it does not necessarily reiterate what is already defined in the pre-existing microservices documented as a dependency above. It is expected those messages get implemented as well. -The dispersion device should be able to get all the information from the autopilot that it requires in this one message. +[GLOBAL_POSITION_INT_COV](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT_COV) or [LOCAL_POSITION_NED_COV](#https://mavlink.io/en/messages/common.html#LOCAL_POSITION_NED_COV) -If this message is not sent by default by the autopilot, or the rate is not ok, the command [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) can be used to request it at a certain rate. +One of the above two messages must be provided by the autopilot so the dispersion device can correct the dispersion behavior to account for changes in vehicle performance. The GLOBAL_POSITION_INT_COV should be provided if the reference frame for the system is MAV_FRAME_GLOBAL and the LOCAL_POSITION_NED_COV should be used if the reference frame for the system is MAV_FRAME_LOCAL_NED. + +The device should utilize which message is provided to determine its coordinate frame and then confirm there is no inconsistency in expected coordinate frame across all the data it will use to accomplish the task. + +If this message the rate is not ok, the command [MAV_CMD_SET_MESSAGE_INTERVAL](https://mavlink.io/en/messages/common.html#MAV_CMD_SET_MESSAGE_INTERVAL) can be used to request it at a certain rate. [COMMAND_LONG](https://mavlink.io/en/messages/common.html#COMMAND_LONG) @@ -231,14 +274,10 @@ The dispersion device should send out messages when they get requested, e.g. DIS The dispersion device should stream messages at the rate requested. -[MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params) - -This is an event driven command that should be triggered by a situational change in device condiguration, such as swapping nozzles, and it provides the necessary information for the device to properly meet the target dispersion rate despite hardware changes. - -[MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) +[MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) -Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using [MAV_CMD_DO_CONFIG_DISPERSION_PARAMS](#mav-cmd-do-config-dispersion-params). +Command to provide real time adjustment to dispersion device or subcomponent output. -[MAV_CMD_DO_SET_DISPERSION_LOCK](#mav-cmd-do-set-dispersion-lock) +[MAV_CMD_SET_DISPERSION_LOCK](#mav_cmd_set_dispersion_lock) -Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_RATE](#mav-cmd-do-set-dispersion-rate) messages. When locked, the device should stop dispersing. +Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) messages. When locked, the device should stop dispersing. diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 66defa5..0a16a4d 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -49,11 +49,21 @@ A procotol can be very difficult to analyze in isolation so I started by creatin [x] spot spraying. This happens at the planning level. This protocol supports setting flow rate at specific locations which is enough for spot spraying. [x] communication buses might be lossy so protocol must handle failure detection. [x] ability to construct a synchronized timestamp across mavlink nodes to account for latency in commands when generating reports +[] multiple dispersion devices are connected to the autopilot and need independent control +[] a single dispersion device has multiple nozzles that require independent nozzle control +[] the user can adjust droplet size on the ground station during a mission to account for changing wind conditions +[] a dispersion device could correct flow rate for individual nozzles during turning +[] a dispersion device can reduce overspray when intersecting an existing not perpendicular spray line by individually turning off one nozzle at a time +[] protocol supports nozzle count of largest existing sprayer with some additional room for expansion ### Implementation After reviewing other submissions, I think I might have gone too far down this path but I wanted something complete to get reviewed by industry relevant people in my network before submitting here to the MAVLink community. I created a messages.md file with the full set of message definitions and a microservice.md file detailing how the protocol should work that is submitted with this PR. I have a couple of versions: one with a manager and one without. I used the one without because it is less complex and conveys the same concept. +Every enum that is not a bitmask uses the zero value as a default UNKNOWN value. This, in my experience, results in more robust systems since it is very common to initialize values to zero in the background. Developers can miss this and if zero is a common valid value, the issue often wont surface until late run time. By having a default value that is useless, systems will almost immediately surface an error. + +This protocol should at a minimum support the capability of existing systems and then project into the future a little bit to be a timely, durable, and valuable solution. So, this protocol is designed to support a system with multiple dispersion devices and multiple subcomponents on that device. For the sake of this design, we consider a dispersion device to be a system containing one chemical mix and the infrastructure to deliver that to a field. The dipsersion device must have one gateway compute node that is responsible for communicating over a MAVLink interface. In the most simple form, a disperison device could be a microprocessor, tank, esc, motor, and spreader wheel that needs rate assigned at specific GPS locations but it can take on a more complex form factor for large ground based spray systems. These might have multiple feeder tanks with n number of subcomponents allowing independent control of subcomponent droplet size and flow rate to support many powerful features such as spot spraying and turn compenstation. + ### Questions 1. ~~This is a combined protocol for spraying and spreading since there are many common elements. Should this be split up?~~ @@ -77,6 +87,7 @@ After reviewing other submissions, I think I might have gone too far down this p ## References +- ISOBUS (HSI) Agriculture Comm Standards: https://www.aef-online.org/about-us/activities/high-speed-isobus.html - Pix4D Spot Spraying Article: https://www.pix4d.com/blog/variable-rate-application-wheat-field/ - Aerial Applicator's Manual: https://www.epa.gov/system/files/documents/2023-11/national-aerial-applicator-manual-2014.pdf - MAVLink Gimbal Protocol: https://mavlink.io/en/services/gimbal_v2.html @@ -86,3 +97,10 @@ After reviewing other submissions, I think I might have gone too far down this p - Rotor: https://rotor.ai/ - Guardian Agriculture: https://guardian.ag/ - PYKA: https://www.flypyka.com/ +- TeeJet Dynajet: https://www.teejet.com/precision-farming/application-control-and-monitoring/dynajet +- TeeJet Precision Ag Products: https://www.farmco.com/price%20lists/teejet/2024%2009-01%20teejet%20precision%20picture%20price.pdf +- CPNozzles Accuflow: https://www.cpnozzles.com/products/accu-flo-nozzles/ + +## TODO + +1. um (micron) should be added as an allowed xml unit From 6f046cfd3b3d3c37172bea8f5d58b96b3abbe823 Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 4 Mar 2025 15:43:24 -0500 Subject: [PATCH 16/23] check off test cases --- text/0020-dispersion-payload.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 0a16a4d..3b2d7d7 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -49,12 +49,12 @@ A procotol can be very difficult to analyze in isolation so I started by creatin [x] spot spraying. This happens at the planning level. This protocol supports setting flow rate at specific locations which is enough for spot spraying. [x] communication buses might be lossy so protocol must handle failure detection. [x] ability to construct a synchronized timestamp across mavlink nodes to account for latency in commands when generating reports -[] multiple dispersion devices are connected to the autopilot and need independent control -[] a single dispersion device has multiple nozzles that require independent nozzle control -[] the user can adjust droplet size on the ground station during a mission to account for changing wind conditions -[] a dispersion device could correct flow rate for individual nozzles during turning -[] a dispersion device can reduce overspray when intersecting an existing not perpendicular spray line by individually turning off one nozzle at a time -[] protocol supports nozzle count of largest existing sprayer with some additional room for expansion +[x] multiple dispersion devices are connected to the autopilot and need independent control +[x] a single dispersion device has multiple nozzles that require independent nozzle control +[x] the user can adjust droplet size on the ground station during a mission to account for changing wind conditions +[x] a dispersion device could correct flow rate for individual nozzles during turning +[x] a dispersion device can reduce overspray when intersecting an existing not perpendicular spray line by individually turning off one nozzle at a time +[x] protocol supports nozzle count of largest existing sprayer with some additional room for expansion ### Implementation From 9ced6ced930ce99ca65d7cdfdaa529818fde0522 Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 4 Mar 2025 16:03:23 -0500 Subject: [PATCH 17/23] minor cleanup --- dispersion_protocol/microservice.md | 6 ++---- text/0020-dispersion-payload.md | 11 +++++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index 7712fd8..2ada078 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -151,11 +151,9 @@ The definition of these parameters is an implementation detail so only a potenti The dispersion device must be hosting a MAVFTP server to facilite the offloading of generated log data. -The device should be continuously logging every message in full fidelity using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with it's count like follows: log.dspf, log.dspf.1, log.dspf.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.dspf.12". +The device should be continuously logging every message in full fidelity to a binary file with the extension .mav using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with it's count like follows: log.mav, log.mav.1, log.mav.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.mav.12". -There should be an additional abbreviated log file that only logs during key events such as while dispersion is on or there are device errors. A configurable rolling window of messages (ie 30 seconds) should be maintained for before and after key events to additionally be logged. This abbreviated file format should also follow the same rotating habits as the continuous log. - -Both of the log files above should follow the format outlined below and use the file extensions ".dspf" and ".dsp" respectively. +The implementation should support a more efficient logging method option for applications where memory efficiency is incredibly important. Such a logging implementation could store key events at a minimum to provide enough information to construct effective coverage reports. #### Log File Format diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 3b2d7d7..322386e 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -70,20 +70,23 @@ This protocol should at a minimum support the capability of existing systems and 1. ~~For any kind of effective reporting, not only do the messages needs to be defined but there should also be a degree of standardization on how that information gets logged so utilities can interact with it. Making logging suggestions seemed out of scope here but is there anything I should add to nudge people in the right direction?~~ 1. ~~Is a dispersion manager needed? I genuinely believe the source should not matter. Anything should be able to send a request and it get processed in the order it is received. The only time any prioritization should occur is manual triggers vs automated. No this could be handled through a manager but it is pretty easy implement with just the deivce using the MANUAL vs AUTO request type. I also expect there to be multiple possible viable sources for manual on/off live at any given moment. All should be immediately respected. I feel like the overhead with a manager only allowign two control sources could make this over complicated.~~ 1. Am I missing any critical workflows or test cases? Ie Debug level motor controller and motor information (deemed out of scope, should be a separate protocol for general motor controller and motor information) -1. should we encourage using something like the parameter protocol rather than a command message for configuration? +1. ~~should we encourage using something like the parameter protocol rather than a command message for configuration?~~ ### Tentative Decisions -1. the combined protocol makes sense with the addition of an enum indicating type in the relevant messages +1. this protocol supports the current state of aerial and ground spray systems +1. the protocol will combine spreader and sprayer into one with the addition of an enum indicating dispersion type in the relevant messages 1. dispersion payloads will be implemented as standalone MAVLink devices 1. a logging infrastructure is proposed 1. a dispersion manager will not be used -1. eliminate request message in favor of mav command infrastructure +1. eliminated request message in favor of mav command infrastructure +1. the parameter protocol will be used for configuration since supporting devices with multiple independent sub components significant increased configuration overhead +1. unix timestamps will be used where possible to ensure accurate reporting on dispersion quality ## Alternatives 1. Do nothing. Solutions are already evolving organically. While the problem will be solved, it is subject to the issues documented in the motivation section. -1. Create documentation on how to use the generic payload messaging infrastructure to accomplish this goal. (I think this will lose a lot of critical information) +1. Create documentation on how to use the generic payload messaging infrastructure to accomplish this goal. [ArduPilot Crop Sprayer](https://ardupilot.org/copter/docs/sprayer.html) ## References From e56be8e7050c57b14750c242abda54a2caed1bdc Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 4 Mar 2025 17:54:27 -0500 Subject: [PATCH 18/23] trim excess in status message --- dispersion_protocol/dispersion.xml | 92 +++++++++++++++++------------ dispersion_protocol/messages.md | 92 +++++++++++++++-------------- dispersion_protocol/microservice.md | 30 +++++----- text/0020-dispersion-payload.md | 3 + 4 files changed, 119 insertions(+), 98 deletions(-) diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml index 8ac0d54..c6ca51c 100644 --- a/dispersion_protocol/dispersion.xml +++ b/dispersion_protocol/dispersion.xml @@ -42,49 +42,58 @@ Device supports measuring its own fill level. - - Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. - - Dispersion device is delivering payload + + Dispersion device states as unique identified codes. + + Device state is unknown. - - Dispersion device is locked and wont respond to control inputs + + Dispersion device is ready for control inputs to deliver payload. - - System has necessary parameters to properly disperse payload + + Dispersion device is delivering payload. - - Dispersion device tank is filled to target amount + + Dispersion device is locked and wont respond to control inputs. + + + Dispersion device has a fatal error that blocks continued use. + + + Dispersion device is being supplied for next mission. - - Dispersion device error flags. Any error flag indicates the device has turned off. + + Dispersion device error codes. An non zero value indicates the device has a fatal error and has turned off. + + Device has no errors. + - Device has had an unknown error + Device has had an unknown error. - Device is clogged + Device is clogged. - - Device dispersion motor or pump has failed + + Device dispersion motor or pump has failed. - - Device configuration is not compatible with device limits + + Device configuration is not compatible with device limits. - - System is moving faster than the device can deliver + + System is moving faster than the device can deliver. - - System is moving slower than the device can support + + System is moving slower than the device can support. - - Device tank was filled to an unexpected level + + Device is not maintaining pressure as expected. - - Device is not maintaining pressure as expected + + Device detected an unexpected event like a crash. - - Device detected an unexpected event like a crash + + Device ran out of its payload. @@ -93,9 +102,15 @@ Device has had an unknown warning - Device log file has reached its memory limit. + Device log file has reached its memory limit and is overwritting the oldest files. + + + An unsupported droplet size was requested and it was clamped to allowed limits. + + + Dispersion device was filled to an unexpected level which might impact dispersion. - + There is an issue with the fill level measuring system. @@ -160,8 +175,7 @@ Number of controllable subcomponents this dispersion device has. (ie variable nozzle bodies or boom segment control). 0 or 1 indicates the subcomponent and device are the same. Bitmap of dispersion device or subcomponent capability flags. Bitmap for use for dispersion-specific capability flags. - File transfer protocol (FTP) url-like string pointing to the directory of log files - File transfer protocol (FTP) url-like string pointing to the prescription map target location + File transfer protocol (FTP) url-like string pointing to the workspace directory for device. You can find the param file, logging files, and prescription files located here. Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration @@ -172,17 +186,17 @@ Message reporting the status of a dispersion device. This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. - Unix time stamp in microseconds + Unix time stamp in microseconds. Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. - Dispersion type. Defines units for device capacity and dispersion rate - Current flags set by the device - Failure flags (0 for no failure). Any failure indicates the system has stopped - Warning flags (0 for no warning) + Dispersion type. Defines units for device capacity and dispersion rate. + Code representing current device state. + An error code indicating what specific fatal error has occurred to halt the device from functioning. + Warning flags (0 for no warning). Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - Current pressure of the dispersion system if dispersion type indicates it is a sprayer - Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE + Current pressure of the dispersion system if dispersion type indicates it is a sprayer. + Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE. diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index d7dad6d..7dbf5ba 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -7,12 +7,11 @@ Information about a dispersion device. This message should be requested by a sou | Field Name | Type | Units | Values | Description | | :------------------- | :--------- | :------------------: | :---------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send infromation multiple times for multiple subcomponents. | +| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send information multiple times for multiple subcomponents. | | subcomponent_count | `uint8_t` | | invalid:UINT8_MAX | Number of controllable subcomponents this dispersion device has. (ie variable nozzle bodies or boom segment control). 0 or 1 indicates the subcomponent and device are the same. | | cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device or subcomponent capability flags. | | custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. | -| logger_dir_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the directory of log files | -| prescription_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the prescription map target location | +| workspace_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the workspace directory for device. You can find the param file, logging files, and prescription files located here. | | dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | | dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | | capacity_max | `float` | liters or kg | invalid:NaN | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) | @@ -25,21 +24,21 @@ Information about a dispersion device. This message should be requested by a sou Message reporting the status of a dispersion device and its subcomponents. -This message should be published a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. If a message creation is in response to a key event, the timestamp field should note when the key event occurred and not when the message was created. For all other status messages, the timestamp should just be when the message gets created. - -| Field Name | Type | Units | Values | Description | -| :--------------- | :--------- | :------------------: | :---------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. | -| dispersion_type | `uint8_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | -| flags | `uint16_t` | | [DISPERSION_DEVICE_STATUS_FLAGS](#dispersion_device_status_flags) | Current flags set by the device | -| failure_flags | `uint32_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | Failure flags (0 for no failure). Any failure indicates the system has stopped | -| warning_flags | `uint32_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | -| custom_codes | `uint8_t` | | | Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | -| fill_level | `float` | liters or kg | invalid:NaN | Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) | -| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | -| pressure | `uint32_t` | Pa | invalid:UINT32_MAX | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | -| droplet_diameter | `uint16_t` | um (microns) | invalid: 0 | Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE | +This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. If a message creation is in response to a key event, the timestamp field should note when the key event occurred and not when the message was created. For all other status messages, the timestamp should just be when the message gets created. + +| Field Name | Type | Units | Values | Description | +| :--------------- | :--------- | :------------------: | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | +| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. | +| dispersion_type | `uint8_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | +| state | `uint8_t` | | [DISPERSION_DEVICE_STATE](#dispersion_device_state) | Code representing current device state | +| error_code | `uint8_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | An error code indicating what specific fatal error has occurred to halt the device from functioning | +| warning_flags | `uint16_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | +| custom_codes | `uint8_t` | | | Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | +| fill_level | `float` | liters or kg | invalid:NaN | Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) | +| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | +| pressure | `uint32_t` | Pa | invalid:UINT32_MAX | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | +| droplet_diameter | `uint16_t` | um (microns) | invalid: 0 | Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE | # Enumerated Types @@ -97,42 +96,47 @@ The reference frame for dispersion device command values. | 8 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | | 16 | DISPERSION_DEVICE_CAP_FILL_LEVEL_MEASURE | Device supports measuring its own fill level. | -## DISPERSION_DEVICE_STATUS_FLAGS +## DISPERSION_DEVICE_STATE -(Bitmask) Flags for the dispersion device (lower level) operation. These flags work together to communicate dispersion device state. +Dispersion device states as unique identified codes. -| Value | Name | Description | -| :---- | :----------------------------------------------- | :------------------------------------------------------------- | -| 1 | DISPERSION_DEVICE_STATUS_FLAGS_DISPERSION_ACTIVE | Dispersion device is delivering payload | -| 2 | DISPERSION_DEVICE_STATUS_FLAGS_LOCKED | Dispersion device is locked and wont respond to control inputs | -| 4 | DISPERSION_DEVICE_STATUS_FLAGS_CONFIGURED | System has necessary parameters to properly disperse payload | -| 8 | DISPERSION_DEVICE_STATUS_FLAGS_FILL_AT_TARGET | Dispersion device tank is filled to target amount | +| Value | Name | Description | +| :---- | :---------------------------------- | :------------------------------------------------------ | +| 0 | DISPERSION_DEVICE_STATE_UNKNOWN | Device state is unknown. | +| 1 | DISPERSION_DEVICE_STATE_READY | Dispersion device is ready for control inputs. | +| 2 | DISPERSION_DEVICE_STATE_ACTIVE | Dispersion device is delivering payload. | +| 3 | DISPERSION_DEVICE_STATE_LOCKED | Dispersion device is locked and wont respond to inputs. | +| 4 | DISPERSION_DEVICE_STATE_FATAL_ERROR | Dispersion device has a fatal error blocking operation. | +| 5 | DISPERSION_DEVICE_STATE_RESUPPLYING | Dispersion device is being supplied for next mission. | ## DISPERSION_DEVICE_ERRORS -(Bitmask) Dispersion device error flags. Any error flag indicates the device has turned off. - -| Value | Name | Description | -| :---- | :-------------------------------------------------- | :-------------------------------------------------- | -| 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error | -| 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged | -| 4 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed | -| 8 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not viable | -| 16 | DISPERSION_DEVICE_ERRORS_OVERSPEED | System is moving faster than the device can deliver | -| 32 | DISPERSION_DEVICE_ERRORS_UNDERSPEED | System is moving slower than the device can support | -| 64 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FILL | Device tank was filled to an unexpected level | -| 128 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintaining pressure as expected | -| 256 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_FLIGHT_BEHAVIOR | Device detected an unexpected event like a crash | +Dispersion device error codes. A non-zero value indicates the device has a fatal error and has turned off. + +| Value | Name | Description | +| :---- | :--------------------------------------------------- | :--------------------------------------------------- | +| 0 | DISPERSION_DEVICE_ERRORS_NO_ERRORS | Device has no errors. | +| 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error. | +| 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged. | +| 3 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed. | +| 4 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with limits. | +| 5 | DISPERSION_DEVICE_ERRORS_OVERSPEED | System is moving faster than the device can deliver. | +| 6 | DISPERSION_DEVICE_ERRORS_UNDERSPEED | System is moving slower than the device can support. | +| 7 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintaining pressure as expected. | +| 8 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_VEHICLE_BEHAVIOR | Device detected an unexpected event like a crash. | +| 9 | DISPERSION_DEVICE_ERRORS_FILL_EMPTY | Device ran out of its payload. | ## DISPERSION_DEVICE_WARNINGS (Bitmask) Dispersion device warning flags. Any warning flag indicates an issue that does not block operation of the device. -| Value | Name | Description | -| :---- | :--------------------------------------------------- | :------------------------------------------------------ | -| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown warning | -| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | -| 4 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_MEASURE_BROKEN | There is an issue with the fill level measuring system. | +| Value | Name | Description | +| :---- | :----------------------------------------------------------- | :------------------------------------------------------ | +| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown warning | +| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | +| 4 | DISPERSION_DEVICE_WARNINGS_CLAMPED_DROPLET_SIZE | An unsupported droplet size was requested and clamped. | +| 8 | DISPERSION_DEVICE_WARNINGS_UNEXPECTED_FILL_LEVEL_MEASUREMENT | Dispersion device was filled to an unexpected level. | +| 16 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_MEASURE_BROKEN | There is an issue with the fill level measuring system. | # Commands diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index 2ada078..b0dd38d 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -20,7 +20,7 @@ Key Terms: There are a few ways to interact with the dispersion device that can be categorized as follows: - hardware configuration - low frequency device hardware changes that impact the behavior of dispersion device for long periods of time. These parameters are managed via [Parameter Protocol](https://mavlink.io/en/services/parameter.html). -- job configuration - optional use of perscription maps to define expected dispersion device behavior. These are managed via the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html). +- job configuration - optional use of prescription maps to define expected dispersion device behavior. These are managed via the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html). - navigation - high frequency messages providing real time vehicle navigation information to the device for making real time corrections - control - optional use of MAVLink commands to make adjusts to dispersion behavior or control behavior through automated mission plans - locking - provides a locking and unlocking mechanism, that ensures the dispersion device stops dispersing and does not respond to control messages when locked @@ -37,17 +37,17 @@ This protocol is designed to work best with a standalone MAVLink dispersion devi A dispersion device can take many form factors with spray devices being the most variable. It is very common to have different spray boom widths and variable nozzle spacing. Each nozzle can also have a unique limit range for flow rate, pressure, and droplet size. Since you might have anywhere from one nozzle to a couple hundred nozzles. While this hardware configuration can change, it is not typically during the middle of a job and is something you would expect to persist through power cycles. That makes the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) a really good candidate for this scenario. It also provides a good infrastructure to save common configurations as param files. -### Job Confiugration +### Job Configuration -There is job specific information that sometimes must be provided to the dispersion device before each mission but does not belong in the real time control messages during the mission. This information should make use of the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) when possible. At the time of writing, the only known case that would not work for the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) is delivering prescription maps to the dispersion device. These files should be provided through the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html) infrastructure to the target url provided in [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). +There is job specific information that sometimes must be provided to the dispersion device before each mission but does not belong in the real time control messages during the mission. This information should make use of the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) when possible. At the time of writing, the only known case that would not work for the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) is delivering prescription maps to the dispersion device. These files should be provided through the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html) infrastructure to the workspace url provided in [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). ### Operation -A dispersion device has 3 primary methods for accomplishing its task. The first method relies on direct manual control via a MAVLink command to assign dispersion targets for every subcomponent of the dispersion device. This concept applies to devices ranging from no subcomponent to hundreds. You would typically only see this used when making minor corrections to a specific component or you apply the same requiremetns to all subcomponents. The second method relies on automated control from an autopilot. In this case, the autopilot provides a MAVLink command to assign dispersion targets for every subcomponent of the dispersion device as specific location. Since the autopilot only has vehicle position estimations and no sense of each individual subcomponent position, you would typically only see this used when it applies to all subcomponents. Internally the dispersion device can make additional corrections to heading changes. The third method requires a prescription map be provided to the dispersion device and the vehicle to provide kinematic information. The dispersion device can account from prescription expectation, vehicle kinematics, and hardware configuration to deliver individualized component control. +A dispersion device has 3 primary methods for accomplishing its task. The first method relies on direct manual control via a MAVLink command to assign dispersion targets for every subcomponent of the dispersion device. This concept applies to devices ranging from no subcomponent to hundreds. You would typically only see this used when making minor corrections to a specific component or you apply the same requirements to all subcomponents. The second method relies on automated control from an autopilot. In this case, the autopilot provides a MAVLink command to assign dispersion targets for every subcomponent of the dispersion device as specific location. Since the autopilot only has vehicle position estimations and no sense of each individual subcomponent position, you would typically only see this used when it applies to all subcomponents. Internally the dispersion device can make additional corrections to heading changes. The third method requires a prescription map be provided to the dispersion device and the vehicle to provide kinematic information. The dispersion device can account from prescription expectation, vehicle kinematics, and hardware configuration to deliver individualized component control. ### Logging -To accomodate the creation of effectiveness and compliance reports for a specific application, a mini logging infrastructure is proposed. Effectively all MAVLink messages as handled by the Dispersion Device should be logged into a binary file that can then be retrieved using the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html) pointed at the `logger_dir_ftp_url` on [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). This logging logic should take place within the Dispersion Device. See [logging implementation details](#logging-implementation). +To accommodate the creation of effectiveness and compliance reports for a specific application, a mini logging infrastructure is proposed. Effectively all MAVLink messages as handled by the Dispersion Device should be logged into a binary file that can then be retrieved using the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html) pointed at the workspace directory url found in [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information). This logging logic should take place within the Dispersion Device. See [logging implementation details](#logging-implementation). ## Implementation and Messages @@ -61,14 +61,14 @@ The MAVLink node should then create as many interface instances as Dispersion De ### Control of a Dispersion Device -Device control refers to messages that can change the state of the dispersion device and its subcomponents. There are only two types of control messages: the [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) message for assigning a target dispersion rate and the [MAV_CMD_SET_DISPERSION_LOCK](#mav_cmd_set_dispersion_lock) for locking the dispersion device in case of unexpected behavior. The lock message always takes precendence so if the device or its components is locked, all dispersion will cease and all incoming control messages that are not "unlock" will be ignored. The lock is intended to serve as an emergency off. When the system is unlocked, the dispersion device will respond to control messages in the order that they are received no matter the source. When it comes to precision dispersion, low latency is critical. If you are applying a payload at 15m/s and want to have an uncertainty at the CM level, the overall latency from position measurement to action must be approximately 1/100th of a second. There are obviously many levers an end user can pull to account for higher latency, but it is worth noting effort should be made to reduce this latency. It is recommended position gates are anticipated on the autopilot and blocking receives are utilized on the dispersion device. There should be a low latency communication bus between the two. +Device control refers to messages that can change the state of the dispersion device and its subcomponents. There are only two types of control messages: the [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) message for assigning a target dispersion rate and the [MAV_CMD_SET_DISPERSION_LOCK](#mav_cmd_set_dispersion_lock) for locking the dispersion device in case of unexpected behavior. The lock message always takes precedence so if the device or its components is locked, all dispersion will cease and all incoming control messages that are not "unlock" will be ignored. The lock is intended to serve as an emergency off. When the system is unlocked, the dispersion device will respond to control messages in the order that they are received no matter the source. When it comes to precision dispersion, low latency is critical. If you are applying a payload at 15m/s and want to have an uncertainty at the CM level, the overall latency from position measurement to action must be approximately 1/100th of a second. There are obviously many levers an end user can pull to account for higher latency, but it is worth noting effort should be made to reduce this latency. It is recommended position gates are anticipated on the autopilot and blocking receives are utilized on the dispersion device. There should be a low latency communication bus between the two. -All control messages are handled via the pre-existing [MAVLink command microservice](https://mavlink.io/en/services/command.html).Autopilots can also use the mavlink command [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) for real time dispersion device control in automated missions. +All control messages are handled via the pre-existing [MAVLink command microservice](https://mavlink.io/en/services/command.html). Autopilots can also use the mavlink command [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) for real time dispersion device control in automated missions. ![sequence diagram for control messages](control_sequence.png) > **NOTE** -> Be discipline about conflicting control sources that are not the lock, as they will be processed in the order in which that are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. +> Be disciplined about conflicting control sources that are not the lock, as they will be processed in the order in which they are received. So if multiple controller instances of a given type exist, take care to keep them stateless or synchronize their state. For example, if there are multiple user interfaces with dispersion on/off buttons, it is critical that the button either always send the same command or if it changes between "dispersion on" and "dispersion off" depending on the current dispersion device state, that all interfaces reflect the same value. > **NOTE** > The [MAV_CMD_SET_DISPERSION_LOCK](#mav_cmd_set_dispersion_lock) messages should only be used as an emergency shutoff. All normal control should happen through the [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) message. As an example, the lock message should be used to shut off the spray system when taking fallback actions like landing in place or returning home. The lock should not be used to turn the dispersion on or off at waypoints in an automated mission. In fact, a normal mission in general should never need to use the lock. @@ -81,7 +81,7 @@ The autopilot should send the [GLOBAL_POSITION_INT_COV](#https://mavlink.io/en/m The dispersion device should send out its status in [DISPERSION_DEVICE_STATUS](#dispersion_device_status) at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. -This message is a meant as broadcast, so it's sent to all parties on the network. +This message is meant as broadcast, so it's sent to all parties on the network. ## Messages/Command/Enum Summary @@ -90,7 +90,7 @@ This is the set of messages/enums for communication between a mavlink node and a | Message | Description | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [DISPERSION_DEVICE_INFORMATION](#dispersion_device_information) | Information about the dispersion device. This message should be requested by some source such as a ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits for dispersion rate and pressure are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. | -| [DISPERSION_DEVICE_STATUS](#dispersion_device_status) | Message reporting the status of a dispersion device. This message should be published a low regular rate (e.g. 5 Hz) but also during key events. | +| [DISPERSION_DEVICE_STATUS](#dispersion_device_status) | Message reporting the status of a dispersion device. This message should be published at a low regular rate (e.g. 5 Hz) but also during key events. | | [GLOBAL_POSITION_INT_COV](#https://mavlink.io/en/messages/common.html#GLOBAL_POSITION_INT_COV) or [LOCAL_POSITION_NED_COV](#https://mavlink.io/en/messages/common.html#LOCAL_POSITION_NED_COV) | Message containing autopilot state relevant for a dispersion device. This message is to be sent from the autopilot to the dispersion device component. The data of this message are for the dispersion device estimator corrections, in particular speed compensation. | | [COMPONENT_BASIC_INFORMATION](https://mavlink.io/en/messages/common.html#COMPONENT_INFORMATION_BASIC) | Message providing basic information about a MAVLink component. This message is meant to be sent by the dispersion device on request via [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). | @@ -112,7 +112,7 @@ This is the set of messages/enums for communication between a mavlink node and a ### Microservice Dependencies -The disperison device is targeted to be a stand alone MAVLink device meaning it needs to support some existing MAVLink microservices beyond the dispersion microservice outlined above. The following microservices are required: +The dispersion device is targeted to be a stand alone MAVLink device meaning it needs to support some existing MAVLink microservices beyond the dispersion microservice outlined above. The following microservices are required: - [Heartbeat/Connection](https://mavlink.io/en/services/heartbeat.html) - [Command](https://mavlink.io/en/services/command.html) @@ -149,15 +149,15 @@ The definition of these parameters is an implementation detail so only a potenti #### File Management -The dispersion device must be hosting a MAVFTP server to facilite the offloading of generated log data. +The dispersion device must be hosting a MAVFTP server to facilitate the offloading of generated log data. -The device should be continuously logging every message in full fidelity to a binary file with the extension .mav using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with it's count like follows: log.mav, log.mav.1, log.mav.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.mav.12". +The device should be continuously logging every message in full fidelity to a binary file with the extension .mav using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with its count like follows: log.mav, log.mav.1, log.mav.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.mav.12". The implementation should support a more efficient logging method option for applications where memory efficiency is incredibly important. Such a logging implementation could store key events at a minimum to provide enough information to construct effective coverage reports. #### Log File Format -This log file should be a binary file with a maximum size limit dictated by the underlying device compute system. On log file creation, the file header as specified below should be written. After the header is the mavlink message definitions. The mavlink message definitions are to be written in the format of a single entry as noted below by writing the entire XML file repersentation as an entry payload. After the header, any number of entries can be added. This file can contain any data. Each entry into the file will have a header and payload. +This log file should be a binary file with a maximum size limit dictated by the underlying device compute system. On log file creation, the file header as specified below should be written. After the header is the mavlink message definitions. The mavlink message definitions are to be written in the format of a single entry as noted below by writing the entire XML file representation as an entry payload. After the header, any number of entries can be added. This file can contain any data. Each entry into the file will have a header and payload. It is expected that endianness match the mavlink spec for [pack format](https://mavlink.io/en/guide/serialization.html#packet_format) (little-endian). @@ -172,7 +172,7 @@ File Header (30 bytes) | Field | Type | Description | | :------------- | :------- | :------------------------------------------------------------------------------------------------------- | | uuid | char[16] | A unique identifier for this log file. | -| timestamp_us | uint64_t | Unix timstamp that notes when logging started in microseconds. | +| timestamp_us | uint64_t | Unix timestamp that notes when logging started in microseconds. | | format_version | uint32_t | Version number for this file format. | | flags | uint16_t | Set of flags to allow for various format changes. 0 means none of the flags apply. See FLAGS enum below. | diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 322386e..d58eb41 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -71,6 +71,8 @@ This protocol should at a minimum support the capability of existing systems and 1. ~~Is a dispersion manager needed? I genuinely believe the source should not matter. Anything should be able to send a request and it get processed in the order it is received. The only time any prioritization should occur is manual triggers vs automated. No this could be handled through a manager but it is pretty easy implement with just the deivce using the MANUAL vs AUTO request type. I also expect there to be multiple possible viable sources for manual on/off live at any given moment. All should be immediately respected. I feel like the overhead with a manager only allowign two control sources could make this over complicated.~~ 1. Am I missing any critical workflows or test cases? Ie Debug level motor controller and motor information (deemed out of scope, should be a separate protocol for general motor controller and motor information) 1. ~~should we encourage using something like the parameter protocol rather than a command message for configuration?~~ +1. with the device and device component architecture should I switch to manager/device concept +1. with the device and device component sharing a message definition should I use FUEL_STATUS to handle fill level since it is only relevant to the device and not subcomponents? ### Tentative Decisions @@ -82,6 +84,7 @@ This protocol should at a minimum support the capability of existing systems and 1. eliminated request message in favor of mav command infrastructure 1. the parameter protocol will be used for configuration since supporting devices with multiple independent sub components significant increased configuration overhead 1. unix timestamps will be used where possible to ensure accurate reporting on dispersion quality +1. switched status flags and error flags bitmask to continuous enums since almost all of the time the flags would be mutually exclusive. It is worth the size reduction. If multiple codes do happen at the same time, it is common to combine them into a unqiue enum or oscillate between the codes on publish. Warning flags were left as a bit mask since they dont block operation and can be ignored. This makes multiple overlapping warnings likely. ## Alternatives From e5755de10522a45dd57d0fef1d917536338bbb0d Mon Sep 17 00:00:00 2001 From: wesley Date: Tue, 4 Mar 2025 17:56:51 -0500 Subject: [PATCH 19/23] Update lock values --- dispersion_protocol/messages.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md index 7dbf5ba..06e98aa 100644 --- a/dispersion_protocol/messages.md +++ b/dispersion_protocol/messages.md @@ -158,12 +158,12 @@ Command to provide real time adjustment to a dispersion device and its subcompon Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) messages. When locked, the device or targeted subcomponent should stop dispersing. -| Param (Label) | Description | Values | -| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------- | -| 1 timestamp_us | The unix timestamp for message creation | Unix timestamp in microseconds | -| 2 device_id | Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). | [MAV_COMPONENT](#mav_component) | -| 3 subcomponent_id | Subcomponent id (ie nozzle) to address, 0 for all subcomponents. Send command multiple times for multiple subcomponents. | | -| 4 lock | Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. | 1 to lock. 0 or any other value to unlock | -| 5 | Empty. | | -| 6 | Empty. | | -| 7 | Empty. | | +| Param (Label) | Description | Values | +| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------- | +| 1 timestamp_us | The unix timestamp for message creation | Unix timestamp in microseconds | +| 2 device_id | Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). | [MAV_COMPONENT](#mav_component) | +| 3 subcomponent_id | Subcomponent id (ie nozzle) to address, 0 for all subcomponents. Send command multiple times for multiple subcomponents. | | +| 4 lock | Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. | 0 for locked. 1 for unlocked. 2+ reserved. | +| 5 | Empty. | | +| 6 | Empty. | | +| 7 | Empty. | | From 5b8735d291f454407ee7c289f64bb4132b144a1b Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 5 Mar 2025 16:07:57 -0500 Subject: [PATCH 20/23] remove redundant message definitions --- dispersion_protocol/dispersion.xml | 203 ----------------------------- dispersion_protocol/messages.md | 169 ------------------------ text/0020-dispersion-payload.md | 2 + 3 files changed, 2 insertions(+), 372 deletions(-) delete mode 100644 dispersion_protocol/dispersion.xml delete mode 100644 dispersion_protocol/messages.md diff --git a/dispersion_protocol/dispersion.xml b/dispersion_protocol/dispersion.xml deleted file mode 100644 index c6ca51c..0000000 --- a/dispersion_protocol/dispersion.xml +++ /dev/null @@ -1,203 +0,0 @@ - - - - standard.xml - 3 - 0 - - - - MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA). - - A device that can disperse a payload - - - - - Component ids (values) for the different types and instances of onboard hardware/software that might make up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.). - Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components. - When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded. - - - Dispersion device #1 - - - - - - Dispersion device (low level) capability flags (bitmap). - - Device supports dispersing liquid payloads. - - - Device supports dispersing granular payloads. - - - Device supports control of droplet size at individual nozzles. - - - Device supports varying dispersion rate with speed changes up to provided limits. - - - Device supports measuring its own fill level. - - - - Dispersion device states as unique identified codes. - - Device state is unknown. - - - Dispersion device is ready for control inputs to deliver payload. - - - Dispersion device is delivering payload. - - - Dispersion device is locked and wont respond to control inputs. - - - Dispersion device has a fatal error that blocks continued use. - - - Dispersion device is being supplied for next mission. - - - - Dispersion device error codes. An non zero value indicates the device has a fatal error and has turned off. - - Device has no errors. - - - Device has had an unknown error. - - - Device is clogged. - - - Device dispersion motor or pump has failed. - - - Device configuration is not compatible with device limits. - - - System is moving faster than the device can deliver. - - - System is moving slower than the device can support. - - - Device is not maintaining pressure as expected. - - - Device detected an unexpected event like a crash. - - - Device ran out of its payload. - - - - Dispersion device warning flags. Any warning flag indicates an issue that does not block operation of the device. - - Device has had an unknown warning - - - Device log file has reached its memory limit and is overwritting the oldest files. - - - An unsupported droplet size was requested and it was clamped to allowed limits. - - - Dispersion device was filled to an unexpected level which might impact dispersion. - - - There is an issue with the fill level measuring system. - - - - The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. - - Not specified - - - A generic liquid payload is being dispersed via fixed droplet size nozzles. Units are in Liters for capacity and Liters/min for dispersion rate - - - A generic liquid payload is being dispersed via a nozzle that supports variable droplet sizes. Units are in Liters for capacity, Liters/min for dispersion rate, and micrometers for target droplet size. - - - A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate - - - - The reference frame for dispersion device command values. - - Not specified. - - - Dispersion control values should be set to the exact values provided in control message. - - - Default dispersion control values should be offset by the amount specified in the control message. - - - - Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. NaN and INT32_MAX may be used in float/integer params (respectively) to indicate optional/default values (e.g. to use the component's current yaw or latitude rather than a specific value). See https://mavlink.io/en/guide/xml_schema.html#MAV_CMD for information about the structure of the MAV_CMD entries - - - Command to provide real time adjustment to dispersion device output for a given dispersion profile configured using MAV_CMD_CONFIG_DISPERSION_DEVICE_PARAMS. - The unix timestamp for message creation in microseconds - Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). - Subcomponent id (ie nozzle) to address, 0 for device. 1 or greater for a subcomponent. Send command multiple times for multiple subcomponents. - The type of dispersion this device supports. This indicates units as outlined in enum - The reference frame for the provided target values that allows use of relative or absolute corrections. - Target dispersion rate for the system. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - Target droplet size for spray nozzles if dispersion type indicates atomizer spray. Invalid:NaN, <=0. Droplet diameter in micrometers. - - - Command for locking/unlocking the device. The lock is intended to serve as an emergency off by preventing the device from responding to MAV_CMD_SET_DISPERSION_DEVICE_RATE messages. When locked, the device should stop dispersing. - The unix timestamp for message creation in microseconds - Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). - Subcomponent id (ie nozzle) to address, 0 for all subcomponents. Send command multiple times for multiple subcomponents. - Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. 1 to lock. 0 or any other value to unlock. - - - - - - - - - - Information about a dispersion device. This message should be requested by a source such as the ground control station using MAV_CMD_REQUEST_MESSAGE. The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. - Unix time stamp in microseconds - Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send information multiple times for multiple subcomponents. - Number of controllable subcomponents this dispersion device has. (ie variable nozzle bodies or boom segment control). 0 or 1 indicates the subcomponent and device are the same. - Bitmap of dispersion device or subcomponent capability flags. - Bitmap for use for dispersion-specific capability flags. - File transfer protocol (FTP) url-like string pointing to the workspace directory for device. You can find the param file, logging files, and prescription files located here. - Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) - Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) - If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration - If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration - Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) - Maximum supported droplet diameter if system supports variable droplet size nozzles - Minimum supported droplet diameter if system supports variable droplet size nozzles - - - Message reporting the status of a dispersion device. This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. - Unix time stamp in microseconds. - Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. - Dispersion type. Defines units for device capacity and dispersion rate. - Code representing current device state. - An error code indicating what specific fatal error has occurred to halt the device from functioning. - Warning flags (0 for no warning). - Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. - Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) - Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) - Current pressure of the dispersion system if dispersion type indicates it is a sprayer. - Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE. - - - - diff --git a/dispersion_protocol/messages.md b/dispersion_protocol/messages.md deleted file mode 100644 index 06e98aa..0000000 --- a/dispersion_protocol/messages.md +++ /dev/null @@ -1,169 +0,0 @@ -# Messages - -## DISPERSION_DEVICE_INFORMATION - -Information about a dispersion device. This message should be requested by a source such as the ground control station using [MAV_CMD_REQUEST_MESSAGE](https://mavlink.io/en/messages/common.html#MAV_CMD_REQUEST_MESSAGE). The min/max limits are driven by the underlying hardware. Software defined limits will be a subset of the limits specified here. - -| Field Name | Type | Units | Values | Description | -| :------------------- | :--------- | :------------------: | :---------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send information multiple times for multiple subcomponents. | -| subcomponent_count | `uint8_t` | | invalid:UINT8_MAX | Number of controllable subcomponents this dispersion device has. (ie variable nozzle bodies or boom segment control). 0 or 1 indicates the subcomponent and device are the same. | -| cap_flags | `uint16_t` | | [DISPERSION_DEVICE_CAP_FLAGS](#dispersion_device_cap_flags) | Bitmap of dispersion device or subcomponent capability flags. | -| custom_cap_flags | `uint16_t` | | | Bitmap for use for dispersion-specific capability flags. | -| workspace_ftp_url | `char[64]` | | | File transfer protocol (FTP) url-like string pointing to the workspace directory for device. You can find the param file, logging files, and prescription files located here. | -| dispersion_rate_min | `float` | liters/min or kg/min | invalid:NaN | Minimum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | -| dispersion_rate_max | `float` | liters/min or kg/min | invalid:NaN | Maximum dispersion rate this device can support. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters/min or kg/min) | -| capacity_max | `float` | liters or kg | invalid:NaN | Maximum fill capacity of this device in Liters for sprayers and Kg for spreaders. Units are determined based on the DISPERSION_DEVICE_CAP_FLAGS. (liters or kg) | -| pressure_min | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, minimum pressure the hardware supports independent of nozzle configuration | -| pressure_max | `uint32_t` | Pa | invalid:UINT32_MAX | If this is a spray dispersion system, maximum pressure the hardware supports independent of nozzle configuration | -| droplet_diameter_min | `uint16_t` | um (microns) | invalid: 0 | Minimum supported droplet diameter if system supports variable droplet size nozzles | -| droplet_diameter_max | `uint16_t` | um (microns) | invalid: 0 | Maximum supported droplet diameter if system supports variable droplet size nozzles | - -## DISPERSION_DEVICE_STATUS - -Message reporting the status of a dispersion device and its subcomponents. - -This message should be published at a low regular rate (e.g. 5 Hz) but also during key events such as a mavlink command, flag change, or rapid pressure change. If a message creation is in response to a key event, the timestamp field should note when the key event occurred and not when the message was created. For all other status messages, the timestamp should just be when the message gets created. - -| Field Name | Type | Units | Values | Description | -| :--------------- | :--------- | :------------------: | :-------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| timestamp_us | `uint64_t` | us | | Unix time stamp in microseconds | -| subcomponent_id | `uint8_t` | | | Subcomponent id (ie nozzle) this message is associated with, 0 represents the entire device. Send status multiple times for multiple subcomponents. | -| dispersion_type | `uint8_t` | | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | Dispersion type. Defines units for device capacity and dispersion rate | -| state | `uint8_t` | | [DISPERSION_DEVICE_STATE](#dispersion_device_state) | Code representing current device state | -| error_code | `uint8_t` | | [DISPERSION_DEVICE_ERRORS](#dispersion_device_errors) | An error code indicating what specific fatal error has occurred to halt the device from functioning | -| warning_flags | `uint16_t` | | [DISPERSION_DEVICE_WARNINGS](#dispersion_device_warnings) | Warning flags (0 for no warning) | -| custom_codes | `uint8_t` | | | Leave some flexibility for device manufacturers to pass more information through. This gives up to 255 codes to represent internal system state. | -| fill_level | `float` | liters or kg | invalid:NaN | Current device tank fill level. This field should be ignored if the device capability flags indicate fill level measurement is not supported. Units are determined based on the MAV_DISPERSION_TYPE. (liters or kg) | -| dispersion_rate | `float` | liters/min or kg/min | invalid:NaN | Current dispersion rate of the device. Negative during refill. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | -| pressure | `uint32_t` | Pa | invalid:UINT32_MAX | Current pressure of the dispersion system if dispersion type indicates it is a sprayer | -| droplet_diameter | `uint16_t` | um (microns) | invalid: 0 | Current droplet size if dispersion_type is MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE | - -# Enumerated Types - -## MAV_TYPE - -MAVLINK component type reported in HEARTBEAT message. Flight controllers must report the type of the vehicle on which they are mounted (e.g. MAV_TYPE_OCTOROTOR). All other components must report a value appropriate for their type (e.g. a camera must use MAV_TYPE_CAMERA). - -| Value | Name | Description | -| :---- | :------------------ | :----------------------------------- | -| ... | ... | ... | -| 45 | MAV_TYPE_DISPERSION | A device that can disperse a payload | - -## MAV_COMPONENT - -Component ids (values) for the different types and instances of onboard hardware/software that might make up a MAVLink system (autopilot, cameras, servos, GPS systems, avoidance systems etc.). - -Components must use the appropriate ID in their source address when sending messages. Components can also use IDs to determine if they are the intended recipient of an incoming message. The MAV_COMP_ID_ALL value is used to indicate messages that must be processed by all components. When creating new entries, components that can have multiple instances (e.g. cameras, servos etc.) should be allocated sequential values. An appropriate number of values should be left free after these components to allow the number of instances to be expanded. - -| Value | Name | Description | -| :---- | :--------------------- | :------------------- | -| ... | ... | ... | -| 110 | MAV_COMP_ID_DISPERSION | Dispersion device #1 | -| ... | ... | ... | - -## MAV_DISPERSION_TYPE - -The dispersion type a device is setup for. Dispersion types specify the units for capacity and dispersion rate. - -| Value | Name | Description | -| :---- | :-------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 0 | MAV_DISPERSION_TYPE_UNKNOWN | Not specified | -| 1 | MAV_DISPERSION_TYPE_SPRAY_FIXED_SIZE | A generic liquid payload is being dispersed via fixed droplet size nozzles. Units are in Liters for capacity and Liters/min for dispersion rate | -| 2 | MAV_DISPERSION_TYPE_SPRAY_VARIABLE_SIZE | A generic liquid payload is being dispersed via a nozzle that supports variable droplet sizes. Units are in Liters for capacity, Liters/min for dispersion rate, and micrometers for target droplet size. | -| 3 | MAV_DISPERSION_TYPE_SPREAD | A generic solid payload of granules is being dispersed. Units are in Kg for capacity and Kg/min for dispersion rate | - -## MAV_DISPERSION_FRAME - -The reference frame for dispersion device command values. - -| Value | Name | Description | -| :---- | :---------------------------- | :-------------------------------------------------------------------------------------------------------- | -| 0 | MAV_DISPERSION_FRAME_UNKNOWN | Not specified. | -| 1 | MAV_DISPERSION_FRAME_ABSOLUTE | Dispersion device control values should be set to the exact values provided in control message. | -| 2 | MAV_DISPERSION_FRAME_OFFSET | Default dispersion device control values should be offset by the amount specified in the control message. | - -## DISPERSION_DEVICE_CAP_FLAGS - -(Bitmask) Dispersion device (low level) capability flags (bitmap). - -| Value | Name | Description | -| :---- | :---------------------------------------------------- | :-------------------------------------------------------------------------------- | -| 1 | DISPERSION_DEVICE_CAP_FLAGS_SPRAYER | Device supports dispersing liquid payloads. | -| 2 | DISPERSION_DEVICE_CAP_FLAGS_SPREADER | Device supports dispersing granular payloads. | -| 4 | DISPERSION_DEVICE_CAP_FLAGS_VARIABLE_DROP_SIZE | Device supports control of droplet size at individual nozzles. | -| 8 | DISPERSION_DEVICE_CAP_FLAGS_DYNAMIC_SPEED_CORRECTIONS | Device supports varying dispersion rate with speed changes up to provided limits. | -| 16 | DISPERSION_DEVICE_CAP_FILL_LEVEL_MEASURE | Device supports measuring its own fill level. | - -## DISPERSION_DEVICE_STATE - -Dispersion device states as unique identified codes. - -| Value | Name | Description | -| :---- | :---------------------------------- | :------------------------------------------------------ | -| 0 | DISPERSION_DEVICE_STATE_UNKNOWN | Device state is unknown. | -| 1 | DISPERSION_DEVICE_STATE_READY | Dispersion device is ready for control inputs. | -| 2 | DISPERSION_DEVICE_STATE_ACTIVE | Dispersion device is delivering payload. | -| 3 | DISPERSION_DEVICE_STATE_LOCKED | Dispersion device is locked and wont respond to inputs. | -| 4 | DISPERSION_DEVICE_STATE_FATAL_ERROR | Dispersion device has a fatal error blocking operation. | -| 5 | DISPERSION_DEVICE_STATE_RESUPPLYING | Dispersion device is being supplied for next mission. | - -## DISPERSION_DEVICE_ERRORS - -Dispersion device error codes. A non-zero value indicates the device has a fatal error and has turned off. - -| Value | Name | Description | -| :---- | :--------------------------------------------------- | :--------------------------------------------------- | -| 0 | DISPERSION_DEVICE_ERRORS_NO_ERRORS | Device has no errors. | -| 1 | DISPERSION_DEVICE_ERRORS_UNKNOWN | Device has had an unknown error. | -| 2 | DISPERSION_DEVICE_ERRORS_CLOGGED | Device is clogged. | -| 3 | DISPERSION_DEVICE_ERRORS_MOTOR_FAILURE | Device dispersion motor or pump has failed. | -| 4 | DISPERSION_DEVICE_ERRORS_IMPROPER_CONFIGURATION | Device configuration is not compatible with limits. | -| 5 | DISPERSION_DEVICE_ERRORS_OVERSPEED | System is moving faster than the device can deliver. | -| 6 | DISPERSION_DEVICE_ERRORS_UNDERSPEED | System is moving slower than the device can support. | -| 7 | DISPERSION_DEVICE_ERRORS_LEAK | Device is not maintaining pressure as expected. | -| 8 | DISPERSION_DEVICE_ERRORS_UNEXPECTED_VEHICLE_BEHAVIOR | Device detected an unexpected event like a crash. | -| 9 | DISPERSION_DEVICE_ERRORS_FILL_EMPTY | Device ran out of its payload. | - -## DISPERSION_DEVICE_WARNINGS - -(Bitmask) Dispersion device warning flags. Any warning flag indicates an issue that does not block operation of the device. - -| Value | Name | Description | -| :---- | :----------------------------------------------------------- | :------------------------------------------------------ | -| 1 | DISPERSION_DEVICE_WARNINGS_UNKNOWN | Device has had an unknown warning | -| 2 | DISPERSION_DEVICE_WARNINGS_LOG_FULL | Device log file has reached its memory limit. | -| 4 | DISPERSION_DEVICE_WARNINGS_CLAMPED_DROPLET_SIZE | An unsupported droplet size was requested and clamped. | -| 8 | DISPERSION_DEVICE_WARNINGS_UNEXPECTED_FILL_LEVEL_MEASUREMENT | Dispersion device was filled to an unexpected level. | -| 16 | DISPERSION_DEVICE_WARNINGS_FILL_LEVEL_MEASURE_BROKEN | There is an issue with the fill level measuring system. | - -# Commands - -## MAV_CMD_DO_SET_DISPERSION_TARGETS - -Command to provide real time adjustment to a dispersion device and its subcomponents. This can be sent from any source including during automated missions. - -| Param (Label) | Description | Values | -| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------- | -| 1 timestamp_us | The unix timestamp for message creation | Unix timestamp in microseconds | -| 2 device_id | Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). | [MAV_COMPONENT](#mav_component) | -| 3 subcomponent_id | Subcomponent id (ie nozzle) to address, 0 for all subcomponents. Send command multiple times for multiple subcomponents. | | -| 4 dispersion_type | The type of dispersion this device supports. This indicates units as outlined in enum | [MAV_DISPERSION_TYPE](#mav_dispersion_type) | -| 5 dispersion_frame | The reference frame for the provided target values that allows use of relative or absolute corrections. | [MAV_DISPERSION_FRAME](#mav_dispersion_frame) | -| 6 target_dispersion_rate | Target dispersion rate for the system. Units are determined based on the MAV_DISPERSION_TYPE. (liters/min or kg/min) | | -| 7 target_droplet_size_um | Target droplet size for spray nozzles if dispersion type indicates atomizer spray | Invalid:NaN, <=0. Droplet diameter in micrometers. | - -## MAV_CMD_SET_DISPERSION_LOCK - -Command for locking/unlocking the device from responding to [MAV_CMD_DO_SET_DISPERSION_TARGETS](#mav_cmd_do_set_dispersion_targets) messages. When locked, the device or targeted subcomponent should stop dispersing. - -| Param (Label) | Description | Values | -| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------- | -| 1 timestamp_us | The unix timestamp for message creation | Unix timestamp in microseconds | -| 2 device_id | Component ID of dispersion device to address, 0 for all dispersion device components. Send command multiple times for more than one device (but not all devices). | [MAV_COMPONENT](#mav_component) | -| 3 subcomponent_id | Subcomponent id (ie nozzle) to address, 0 for all subcomponents. Send command multiple times for multiple subcomponents. | | -| 4 lock | Stop dispersion and prevent the dispersion device from responding to input for live dispersion rate changes until unlocked. | 0 for locked. 1 for unlocked. 2+ reserved. | -| 5 | Empty. | | -| 6 | Empty. | | -| 7 | Empty. | | diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index d58eb41..37cb68a 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -58,6 +58,8 @@ A procotol can be very difficult to analyze in isolation so I started by creatin ### Implementation +The target XML content can be found in [this public pull request](https://github.com/flocked-agriculture/mavlink/pull/1). + After reviewing other submissions, I think I might have gone too far down this path but I wanted something complete to get reviewed by industry relevant people in my network before submitting here to the MAVLink community. I created a messages.md file with the full set of message definitions and a microservice.md file detailing how the protocol should work that is submitted with this PR. I have a couple of versions: one with a manager and one without. I used the one without because it is less complex and conveys the same concept. Every enum that is not a bitmask uses the zero value as a default UNKNOWN value. This, in my experience, results in more robust systems since it is very common to initialize values to zero in the background. Developers can miss this and if zero is a common valid value, the issue often wont surface until late run time. By having a default value that is useless, systems will almost immediately surface an error. From 95a24f3a352a4a7d49840c78cbcc343983fe68b8 Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 12 Mar 2025 00:04:29 -0400 Subject: [PATCH 21/23] Add connected autopilot option to docs. --- .../autopilot_connected_hardware_config.png | Bin 0 -> 26923 bytes dispersion_protocol/microservice.md | 26 ++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 dispersion_protocol/autopilot_connected_hardware_config.png diff --git a/dispersion_protocol/autopilot_connected_hardware_config.png b/dispersion_protocol/autopilot_connected_hardware_config.png new file mode 100644 index 0000000000000000000000000000000000000000..0c6daa692e5443cbb819e4d48ea6974103692cd8 GIT binary patch literal 26923 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 VCoLrv{`=7{R_3;Za=b_MzX4;YY3Bd{ literal 0 HcmV?d00001 diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index b0dd38d..bacd001 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -27,12 +27,34 @@ There are a few ways to interact with the dispersion device that can be categori - status - custom MAVLink messages are used to report the device state at a scheduled interval or on key events - logging - all dispersion related mavlink messages are logged and that data can be managed via the [File Transfer Protocol](https://mavlink.io/en/services/ftp.html). -### Recommended Hardware Set-up +### Hardware Set-ups -This protocol is designed to work best with a standalone MAVLink dispersion device that shares a high throughput, low latency communication bus with its controller. While any MAVLink source can be used to control the device, a common configuration is to have an autopilot providing critical real time vehicle position and trajectory data and a user interface to manage locking or low frequency control and configuration. +The protocol can be used with either standalone MAVLink dispersion devices, or devices that are directly connected to autopilot I/O. The two approaches are described below. + +> **NOTE** +> This protocol is designed to work best with a standalone MAVLink dispersion device that shares a high throughput, low latency communication bus with its controller. While any MAVLink source can be used to control the device, a common configuration is to have an autopilot providing critical real time vehicle position and trajectory data and a user interface to manage locking or low frequency control and configuration. + +#### MAVLink Dispersion Device + +The protocol can be used to support independent MAVLink dispersion devices. + +The device will need to have the same system ID as the autopilot and should use one of the dispersion device component IDs (these need to be configurable for support of multiple dispersion devices on one system). + +Commonly the device is connected to the autopilot via a (relatively high speed) local serial link. The autopilot must forward commands from a ground station and telemetry from the device. When executing missions, the autopilot will need to re-emit mission items as command protocol commands when connected to a MAVLink dispersion device. These should be addressed to the targeted device. + +It is also common to connect the dispersion device, autopilot, and ground station to a common communication bus in such a way the autopilot does not have to relay messages to and from the dispersion device. For example all devices could communicate MAVLink via a shared LAN or have a bridge into that LAN. In this situation, all messages going to and from the dispersion device can be put on this shared communication bus and assume the relevant subscriber will be able to access it. The autopilot will still need to provide the necessary vehicle telemetry and, when relevant to a mission, the necessary mission items as command protocol commands. + +> **NOTE** +> This is why commands used in missions need a target dispersion component id - otherwise you can't send to a particular dispersion device from a mission ![standalone dispersion device connected to an autopilot and gcs mavlink node](hardware_config.png) +#### Autopilot-connected Dispersion Device + +Dispersion devices that don't support a MAVLink interface may still be controllable via autopilot I/0 (via some other protocol/custom driver). For these devices the autopilot can act as a dispersion device with respect to ground stations and other external MAVLink systems. In this case the autopilot should emit COMPONENT_BASIC_INFORMATION, DISPERSION_DEVICE_INFORMATION, DISPERSION_DEVICE_STATUS and respond to commands MAV_CMD_DO_SET_DISPERSION_TARGETS and MAV_CMD_SET_DISPERSION_LOCK from a ground station. Instead of forwarding commands from a GCS or mission items during a mission, it will execute them on the connected dispersion hardware (ie PWM controlled dispersion motor) via the autopilot driver. It is expected that an autopilot driver will likely have to provide invalid values for things like droplet size limits, pressure limits, and tank capacity in their messages. As long as the associated dispersion type fields and capability flags are consistent with what functionality is not supported, this is valid. To help with discovery, it is expected that COMPONENT_BASIC_INFORMATION is supported with reasonable defaults (ie vendor_name="Dispersion Driver", model_name"Default") to indicate this dispersion device is really just a collection of relevant hardware controlled by the autopilot rather than a stand alone manufactured device. + +![autopilot connected dispersion device](autopilot_connected_hardware_config.png) + ### Hardware Configuration A dispersion device can take many form factors with spray devices being the most variable. It is very common to have different spray boom widths and variable nozzle spacing. Each nozzle can also have a unique limit range for flow rate, pressure, and droplet size. Since you might have anywhere from one nozzle to a couple hundred nozzles. While this hardware configuration can change, it is not typically during the middle of a job and is something you would expect to persist through power cycles. That makes the [Parameter Protocol](https://mavlink.io/en/services/parameter.html) a really good candidate for this scenario. It also provides a good infrastructure to save common configurations as param files. From 110884a84f0a2a6587ca89534320d32e03d448eb Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 12 Mar 2025 10:17:19 -0400 Subject: [PATCH 22/23] Add linked to tentative roadmap to production. --- text/0020-dispersion-payload.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/text/0020-dispersion-payload.md b/text/0020-dispersion-payload.md index 37cb68a..a8fb5b8 100644 --- a/text/0020-dispersion-payload.md +++ b/text/0020-dispersion-payload.md @@ -8,6 +8,8 @@ The scope of this document is to define a message definition set and protocol for interacting with a dispersion payload to ensure effective control as well as compliance and efficacy reporting. The goal is to create an agreed-on standard for what data is necessary and how it should be used so that there can be more transparency in the UAV crop protection space. +Here is the tentative [roadmap](https://docs.google.com/document/d/1s2IZq7PTo6RKCK9s6nvesvSOUHC8mK7Xy0dpXFQYWSA/edit?usp=sharing) for taking this concept from RFC to productions. + ## Motivation There is an increasing demand for using UAVs to deliver chemicals in agriculture for crop protection. This most commonly happens in the form of sprayers or spreaders. Sprayers are typically for liquid payloads and spreaders for granular solids. This has resulted in many indepent solutions to the problem, all using their own version of a black box. This often leaves aerial applicators unable to provide transparency into their service from a regulatory compliance side of things or for customer satisfaction in a situation where very hazardous chemical are frequently applied. This should not be the case. @@ -73,7 +75,7 @@ This protocol should at a minimum support the capability of existing systems and 1. ~~Is a dispersion manager needed? I genuinely believe the source should not matter. Anything should be able to send a request and it get processed in the order it is received. The only time any prioritization should occur is manual triggers vs automated. No this could be handled through a manager but it is pretty easy implement with just the deivce using the MANUAL vs AUTO request type. I also expect there to be multiple possible viable sources for manual on/off live at any given moment. All should be immediately respected. I feel like the overhead with a manager only allowign two control sources could make this over complicated.~~ 1. Am I missing any critical workflows or test cases? Ie Debug level motor controller and motor information (deemed out of scope, should be a separate protocol for general motor controller and motor information) 1. ~~should we encourage using something like the parameter protocol rather than a command message for configuration?~~ -1. with the device and device component architecture should I switch to manager/device concept +1. ~~with the device and device component architecture should I switch to manager/device concept~~ 1. with the device and device component sharing a message definition should I use FUEL_STATUS to handle fill level since it is only relevant to the device and not subcomponents? ### Tentative Decisions @@ -87,6 +89,7 @@ This protocol should at a minimum support the capability of existing systems and 1. the parameter protocol will be used for configuration since supporting devices with multiple independent sub components significant increased configuration overhead 1. unix timestamps will be used where possible to ensure accurate reporting on dispersion quality 1. switched status flags and error flags bitmask to continuous enums since almost all of the time the flags would be mutually exclusive. It is worth the size reduction. If multiple codes do happen at the same time, it is common to combine them into a unqiue enum or oscillate between the codes on publish. Warning flags were left as a bit mask since they dont block operation and can be ignored. This makes multiple overlapping warnings likely. +1. I will not be using the fuel status message since this dispersion device is not fuel and I believe the fuel status messages has an unnecessary amount of information. ## Alternatives From d9d23d6cf9ad616ebbbf0537ebfd71613a59f870 Mon Sep 17 00:00:00 2001 From: wesley Date: Wed, 12 Mar 2025 19:45:28 -0400 Subject: [PATCH 23/23] Link to log file format definition src rather than maintain a duplicate. --- dispersion_protocol/microservice.md | 59 ++--------------------------- 1 file changed, 3 insertions(+), 56 deletions(-) diff --git a/dispersion_protocol/microservice.md b/dispersion_protocol/microservice.md index bacd001..368faf3 100644 --- a/dispersion_protocol/microservice.md +++ b/dispersion_protocol/microservice.md @@ -173,66 +173,13 @@ The definition of these parameters is an implementation detail so only a potenti The dispersion device must be hosting a MAVFTP server to facilitate the offloading of generated log data. -The device should be continuously logging every message in full fidelity to a binary file with the extension .mav using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with its count like follows: log.mav, log.mav.1, log.mav.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.mav.12". +The device should be continuously logging every message in full fidelity to a binary file with the extension as documented in the file format section below using a rotating file handler that caps the file size to limit based on underlying compute specifications. There should be an additional limit to the number of files allowed before the oldest file is replaced. Each filename should end with its count like follows: log.bin, log.bin.1, log.bin.2, etc. It is recommended each file have a unique name by giving the base name a suffix of the created timestamp per the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) spec format. So an example file name might look like "dispersion_1996-12-19T16:39:57.112.bin.12". -The implementation should support a more efficient logging method option for applications where memory efficiency is incredibly important. Such a logging implementation could store key events at a minimum to provide enough information to construct effective coverage reports. +The implementation should support a more efficient logging method option for applications where memory efficiency is incredibly important. Such a logging implementation could store key events at a minimum to provide enough information to construct effective coverage reports while dropping regularly published data that has no meaningful events. #### Log File Format -This log file should be a binary file with a maximum size limit dictated by the underlying device compute system. On log file creation, the file header as specified below should be written. After the header is the mavlink message definitions. The mavlink message definitions are to be written in the format of a single entry as noted below by writing the entire XML file representation as an entry payload. After the header, any number of entries can be added. This file can contain any data. Each entry into the file will have a header and payload. - -It is expected that endianness match the mavlink spec for [pack format](https://mavlink.io/en/guide/serialization.html#packet_format) (little-endian). - -The file structure has the following sections: - -1. Header -1. Mavlink Definitions -1. Entries - -File Header (30 bytes) - -| Field | Type | Description | -| :------------- | :------- | :------------------------------------------------------------------------------------------------------- | -| uuid | char[16] | A unique identifier for this log file. | -| timestamp_us | uint64_t | Unix timestamp that notes when logging started in microseconds. | -| format_version | uint32_t | Version number for this file format. | -| flags | uint16_t | Set of flags to allow for various format changes. 0 means none of the flags apply. See FLAGS enum below. | - -FLAGS Enum - -| Value | Name | Description | -| :---- | :-------------- | :-------------------------------------------------------------- | -| 1 | MAVLINK_ONLY | Flag indicating this file only contains packed mavlink content. | -| 2 | NOT_TIMESTAMPED | Flag indicating each entity has a timestamp | - -Mavlink Message Definitions (44 bytes without payload) - -| Field | Type | Description | -| :---------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- | -| mav_version_major | uint32_t | MAVLink protocol major version. | -| mav_version_minor | uint32_t | MAVLink protocol minor version. | -| mav_dialect | char[32] | [mavlink message dialect](https://mavlink.io/en/messages/) being used. | -| size | uint32_t | Size of the following payload in bytes. 0 if definition xml file is not retrievable. | -| payload | N/A | This payload is the utf-8 encoding of the xml file definition for the mavlink messages being used during this logging process. This payload can be empty. | - -Entries (0-11 bytes without payload) - -As many entries as there are room to write can be appended to the file content post mavlink definitions. Each entry could have up to the following structure. Each field in the following structure is optional as determined by the flags listed above. - -| Field | Type | Description | -| :----------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | -| type | uint8_t | This indicates the payload type. See ENTRY_TYPE enum below. This field is NOT present if the MAVLINK_ONLY flag is set. | -| timestamp_us | uint64_t | Unix timestamp in microseconds for which this corresponding payload was acted upon. This field is NOT present if the NOT_TIMESTAMPED flag is set. | -| size | uint16_t | Size of the entry in bytes without the header. This field is NOT present if the MAVLINK_ONLY flag is set. | -| payload | N/A | Any bytes content. | - -ENTRY_TYPE Enum - -| Value | Name | Description | -| :---- | :------ | :--------------------------- | -| 0 | RAW | Catch all for raw bytes data | -| 1 | MAVLINK | Entry is a mavlink message | -| 2 | TEXT | Entry is UTF-8 encoded text | +[Target File Format Spec](https://github.com/flocked-agriculture/mavlink_utils/wiki/Mavlink-Logger#file-format) ### Messages to Send

}`L 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 I^i%);0WBgWtpET3 diff --git a/dispersion_protocol/configuration_sequence.png b/dispersion_protocol/configuration_sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..95bb4970037374bad9a50f56b627f8ad14e5527d GIT binary patch literal 82272 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