Flutter + ROS 2 Commands: Low-Latency UI With Explicit Acknowledgements
Operator commands should not be treated like replaceable telemetry. A responsive button is only one part of the system; the client needs to distinguish submitted, accepted, executing, completed, and rejected states.
Model the command lifecycle
Assign a unique command ID and expose explicit lifecycle states. Do not show success merely because a request was written to a socket.
Keep commands separate from telemetry
Do not queue critical commands behind camera metadata or diagnostics. Use a dedicated path with authentication, authorization, timeouts, and rate limits.
Prevent duplicate actions
Disable or debounce controls while pending where appropriate, but make the server idempotent using command IDs.
Show uncertainty honestly
If the connection drops after submission, show outcome unknown until reconciled. Do not blindly resend a non-idempotent command.
Test delay and disconnection
Inject slow acknowledgements, duplicate responses, gateway restarts, and reordered events.
Example implementation
This Dart snippet illustrates one part of the design. Adapt types, transport behavior, timestamp semantics, and platform APIs to your actual system before production use.
enum CommandPhase {
idle, submitting, accepted, executing, completed, rejected, outcomeUnknown
}
class CommandStatus {
const CommandStatus(this.id, this.phase);
final String id;
final CommandPhase phase;
}
Performance checklist
- Measure p95/p99 behavior on target hardware, not only a desktop simulator.
- Bound queues and buffers; define what may be coalesced or dropped.
- Keep heavy parsing, image processing, and inference away from the Flutter UI thread.
- Track source timestamps, sequence numbers, stale-data rate, and dropped updates.
- Test network degradation, reconnects, sustained operation, and resource pressure.
- Keep control commands and critical alerts separate from replaceable telemetry.
Useful Links
Website: www.v-modal.com
SDK Flutter: https://github.com/v-modal/vmodal_sdk_flutter
SDK Android: https://github.com/v-modal/vmodal_sdk_android
Discord: https://discord.gg/K72z28KUx
Top comments (0)