From a8d285590aad6e413c23ec636736d88ab59c434a Mon Sep 17 00:00:00 2001 From: lregueiferos <124931111+lregueiferos@users.noreply.github.com> Date: Sun, 1 Feb 2026 12:43:54 -0500 Subject: [PATCH 01/29] incoming proto --- subsystems/lib/src/devices/firmware.dart | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/subsystems/lib/src/devices/firmware.dart b/subsystems/lib/src/devices/firmware.dart index 599f4bc0..a44ec987 100644 --- a/subsystems/lib/src/devices/firmware.dart +++ b/subsystems/lib/src/devices/firmware.dart @@ -7,7 +7,6 @@ import "package:burt_network/burt_network.dart"; import "serial_utils.dart"; -/// Maps command names to [Device]s. final nameToDevice = { ArmCommand().messageName: Device.ARM, DriveCommand().messageName: Device.DRIVE, @@ -81,7 +80,22 @@ class FirmwareManager extends Service { if (device == null) return; var bytesToSend = wrapper.data; - if (controlConnected) { + // Handle incoming ControlCommand messages by unwrapping them + if (wrapper.name == ControlCommand().messageName) { + final controlCommand = ControlCommand.fromBuffer(wrapper.data); + if (controlCommand.hasDrive()) { + // Send the DriveCommand directly to the drive device + device = Device.DRIVE; + bytesToSend = controlCommand.drive.writeToBuffer(); + } else if (controlCommand.hasRelays()) { + // Send the RelaysCommand directly to the relay device + device = Device.RELAY; + bytesToSend = controlCommand.relays.writeToBuffer(); + } else { + return; + } + } else if (controlConnected) { + // Wrap outgoing commands in ControlCommand if control board is connected if (device == Device.DRIVE) { bytesToSend = ControlCommand( drive: DriveCommand.fromBuffer(wrapper.data), From 54a20cb21e16883ef4d78575b968d1ad246b2344 Mon Sep 17 00:00:00 2001 From: lregueiferos <124931111+lregueiferos@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:24:56 -0500 Subject: [PATCH 02/29] Fix incoming control commands --- subsystems/lib/src/devices/firmware.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/subsystems/lib/src/devices/firmware.dart b/subsystems/lib/src/devices/firmware.dart index a44ec987..6c5ca44e 100644 --- a/subsystems/lib/src/devices/firmware.dart +++ b/subsystems/lib/src/devices/firmware.dart @@ -46,11 +46,12 @@ class FirmwareManager extends Service { final controlData = ControlData.fromBuffer(wrapper.data); if (controlData.hasDrive()) { collection.server.sendMessage(controlData.drive); - return; - } else if (controlData.hasRelays()) { + } + + if (controlData.hasRelays()) { collection.server.sendMessage(controlData.relays); - return; } + return; } collection.server.sendWrapper(wrapper); }); From 3c446207fe87901de19d28b250d2c4267c5d5428 Mon Sep 17 00:00:00 2001 From: lregueiferos <124931111+lregueiferos@users.noreply.github.com> Date: Sun, 1 Feb 2026 13:26:28 -0500 Subject: [PATCH 03/29] Add control to deviceToDataName --- burt_network/lib/src/utils.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/burt_network/lib/src/utils.dart b/burt_network/lib/src/utils.dart index 2e203810..3b5f4e00 100644 --- a/burt_network/lib/src/utils.dart +++ b/burt_network/lib/src/utils.dart @@ -48,6 +48,7 @@ String? deviceToDataName(Device device) => switch (device) { Device.ANTENNA => AntennaFirmwareData().messageName, Device.BASE_STATION => BaseStationData().messageName, Device.RELAY => RelaysData().messageName, + Device.CONTROL_BOARD => ControlData().messageName, _ => null, }; From ec582ff464ffdf2203a4c2725f408c15dac8ff57 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Sun, 1 Feb 2026 17:19:10 -0500 Subject: [PATCH 04/29] Oops --- subsystems/lib/src/devices/firmware.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/subsystems/lib/src/devices/firmware.dart b/subsystems/lib/src/devices/firmware.dart index 6c5ca44e..4ca8528f 100644 --- a/subsystems/lib/src/devices/firmware.dart +++ b/subsystems/lib/src/devices/firmware.dart @@ -7,6 +7,7 @@ import "package:burt_network/burt_network.dart"; import "serial_utils.dart"; +/// Maps command names to [Device]s. final nameToDevice = { ArmCommand().messageName: Device.ARM, DriveCommand().messageName: Device.DRIVE, From ef8a79831a23daffa95649d79cb294a6e520a45c Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Sat, 7 Feb 2026 23:56:48 -0500 Subject: [PATCH 05/29] Update arm protobuf --- burt_network/Protobuf | 2 +- burt_network/lib/src/generated/arm.pb.dart | 514 ++++++++++++++---- .../lib/src/generated/arm.pbjson.dart | 89 ++- 3 files changed, 478 insertions(+), 127 deletions(-) diff --git a/burt_network/Protobuf b/burt_network/Protobuf index 7d44b26c..e275dd08 160000 --- a/burt_network/Protobuf +++ b/burt_network/Protobuf @@ -1 +1 @@ -Subproject commit 7d44b26cd0d591c45fcfd0dbcaea7d718b59aeb7 +Subproject commit e275dd08656bd5fd91ab7b79f0be4c616428fb66 diff --git a/burt_network/lib/src/generated/arm.pb.dart b/burt_network/lib/src/generated/arm.pb.dart index 858c4c6a..2deedd3f 100644 --- a/burt_network/lib/src/generated/arm.pb.dart +++ b/burt_network/lib/src/generated/arm.pb.dart @@ -14,10 +14,10 @@ import 'dart:core' as $core; import 'package:protobuf/protobuf.dart' as $pb; -import 'geometry.pb.dart' as $0; -import 'motor.pb.dart' as $1; +import 'geometry.pb.dart' as $2; +import 'motor.pb.dart' as $0; import 'utils.pbenum.dart' as $3; -import 'version.pb.dart' as $2; +import 'version.pb.dart' as $1; export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions; @@ -187,22 +187,160 @@ class JointAngleData extends $pb.GeneratedMessage { void clearWristPitchMulti() => $_clearField(10); } +class WristData extends $pb.GeneratedMessage { + factory WristData({ + $core.double? pitchAngle, + $core.double? rollAngle, + $0.MotorData? motorA, + $0.MotorData? motorB, + $3.BoolState? isMoving, + $3.BoolState? isCalibrated, + $1.Version? version, + }) { + final result = create(); + if (pitchAngle != null) result.pitchAngle = pitchAngle; + if (rollAngle != null) result.rollAngle = rollAngle; + if (motorA != null) result.motorA = motorA; + if (motorB != null) result.motorB = motorB; + if (isMoving != null) result.isMoving = isMoving; + if (isCalibrated != null) result.isCalibrated = isCalibrated; + if (version != null) result.version = version; + return result; + } + + WristData._(); + + factory WristData.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory WristData.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'WristData', + createEmptyInstance: create) + ..aD(1, _omitFieldNames ? '' : 'pitchAngle', fieldType: $pb.PbFieldType.OF) + ..aD(2, _omitFieldNames ? '' : 'rollAngle', fieldType: $pb.PbFieldType.OF) + ..aOM<$0.MotorData>(3, _omitFieldNames ? '' : 'motorA', + protoName: 'motorA', subBuilder: $0.MotorData.create) + ..aOM<$0.MotorData>(4, _omitFieldNames ? '' : 'motorB', + protoName: 'motorB', subBuilder: $0.MotorData.create) + ..aE<$3.BoolState>(5, _omitFieldNames ? '' : 'isMoving', + enumValues: $3.BoolState.values) + ..aE<$3.BoolState>(6, _omitFieldNames ? '' : 'isCalibrated', + enumValues: $3.BoolState.values) + ..aOM<$1.Version>(7, _omitFieldNames ? '' : 'version', + subBuilder: $1.Version.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + WristData clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + WristData copyWith(void Function(WristData) updates) => + super.copyWith((message) => updates(message as WristData)) as WristData; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static WristData create() => WristData._(); + @$core.override + WristData createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static WristData getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static WristData? _defaultInstance; + + /// Virtual joint state (what the subsystem thinks pitch/roll are). + @$pb.TagNumber(1) + $core.double get pitchAngle => $_getN(0); + @$pb.TagNumber(1) + set pitchAngle($core.double value) => $_setFloat(0, value); + @$pb.TagNumber(1) + $core.bool hasPitchAngle() => $_has(0); + @$pb.TagNumber(1) + void clearPitchAngle() => $_clearField(1); + + @$pb.TagNumber(2) + $core.double get rollAngle => $_getN(1); + @$pb.TagNumber(2) + set rollAngle($core.double value) => $_setFloat(1, value); + @$pb.TagNumber(2) + $core.bool hasRollAngle() => $_has(1); + @$pb.TagNumber(2) + void clearRollAngle() => $_clearField(2); + + @$pb.TagNumber(3) + $0.MotorData get motorA => $_getN(2); + @$pb.TagNumber(3) + set motorA($0.MotorData value) => $_setField(3, value); + @$pb.TagNumber(3) + $core.bool hasMotorA() => $_has(2); + @$pb.TagNumber(3) + void clearMotorA() => $_clearField(3); + @$pb.TagNumber(3) + $0.MotorData ensureMotorA() => $_ensure(2); + + @$pb.TagNumber(4) + $0.MotorData get motorB => $_getN(3); + @$pb.TagNumber(4) + set motorB($0.MotorData value) => $_setField(4, value); + @$pb.TagNumber(4) + $core.bool hasMotorB() => $_has(3); + @$pb.TagNumber(4) + void clearMotorB() => $_clearField(4); + @$pb.TagNumber(4) + $0.MotorData ensureMotorB() => $_ensure(3); + + /// Overall health/status flags + @$pb.TagNumber(5) + $3.BoolState get isMoving => $_getN(4); + @$pb.TagNumber(5) + set isMoving($3.BoolState value) => $_setField(5, value); + @$pb.TagNumber(5) + $core.bool hasIsMoving() => $_has(4); + @$pb.TagNumber(5) + void clearIsMoving() => $_clearField(5); + + @$pb.TagNumber(6) + $3.BoolState get isCalibrated => $_getN(5); + @$pb.TagNumber(6) + set isCalibrated($3.BoolState value) => $_setField(6, value); + @$pb.TagNumber(6) + $core.bool hasIsCalibrated() => $_has(5); + @$pb.TagNumber(6) + void clearIsCalibrated() => $_clearField(6); + + @$pb.TagNumber(7) + $1.Version get version => $_getN(6); + @$pb.TagNumber(7) + set version($1.Version value) => $_setField(7, value); + @$pb.TagNumber(7) + $core.bool hasVersion() => $_has(6); + @$pb.TagNumber(7) + void clearVersion() => $_clearField(7); + @$pb.TagNumber(7) + $1.Version ensureVersion() => $_ensure(6); +} + class ArmData extends $pb.GeneratedMessage { factory ArmData({ - $0.Coordinates? currentPosition, - $0.Coordinates? targetPosition, - $1.MotorData? base, - $1.MotorData? shoulder, - $1.MotorData? elbow, - $2.Version? version, + $2.Coordinates? currentPosition, + $2.Coordinates? targetPosition, + $0.MotorData? base, + $0.MotorData? shoulder, + $0.MotorData? elbow, + $1.Version? version, $core.double? ussDistance, - $1.MotorData? lift, - $1.MotorData? rotate, - $1.MotorData? pinch, + $0.MotorData? lift, + $0.MotorData? rotate, + $0.MotorData? pinch, $core.int? servoAngle, $3.BoolState? laserState, - $1.MotorData? roll, + $0.MotorData? roll, JointAngleData? jointAngles, + WristData? wrist, }) { final result = create(); if (currentPosition != null) result.currentPosition = currentPosition; @@ -219,6 +357,7 @@ class ArmData extends $pb.GeneratedMessage { if (laserState != null) result.laserState = laserState; if (roll != null) result.roll = roll; if (jointAngles != null) result.jointAngles = jointAngles; + if (wrist != null) result.wrist = wrist; return result; } @@ -234,32 +373,34 @@ class ArmData extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo( _omitMessageNames ? '' : 'ArmData', createEmptyInstance: create) - ..aOM<$0.Coordinates>(1, _omitFieldNames ? '' : 'currentPosition', - subBuilder: $0.Coordinates.create) - ..aOM<$0.Coordinates>(2, _omitFieldNames ? '' : 'targetPosition', - subBuilder: $0.Coordinates.create) - ..aOM<$1.MotorData>(3, _omitFieldNames ? '' : 'base', - subBuilder: $1.MotorData.create) - ..aOM<$1.MotorData>(4, _omitFieldNames ? '' : 'shoulder', - subBuilder: $1.MotorData.create) - ..aOM<$1.MotorData>(5, _omitFieldNames ? '' : 'elbow', - subBuilder: $1.MotorData.create) - ..aOM<$2.Version>(6, _omitFieldNames ? '' : 'version', - subBuilder: $2.Version.create) + ..aOM<$2.Coordinates>(1, _omitFieldNames ? '' : 'currentPosition', + subBuilder: $2.Coordinates.create) + ..aOM<$2.Coordinates>(2, _omitFieldNames ? '' : 'targetPosition', + subBuilder: $2.Coordinates.create) + ..aOM<$0.MotorData>(3, _omitFieldNames ? '' : 'base', + subBuilder: $0.MotorData.create) + ..aOM<$0.MotorData>(4, _omitFieldNames ? '' : 'shoulder', + subBuilder: $0.MotorData.create) + ..aOM<$0.MotorData>(5, _omitFieldNames ? '' : 'elbow', + subBuilder: $0.MotorData.create) + ..aOM<$1.Version>(6, _omitFieldNames ? '' : 'version', + subBuilder: $1.Version.create) ..aD(7, _omitFieldNames ? '' : 'ussDistance', fieldType: $pb.PbFieldType.OF) - ..aOM<$1.MotorData>(8, _omitFieldNames ? '' : 'lift', - subBuilder: $1.MotorData.create) - ..aOM<$1.MotorData>(9, _omitFieldNames ? '' : 'rotate', - subBuilder: $1.MotorData.create) - ..aOM<$1.MotorData>(10, _omitFieldNames ? '' : 'pinch', - subBuilder: $1.MotorData.create) + ..aOM<$0.MotorData>(8, _omitFieldNames ? '' : 'lift', + subBuilder: $0.MotorData.create) + ..aOM<$0.MotorData>(9, _omitFieldNames ? '' : 'rotate', + subBuilder: $0.MotorData.create) + ..aOM<$0.MotorData>(10, _omitFieldNames ? '' : 'pinch', + subBuilder: $0.MotorData.create) ..aI(11, _omitFieldNames ? '' : 'servoAngle') ..aE<$3.BoolState>(12, _omitFieldNames ? '' : 'laserState', enumValues: $3.BoolState.values) - ..aOM<$1.MotorData>(13, _omitFieldNames ? '' : 'roll', - subBuilder: $1.MotorData.create) + ..aOM<$0.MotorData>(13, _omitFieldNames ? '' : 'roll', + subBuilder: $0.MotorData.create) ..aOM(14, _omitFieldNames ? '' : 'jointAngles', subBuilder: JointAngleData.create) + ..aOM(15, _omitFieldNames ? '' : 'wrist', + subBuilder: WristData.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -282,70 +423,70 @@ class ArmData extends $pb.GeneratedMessage { /// Arm Commands @$pb.TagNumber(1) - $0.Coordinates get currentPosition => $_getN(0); + $2.Coordinates get currentPosition => $_getN(0); @$pb.TagNumber(1) - set currentPosition($0.Coordinates value) => $_setField(1, value); + set currentPosition($2.Coordinates value) => $_setField(1, value); @$pb.TagNumber(1) $core.bool hasCurrentPosition() => $_has(0); @$pb.TagNumber(1) void clearCurrentPosition() => $_clearField(1); @$pb.TagNumber(1) - $0.Coordinates ensureCurrentPosition() => $_ensure(0); + $2.Coordinates ensureCurrentPosition() => $_ensure(0); @$pb.TagNumber(2) - $0.Coordinates get targetPosition => $_getN(1); + $2.Coordinates get targetPosition => $_getN(1); @$pb.TagNumber(2) - set targetPosition($0.Coordinates value) => $_setField(2, value); + set targetPosition($2.Coordinates value) => $_setField(2, value); @$pb.TagNumber(2) $core.bool hasTargetPosition() => $_has(1); @$pb.TagNumber(2) void clearTargetPosition() => $_clearField(2); @$pb.TagNumber(2) - $0.Coordinates ensureTargetPosition() => $_ensure(1); + $2.Coordinates ensureTargetPosition() => $_ensure(1); @$pb.TagNumber(3) - $1.MotorData get base => $_getN(2); + $0.MotorData get base => $_getN(2); @$pb.TagNumber(3) - set base($1.MotorData value) => $_setField(3, value); + set base($0.MotorData value) => $_setField(3, value); @$pb.TagNumber(3) $core.bool hasBase() => $_has(2); @$pb.TagNumber(3) void clearBase() => $_clearField(3); @$pb.TagNumber(3) - $1.MotorData ensureBase() => $_ensure(2); + $0.MotorData ensureBase() => $_ensure(2); @$pb.TagNumber(4) - $1.MotorData get shoulder => $_getN(3); + $0.MotorData get shoulder => $_getN(3); @$pb.TagNumber(4) - set shoulder($1.MotorData value) => $_setField(4, value); + set shoulder($0.MotorData value) => $_setField(4, value); @$pb.TagNumber(4) $core.bool hasShoulder() => $_has(3); @$pb.TagNumber(4) void clearShoulder() => $_clearField(4); @$pb.TagNumber(4) - $1.MotorData ensureShoulder() => $_ensure(3); + $0.MotorData ensureShoulder() => $_ensure(3); @$pb.TagNumber(5) - $1.MotorData get elbow => $_getN(4); + $0.MotorData get elbow => $_getN(4); @$pb.TagNumber(5) - set elbow($1.MotorData value) => $_setField(5, value); + set elbow($0.MotorData value) => $_setField(5, value); @$pb.TagNumber(5) $core.bool hasElbow() => $_has(4); @$pb.TagNumber(5) void clearElbow() => $_clearField(5); @$pb.TagNumber(5) - $1.MotorData ensureElbow() => $_ensure(4); + $0.MotorData ensureElbow() => $_ensure(4); @$pb.TagNumber(6) - $2.Version get version => $_getN(5); + $1.Version get version => $_getN(5); @$pb.TagNumber(6) - set version($2.Version value) => $_setField(6, value); + set version($1.Version value) => $_setField(6, value); @$pb.TagNumber(6) $core.bool hasVersion() => $_has(5); @$pb.TagNumber(6) void clearVersion() => $_clearField(6); @$pb.TagNumber(6) - $2.Version ensureVersion() => $_ensure(5); + $1.Version ensureVersion() => $_ensure(5); /// USS data @$pb.TagNumber(7) @@ -359,37 +500,37 @@ class ArmData extends $pb.GeneratedMessage { /// Gripper Commands @$pb.TagNumber(8) - $1.MotorData get lift => $_getN(7); + $0.MotorData get lift => $_getN(7); @$pb.TagNumber(8) - set lift($1.MotorData value) => $_setField(8, value); + set lift($0.MotorData value) => $_setField(8, value); @$pb.TagNumber(8) $core.bool hasLift() => $_has(7); @$pb.TagNumber(8) void clearLift() => $_clearField(8); @$pb.TagNumber(8) - $1.MotorData ensureLift() => $_ensure(7); + $0.MotorData ensureLift() => $_ensure(7); @$pb.TagNumber(9) - $1.MotorData get rotate => $_getN(8); + $0.MotorData get rotate => $_getN(8); @$pb.TagNumber(9) - set rotate($1.MotorData value) => $_setField(9, value); + set rotate($0.MotorData value) => $_setField(9, value); @$pb.TagNumber(9) $core.bool hasRotate() => $_has(8); @$pb.TagNumber(9) void clearRotate() => $_clearField(9); @$pb.TagNumber(9) - $1.MotorData ensureRotate() => $_ensure(8); + $0.MotorData ensureRotate() => $_ensure(8); @$pb.TagNumber(10) - $1.MotorData get pinch => $_getN(9); + $0.MotorData get pinch => $_getN(9); @$pb.TagNumber(10) - set pinch($1.MotorData value) => $_setField(10, value); + set pinch($0.MotorData value) => $_setField(10, value); @$pb.TagNumber(10) $core.bool hasPinch() => $_has(9); @$pb.TagNumber(10) void clearPinch() => $_clearField(10); @$pb.TagNumber(10) - $1.MotorData ensurePinch() => $_ensure(9); + $0.MotorData ensurePinch() => $_ensure(9); @$pb.TagNumber(11) $core.int get servoAngle => $_getIZ(10); @@ -410,15 +551,15 @@ class ArmData extends $pb.GeneratedMessage { void clearLaserState() => $_clearField(12); @$pb.TagNumber(13) - $1.MotorData get roll => $_getN(12); + $0.MotorData get roll => $_getN(12); @$pb.TagNumber(13) - set roll($1.MotorData value) => $_setField(13, value); + set roll($0.MotorData value) => $_setField(13, value); @$pb.TagNumber(13) $core.bool hasRoll() => $_has(12); @$pb.TagNumber(13) void clearRoll() => $_clearField(13); @$pb.TagNumber(13) - $1.MotorData ensureRoll() => $_ensure(12); + $0.MotorData ensureRoll() => $_ensure(12); @$pb.TagNumber(14) JointAngleData get jointAngles => $_getN(13); @@ -430,31 +571,156 @@ class ArmData extends $pb.GeneratedMessage { void clearJointAngles() => $_clearField(14); @$pb.TagNumber(14) JointAngleData ensureJointAngles() => $_ensure(13); + + @$pb.TagNumber(15) + WristData get wrist => $_getN(14); + @$pb.TagNumber(15) + set wrist(WristData value) => $_setField(15, value); + @$pb.TagNumber(15) + $core.bool hasWrist() => $_has(14); + @$pb.TagNumber(15) + void clearWrist() => $_clearField(15); + @$pb.TagNumber(15) + WristData ensureWrist() => $_ensure(14); +} + +class WristCommand extends $pb.GeneratedMessage { + factory WristCommand({ + $core.bool? stop, + $core.bool? calibrate, + $0.MotorCommand? pitch, + $0.MotorCommand? roll, + $1.Version? version, + }) { + final result = create(); + if (stop != null) result.stop = stop; + if (calibrate != null) result.calibrate = calibrate; + if (pitch != null) result.pitch = pitch; + if (roll != null) result.roll = roll; + if (version != null) result.version = version; + return result; + } + + WristCommand._(); + + factory WristCommand.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory WristCommand.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'WristCommand', + createEmptyInstance: create) + ..aOB(1, _omitFieldNames ? '' : 'stop') + ..aOB(2, _omitFieldNames ? '' : 'calibrate') + ..aOM<$0.MotorCommand>(3, _omitFieldNames ? '' : 'pitch', + subBuilder: $0.MotorCommand.create) + ..aOM<$0.MotorCommand>(4, _omitFieldNames ? '' : 'roll', + subBuilder: $0.MotorCommand.create) + ..aOM<$1.Version>(5, _omitFieldNames ? '' : 'version', + subBuilder: $1.Version.create) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + WristCommand clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + WristCommand copyWith(void Function(WristCommand) updates) => + super.copyWith((message) => updates(message as WristCommand)) + as WristCommand; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static WristCommand create() => WristCommand._(); + @$core.override + WristCommand createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static WristCommand getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static WristCommand? _defaultInstance; + + /// General commands for wrist + @$pb.TagNumber(1) + $core.bool get stop => $_getBF(0); + @$pb.TagNumber(1) + set stop($core.bool value) => $_setBool(0, value); + @$pb.TagNumber(1) + $core.bool hasStop() => $_has(0); + @$pb.TagNumber(1) + void clearStop() => $_clearField(1); + + @$pb.TagNumber(2) + $core.bool get calibrate => $_getBF(1); + @$pb.TagNumber(2) + set calibrate($core.bool value) => $_setBool(1, value); + @$pb.TagNumber(2) + $core.bool hasCalibrate() => $_has(1); + @$pb.TagNumber(2) + void clearCalibrate() => $_clearField(2); + + /// Virtual joints (preferred): command the coupled wrist DOFs. + /// Firmware may execute one axis at a time for mechanical safety. + @$pb.TagNumber(3) + $0.MotorCommand get pitch => $_getN(2); + @$pb.TagNumber(3) + set pitch($0.MotorCommand value) => $_setField(3, value); + @$pb.TagNumber(3) + $core.bool hasPitch() => $_has(2); + @$pb.TagNumber(3) + void clearPitch() => $_clearField(3); + @$pb.TagNumber(3) + $0.MotorCommand ensurePitch() => $_ensure(2); + + @$pb.TagNumber(4) + $0.MotorCommand get roll => $_getN(3); + @$pb.TagNumber(4) + set roll($0.MotorCommand value) => $_setField(4, value); + @$pb.TagNumber(4) + $core.bool hasRoll() => $_has(3); + @$pb.TagNumber(4) + void clearRoll() => $_clearField(4); + @$pb.TagNumber(4) + $0.MotorCommand ensureRoll() => $_ensure(3); + + @$pb.TagNumber(5) + $1.Version get version => $_getN(4); + @$pb.TagNumber(5) + set version($1.Version value) => $_setField(5, value); + @$pb.TagNumber(5) + $core.bool hasVersion() => $_has(4); + @$pb.TagNumber(5) + void clearVersion() => $_clearField(5); + @$pb.TagNumber(5) + $1.Version ensureVersion() => $_ensure(4); } class ArmCommand extends $pb.GeneratedMessage { factory ArmCommand({ $core.bool? stop, $core.bool? calibrate, - $1.MotorCommand? swivel, - $1.MotorCommand? shoulder, - $1.MotorCommand? elbow, - $1.MotorCommand? gripperLift, + $0.MotorCommand? swivel, + $0.MotorCommand? shoulder, + $0.MotorCommand? elbow, + $0.MotorCommand? gripperLift, $core.double? ikX, $core.double? ikY, $core.double? ikZ, $core.bool? jab, - $2.Version? version, + $1.Version? version, $3.BoolState? startUss, - $1.MotorCommand? lift, - $1.MotorCommand? rotate, - $1.MotorCommand? pinch, + $0.MotorCommand? lift, + $0.MotorCommand? rotate, + $0.MotorCommand? pinch, $core.bool? open, $core.bool? close, $core.bool? spin, $core.int? servoAngle, $3.BoolState? laserState, - $1.MotorCommand? roll, + $0.MotorCommand? roll, + WristCommand? wrist, }) { final result = create(); if (stop != null) result.stop = stop; @@ -478,6 +744,7 @@ class ArmCommand extends $pb.GeneratedMessage { if (servoAngle != null) result.servoAngle = servoAngle; if (laserState != null) result.laserState = laserState; if (roll != null) result.roll = roll; + if (wrist != null) result.wrist = wrist; return result; } @@ -495,36 +762,38 @@ class ArmCommand extends $pb.GeneratedMessage { createEmptyInstance: create) ..aOB(1, _omitFieldNames ? '' : 'stop') ..aOB(2, _omitFieldNames ? '' : 'calibrate') - ..aOM<$1.MotorCommand>(3, _omitFieldNames ? '' : 'swivel', - subBuilder: $1.MotorCommand.create) - ..aOM<$1.MotorCommand>(4, _omitFieldNames ? '' : 'shoulder', - subBuilder: $1.MotorCommand.create) - ..aOM<$1.MotorCommand>(5, _omitFieldNames ? '' : 'elbow', - subBuilder: $1.MotorCommand.create) - ..aOM<$1.MotorCommand>(6, _omitFieldNames ? '' : 'gripperLift', - subBuilder: $1.MotorCommand.create) + ..aOM<$0.MotorCommand>(3, _omitFieldNames ? '' : 'swivel', + subBuilder: $0.MotorCommand.create) + ..aOM<$0.MotorCommand>(4, _omitFieldNames ? '' : 'shoulder', + subBuilder: $0.MotorCommand.create) + ..aOM<$0.MotorCommand>(5, _omitFieldNames ? '' : 'elbow', + subBuilder: $0.MotorCommand.create) + ..aOM<$0.MotorCommand>(6, _omitFieldNames ? '' : 'gripperLift', + subBuilder: $0.MotorCommand.create) ..aD(7, _omitFieldNames ? '' : 'ikX', fieldType: $pb.PbFieldType.OF) ..aD(8, _omitFieldNames ? '' : 'ikY', fieldType: $pb.PbFieldType.OF) ..aD(9, _omitFieldNames ? '' : 'ikZ', fieldType: $pb.PbFieldType.OF) ..aOB(10, _omitFieldNames ? '' : 'jab') - ..aOM<$2.Version>(11, _omitFieldNames ? '' : 'version', - subBuilder: $2.Version.create) + ..aOM<$1.Version>(11, _omitFieldNames ? '' : 'version', + subBuilder: $1.Version.create) ..aE<$3.BoolState>(12, _omitFieldNames ? '' : 'startUss', enumValues: $3.BoolState.values) - ..aOM<$1.MotorCommand>(13, _omitFieldNames ? '' : 'lift', - subBuilder: $1.MotorCommand.create) - ..aOM<$1.MotorCommand>(14, _omitFieldNames ? '' : 'rotate', - subBuilder: $1.MotorCommand.create) - ..aOM<$1.MotorCommand>(15, _omitFieldNames ? '' : 'pinch', - subBuilder: $1.MotorCommand.create) + ..aOM<$0.MotorCommand>(13, _omitFieldNames ? '' : 'lift', + subBuilder: $0.MotorCommand.create) + ..aOM<$0.MotorCommand>(14, _omitFieldNames ? '' : 'rotate', + subBuilder: $0.MotorCommand.create) + ..aOM<$0.MotorCommand>(15, _omitFieldNames ? '' : 'pinch', + subBuilder: $0.MotorCommand.create) ..aOB(16, _omitFieldNames ? '' : 'open') ..aOB(17, _omitFieldNames ? '' : 'close') ..aOB(18, _omitFieldNames ? '' : 'spin') ..aI(19, _omitFieldNames ? '' : 'servoAngle') ..aE<$3.BoolState>(20, _omitFieldNames ? '' : 'laserState', enumValues: $3.BoolState.values) - ..aOM<$1.MotorCommand>(21, _omitFieldNames ? '' : 'roll', - subBuilder: $1.MotorCommand.create) + ..aOM<$0.MotorCommand>(21, _omitFieldNames ? '' : 'roll', + subBuilder: $0.MotorCommand.create) + ..aOM(22, _omitFieldNames ? '' : 'wrist', + subBuilder: WristCommand.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -566,50 +835,50 @@ class ArmCommand extends $pb.GeneratedMessage { /// Move individual motors @$pb.TagNumber(3) - $1.MotorCommand get swivel => $_getN(2); + $0.MotorCommand get swivel => $_getN(2); @$pb.TagNumber(3) - set swivel($1.MotorCommand value) => $_setField(3, value); + set swivel($0.MotorCommand value) => $_setField(3, value); @$pb.TagNumber(3) $core.bool hasSwivel() => $_has(2); @$pb.TagNumber(3) void clearSwivel() => $_clearField(3); @$pb.TagNumber(3) - $1.MotorCommand ensureSwivel() => $_ensure(2); + $0.MotorCommand ensureSwivel() => $_ensure(2); @$pb.TagNumber(4) - $1.MotorCommand get shoulder => $_getN(3); + $0.MotorCommand get shoulder => $_getN(3); @$pb.TagNumber(4) - set shoulder($1.MotorCommand value) => $_setField(4, value); + set shoulder($0.MotorCommand value) => $_setField(4, value); @$pb.TagNumber(4) $core.bool hasShoulder() => $_has(3); @$pb.TagNumber(4) void clearShoulder() => $_clearField(4); @$pb.TagNumber(4) - $1.MotorCommand ensureShoulder() => $_ensure(3); + $0.MotorCommand ensureShoulder() => $_ensure(3); @$pb.TagNumber(5) - $1.MotorCommand get elbow => $_getN(4); + $0.MotorCommand get elbow => $_getN(4); @$pb.TagNumber(5) - set elbow($1.MotorCommand value) => $_setField(5, value); + set elbow($0.MotorCommand value) => $_setField(5, value); @$pb.TagNumber(5) $core.bool hasElbow() => $_has(4); @$pb.TagNumber(5) void clearElbow() => $_clearField(5); @$pb.TagNumber(5) - $1.MotorCommand ensureElbow() => $_ensure(4); + $0.MotorCommand ensureElbow() => $_ensure(4); /// Needed for IK: If the wrist-lift moves, we need to re-calculate IK to keep the end-effector /// stationary. See /Arm/src/ik/README.md in the Arm-Firmware repository. @$pb.TagNumber(6) - $1.MotorCommand get gripperLift => $_getN(5); + $0.MotorCommand get gripperLift => $_getN(5); @$pb.TagNumber(6) - set gripperLift($1.MotorCommand value) => $_setField(6, value); + set gripperLift($0.MotorCommand value) => $_setField(6, value); @$pb.TagNumber(6) $core.bool hasGripperLift() => $_has(5); @$pb.TagNumber(6) void clearGripperLift() => $_clearField(6); @$pb.TagNumber(6) - $1.MotorCommand ensureGripperLift() => $_ensure(5); + $0.MotorCommand ensureGripperLift() => $_ensure(5); /// Can be removed in future versions @$pb.TagNumber(7) @@ -650,15 +919,15 @@ class ArmCommand extends $pb.GeneratedMessage { void clearJab() => $_clearField(10); @$pb.TagNumber(11) - $2.Version get version => $_getN(10); + $1.Version get version => $_getN(10); @$pb.TagNumber(11) - set version($2.Version value) => $_setField(11, value); + set version($1.Version value) => $_setField(11, value); @$pb.TagNumber(11) $core.bool hasVersion() => $_has(10); @$pb.TagNumber(11) void clearVersion() => $_clearField(11); @$pb.TagNumber(11) - $2.Version ensureVersion() => $_ensure(10); + $1.Version ensureVersion() => $_ensure(10); /// USS commands @$pb.TagNumber(12) @@ -672,37 +941,37 @@ class ArmCommand extends $pb.GeneratedMessage { /// Move individual motors @$pb.TagNumber(13) - $1.MotorCommand get lift => $_getN(12); + $0.MotorCommand get lift => $_getN(12); @$pb.TagNumber(13) - set lift($1.MotorCommand value) => $_setField(13, value); + set lift($0.MotorCommand value) => $_setField(13, value); @$pb.TagNumber(13) $core.bool hasLift() => $_has(12); @$pb.TagNumber(13) void clearLift() => $_clearField(13); @$pb.TagNumber(13) - $1.MotorCommand ensureLift() => $_ensure(12); + $0.MotorCommand ensureLift() => $_ensure(12); @$pb.TagNumber(14) - $1.MotorCommand get rotate => $_getN(13); + $0.MotorCommand get rotate => $_getN(13); @$pb.TagNumber(14) - set rotate($1.MotorCommand value) => $_setField(14, value); + set rotate($0.MotorCommand value) => $_setField(14, value); @$pb.TagNumber(14) $core.bool hasRotate() => $_has(13); @$pb.TagNumber(14) void clearRotate() => $_clearField(14); @$pb.TagNumber(14) - $1.MotorCommand ensureRotate() => $_ensure(13); + $0.MotorCommand ensureRotate() => $_ensure(13); @$pb.TagNumber(15) - $1.MotorCommand get pinch => $_getN(14); + $0.MotorCommand get pinch => $_getN(14); @$pb.TagNumber(15) - set pinch($1.MotorCommand value) => $_setField(15, value); + set pinch($0.MotorCommand value) => $_setField(15, value); @$pb.TagNumber(15) $core.bool hasPinch() => $_has(14); @$pb.TagNumber(15) void clearPinch() => $_clearField(15); @$pb.TagNumber(15) - $1.MotorCommand ensurePinch() => $_ensure(14); + $0.MotorCommand ensurePinch() => $_ensure(14); /// Custom actions @$pb.TagNumber(16) @@ -751,15 +1020,26 @@ class ArmCommand extends $pb.GeneratedMessage { void clearLaserState() => $_clearField(20); @$pb.TagNumber(21) - $1.MotorCommand get roll => $_getN(20); + $0.MotorCommand get roll => $_getN(20); @$pb.TagNumber(21) - set roll($1.MotorCommand value) => $_setField(21, value); + set roll($0.MotorCommand value) => $_setField(21, value); @$pb.TagNumber(21) $core.bool hasRoll() => $_has(20); @$pb.TagNumber(21) void clearRoll() => $_clearField(21); @$pb.TagNumber(21) - $1.MotorCommand ensureRoll() => $_ensure(20); + $0.MotorCommand ensureRoll() => $_ensure(20); + + @$pb.TagNumber(22) + WristCommand get wrist => $_getN(21); + @$pb.TagNumber(22) + set wrist(WristCommand value) => $_setField(22, value); + @$pb.TagNumber(22) + $core.bool hasWrist() => $_has(21); + @$pb.TagNumber(22) + void clearWrist() => $_clearField(22); + @$pb.TagNumber(22) + WristCommand ensureWrist() => $_ensure(21); } const $core.bool _omitFieldNames = diff --git a/burt_network/lib/src/generated/arm.pbjson.dart b/burt_network/lib/src/generated/arm.pbjson.dart index 8b9cb1fc..ac1b9614 100644 --- a/burt_network/lib/src/generated/arm.pbjson.dart +++ b/burt_network/lib/src/generated/arm.pbjson.dart @@ -55,6 +55,42 @@ final $typed_data.Uint8List jointAngleDataDescriptor = $convert.base64Decode( 'KAJSCXJvbGxNdWx0aRIqChF3cmlzdF9waXRjaF9tdWx0aRgKIAEoAlIPd3Jpc3RQaXRjaE11bH' 'Rp'); +@$core.Deprecated('Use wristDataDescriptor instead') +const WristData$json = { + '1': 'WristData', + '2': [ + {'1': 'pitch_angle', '3': 1, '4': 1, '5': 2, '10': 'pitchAngle'}, + {'1': 'roll_angle', '3': 2, '4': 1, '5': 2, '10': 'rollAngle'}, + {'1': 'motorA', '3': 3, '4': 1, '5': 11, '6': '.MotorData', '10': 'motorA'}, + {'1': 'motorB', '3': 4, '4': 1, '5': 11, '6': '.MotorData', '10': 'motorB'}, + { + '1': 'is_moving', + '3': 5, + '4': 1, + '5': 14, + '6': '.BoolState', + '10': 'isMoving' + }, + { + '1': 'is_calibrated', + '3': 6, + '4': 1, + '5': 14, + '6': '.BoolState', + '10': 'isCalibrated' + }, + {'1': 'version', '3': 7, '4': 1, '5': 11, '6': '.Version', '10': 'version'}, + ], +}; + +/// Descriptor for `WristData`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List wristDataDescriptor = $convert.base64Decode( + 'CglXcmlzdERhdGESHwoLcGl0Y2hfYW5nbGUYASABKAJSCnBpdGNoQW5nbGUSHQoKcm9sbF9hbm' + 'dsZRgCIAEoAlIJcm9sbEFuZ2xlEiIKBm1vdG9yQRgDIAEoCzIKLk1vdG9yRGF0YVIGbW90b3JB' + 'EiIKBm1vdG9yQhgEIAEoCzIKLk1vdG9yRGF0YVIGbW90b3JCEicKCWlzX21vdmluZxgFIAEoDj' + 'IKLkJvb2xTdGF0ZVIIaXNNb3ZpbmcSLwoNaXNfY2FsaWJyYXRlZBgGIAEoDjIKLkJvb2xTdGF0' + 'ZVIMaXNDYWxpYnJhdGVkEiIKB3ZlcnNpb24YByABKAsyCC5WZXJzaW9uUgd2ZXJzaW9u'); + @$core.Deprecated('Use armDataDescriptor instead') const ArmData$json = { '1': 'ArmData', @@ -90,6 +126,7 @@ const ArmData$json = { {'1': 'uss_distance', '3': 7, '4': 1, '5': 2, '10': 'ussDistance'}, {'1': 'lift', '3': 8, '4': 1, '5': 11, '6': '.MotorData', '10': 'lift'}, {'1': 'rotate', '3': 9, '4': 1, '5': 11, '6': '.MotorData', '10': 'rotate'}, + {'1': 'wrist', '3': 15, '4': 1, '5': 11, '6': '.WristData', '10': 'wrist'}, {'1': 'pinch', '3': 10, '4': 1, '5': 11, '6': '.MotorData', '10': 'pinch'}, {'1': 'servo_angle', '3': 11, '4': 1, '5': 5, '10': 'servoAngle'}, { @@ -120,10 +157,36 @@ final $typed_data.Uint8List armDataDescriptor = $convert.base64Decode( 'ZWxib3cSHgoEcm9sbBgNIAEoCzIKLk1vdG9yRGF0YVIEcm9sbBIiCgd2ZXJzaW9uGAYgASgLMg' 'guVmVyc2lvblIHdmVyc2lvbhIhCgx1c3NfZGlzdGFuY2UYByABKAJSC3Vzc0Rpc3RhbmNlEh4K' 'BGxpZnQYCCABKAsyCi5Nb3RvckRhdGFSBGxpZnQSIgoGcm90YXRlGAkgASgLMgouTW90b3JEYX' - 'RhUgZyb3RhdGUSIAoFcGluY2gYCiABKAsyCi5Nb3RvckRhdGFSBXBpbmNoEh8KC3NlcnZvX2Fu' - 'Z2xlGAsgASgFUgpzZXJ2b0FuZ2xlEisKC2xhc2VyX3N0YXRlGAwgASgOMgouQm9vbFN0YXRlUg' - 'psYXNlclN0YXRlEjIKDGpvaW50X2FuZ2xlcxgOIAEoCzIPLkpvaW50QW5nbGVEYXRhUgtqb2lu' - 'dEFuZ2xlcw=='); + 'RhUgZyb3RhdGUSIAoFd3Jpc3QYDyABKAsyCi5XcmlzdERhdGFSBXdyaXN0EiAKBXBpbmNoGAog' + 'ASgLMgouTW90b3JEYXRhUgVwaW5jaBIfCgtzZXJ2b19hbmdsZRgLIAEoBVIKc2Vydm9BbmdsZR' + 'IrCgtsYXNlcl9zdGF0ZRgMIAEoDjIKLkJvb2xTdGF0ZVIKbGFzZXJTdGF0ZRIyCgxqb2ludF9h' + 'bmdsZXMYDiABKAsyDy5Kb2ludEFuZ2xlRGF0YVILam9pbnRBbmdsZXM='); + +@$core.Deprecated('Use wristCommandDescriptor instead') +const WristCommand$json = { + '1': 'WristCommand', + '2': [ + {'1': 'stop', '3': 1, '4': 1, '5': 8, '10': 'stop'}, + {'1': 'calibrate', '3': 2, '4': 1, '5': 8, '10': 'calibrate'}, + { + '1': 'pitch', + '3': 3, + '4': 1, + '5': 11, + '6': '.MotorCommand', + '10': 'pitch' + }, + {'1': 'roll', '3': 4, '4': 1, '5': 11, '6': '.MotorCommand', '10': 'roll'}, + {'1': 'version', '3': 5, '4': 1, '5': 11, '6': '.Version', '10': 'version'}, + ], +}; + +/// Descriptor for `WristCommand`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List wristCommandDescriptor = $convert.base64Decode( + 'CgxXcmlzdENvbW1hbmQSEgoEc3RvcBgBIAEoCFIEc3RvcBIcCgljYWxpYnJhdGUYAiABKAhSCW' + 'NhbGlicmF0ZRIjCgVwaXRjaBgDIAEoCzINLk1vdG9yQ29tbWFuZFIFcGl0Y2gSIQoEcm9sbBgE' + 'IAEoCzINLk1vdG9yQ29tbWFuZFIEcm9sbBIiCgd2ZXJzaW9uGAUgASgLMgguVmVyc2lvblIHdm' + 'Vyc2lvbg=='); @$core.Deprecated('Use armCommandDescriptor instead') const ArmCommand$json = { @@ -193,6 +256,14 @@ const ArmCommand$json = { '6': '.MotorCommand', '10': 'rotate' }, + { + '1': 'wrist', + '3': 22, + '4': 1, + '5': 11, + '6': '.WristCommand', + '10': 'wrist' + }, { '1': 'pinch', '3': 15, @@ -226,8 +297,8 @@ final $typed_data.Uint8List armCommandDescriptor = $convert.base64Decode( 'EoAlIDaWtYEhEKBGlrX3kYCCABKAJSA2lrWRIRCgRpa196GAkgASgCUgNpa1oSEAoDamFiGAog' 'ASgIUgNqYWISIgoHdmVyc2lvbhgLIAEoCzIILlZlcnNpb25SB3ZlcnNpb24SJwoJc3RhcnRfdX' 'NzGAwgASgOMgouQm9vbFN0YXRlUghzdGFydFVzcxIhCgRsaWZ0GA0gASgLMg0uTW90b3JDb21t' - 'YW5kUgRsaWZ0EiUKBnJvdGF0ZRgOIAEoCzINLk1vdG9yQ29tbWFuZFIGcm90YXRlEiMKBXBpbm' - 'NoGA8gASgLMg0uTW90b3JDb21tYW5kUgVwaW5jaBISCgRvcGVuGBAgASgIUgRvcGVuEhQKBWNs' - 'b3NlGBEgASgIUgVjbG9zZRISCgRzcGluGBIgASgIUgRzcGluEh8KC3NlcnZvX2FuZ2xlGBMgAS' - 'gFUgpzZXJ2b0FuZ2xlEisKC2xhc2VyX3N0YXRlGBQgASgOMgouQm9vbFN0YXRlUgpsYXNlclN0' - 'YXRl'); + 'YW5kUgRsaWZ0EiUKBnJvdGF0ZRgOIAEoCzINLk1vdG9yQ29tbWFuZFIGcm90YXRlEiMKBXdyaX' + 'N0GBYgASgLMg0uV3Jpc3RDb21tYW5kUgV3cmlzdBIjCgVwaW5jaBgPIAEoCzINLk1vdG9yQ29t' + 'bWFuZFIFcGluY2gSEgoEb3BlbhgQIAEoCFIEb3BlbhIUCgVjbG9zZRgRIAEoCFIFY2xvc2USEg' + 'oEc3BpbhgSIAEoCFIEc3BpbhIfCgtzZXJ2b19hbmdsZRgTIAEoBVIKc2Vydm9BbmdsZRIrCgts' + 'YXNlcl9zdGF0ZRgUIAEoDjIKLkJvb2xTdGF0ZVIKbGFzZXJTdGF0ZQ=='); From 9038db70ec962bff92f3ba22b650d67315432772 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Sun, 8 Feb 2026 01:34:21 -0500 Subject: [PATCH 06/29] Update protobuf --- burt_network/Protobuf | 2 +- burt_network/lib/src/generated/arm.pb.dart | 67 ++++++++++++++++++- .../lib/src/generated/arm.pbjson.dart | 40 ++++++++--- 3 files changed, 97 insertions(+), 12 deletions(-) diff --git a/burt_network/Protobuf b/burt_network/Protobuf index e275dd08..f5adb6e0 160000 --- a/burt_network/Protobuf +++ b/burt_network/Protobuf @@ -1 +1 @@ -Subproject commit e275dd08656bd5fd91ab7b79f0be4c616428fb66 +Subproject commit f5adb6e04ccfd469e6705c3cb44a51238436ca39 diff --git a/burt_network/lib/src/generated/arm.pb.dart b/burt_network/lib/src/generated/arm.pb.dart index 2deedd3f..4c41aeec 100644 --- a/burt_network/lib/src/generated/arm.pb.dart +++ b/burt_network/lib/src/generated/arm.pb.dart @@ -341,6 +341,7 @@ class ArmData extends $pb.GeneratedMessage { $0.MotorData? roll, JointAngleData? jointAngles, WristData? wrist, + $3.BoolState? usingIk, }) { final result = create(); if (currentPosition != null) result.currentPosition = currentPosition; @@ -358,6 +359,7 @@ class ArmData extends $pb.GeneratedMessage { if (roll != null) result.roll = roll; if (jointAngles != null) result.jointAngles = jointAngles; if (wrist != null) result.wrist = wrist; + if (usingIk != null) result.usingIk = usingIk; return result; } @@ -401,6 +403,8 @@ class ArmData extends $pb.GeneratedMessage { subBuilder: JointAngleData.create) ..aOM(15, _omitFieldNames ? '' : 'wrist', subBuilder: WristData.create) + ..aE<$3.BoolState>(16, _omitFieldNames ? '' : 'usingIk', + enumValues: $3.BoolState.values) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -582,6 +586,15 @@ class ArmData extends $pb.GeneratedMessage { void clearWrist() => $_clearField(15); @$pb.TagNumber(15) WristData ensureWrist() => $_ensure(14); + + @$pb.TagNumber(16) + $3.BoolState get usingIk => $_getN(15); + @$pb.TagNumber(16) + set usingIk($3.BoolState value) => $_setField(16, value); + @$pb.TagNumber(16) + $core.bool hasUsingIk() => $_has(15); + @$pb.TagNumber(16) + void clearUsingIk() => $_clearField(16); } class WristCommand extends $pb.GeneratedMessage { @@ -721,6 +734,10 @@ class ArmCommand extends $pb.GeneratedMessage { $3.BoolState? laserState, $0.MotorCommand? roll, WristCommand? wrist, + $3.BoolState? usingIk, + $core.double? ikPitch, + $core.double? ikYaw, + $2.Pose3d? pose, }) { final result = create(); if (stop != null) result.stop = stop; @@ -745,6 +762,10 @@ class ArmCommand extends $pb.GeneratedMessage { if (laserState != null) result.laserState = laserState; if (roll != null) result.roll = roll; if (wrist != null) result.wrist = wrist; + if (usingIk != null) result.usingIk = usingIk; + if (ikPitch != null) result.ikPitch = ikPitch; + if (ikYaw != null) result.ikYaw = ikYaw; + if (pose != null) result.pose = pose; return result; } @@ -794,6 +815,12 @@ class ArmCommand extends $pb.GeneratedMessage { subBuilder: $0.MotorCommand.create) ..aOM(22, _omitFieldNames ? '' : 'wrist', subBuilder: WristCommand.create) + ..aE<$3.BoolState>(23, _omitFieldNames ? '' : 'usingIk', + enumValues: $3.BoolState.values) + ..aD(24, _omitFieldNames ? '' : 'ikPitch', fieldType: $pb.PbFieldType.OF) + ..aD(25, _omitFieldNames ? '' : 'ikYaw', fieldType: $pb.PbFieldType.OF) + ..aOM<$2.Pose3d>(26, _omitFieldNames ? '' : 'pose', + subBuilder: $2.Pose3d.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -867,8 +894,6 @@ class ArmCommand extends $pb.GeneratedMessage { @$pb.TagNumber(5) $0.MotorCommand ensureElbow() => $_ensure(4); - /// Needed for IK: If the wrist-lift moves, we need to re-calculate IK to keep the end-effector - /// stationary. See /Arm/src/ik/README.md in the Arm-Firmware repository. @$pb.TagNumber(6) $0.MotorCommand get gripperLift => $_getN(5); @$pb.TagNumber(6) @@ -1040,6 +1065,44 @@ class ArmCommand extends $pb.GeneratedMessage { void clearWrist() => $_clearField(22); @$pb.TagNumber(22) WristCommand ensureWrist() => $_ensure(21); + + @$pb.TagNumber(23) + $3.BoolState get usingIk => $_getN(22); + @$pb.TagNumber(23) + set usingIk($3.BoolState value) => $_setField(23, value); + @$pb.TagNumber(23) + $core.bool hasUsingIk() => $_has(22); + @$pb.TagNumber(23) + void clearUsingIk() => $_clearField(23); + + @$pb.TagNumber(24) + $core.double get ikPitch => $_getN(23); + @$pb.TagNumber(24) + set ikPitch($core.double value) => $_setFloat(23, value); + @$pb.TagNumber(24) + $core.bool hasIkPitch() => $_has(23); + @$pb.TagNumber(24) + void clearIkPitch() => $_clearField(24); + + @$pb.TagNumber(25) + $core.double get ikYaw => $_getN(24); + @$pb.TagNumber(25) + set ikYaw($core.double value) => $_setFloat(24, value); + @$pb.TagNumber(25) + $core.bool hasIkYaw() => $_has(24); + @$pb.TagNumber(25) + void clearIkYaw() => $_clearField(25); + + @$pb.TagNumber(26) + $2.Pose3d get pose => $_getN(25); + @$pb.TagNumber(26) + set pose($2.Pose3d value) => $_setField(26, value); + @$pb.TagNumber(26) + $core.bool hasPose() => $_has(25); + @$pb.TagNumber(26) + void clearPose() => $_clearField(26); + @$pb.TagNumber(26) + $2.Pose3d ensurePose() => $_ensure(25); } const $core.bool _omitFieldNames = diff --git a/burt_network/lib/src/generated/arm.pbjson.dart b/burt_network/lib/src/generated/arm.pbjson.dart index ac1b9614..57f200d3 100644 --- a/burt_network/lib/src/generated/arm.pbjson.dart +++ b/burt_network/lib/src/generated/arm.pbjson.dart @@ -145,6 +145,14 @@ const ArmData$json = { '6': '.JointAngleData', '10': 'jointAngles' }, + { + '1': 'using_ik', + '3': 16, + '4': 1, + '5': 14, + '6': '.BoolState', + '10': 'usingIk' + }, ], }; @@ -160,7 +168,8 @@ final $typed_data.Uint8List armDataDescriptor = $convert.base64Decode( 'RhUgZyb3RhdGUSIAoFd3Jpc3QYDyABKAsyCi5XcmlzdERhdGFSBXdyaXN0EiAKBXBpbmNoGAog' 'ASgLMgouTW90b3JEYXRhUgVwaW5jaBIfCgtzZXJ2b19hbmdsZRgLIAEoBVIKc2Vydm9BbmdsZR' 'IrCgtsYXNlcl9zdGF0ZRgMIAEoDjIKLkJvb2xTdGF0ZVIKbGFzZXJTdGF0ZRIyCgxqb2ludF9h' - 'bmdsZXMYDiABKAsyDy5Kb2ludEFuZ2xlRGF0YVILam9pbnRBbmdsZXM='); + 'bmdsZXMYDiABKAsyDy5Kb2ludEFuZ2xlRGF0YVILam9pbnRBbmdsZXMSJQoIdXNpbmdfaWsYEC' + 'ABKA4yCi5Cb29sU3RhdGVSB3VzaW5nSWs='); @$core.Deprecated('Use wristCommandDescriptor instead') const WristCommand$json = { @@ -230,6 +239,9 @@ const ArmCommand$json = { {'1': 'ik_x', '3': 7, '4': 1, '5': 2, '10': 'ikX'}, {'1': 'ik_y', '3': 8, '4': 1, '5': 2, '10': 'ikY'}, {'1': 'ik_z', '3': 9, '4': 1, '5': 2, '10': 'ikZ'}, + {'1': 'ik_pitch', '3': 24, '4': 1, '5': 2, '10': 'ikPitch'}, + {'1': 'ik_yaw', '3': 25, '4': 1, '5': 2, '10': 'ikYaw'}, + {'1': 'pose', '3': 26, '4': 1, '5': 11, '6': '.Pose3d', '10': 'pose'}, {'1': 'jab', '3': 10, '4': 1, '5': 8, '10': 'jab'}, { '1': 'version', @@ -284,6 +296,14 @@ const ArmCommand$json = { '6': '.BoolState', '10': 'laserState' }, + { + '1': 'using_ik', + '3': 23, + '4': 1, + '5': 14, + '6': '.BoolState', + '10': 'usingIk' + }, ], }; @@ -294,11 +314,13 @@ final $typed_data.Uint8List armCommandDescriptor = $convert.base64Decode( 'ZXIYBCABKAsyDS5Nb3RvckNvbW1hbmRSCHNob3VsZGVyEiMKBWVsYm93GAUgASgLMg0uTW90b3' 'JDb21tYW5kUgVlbGJvdxIhCgRyb2xsGBUgASgLMg0uTW90b3JDb21tYW5kUgRyb2xsEjAKDGdy' 'aXBwZXJfbGlmdBgGIAEoCzINLk1vdG9yQ29tbWFuZFILZ3JpcHBlckxpZnQSEQoEaWtfeBgHIA' - 'EoAlIDaWtYEhEKBGlrX3kYCCABKAJSA2lrWRIRCgRpa196GAkgASgCUgNpa1oSEAoDamFiGAog' - 'ASgIUgNqYWISIgoHdmVyc2lvbhgLIAEoCzIILlZlcnNpb25SB3ZlcnNpb24SJwoJc3RhcnRfdX' - 'NzGAwgASgOMgouQm9vbFN0YXRlUghzdGFydFVzcxIhCgRsaWZ0GA0gASgLMg0uTW90b3JDb21t' - 'YW5kUgRsaWZ0EiUKBnJvdGF0ZRgOIAEoCzINLk1vdG9yQ29tbWFuZFIGcm90YXRlEiMKBXdyaX' - 'N0GBYgASgLMg0uV3Jpc3RDb21tYW5kUgV3cmlzdBIjCgVwaW5jaBgPIAEoCzINLk1vdG9yQ29t' - 'bWFuZFIFcGluY2gSEgoEb3BlbhgQIAEoCFIEb3BlbhIUCgVjbG9zZRgRIAEoCFIFY2xvc2USEg' - 'oEc3BpbhgSIAEoCFIEc3BpbhIfCgtzZXJ2b19hbmdsZRgTIAEoBVIKc2Vydm9BbmdsZRIrCgts' - 'YXNlcl9zdGF0ZRgUIAEoDjIKLkJvb2xTdGF0ZVIKbGFzZXJTdGF0ZQ=='); + 'EoAlIDaWtYEhEKBGlrX3kYCCABKAJSA2lrWRIRCgRpa196GAkgASgCUgNpa1oSGQoIaWtfcGl0' + 'Y2gYGCABKAJSB2lrUGl0Y2gSFQoGaWtfeWF3GBkgASgCUgVpa1lhdxIbCgRwb3NlGBogASgLMg' + 'cuUG9zZTNkUgRwb3NlEhAKA2phYhgKIAEoCFIDamFiEiIKB3ZlcnNpb24YCyABKAsyCC5WZXJz' + 'aW9uUgd2ZXJzaW9uEicKCXN0YXJ0X3VzcxgMIAEoDjIKLkJvb2xTdGF0ZVIIc3RhcnRVc3MSIQ' + 'oEbGlmdBgNIAEoCzINLk1vdG9yQ29tbWFuZFIEbGlmdBIlCgZyb3RhdGUYDiABKAsyDS5Nb3Rv' + 'ckNvbW1hbmRSBnJvdGF0ZRIjCgV3cmlzdBgWIAEoCzINLldyaXN0Q29tbWFuZFIFd3Jpc3QSIw' + 'oFcGluY2gYDyABKAsyDS5Nb3RvckNvbW1hbmRSBXBpbmNoEhIKBG9wZW4YECABKAhSBG9wZW4S' + 'FAoFY2xvc2UYESABKAhSBWNsb3NlEhIKBHNwaW4YEiABKAhSBHNwaW4SHwoLc2Vydm9fYW5nbG' + 'UYEyABKAVSCnNlcnZvQW5nbGUSKwoLbGFzZXJfc3RhdGUYFCABKA4yCi5Cb29sU3RhdGVSCmxh' + 'c2VyU3RhdGUSJQoIdXNpbmdfaWsYFyABKA4yCi5Cb29sU3RhdGVSB3VzaW5nSWs='); From e4bd38759925695bbd3705b8c50cdee51f987f2a Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Sun, 8 Feb 2026 01:40:29 -0500 Subject: [PATCH 07/29] six seven --- burt_network/Protobuf | 2 +- burt_network/lib/src/generated/arm.pb.dart | 31 ++++++++++++++ .../lib/src/generated/arm.pbjson.dart | 40 ++++++++++++++----- 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/burt_network/Protobuf b/burt_network/Protobuf index f5adb6e0..06dc109a 160000 --- a/burt_network/Protobuf +++ b/burt_network/Protobuf @@ -1 +1 @@ -Subproject commit f5adb6e04ccfd469e6705c3cb44a51238436ca39 +Subproject commit 06dc109a951bb384cd6640bd64685647ed33efe5 diff --git a/burt_network/lib/src/generated/arm.pb.dart b/burt_network/lib/src/generated/arm.pb.dart index 4c41aeec..d9118b27 100644 --- a/burt_network/lib/src/generated/arm.pb.dart +++ b/burt_network/lib/src/generated/arm.pb.dart @@ -342,6 +342,8 @@ class ArmData extends $pb.GeneratedMessage { JointAngleData? jointAngles, WristData? wrist, $3.BoolState? usingIk, + $2.Orientation? currentOrientation, + $2.Orientation? targetOrientation, }) { final result = create(); if (currentPosition != null) result.currentPosition = currentPosition; @@ -360,6 +362,9 @@ class ArmData extends $pb.GeneratedMessage { if (jointAngles != null) result.jointAngles = jointAngles; if (wrist != null) result.wrist = wrist; if (usingIk != null) result.usingIk = usingIk; + if (currentOrientation != null) + result.currentOrientation = currentOrientation; + if (targetOrientation != null) result.targetOrientation = targetOrientation; return result; } @@ -405,6 +410,10 @@ class ArmData extends $pb.GeneratedMessage { subBuilder: WristData.create) ..aE<$3.BoolState>(16, _omitFieldNames ? '' : 'usingIk', enumValues: $3.BoolState.values) + ..aOM<$2.Orientation>(17, _omitFieldNames ? '' : 'currentOrientation', + subBuilder: $2.Orientation.create) + ..aOM<$2.Orientation>(18, _omitFieldNames ? '' : 'targetOrientation', + subBuilder: $2.Orientation.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -595,6 +604,28 @@ class ArmData extends $pb.GeneratedMessage { $core.bool hasUsingIk() => $_has(15); @$pb.TagNumber(16) void clearUsingIk() => $_clearField(16); + + @$pb.TagNumber(17) + $2.Orientation get currentOrientation => $_getN(16); + @$pb.TagNumber(17) + set currentOrientation($2.Orientation value) => $_setField(17, value); + @$pb.TagNumber(17) + $core.bool hasCurrentOrientation() => $_has(16); + @$pb.TagNumber(17) + void clearCurrentOrientation() => $_clearField(17); + @$pb.TagNumber(17) + $2.Orientation ensureCurrentOrientation() => $_ensure(16); + + @$pb.TagNumber(18) + $2.Orientation get targetOrientation => $_getN(17); + @$pb.TagNumber(18) + set targetOrientation($2.Orientation value) => $_setField(18, value); + @$pb.TagNumber(18) + $core.bool hasTargetOrientation() => $_has(17); + @$pb.TagNumber(18) + void clearTargetOrientation() => $_clearField(18); + @$pb.TagNumber(18) + $2.Orientation ensureTargetOrientation() => $_ensure(17); } class WristCommand extends $pb.GeneratedMessage { diff --git a/burt_network/lib/src/generated/arm.pbjson.dart b/burt_network/lib/src/generated/arm.pbjson.dart index 57f200d3..8429942f 100644 --- a/burt_network/lib/src/generated/arm.pbjson.dart +++ b/burt_network/lib/src/generated/arm.pbjson.dart @@ -103,6 +103,14 @@ const ArmData$json = { '6': '.Coordinates', '10': 'currentPosition' }, + { + '1': 'current_orientation', + '3': 17, + '4': 1, + '5': 11, + '6': '.Orientation', + '10': 'currentOrientation' + }, { '1': 'target_position', '3': 2, @@ -111,6 +119,14 @@ const ArmData$json = { '6': '.Coordinates', '10': 'targetPosition' }, + { + '1': 'target_orientation', + '3': 18, + '4': 1, + '5': 11, + '6': '.Orientation', + '10': 'targetOrientation' + }, {'1': 'base', '3': 3, '4': 1, '5': 11, '6': '.MotorData', '10': 'base'}, { '1': 'shoulder', @@ -159,17 +175,19 @@ const ArmData$json = { /// Descriptor for `ArmData`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List armDataDescriptor = $convert.base64Decode( 'CgdBcm1EYXRhEjcKEGN1cnJlbnRfcG9zaXRpb24YASABKAsyDC5Db29yZGluYXRlc1IPY3Vycm' - 'VudFBvc2l0aW9uEjUKD3RhcmdldF9wb3NpdGlvbhgCIAEoCzIMLkNvb3JkaW5hdGVzUg50YXJn' - 'ZXRQb3NpdGlvbhIeCgRiYXNlGAMgASgLMgouTW90b3JEYXRhUgRiYXNlEiYKCHNob3VsZGVyGA' - 'QgASgLMgouTW90b3JEYXRhUghzaG91bGRlchIgCgVlbGJvdxgFIAEoCzIKLk1vdG9yRGF0YVIF' - 'ZWxib3cSHgoEcm9sbBgNIAEoCzIKLk1vdG9yRGF0YVIEcm9sbBIiCgd2ZXJzaW9uGAYgASgLMg' - 'guVmVyc2lvblIHdmVyc2lvbhIhCgx1c3NfZGlzdGFuY2UYByABKAJSC3Vzc0Rpc3RhbmNlEh4K' - 'BGxpZnQYCCABKAsyCi5Nb3RvckRhdGFSBGxpZnQSIgoGcm90YXRlGAkgASgLMgouTW90b3JEYX' - 'RhUgZyb3RhdGUSIAoFd3Jpc3QYDyABKAsyCi5XcmlzdERhdGFSBXdyaXN0EiAKBXBpbmNoGAog' - 'ASgLMgouTW90b3JEYXRhUgVwaW5jaBIfCgtzZXJ2b19hbmdsZRgLIAEoBVIKc2Vydm9BbmdsZR' - 'IrCgtsYXNlcl9zdGF0ZRgMIAEoDjIKLkJvb2xTdGF0ZVIKbGFzZXJTdGF0ZRIyCgxqb2ludF9h' - 'bmdsZXMYDiABKAsyDy5Kb2ludEFuZ2xlRGF0YVILam9pbnRBbmdsZXMSJQoIdXNpbmdfaWsYEC' - 'ABKA4yCi5Cb29sU3RhdGVSB3VzaW5nSWs='); + 'VudFBvc2l0aW9uEj0KE2N1cnJlbnRfb3JpZW50YXRpb24YESABKAsyDC5PcmllbnRhdGlvblIS' + 'Y3VycmVudE9yaWVudGF0aW9uEjUKD3RhcmdldF9wb3NpdGlvbhgCIAEoCzIMLkNvb3JkaW5hdG' + 'VzUg50YXJnZXRQb3NpdGlvbhI7ChJ0YXJnZXRfb3JpZW50YXRpb24YEiABKAsyDC5PcmllbnRh' + 'dGlvblIRdGFyZ2V0T3JpZW50YXRpb24SHgoEYmFzZRgDIAEoCzIKLk1vdG9yRGF0YVIEYmFzZR' + 'ImCghzaG91bGRlchgEIAEoCzIKLk1vdG9yRGF0YVIIc2hvdWxkZXISIAoFZWxib3cYBSABKAsy' + 'Ci5Nb3RvckRhdGFSBWVsYm93Eh4KBHJvbGwYDSABKAsyCi5Nb3RvckRhdGFSBHJvbGwSIgoHdm' + 'Vyc2lvbhgGIAEoCzIILlZlcnNpb25SB3ZlcnNpb24SIQoMdXNzX2Rpc3RhbmNlGAcgASgCUgt1' + 'c3NEaXN0YW5jZRIeCgRsaWZ0GAggASgLMgouTW90b3JEYXRhUgRsaWZ0EiIKBnJvdGF0ZRgJIA' + 'EoCzIKLk1vdG9yRGF0YVIGcm90YXRlEiAKBXdyaXN0GA8gASgLMgouV3Jpc3REYXRhUgV3cmlz' + 'dBIgCgVwaW5jaBgKIAEoCzIKLk1vdG9yRGF0YVIFcGluY2gSHwoLc2Vydm9fYW5nbGUYCyABKA' + 'VSCnNlcnZvQW5nbGUSKwoLbGFzZXJfc3RhdGUYDCABKA4yCi5Cb29sU3RhdGVSCmxhc2VyU3Rh' + 'dGUSMgoMam9pbnRfYW5nbGVzGA4gASgLMg8uSm9pbnRBbmdsZURhdGFSC2pvaW50QW5nbGVzEi' + 'UKCHVzaW5nX2lrGBAgASgOMgouQm9vbFN0YXRlUgd1c2luZ0lr'); @$core.Deprecated('Use wristCommandDescriptor instead') const WristCommand$json = { From 314fe06eb56ac7f78000f39932943654582ae25d Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Sun, 8 Feb 2026 11:44:34 -0500 Subject: [PATCH 08/29] Protobuf regen again --- burt_network/Protobuf | 2 +- burt_network/lib/src/generated/arm.pb.dart | 330 ++++++------------ .../lib/src/generated/arm.pbjson.dart | 99 ++---- burt_network/lib/src/generated/drive.pb.dart | 118 ++----- .../lib/src/generated/drive.pbjson.dart | 30 +- 5 files changed, 174 insertions(+), 405 deletions(-) diff --git a/burt_network/Protobuf b/burt_network/Protobuf index 06dc109a..ab8ebd21 160000 --- a/burt_network/Protobuf +++ b/burt_network/Protobuf @@ -1 +1 @@ -Subproject commit 06dc109a951bb384cd6640bd64685647ed33efe5 +Subproject commit ab8ebd21ac0da710d1f9e5c26d1857e27bd7ba3c diff --git a/burt_network/lib/src/generated/arm.pb.dart b/burt_network/lib/src/generated/arm.pb.dart index d9118b27..d493d99b 100644 --- a/burt_network/lib/src/generated/arm.pb.dart +++ b/burt_network/lib/src/generated/arm.pb.dart @@ -326,8 +326,6 @@ class WristData extends $pb.GeneratedMessage { class ArmData extends $pb.GeneratedMessage { factory ArmData({ - $2.Coordinates? currentPosition, - $2.Coordinates? targetPosition, $0.MotorData? base, $0.MotorData? shoulder, $0.MotorData? elbow, @@ -342,12 +340,10 @@ class ArmData extends $pb.GeneratedMessage { JointAngleData? jointAngles, WristData? wrist, $3.BoolState? usingIk, - $2.Orientation? currentOrientation, - $2.Orientation? targetOrientation, + $2.Pose3d? currentPose, + $2.Pose3d? targetPose, }) { final result = create(); - if (currentPosition != null) result.currentPosition = currentPosition; - if (targetPosition != null) result.targetPosition = targetPosition; if (base != null) result.base = base; if (shoulder != null) result.shoulder = shoulder; if (elbow != null) result.elbow = elbow; @@ -362,9 +358,8 @@ class ArmData extends $pb.GeneratedMessage { if (jointAngles != null) result.jointAngles = jointAngles; if (wrist != null) result.wrist = wrist; if (usingIk != null) result.usingIk = usingIk; - if (currentOrientation != null) - result.currentOrientation = currentOrientation; - if (targetOrientation != null) result.targetOrientation = targetOrientation; + if (currentPose != null) result.currentPose = currentPose; + if (targetPose != null) result.targetPose = targetPose; return result; } @@ -380,10 +375,6 @@ class ArmData extends $pb.GeneratedMessage { static final $pb.BuilderInfo _i = $pb.BuilderInfo( _omitMessageNames ? '' : 'ArmData', createEmptyInstance: create) - ..aOM<$2.Coordinates>(1, _omitFieldNames ? '' : 'currentPosition', - subBuilder: $2.Coordinates.create) - ..aOM<$2.Coordinates>(2, _omitFieldNames ? '' : 'targetPosition', - subBuilder: $2.Coordinates.create) ..aOM<$0.MotorData>(3, _omitFieldNames ? '' : 'base', subBuilder: $0.MotorData.create) ..aOM<$0.MotorData>(4, _omitFieldNames ? '' : 'shoulder', @@ -410,10 +401,10 @@ class ArmData extends $pb.GeneratedMessage { subBuilder: WristData.create) ..aE<$3.BoolState>(16, _omitFieldNames ? '' : 'usingIk', enumValues: $3.BoolState.values) - ..aOM<$2.Orientation>(17, _omitFieldNames ? '' : 'currentOrientation', - subBuilder: $2.Orientation.create) - ..aOM<$2.Orientation>(18, _omitFieldNames ? '' : 'targetOrientation', - subBuilder: $2.Orientation.create) + ..aOM<$2.Pose3d>(17, _omitFieldNames ? '' : 'currentPose', + subBuilder: $2.Pose3d.create) + ..aOM<$2.Pose3d>(18, _omitFieldNames ? '' : 'targetPose', + subBuilder: $2.Pose3d.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -434,198 +425,175 @@ class ArmData extends $pb.GeneratedMessage { _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); static ArmData? _defaultInstance; - /// Arm Commands - @$pb.TagNumber(1) - $2.Coordinates get currentPosition => $_getN(0); - @$pb.TagNumber(1) - set currentPosition($2.Coordinates value) => $_setField(1, value); - @$pb.TagNumber(1) - $core.bool hasCurrentPosition() => $_has(0); - @$pb.TagNumber(1) - void clearCurrentPosition() => $_clearField(1); - @$pb.TagNumber(1) - $2.Coordinates ensureCurrentPosition() => $_ensure(0); - - @$pb.TagNumber(2) - $2.Coordinates get targetPosition => $_getN(1); - @$pb.TagNumber(2) - set targetPosition($2.Coordinates value) => $_setField(2, value); - @$pb.TagNumber(2) - $core.bool hasTargetPosition() => $_has(1); - @$pb.TagNumber(2) - void clearTargetPosition() => $_clearField(2); - @$pb.TagNumber(2) - $2.Coordinates ensureTargetPosition() => $_ensure(1); - @$pb.TagNumber(3) - $0.MotorData get base => $_getN(2); + $0.MotorData get base => $_getN(0); @$pb.TagNumber(3) set base($0.MotorData value) => $_setField(3, value); @$pb.TagNumber(3) - $core.bool hasBase() => $_has(2); + $core.bool hasBase() => $_has(0); @$pb.TagNumber(3) void clearBase() => $_clearField(3); @$pb.TagNumber(3) - $0.MotorData ensureBase() => $_ensure(2); + $0.MotorData ensureBase() => $_ensure(0); @$pb.TagNumber(4) - $0.MotorData get shoulder => $_getN(3); + $0.MotorData get shoulder => $_getN(1); @$pb.TagNumber(4) set shoulder($0.MotorData value) => $_setField(4, value); @$pb.TagNumber(4) - $core.bool hasShoulder() => $_has(3); + $core.bool hasShoulder() => $_has(1); @$pb.TagNumber(4) void clearShoulder() => $_clearField(4); @$pb.TagNumber(4) - $0.MotorData ensureShoulder() => $_ensure(3); + $0.MotorData ensureShoulder() => $_ensure(1); @$pb.TagNumber(5) - $0.MotorData get elbow => $_getN(4); + $0.MotorData get elbow => $_getN(2); @$pb.TagNumber(5) set elbow($0.MotorData value) => $_setField(5, value); @$pb.TagNumber(5) - $core.bool hasElbow() => $_has(4); + $core.bool hasElbow() => $_has(2); @$pb.TagNumber(5) void clearElbow() => $_clearField(5); @$pb.TagNumber(5) - $0.MotorData ensureElbow() => $_ensure(4); + $0.MotorData ensureElbow() => $_ensure(2); @$pb.TagNumber(6) - $1.Version get version => $_getN(5); + $1.Version get version => $_getN(3); @$pb.TagNumber(6) set version($1.Version value) => $_setField(6, value); @$pb.TagNumber(6) - $core.bool hasVersion() => $_has(5); + $core.bool hasVersion() => $_has(3); @$pb.TagNumber(6) void clearVersion() => $_clearField(6); @$pb.TagNumber(6) - $1.Version ensureVersion() => $_ensure(5); + $1.Version ensureVersion() => $_ensure(3); /// USS data @$pb.TagNumber(7) - $core.double get ussDistance => $_getN(6); + $core.double get ussDistance => $_getN(4); @$pb.TagNumber(7) - set ussDistance($core.double value) => $_setFloat(6, value); + set ussDistance($core.double value) => $_setFloat(4, value); @$pb.TagNumber(7) - $core.bool hasUssDistance() => $_has(6); + $core.bool hasUssDistance() => $_has(4); @$pb.TagNumber(7) void clearUssDistance() => $_clearField(7); /// Gripper Commands @$pb.TagNumber(8) - $0.MotorData get lift => $_getN(7); + $0.MotorData get lift => $_getN(5); @$pb.TagNumber(8) set lift($0.MotorData value) => $_setField(8, value); @$pb.TagNumber(8) - $core.bool hasLift() => $_has(7); + $core.bool hasLift() => $_has(5); @$pb.TagNumber(8) void clearLift() => $_clearField(8); @$pb.TagNumber(8) - $0.MotorData ensureLift() => $_ensure(7); + $0.MotorData ensureLift() => $_ensure(5); @$pb.TagNumber(9) - $0.MotorData get rotate => $_getN(8); + $0.MotorData get rotate => $_getN(6); @$pb.TagNumber(9) set rotate($0.MotorData value) => $_setField(9, value); @$pb.TagNumber(9) - $core.bool hasRotate() => $_has(8); + $core.bool hasRotate() => $_has(6); @$pb.TagNumber(9) void clearRotate() => $_clearField(9); @$pb.TagNumber(9) - $0.MotorData ensureRotate() => $_ensure(8); + $0.MotorData ensureRotate() => $_ensure(6); @$pb.TagNumber(10) - $0.MotorData get pinch => $_getN(9); + $0.MotorData get pinch => $_getN(7); @$pb.TagNumber(10) set pinch($0.MotorData value) => $_setField(10, value); @$pb.TagNumber(10) - $core.bool hasPinch() => $_has(9); + $core.bool hasPinch() => $_has(7); @$pb.TagNumber(10) void clearPinch() => $_clearField(10); @$pb.TagNumber(10) - $0.MotorData ensurePinch() => $_ensure(9); + $0.MotorData ensurePinch() => $_ensure(7); @$pb.TagNumber(11) - $core.int get servoAngle => $_getIZ(10); + $core.int get servoAngle => $_getIZ(8); @$pb.TagNumber(11) - set servoAngle($core.int value) => $_setSignedInt32(10, value); + set servoAngle($core.int value) => $_setSignedInt32(8, value); @$pb.TagNumber(11) - $core.bool hasServoAngle() => $_has(10); + $core.bool hasServoAngle() => $_has(8); @$pb.TagNumber(11) void clearServoAngle() => $_clearField(11); @$pb.TagNumber(12) - $3.BoolState get laserState => $_getN(11); + $3.BoolState get laserState => $_getN(9); @$pb.TagNumber(12) set laserState($3.BoolState value) => $_setField(12, value); @$pb.TagNumber(12) - $core.bool hasLaserState() => $_has(11); + $core.bool hasLaserState() => $_has(9); @$pb.TagNumber(12) void clearLaserState() => $_clearField(12); @$pb.TagNumber(13) - $0.MotorData get roll => $_getN(12); + $0.MotorData get roll => $_getN(10); @$pb.TagNumber(13) set roll($0.MotorData value) => $_setField(13, value); @$pb.TagNumber(13) - $core.bool hasRoll() => $_has(12); + $core.bool hasRoll() => $_has(10); @$pb.TagNumber(13) void clearRoll() => $_clearField(13); @$pb.TagNumber(13) - $0.MotorData ensureRoll() => $_ensure(12); + $0.MotorData ensureRoll() => $_ensure(10); @$pb.TagNumber(14) - JointAngleData get jointAngles => $_getN(13); + JointAngleData get jointAngles => $_getN(11); @$pb.TagNumber(14) set jointAngles(JointAngleData value) => $_setField(14, value); @$pb.TagNumber(14) - $core.bool hasJointAngles() => $_has(13); + $core.bool hasJointAngles() => $_has(11); @$pb.TagNumber(14) void clearJointAngles() => $_clearField(14); @$pb.TagNumber(14) - JointAngleData ensureJointAngles() => $_ensure(13); + JointAngleData ensureJointAngles() => $_ensure(11); @$pb.TagNumber(15) - WristData get wrist => $_getN(14); + WristData get wrist => $_getN(12); @$pb.TagNumber(15) set wrist(WristData value) => $_setField(15, value); @$pb.TagNumber(15) - $core.bool hasWrist() => $_has(14); + $core.bool hasWrist() => $_has(12); @$pb.TagNumber(15) void clearWrist() => $_clearField(15); @$pb.TagNumber(15) - WristData ensureWrist() => $_ensure(14); + WristData ensureWrist() => $_ensure(12); @$pb.TagNumber(16) - $3.BoolState get usingIk => $_getN(15); + $3.BoolState get usingIk => $_getN(13); @$pb.TagNumber(16) set usingIk($3.BoolState value) => $_setField(16, value); @$pb.TagNumber(16) - $core.bool hasUsingIk() => $_has(15); + $core.bool hasUsingIk() => $_has(13); @$pb.TagNumber(16) void clearUsingIk() => $_clearField(16); @$pb.TagNumber(17) - $2.Orientation get currentOrientation => $_getN(16); + $2.Pose3d get currentPose => $_getN(14); @$pb.TagNumber(17) - set currentOrientation($2.Orientation value) => $_setField(17, value); + set currentPose($2.Pose3d value) => $_setField(17, value); @$pb.TagNumber(17) - $core.bool hasCurrentOrientation() => $_has(16); + $core.bool hasCurrentPose() => $_has(14); @$pb.TagNumber(17) - void clearCurrentOrientation() => $_clearField(17); + void clearCurrentPose() => $_clearField(17); @$pb.TagNumber(17) - $2.Orientation ensureCurrentOrientation() => $_ensure(16); + $2.Pose3d ensureCurrentPose() => $_ensure(14); @$pb.TagNumber(18) - $2.Orientation get targetOrientation => $_getN(17); + $2.Pose3d get targetPose => $_getN(15); @$pb.TagNumber(18) - set targetOrientation($2.Orientation value) => $_setField(18, value); + set targetPose($2.Pose3d value) => $_setField(18, value); @$pb.TagNumber(18) - $core.bool hasTargetOrientation() => $_has(17); + $core.bool hasTargetPose() => $_has(15); @$pb.TagNumber(18) - void clearTargetOrientation() => $_clearField(18); + void clearTargetPose() => $_clearField(18); @$pb.TagNumber(18) - $2.Orientation ensureTargetOrientation() => $_ensure(17); + $2.Pose3d ensureTargetPose() => $_ensure(15); } class WristCommand extends $pb.GeneratedMessage { @@ -748,14 +716,9 @@ class ArmCommand extends $pb.GeneratedMessage { $0.MotorCommand? swivel, $0.MotorCommand? shoulder, $0.MotorCommand? elbow, - $0.MotorCommand? gripperLift, - $core.double? ikX, - $core.double? ikY, - $core.double? ikZ, $core.bool? jab, $1.Version? version, $3.BoolState? startUss, - $0.MotorCommand? lift, $0.MotorCommand? rotate, $0.MotorCommand? pinch, $core.bool? open, @@ -766,9 +729,7 @@ class ArmCommand extends $pb.GeneratedMessage { $0.MotorCommand? roll, WristCommand? wrist, $3.BoolState? usingIk, - $core.double? ikPitch, - $core.double? ikYaw, - $2.Pose3d? pose, + $2.Pose3d? ikPose, }) { final result = create(); if (stop != null) result.stop = stop; @@ -776,14 +737,9 @@ class ArmCommand extends $pb.GeneratedMessage { if (swivel != null) result.swivel = swivel; if (shoulder != null) result.shoulder = shoulder; if (elbow != null) result.elbow = elbow; - if (gripperLift != null) result.gripperLift = gripperLift; - if (ikX != null) result.ikX = ikX; - if (ikY != null) result.ikY = ikY; - if (ikZ != null) result.ikZ = ikZ; if (jab != null) result.jab = jab; if (version != null) result.version = version; if (startUss != null) result.startUss = startUss; - if (lift != null) result.lift = lift; if (rotate != null) result.rotate = rotate; if (pinch != null) result.pinch = pinch; if (open != null) result.open = open; @@ -794,9 +750,7 @@ class ArmCommand extends $pb.GeneratedMessage { if (roll != null) result.roll = roll; if (wrist != null) result.wrist = wrist; if (usingIk != null) result.usingIk = usingIk; - if (ikPitch != null) result.ikPitch = ikPitch; - if (ikYaw != null) result.ikYaw = ikYaw; - if (pose != null) result.pose = pose; + if (ikPose != null) result.ikPose = ikPose; return result; } @@ -820,18 +774,11 @@ class ArmCommand extends $pb.GeneratedMessage { subBuilder: $0.MotorCommand.create) ..aOM<$0.MotorCommand>(5, _omitFieldNames ? '' : 'elbow', subBuilder: $0.MotorCommand.create) - ..aOM<$0.MotorCommand>(6, _omitFieldNames ? '' : 'gripperLift', - subBuilder: $0.MotorCommand.create) - ..aD(7, _omitFieldNames ? '' : 'ikX', fieldType: $pb.PbFieldType.OF) - ..aD(8, _omitFieldNames ? '' : 'ikY', fieldType: $pb.PbFieldType.OF) - ..aD(9, _omitFieldNames ? '' : 'ikZ', fieldType: $pb.PbFieldType.OF) ..aOB(10, _omitFieldNames ? '' : 'jab') ..aOM<$1.Version>(11, _omitFieldNames ? '' : 'version', subBuilder: $1.Version.create) ..aE<$3.BoolState>(12, _omitFieldNames ? '' : 'startUss', enumValues: $3.BoolState.values) - ..aOM<$0.MotorCommand>(13, _omitFieldNames ? '' : 'lift', - subBuilder: $0.MotorCommand.create) ..aOM<$0.MotorCommand>(14, _omitFieldNames ? '' : 'rotate', subBuilder: $0.MotorCommand.create) ..aOM<$0.MotorCommand>(15, _omitFieldNames ? '' : 'pinch', @@ -848,9 +795,7 @@ class ArmCommand extends $pb.GeneratedMessage { subBuilder: WristCommand.create) ..aE<$3.BoolState>(23, _omitFieldNames ? '' : 'usingIk', enumValues: $3.BoolState.values) - ..aD(24, _omitFieldNames ? '' : 'ikPitch', fieldType: $pb.PbFieldType.OF) - ..aD(25, _omitFieldNames ? '' : 'ikYaw', fieldType: $pb.PbFieldType.OF) - ..aOM<$2.Pose3d>(26, _omitFieldNames ? '' : 'pose', + ..aOM<$2.Pose3d>(24, _omitFieldNames ? '' : 'ikPose', subBuilder: $2.Pose3d.create) ..hasRequiredFields = false; @@ -925,215 +870,146 @@ class ArmCommand extends $pb.GeneratedMessage { @$pb.TagNumber(5) $0.MotorCommand ensureElbow() => $_ensure(4); - @$pb.TagNumber(6) - $0.MotorCommand get gripperLift => $_getN(5); - @$pb.TagNumber(6) - set gripperLift($0.MotorCommand value) => $_setField(6, value); - @$pb.TagNumber(6) - $core.bool hasGripperLift() => $_has(5); - @$pb.TagNumber(6) - void clearGripperLift() => $_clearField(6); - @$pb.TagNumber(6) - $0.MotorCommand ensureGripperLift() => $_ensure(5); - - /// Can be removed in future versions - @$pb.TagNumber(7) - $core.double get ikX => $_getN(6); - @$pb.TagNumber(7) - set ikX($core.double value) => $_setFloat(6, value); - @$pb.TagNumber(7) - $core.bool hasIkX() => $_has(6); - @$pb.TagNumber(7) - void clearIkX() => $_clearField(7); - - @$pb.TagNumber(8) - $core.double get ikY => $_getN(7); - @$pb.TagNumber(8) - set ikY($core.double value) => $_setFloat(7, value); - @$pb.TagNumber(8) - $core.bool hasIkY() => $_has(7); - @$pb.TagNumber(8) - void clearIkY() => $_clearField(8); - - @$pb.TagNumber(9) - $core.double get ikZ => $_getN(8); - @$pb.TagNumber(9) - set ikZ($core.double value) => $_setFloat(8, value); - @$pb.TagNumber(9) - $core.bool hasIkZ() => $_has(8); - @$pb.TagNumber(9) - void clearIkZ() => $_clearField(9); - /// Custom actions @$pb.TagNumber(10) - $core.bool get jab => $_getBF(9); + $core.bool get jab => $_getBF(5); @$pb.TagNumber(10) - set jab($core.bool value) => $_setBool(9, value); + set jab($core.bool value) => $_setBool(5, value); @$pb.TagNumber(10) - $core.bool hasJab() => $_has(9); + $core.bool hasJab() => $_has(5); @$pb.TagNumber(10) void clearJab() => $_clearField(10); @$pb.TagNumber(11) - $1.Version get version => $_getN(10); + $1.Version get version => $_getN(6); @$pb.TagNumber(11) set version($1.Version value) => $_setField(11, value); @$pb.TagNumber(11) - $core.bool hasVersion() => $_has(10); + $core.bool hasVersion() => $_has(6); @$pb.TagNumber(11) void clearVersion() => $_clearField(11); @$pb.TagNumber(11) - $1.Version ensureVersion() => $_ensure(10); + $1.Version ensureVersion() => $_ensure(6); /// USS commands @$pb.TagNumber(12) - $3.BoolState get startUss => $_getN(11); + $3.BoolState get startUss => $_getN(7); @$pb.TagNumber(12) set startUss($3.BoolState value) => $_setField(12, value); @$pb.TagNumber(12) - $core.bool hasStartUss() => $_has(11); + $core.bool hasStartUss() => $_has(7); @$pb.TagNumber(12) void clearStartUss() => $_clearField(12); - /// Move individual motors - @$pb.TagNumber(13) - $0.MotorCommand get lift => $_getN(12); - @$pb.TagNumber(13) - set lift($0.MotorCommand value) => $_setField(13, value); - @$pb.TagNumber(13) - $core.bool hasLift() => $_has(12); - @$pb.TagNumber(13) - void clearLift() => $_clearField(13); - @$pb.TagNumber(13) - $0.MotorCommand ensureLift() => $_ensure(12); - @$pb.TagNumber(14) - $0.MotorCommand get rotate => $_getN(13); + $0.MotorCommand get rotate => $_getN(8); @$pb.TagNumber(14) set rotate($0.MotorCommand value) => $_setField(14, value); @$pb.TagNumber(14) - $core.bool hasRotate() => $_has(13); + $core.bool hasRotate() => $_has(8); @$pb.TagNumber(14) void clearRotate() => $_clearField(14); @$pb.TagNumber(14) - $0.MotorCommand ensureRotate() => $_ensure(13); + $0.MotorCommand ensureRotate() => $_ensure(8); @$pb.TagNumber(15) - $0.MotorCommand get pinch => $_getN(14); + $0.MotorCommand get pinch => $_getN(9); @$pb.TagNumber(15) set pinch($0.MotorCommand value) => $_setField(15, value); @$pb.TagNumber(15) - $core.bool hasPinch() => $_has(14); + $core.bool hasPinch() => $_has(9); @$pb.TagNumber(15) void clearPinch() => $_clearField(15); @$pb.TagNumber(15) - $0.MotorCommand ensurePinch() => $_ensure(14); + $0.MotorCommand ensurePinch() => $_ensure(9); /// Custom actions @$pb.TagNumber(16) - $core.bool get open => $_getBF(15); + $core.bool get open => $_getBF(10); @$pb.TagNumber(16) - set open($core.bool value) => $_setBool(15, value); + set open($core.bool value) => $_setBool(10, value); @$pb.TagNumber(16) - $core.bool hasOpen() => $_has(15); + $core.bool hasOpen() => $_has(10); @$pb.TagNumber(16) void clearOpen() => $_clearField(16); @$pb.TagNumber(17) - $core.bool get close => $_getBF(16); + $core.bool get close => $_getBF(11); @$pb.TagNumber(17) - set close($core.bool value) => $_setBool(16, value); + set close($core.bool value) => $_setBool(11, value); @$pb.TagNumber(17) - $core.bool hasClose() => $_has(16); + $core.bool hasClose() => $_has(11); @$pb.TagNumber(17) void clearClose() => $_clearField(17); @$pb.TagNumber(18) - $core.bool get spin => $_getBF(17); + $core.bool get spin => $_getBF(12); @$pb.TagNumber(18) - set spin($core.bool value) => $_setBool(17, value); + set spin($core.bool value) => $_setBool(12, value); @$pb.TagNumber(18) - $core.bool hasSpin() => $_has(17); + $core.bool hasSpin() => $_has(12); @$pb.TagNumber(18) void clearSpin() => $_clearField(18); @$pb.TagNumber(19) - $core.int get servoAngle => $_getIZ(18); + $core.int get servoAngle => $_getIZ(13); @$pb.TagNumber(19) - set servoAngle($core.int value) => $_setSignedInt32(18, value); + set servoAngle($core.int value) => $_setSignedInt32(13, value); @$pb.TagNumber(19) - $core.bool hasServoAngle() => $_has(18); + $core.bool hasServoAngle() => $_has(13); @$pb.TagNumber(19) void clearServoAngle() => $_clearField(19); @$pb.TagNumber(20) - $3.BoolState get laserState => $_getN(19); + $3.BoolState get laserState => $_getN(14); @$pb.TagNumber(20) set laserState($3.BoolState value) => $_setField(20, value); @$pb.TagNumber(20) - $core.bool hasLaserState() => $_has(19); + $core.bool hasLaserState() => $_has(14); @$pb.TagNumber(20) void clearLaserState() => $_clearField(20); @$pb.TagNumber(21) - $0.MotorCommand get roll => $_getN(20); + $0.MotorCommand get roll => $_getN(15); @$pb.TagNumber(21) set roll($0.MotorCommand value) => $_setField(21, value); @$pb.TagNumber(21) - $core.bool hasRoll() => $_has(20); + $core.bool hasRoll() => $_has(15); @$pb.TagNumber(21) void clearRoll() => $_clearField(21); @$pb.TagNumber(21) - $0.MotorCommand ensureRoll() => $_ensure(20); + $0.MotorCommand ensureRoll() => $_ensure(15); @$pb.TagNumber(22) - WristCommand get wrist => $_getN(21); + WristCommand get wrist => $_getN(16); @$pb.TagNumber(22) set wrist(WristCommand value) => $_setField(22, value); @$pb.TagNumber(22) - $core.bool hasWrist() => $_has(21); + $core.bool hasWrist() => $_has(16); @$pb.TagNumber(22) void clearWrist() => $_clearField(22); @$pb.TagNumber(22) - WristCommand ensureWrist() => $_ensure(21); + WristCommand ensureWrist() => $_ensure(16); @$pb.TagNumber(23) - $3.BoolState get usingIk => $_getN(22); + $3.BoolState get usingIk => $_getN(17); @$pb.TagNumber(23) set usingIk($3.BoolState value) => $_setField(23, value); @$pb.TagNumber(23) - $core.bool hasUsingIk() => $_has(22); + $core.bool hasUsingIk() => $_has(17); @$pb.TagNumber(23) void clearUsingIk() => $_clearField(23); @$pb.TagNumber(24) - $core.double get ikPitch => $_getN(23); + $2.Pose3d get ikPose => $_getN(18); + @$pb.TagNumber(24) + set ikPose($2.Pose3d value) => $_setField(24, value); @$pb.TagNumber(24) - set ikPitch($core.double value) => $_setFloat(23, value); + $core.bool hasIkPose() => $_has(18); @$pb.TagNumber(24) - $core.bool hasIkPitch() => $_has(23); + void clearIkPose() => $_clearField(24); @$pb.TagNumber(24) - void clearIkPitch() => $_clearField(24); - - @$pb.TagNumber(25) - $core.double get ikYaw => $_getN(24); - @$pb.TagNumber(25) - set ikYaw($core.double value) => $_setFloat(24, value); - @$pb.TagNumber(25) - $core.bool hasIkYaw() => $_has(24); - @$pb.TagNumber(25) - void clearIkYaw() => $_clearField(25); - - @$pb.TagNumber(26) - $2.Pose3d get pose => $_getN(25); - @$pb.TagNumber(26) - set pose($2.Pose3d value) => $_setField(26, value); - @$pb.TagNumber(26) - $core.bool hasPose() => $_has(25); - @$pb.TagNumber(26) - void clearPose() => $_clearField(26); - @$pb.TagNumber(26) - $2.Pose3d ensurePose() => $_ensure(25); + $2.Pose3d ensureIkPose() => $_ensure(18); } const $core.bool _omitFieldNames = diff --git a/burt_network/lib/src/generated/arm.pbjson.dart b/burt_network/lib/src/generated/arm.pbjson.dart index 8429942f..bff9ba5e 100644 --- a/burt_network/lib/src/generated/arm.pbjson.dart +++ b/burt_network/lib/src/generated/arm.pbjson.dart @@ -96,36 +96,20 @@ const ArmData$json = { '1': 'ArmData', '2': [ { - '1': 'current_position', - '3': 1, - '4': 1, - '5': 11, - '6': '.Coordinates', - '10': 'currentPosition' - }, - { - '1': 'current_orientation', + '1': 'current_pose', '3': 17, '4': 1, '5': 11, - '6': '.Orientation', - '10': 'currentOrientation' - }, - { - '1': 'target_position', - '3': 2, - '4': 1, - '5': 11, - '6': '.Coordinates', - '10': 'targetPosition' + '6': '.Pose3d', + '10': 'currentPose' }, { - '1': 'target_orientation', + '1': 'target_pose', '3': 18, '4': 1, '5': 11, - '6': '.Orientation', - '10': 'targetOrientation' + '6': '.Pose3d', + '10': 'targetPose' }, {'1': 'base', '3': 3, '4': 1, '5': 11, '6': '.MotorData', '10': 'base'}, { @@ -170,24 +154,26 @@ const ArmData$json = { '10': 'usingIk' }, ], + '9': [ + {'1': 1, '2': 2}, + {'1': 2, '2': 3}, + ], }; /// Descriptor for `ArmData`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List armDataDescriptor = $convert.base64Decode( - 'CgdBcm1EYXRhEjcKEGN1cnJlbnRfcG9zaXRpb24YASABKAsyDC5Db29yZGluYXRlc1IPY3Vycm' - 'VudFBvc2l0aW9uEj0KE2N1cnJlbnRfb3JpZW50YXRpb24YESABKAsyDC5PcmllbnRhdGlvblIS' - 'Y3VycmVudE9yaWVudGF0aW9uEjUKD3RhcmdldF9wb3NpdGlvbhgCIAEoCzIMLkNvb3JkaW5hdG' - 'VzUg50YXJnZXRQb3NpdGlvbhI7ChJ0YXJnZXRfb3JpZW50YXRpb24YEiABKAsyDC5PcmllbnRh' - 'dGlvblIRdGFyZ2V0T3JpZW50YXRpb24SHgoEYmFzZRgDIAEoCzIKLk1vdG9yRGF0YVIEYmFzZR' - 'ImCghzaG91bGRlchgEIAEoCzIKLk1vdG9yRGF0YVIIc2hvdWxkZXISIAoFZWxib3cYBSABKAsy' - 'Ci5Nb3RvckRhdGFSBWVsYm93Eh4KBHJvbGwYDSABKAsyCi5Nb3RvckRhdGFSBHJvbGwSIgoHdm' - 'Vyc2lvbhgGIAEoCzIILlZlcnNpb25SB3ZlcnNpb24SIQoMdXNzX2Rpc3RhbmNlGAcgASgCUgt1' - 'c3NEaXN0YW5jZRIeCgRsaWZ0GAggASgLMgouTW90b3JEYXRhUgRsaWZ0EiIKBnJvdGF0ZRgJIA' - 'EoCzIKLk1vdG9yRGF0YVIGcm90YXRlEiAKBXdyaXN0GA8gASgLMgouV3Jpc3REYXRhUgV3cmlz' - 'dBIgCgVwaW5jaBgKIAEoCzIKLk1vdG9yRGF0YVIFcGluY2gSHwoLc2Vydm9fYW5nbGUYCyABKA' - 'VSCnNlcnZvQW5nbGUSKwoLbGFzZXJfc3RhdGUYDCABKA4yCi5Cb29sU3RhdGVSCmxhc2VyU3Rh' - 'dGUSMgoMam9pbnRfYW5nbGVzGA4gASgLMg8uSm9pbnRBbmdsZURhdGFSC2pvaW50QW5nbGVzEi' - 'UKCHVzaW5nX2lrGBAgASgOMgouQm9vbFN0YXRlUgd1c2luZ0lr'); + 'CgdBcm1EYXRhEioKDGN1cnJlbnRfcG9zZRgRIAEoCzIHLlBvc2UzZFILY3VycmVudFBvc2USKA' + 'oLdGFyZ2V0X3Bvc2UYEiABKAsyBy5Qb3NlM2RSCnRhcmdldFBvc2USHgoEYmFzZRgDIAEoCzIK' + 'Lk1vdG9yRGF0YVIEYmFzZRImCghzaG91bGRlchgEIAEoCzIKLk1vdG9yRGF0YVIIc2hvdWxkZX' + 'ISIAoFZWxib3cYBSABKAsyCi5Nb3RvckRhdGFSBWVsYm93Eh4KBHJvbGwYDSABKAsyCi5Nb3Rv' + 'ckRhdGFSBHJvbGwSIgoHdmVyc2lvbhgGIAEoCzIILlZlcnNpb25SB3ZlcnNpb24SIQoMdXNzX2' + 'Rpc3RhbmNlGAcgASgCUgt1c3NEaXN0YW5jZRIeCgRsaWZ0GAggASgLMgouTW90b3JEYXRhUgRs' + 'aWZ0EiIKBnJvdGF0ZRgJIAEoCzIKLk1vdG9yRGF0YVIGcm90YXRlEiAKBXdyaXN0GA8gASgLMg' + 'ouV3Jpc3REYXRhUgV3cmlzdBIgCgVwaW5jaBgKIAEoCzIKLk1vdG9yRGF0YVIFcGluY2gSHwoL' + 'c2Vydm9fYW5nbGUYCyABKAVSCnNlcnZvQW5nbGUSKwoLbGFzZXJfc3RhdGUYDCABKA4yCi5Cb2' + '9sU3RhdGVSCmxhc2VyU3RhdGUSMgoMam9pbnRfYW5nbGVzGA4gASgLMg8uSm9pbnRBbmdsZURh' + 'dGFSC2pvaW50QW5nbGVzEiUKCHVzaW5nX2lrGBAgASgOMgouQm9vbFN0YXRlUgd1c2luZ0lrSg' + 'QIARACSgQIAhAD'); @$core.Deprecated('Use wristCommandDescriptor instead') const WristCommand$json = { @@ -246,20 +232,7 @@ const ArmCommand$json = { '10': 'elbow' }, {'1': 'roll', '3': 21, '4': 1, '5': 11, '6': '.MotorCommand', '10': 'roll'}, - { - '1': 'gripper_lift', - '3': 6, - '4': 1, - '5': 11, - '6': '.MotorCommand', - '10': 'gripperLift' - }, - {'1': 'ik_x', '3': 7, '4': 1, '5': 2, '10': 'ikX'}, - {'1': 'ik_y', '3': 8, '4': 1, '5': 2, '10': 'ikY'}, - {'1': 'ik_z', '3': 9, '4': 1, '5': 2, '10': 'ikZ'}, - {'1': 'ik_pitch', '3': 24, '4': 1, '5': 2, '10': 'ikPitch'}, - {'1': 'ik_yaw', '3': 25, '4': 1, '5': 2, '10': 'ikYaw'}, - {'1': 'pose', '3': 26, '4': 1, '5': 11, '6': '.Pose3d', '10': 'pose'}, + {'1': 'ik_pose', '3': 24, '4': 1, '5': 11, '6': '.Pose3d', '10': 'ikPose'}, {'1': 'jab', '3': 10, '4': 1, '5': 8, '10': 'jab'}, { '1': 'version', @@ -277,7 +250,6 @@ const ArmCommand$json = { '6': '.BoolState', '10': 'startUss' }, - {'1': 'lift', '3': 13, '4': 1, '5': 11, '6': '.MotorCommand', '10': 'lift'}, { '1': 'rotate', '3': 14, @@ -323,6 +295,10 @@ const ArmCommand$json = { '10': 'usingIk' }, ], + '9': [ + {'1': 6, '2': 10}, + {'1': 13, '2': 14}, + ], }; /// Descriptor for `ArmCommand`. Decode as a `google.protobuf.DescriptorProto`. @@ -330,15 +306,12 @@ final $typed_data.Uint8List armCommandDescriptor = $convert.base64Decode( 'CgpBcm1Db21tYW5kEhIKBHN0b3AYASABKAhSBHN0b3ASHAoJY2FsaWJyYXRlGAIgASgIUgljYW' 'xpYnJhdGUSJQoGc3dpdmVsGAMgASgLMg0uTW90b3JDb21tYW5kUgZzd2l2ZWwSKQoIc2hvdWxk' 'ZXIYBCABKAsyDS5Nb3RvckNvbW1hbmRSCHNob3VsZGVyEiMKBWVsYm93GAUgASgLMg0uTW90b3' - 'JDb21tYW5kUgVlbGJvdxIhCgRyb2xsGBUgASgLMg0uTW90b3JDb21tYW5kUgRyb2xsEjAKDGdy' - 'aXBwZXJfbGlmdBgGIAEoCzINLk1vdG9yQ29tbWFuZFILZ3JpcHBlckxpZnQSEQoEaWtfeBgHIA' - 'EoAlIDaWtYEhEKBGlrX3kYCCABKAJSA2lrWRIRCgRpa196GAkgASgCUgNpa1oSGQoIaWtfcGl0' - 'Y2gYGCABKAJSB2lrUGl0Y2gSFQoGaWtfeWF3GBkgASgCUgVpa1lhdxIbCgRwb3NlGBogASgLMg' - 'cuUG9zZTNkUgRwb3NlEhAKA2phYhgKIAEoCFIDamFiEiIKB3ZlcnNpb24YCyABKAsyCC5WZXJz' - 'aW9uUgd2ZXJzaW9uEicKCXN0YXJ0X3VzcxgMIAEoDjIKLkJvb2xTdGF0ZVIIc3RhcnRVc3MSIQ' - 'oEbGlmdBgNIAEoCzINLk1vdG9yQ29tbWFuZFIEbGlmdBIlCgZyb3RhdGUYDiABKAsyDS5Nb3Rv' - 'ckNvbW1hbmRSBnJvdGF0ZRIjCgV3cmlzdBgWIAEoCzINLldyaXN0Q29tbWFuZFIFd3Jpc3QSIw' - 'oFcGluY2gYDyABKAsyDS5Nb3RvckNvbW1hbmRSBXBpbmNoEhIKBG9wZW4YECABKAhSBG9wZW4S' - 'FAoFY2xvc2UYESABKAhSBWNsb3NlEhIKBHNwaW4YEiABKAhSBHNwaW4SHwoLc2Vydm9fYW5nbG' - 'UYEyABKAVSCnNlcnZvQW5nbGUSKwoLbGFzZXJfc3RhdGUYFCABKA4yCi5Cb29sU3RhdGVSCmxh' - 'c2VyU3RhdGUSJQoIdXNpbmdfaWsYFyABKA4yCi5Cb29sU3RhdGVSB3VzaW5nSWs='); + 'JDb21tYW5kUgVlbGJvdxIhCgRyb2xsGBUgASgLMg0uTW90b3JDb21tYW5kUgRyb2xsEiAKB2lr' + 'X3Bvc2UYGCABKAsyBy5Qb3NlM2RSBmlrUG9zZRIQCgNqYWIYCiABKAhSA2phYhIiCgd2ZXJzaW' + '9uGAsgASgLMgguVmVyc2lvblIHdmVyc2lvbhInCglzdGFydF91c3MYDCABKA4yCi5Cb29sU3Rh' + 'dGVSCHN0YXJ0VXNzEiUKBnJvdGF0ZRgOIAEoCzINLk1vdG9yQ29tbWFuZFIGcm90YXRlEiMKBX' + 'dyaXN0GBYgASgLMg0uV3Jpc3RDb21tYW5kUgV3cmlzdBIjCgVwaW5jaBgPIAEoCzINLk1vdG9y' + 'Q29tbWFuZFIFcGluY2gSEgoEb3BlbhgQIAEoCFIEb3BlbhIUCgVjbG9zZRgRIAEoCFIFY2xvc2' + 'USEgoEc3BpbhgSIAEoCFIEc3BpbhIfCgtzZXJ2b19hbmdsZRgTIAEoBVIKc2Vydm9BbmdsZRIr' + 'CgtsYXNlcl9zdGF0ZRgUIAEoDjIKLkJvb2xTdGF0ZVIKbGFzZXJTdGF0ZRIlCgh1c2luZ19pax' + 'gXIAEoDjIKLkJvb2xTdGF0ZVIHdXNpbmdJa0oECAYQCkoECA0QDg=='); diff --git a/burt_network/lib/src/generated/drive.pb.dart b/burt_network/lib/src/generated/drive.pb.dart index 21570bea..32d5d214 100644 --- a/burt_network/lib/src/generated/drive.pb.dart +++ b/burt_network/lib/src/generated/drive.pb.dart @@ -350,12 +350,6 @@ class DriveData extends $pb.GeneratedMessage { $core.double? batteryCurrent, $core.double? batteryTemperature, $0.Version? version, - $core.double? backLeft, - $core.double? middleLeft, - $core.double? frontLeft, - $core.double? backRight, - $core.double? middleRight, - $core.double? frontRight, ProtoColor? color, $1.RoverStatus? status, DriveMotorData? frontLeftMotor, @@ -381,12 +375,6 @@ class DriveData extends $pb.GeneratedMessage { if (batteryTemperature != null) result.batteryTemperature = batteryTemperature; if (version != null) result.version = version; - if (backLeft != null) result.backLeft = backLeft; - if (middleLeft != null) result.middleLeft = middleLeft; - if (frontLeft != null) result.frontLeft = frontLeft; - if (backRight != null) result.backRight = backRight; - if (middleRight != null) result.middleRight = middleRight; - if (frontRight != null) result.frontRight = frontRight; if (color != null) result.color = color; if (status != null) result.status = status; if (frontLeftMotor != null) result.frontLeftMotor = frontLeftMotor; @@ -428,13 +416,6 @@ class DriveData extends $pb.GeneratedMessage { fieldType: $pb.PbFieldType.OF) ..aOM<$0.Version>(14, _omitFieldNames ? '' : 'version', subBuilder: $0.Version.create) - ..aD(15, _omitFieldNames ? '' : 'backLeft', fieldType: $pb.PbFieldType.OF) - ..aD(16, _omitFieldNames ? '' : 'middleLeft', fieldType: $pb.PbFieldType.OF) - ..aD(17, _omitFieldNames ? '' : 'frontLeft', fieldType: $pb.PbFieldType.OF) - ..aD(18, _omitFieldNames ? '' : 'backRight', fieldType: $pb.PbFieldType.OF) - ..aD(19, _omitFieldNames ? '' : 'middleRight', - fieldType: $pb.PbFieldType.OF) - ..aD(20, _omitFieldNames ? '' : 'frontRight', fieldType: $pb.PbFieldType.OF) ..aE(21, _omitFieldNames ? '' : 'color', enumValues: ProtoColor.values) ..aE<$1.RoverStatus>(22, _omitFieldNames ? '' : 'status', @@ -606,145 +587,90 @@ class DriveData extends $pb.GeneratedMessage { @$pb.TagNumber(14) $0.Version ensureVersion() => $_ensure(13); - /// Information about each wheel in rpm - @$pb.TagNumber(15) - $core.double get backLeft => $_getN(14); - @$pb.TagNumber(15) - set backLeft($core.double value) => $_setFloat(14, value); - @$pb.TagNumber(15) - $core.bool hasBackLeft() => $_has(14); - @$pb.TagNumber(15) - void clearBackLeft() => $_clearField(15); - - @$pb.TagNumber(16) - $core.double get middleLeft => $_getN(15); - @$pb.TagNumber(16) - set middleLeft($core.double value) => $_setFloat(15, value); - @$pb.TagNumber(16) - $core.bool hasMiddleLeft() => $_has(15); - @$pb.TagNumber(16) - void clearMiddleLeft() => $_clearField(16); - - @$pb.TagNumber(17) - $core.double get frontLeft => $_getN(16); - @$pb.TagNumber(17) - set frontLeft($core.double value) => $_setFloat(16, value); - @$pb.TagNumber(17) - $core.bool hasFrontLeft() => $_has(16); - @$pb.TagNumber(17) - void clearFrontLeft() => $_clearField(17); - - @$pb.TagNumber(18) - $core.double get backRight => $_getN(17); - @$pb.TagNumber(18) - set backRight($core.double value) => $_setFloat(17, value); - @$pb.TagNumber(18) - $core.bool hasBackRight() => $_has(17); - @$pb.TagNumber(18) - void clearBackRight() => $_clearField(18); - - @$pb.TagNumber(19) - $core.double get middleRight => $_getN(18); - @$pb.TagNumber(19) - set middleRight($core.double value) => $_setFloat(18, value); - @$pb.TagNumber(19) - $core.bool hasMiddleRight() => $_has(18); - @$pb.TagNumber(19) - void clearMiddleRight() => $_clearField(19); - - @$pb.TagNumber(20) - $core.double get frontRight => $_getN(19); - @$pb.TagNumber(20) - set frontRight($core.double value) => $_setFloat(19, value); - @$pb.TagNumber(20) - $core.bool hasFrontRight() => $_has(19); - @$pb.TagNumber(20) - void clearFrontRight() => $_clearField(20); - @$pb.TagNumber(21) - ProtoColor get color => $_getN(20); + ProtoColor get color => $_getN(14); @$pb.TagNumber(21) set color(ProtoColor value) => $_setField(21, value); @$pb.TagNumber(21) - $core.bool hasColor() => $_has(20); + $core.bool hasColor() => $_has(14); @$pb.TagNumber(21) void clearColor() => $_clearField(21); @$pb.TagNumber(22) - $1.RoverStatus get status => $_getN(21); + $1.RoverStatus get status => $_getN(15); @$pb.TagNumber(22) set status($1.RoverStatus value) => $_setField(22, value); @$pb.TagNumber(22) - $core.bool hasStatus() => $_has(21); + $core.bool hasStatus() => $_has(15); @$pb.TagNumber(22) void clearStatus() => $_clearField(22); /// Contains the DriveMotorData for each corresponding motor @$pb.TagNumber(23) - DriveMotorData get frontLeftMotor => $_getN(22); + DriveMotorData get frontLeftMotor => $_getN(16); @$pb.TagNumber(23) set frontLeftMotor(DriveMotorData value) => $_setField(23, value); @$pb.TagNumber(23) - $core.bool hasFrontLeftMotor() => $_has(22); + $core.bool hasFrontLeftMotor() => $_has(16); @$pb.TagNumber(23) void clearFrontLeftMotor() => $_clearField(23); @$pb.TagNumber(23) - DriveMotorData ensureFrontLeftMotor() => $_ensure(22); + DriveMotorData ensureFrontLeftMotor() => $_ensure(16); @$pb.TagNumber(24) - DriveMotorData get middleLeftMotor => $_getN(23); + DriveMotorData get middleLeftMotor => $_getN(17); @$pb.TagNumber(24) set middleLeftMotor(DriveMotorData value) => $_setField(24, value); @$pb.TagNumber(24) - $core.bool hasMiddleLeftMotor() => $_has(23); + $core.bool hasMiddleLeftMotor() => $_has(17); @$pb.TagNumber(24) void clearMiddleLeftMotor() => $_clearField(24); @$pb.TagNumber(24) - DriveMotorData ensureMiddleLeftMotor() => $_ensure(23); + DriveMotorData ensureMiddleLeftMotor() => $_ensure(17); @$pb.TagNumber(25) - DriveMotorData get backLeftMotor => $_getN(24); + DriveMotorData get backLeftMotor => $_getN(18); @$pb.TagNumber(25) set backLeftMotor(DriveMotorData value) => $_setField(25, value); @$pb.TagNumber(25) - $core.bool hasBackLeftMotor() => $_has(24); + $core.bool hasBackLeftMotor() => $_has(18); @$pb.TagNumber(25) void clearBackLeftMotor() => $_clearField(25); @$pb.TagNumber(25) - DriveMotorData ensureBackLeftMotor() => $_ensure(24); + DriveMotorData ensureBackLeftMotor() => $_ensure(18); @$pb.TagNumber(26) - DriveMotorData get frontRightMotor => $_getN(25); + DriveMotorData get frontRightMotor => $_getN(19); @$pb.TagNumber(26) set frontRightMotor(DriveMotorData value) => $_setField(26, value); @$pb.TagNumber(26) - $core.bool hasFrontRightMotor() => $_has(25); + $core.bool hasFrontRightMotor() => $_has(19); @$pb.TagNumber(26) void clearFrontRightMotor() => $_clearField(26); @$pb.TagNumber(26) - DriveMotorData ensureFrontRightMotor() => $_ensure(25); + DriveMotorData ensureFrontRightMotor() => $_ensure(19); @$pb.TagNumber(27) - DriveMotorData get middleRightMotor => $_getN(26); + DriveMotorData get middleRightMotor => $_getN(20); @$pb.TagNumber(27) set middleRightMotor(DriveMotorData value) => $_setField(27, value); @$pb.TagNumber(27) - $core.bool hasMiddleRightMotor() => $_has(26); + $core.bool hasMiddleRightMotor() => $_has(20); @$pb.TagNumber(27) void clearMiddleRightMotor() => $_clearField(27); @$pb.TagNumber(27) - DriveMotorData ensureMiddleRightMotor() => $_ensure(26); + DriveMotorData ensureMiddleRightMotor() => $_ensure(20); @$pb.TagNumber(28) - DriveMotorData get backRightMotor => $_getN(27); + DriveMotorData get backRightMotor => $_getN(21); @$pb.TagNumber(28) set backRightMotor(DriveMotorData value) => $_setField(28, value); @$pb.TagNumber(28) - $core.bool hasBackRightMotor() => $_has(27); + $core.bool hasBackRightMotor() => $_has(21); @$pb.TagNumber(28) void clearBackRightMotor() => $_clearField(28); @$pb.TagNumber(28) - DriveMotorData ensureBackRightMotor() => $_ensure(27); + DriveMotorData ensureBackRightMotor() => $_ensure(21); } const $core.bool _omitFieldNames = diff --git a/burt_network/lib/src/generated/drive.pbjson.dart b/burt_network/lib/src/generated/drive.pbjson.dart index cd1cb614..e8e0f4cb 100644 --- a/burt_network/lib/src/generated/drive.pbjson.dart +++ b/burt_network/lib/src/generated/drive.pbjson.dart @@ -173,12 +173,6 @@ const DriveData$json = { '6': '.Version', '10': 'version' }, - {'1': 'back_left', '3': 15, '4': 1, '5': 2, '10': 'backLeft'}, - {'1': 'middle_left', '3': 16, '4': 1, '5': 2, '10': 'middleLeft'}, - {'1': 'front_left', '3': 17, '4': 1, '5': 2, '10': 'frontLeft'}, - {'1': 'back_right', '3': 18, '4': 1, '5': 2, '10': 'backRight'}, - {'1': 'middle_right', '3': 19, '4': 1, '5': 2, '10': 'middleRight'}, - {'1': 'front_right', '3': 20, '4': 1, '5': 2, '10': 'frontRight'}, {'1': 'color', '3': 21, '4': 1, '5': 14, '6': '.ProtoColor', '10': 'color'}, { '1': 'status', @@ -237,6 +231,9 @@ const DriveData$json = { '10': 'backRightMotor' }, ], + '9': [ + {'1': 15, '2': 21}, + ], }; /// Descriptor for `DriveData`. Decode as a `google.protobuf.DescriptorProto`. @@ -249,15 +246,12 @@ final $typed_data.Uint8List driveDataDescriptor = $convert.base64Decode( 'FyX3RpbHQYCiABKAJSCHJlYXJUaWx0EicKD2JhdHRlcnlfdm9sdGFnZRgLIAEoAlIOYmF0dGVy' 'eVZvbHRhZ2USJwoPYmF0dGVyeV9jdXJyZW50GAwgASgCUg5iYXR0ZXJ5Q3VycmVudBIvChNiYX' 'R0ZXJ5X3RlbXBlcmF0dXJlGA0gASgCUhJiYXR0ZXJ5VGVtcGVyYXR1cmUSIgoHdmVyc2lvbhgO' - 'IAEoCzIILlZlcnNpb25SB3ZlcnNpb24SGwoJYmFja19sZWZ0GA8gASgCUghiYWNrTGVmdBIfCg' - 'ttaWRkbGVfbGVmdBgQIAEoAlIKbWlkZGxlTGVmdBIdCgpmcm9udF9sZWZ0GBEgASgCUglmcm9u' - 'dExlZnQSHQoKYmFja19yaWdodBgSIAEoAlIJYmFja1JpZ2h0EiEKDG1pZGRsZV9yaWdodBgTIA' - 'EoAlILbWlkZGxlUmlnaHQSHwoLZnJvbnRfcmlnaHQYFCABKAJSCmZyb250UmlnaHQSIQoFY29s' - 'b3IYFSABKA4yCy5Qcm90b0NvbG9yUgVjb2xvchIkCgZzdGF0dXMYFiABKA4yDC5Sb3ZlclN0YX' - 'R1c1IGc3RhdHVzEjkKEGZyb250X2xlZnRfbW90b3IYFyABKAsyDy5Ecml2ZU1vdG9yRGF0YVIO' - 'ZnJvbnRMZWZ0TW90b3ISOwoRbWlkZGxlX2xlZnRfbW90b3IYGCABKAsyDy5Ecml2ZU1vdG9yRG' - 'F0YVIPbWlkZGxlTGVmdE1vdG9yEjcKD2JhY2tfbGVmdF9tb3RvchgZIAEoCzIPLkRyaXZlTW90' - 'b3JEYXRhUg1iYWNrTGVmdE1vdG9yEjsKEWZyb250X3JpZ2h0X21vdG9yGBogASgLMg8uRHJpdm' - 'VNb3RvckRhdGFSD2Zyb250UmlnaHRNb3RvchI9ChJtaWRkbGVfcmlnaHRfbW90b3IYGyABKAsy' - 'Dy5Ecml2ZU1vdG9yRGF0YVIQbWlkZGxlUmlnaHRNb3RvchI5ChBiYWNrX3JpZ2h0X21vdG9yGB' - 'wgASgLMg8uRHJpdmVNb3RvckRhdGFSDmJhY2tSaWdodE1vdG9y'); + 'IAEoCzIILlZlcnNpb25SB3ZlcnNpb24SIQoFY29sb3IYFSABKA4yCy5Qcm90b0NvbG9yUgVjb2' + 'xvchIkCgZzdGF0dXMYFiABKA4yDC5Sb3ZlclN0YXR1c1IGc3RhdHVzEjkKEGZyb250X2xlZnRf' + 'bW90b3IYFyABKAsyDy5Ecml2ZU1vdG9yRGF0YVIOZnJvbnRMZWZ0TW90b3ISOwoRbWlkZGxlX2' + 'xlZnRfbW90b3IYGCABKAsyDy5Ecml2ZU1vdG9yRGF0YVIPbWlkZGxlTGVmdE1vdG9yEjcKD2Jh' + 'Y2tfbGVmdF9tb3RvchgZIAEoCzIPLkRyaXZlTW90b3JEYXRhUg1iYWNrTGVmdE1vdG9yEjsKEW' + 'Zyb250X3JpZ2h0X21vdG9yGBogASgLMg8uRHJpdmVNb3RvckRhdGFSD2Zyb250UmlnaHRNb3Rv' + 'chI9ChJtaWRkbGVfcmlnaHRfbW90b3IYGyABKAsyDy5Ecml2ZU1vdG9yRGF0YVIQbWlkZGxlUm' + 'lnaHRNb3RvchI5ChBiYWNrX3JpZ2h0X21vdG9yGBwgASgLMg8uRHJpdmVNb3RvckRhdGFSDmJh' + 'Y2tSaWdodE1vdG9ySgQIDxAV'); From 0813649e808bb65792756cd98320c34213083951 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Mon, 9 Feb 2026 13:22:17 -0500 Subject: [PATCH 09/29] Fix GPS and IMU not connecting --- subsystems/lib/src/devices/gps.dart | 29 ++++++++++++-------- subsystems/lib/src/devices/imu.dart | 10 +++++-- subsystems/lib/src/devices/serial_utils.dart | 8 +++--- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/subsystems/lib/src/devices/gps.dart b/subsystems/lib/src/devices/gps.dart index b691fc2a..c7fb3843 100644 --- a/subsystems/lib/src/devices/gps.dart +++ b/subsystems/lib/src/devices/gps.dart @@ -11,7 +11,7 @@ const gpsPort = "/dev/rover_gps"; /// The UDP socket on the Autonomy program. final autonomySocket = SocketInfo( - address: InternetAddress("192.168.1.30"), + address: InternetAddress("192.168.1.20"), port: 8003, ); @@ -81,10 +81,7 @@ class GpsReader extends Service { if (parts[4] == "W") { longitude *= -1; } - return GpsCoordinates( - latitude: latitude, - longitude: longitude, - ); + return GpsCoordinates(latitude: latitude, longitude: longitude); } else { return null; } @@ -121,17 +118,19 @@ class GpsReader extends Service { void _handleLine(String line) { final coordinates = parseNMEA(line); if (coordinates == null) return; - if (coordinates.latitude == 0 - || coordinates.longitude == 0 - || coordinates.altitude == 0 - ) { + if (coordinates.latitude == 0 || + coordinates.longitude == 0 || + coordinates.altitude == 0) { // No fix return; } final roverPosition = RoverPosition(gps: coordinates); collection.server.sendMessage(roverPosition); collection.server.sendMessage(roverPosition, destination: autonomySocket); - collection.server.sendMessage(roverPosition, destination: baseStationSocket); + collection.server.sendMessage( + roverPosition, + destination: baseStationSocket, + ); } /// Parses a packet into several NMEA sentences and handles them. @@ -153,7 +152,10 @@ class GpsReader extends Service { } final rtkMessage = Uint8List.fromList(message.rtkMessage); - logger.trace("Writing RTK Message", body: "Writing a ${rtkMessage.lengthInBytes}-byte RTCM packet to serial"); + logger.trace( + "Writing RTK Message", + body: "Writing a ${rtkMessage.lengthInBytes}-byte RTCM packet to serial", + ); device.write(rtkMessage); } @@ -174,7 +176,10 @@ class GpsReader extends Service { logger.info("Reading GPS over port $gpsPort"); return true; } catch (error) { - logger.critical("Could not open GPS", body: "Port $gpsPort, Error=$error"); + logger.critical( + "Could not open GPS", + body: "Port $gpsPort, Error=$error", + ); return false; } } diff --git a/subsystems/lib/src/devices/imu.dart b/subsystems/lib/src/devices/imu.dart index b56e5fa9..17067146 100644 --- a/subsystems/lib/src/devices/imu.dart +++ b/subsystems/lib/src/devices/imu.dart @@ -67,7 +67,10 @@ class ImuReader extends Service { y: message.arguments[1] as double, z: message.arguments[2] as double, ); - final position = RoverPosition(orientation: orientation, version: positionVersion); + final position = RoverPosition( + orientation: orientation, + version: positionVersion, + ); collection.server.sendMessage(position); collection.server.sendMessage(position, destination: autonomySocket); } @@ -91,7 +94,10 @@ class ImuReader extends Service { logger.info("Reading IMU on port $imuPort"); return true; } catch (error) { - logger.critical("Could not open IMU", body: "Port $imuPort, Error: $error"); + logger.critical( + "Could not open IMU", + body: "Port $imuPort, Error: $error", + ); return false; } } diff --git a/subsystems/lib/src/devices/serial_utils.dart b/subsystems/lib/src/devices/serial_utils.dart index 9c63d709..66641529 100644 --- a/subsystems/lib/src/devices/serial_utils.dart +++ b/subsystems/lib/src/devices/serial_utils.dart @@ -7,15 +7,15 @@ import "package:subsystems/subsystems.dart"; /// /// Relies on the `realpath` command line tool, and must be run on Linux. Future getRealPath(String symlink) async => - (await Process.run("realpath", [symlink])).stdout.trim(); + (await Process.run("realpath", [symlink])).stdout.trim(); /// Gets all the names of all the ports. Future> getPortNames() async { final allPorts = DelegateSerialPort.allPorts.toSet(); if (!Platform.isLinux) return allPorts; - final imuPort = await getRealPath("/dev/rover-imu"); - final gpsPort = await getRealPath("/dev/rover-gps"); - final forbiddenPorts = {imuPort, gpsPort, "/dev/ttyAMA10"}; + final imuPath = await getRealPath(imuPort); + final gpsPath = await getRealPath(gpsPort); + final forbiddenPorts = {imuPath, gpsPath, "/dev/ttyAMA10"}; return allPorts.toSet().difference(forbiddenPorts); } From 79ed3e4099643b533e89f5232ac70e9006d1f538 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Mon, 9 Feb 2026 13:24:34 -0500 Subject: [PATCH 10/29] Fix realsense sending with wrong name --- video/lib/src/isolates/parent.dart | 2 +- video/lib/src/isolates/realsense.dart | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/video/lib/src/isolates/parent.dart b/video/lib/src/isolates/parent.dart index 5fd7573b..b32b2013 100644 --- a/video/lib/src/isolates/parent.dart +++ b/video/lib/src/isolates/parent.dart @@ -8,7 +8,7 @@ import "package:video/video.dart"; /// The socket to send autonomy data to. final autonomySocket = SocketInfo( - address: InternetAddress("192.168.1.30"), + address: InternetAddress("192.168.1.20"), port: 8003, ); diff --git a/video/lib/src/isolates/realsense.dart b/video/lib/src/isolates/realsense.dart index a0f363d4..df4001d6 100644 --- a/video/lib/src/isolates/realsense.dart +++ b/video/lib/src/isolates/realsense.dart @@ -103,7 +103,10 @@ class RealSenseIsolate extends CameraIsolate { if (colorizedJpg == null) { sendLog(LogLevel.debug, "Could not encode colorized frame"); } else { - sendFrame(colorizedJpg); + sendFrame( + colorizedJpg, + detailsOverride: details.deepCopy()..name = CameraName.AUTONOMY_DEPTH, + ); } colorizedImage.dispose(); From 9becb50617ef5b3241d7a4f8c1a85652546bac49 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Wed, 11 Feb 2026 13:25:43 -0500 Subject: [PATCH 11/29] Fixes from testing: 1. Apply antenna center offset to GPS readings 2. Add try catch around control data parsing 3. Fix realsense issues in video --- subsystems/lib/src/devices/firmware.dart | 17 ++++++++++------- subsystems/lib/src/devices/gps.dart | 18 +++++++++++++++++- subsystems/pubspec.yaml | 1 + video/lib/src/isolates/parent.dart | 2 +- video/lib/src/isolates/realsense.dart | 2 +- 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/subsystems/lib/src/devices/firmware.dart b/subsystems/lib/src/devices/firmware.dart index 4ca8528f..e1033f38 100644 --- a/subsystems/lib/src/devices/firmware.dart +++ b/subsystems/lib/src/devices/firmware.dart @@ -44,14 +44,17 @@ class FirmwareManager extends Service { if (!device.isReady) continue; final subscription = device.messages.listen((wrapper) { if (wrapper.name == ControlData().messageName) { - final controlData = ControlData.fromBuffer(wrapper.data); - if (controlData.hasDrive()) { - collection.server.sendMessage(controlData.drive); - } + try { + final controlData = ControlData.fromBuffer(wrapper.data); + if (controlData.hasDrive()) { + collection.server.sendMessage(controlData.drive); + } + + if (controlData.hasRelays()) { + collection.server.sendMessage(controlData.relays); + } + } catch (_) {} - if (controlData.hasRelays()) { - collection.server.sendMessage(controlData.relays); - } return; } collection.server.sendWrapper(wrapper); diff --git a/subsystems/lib/src/devices/gps.dart b/subsystems/lib/src/devices/gps.dart index c7fb3843..334d7adc 100644 --- a/subsystems/lib/src/devices/gps.dart +++ b/subsystems/lib/src/devices/gps.dart @@ -4,6 +4,7 @@ import "dart:io"; import "dart:typed_data"; import "package:burt_network/burt_network.dart"; +import "package:coordinate_converter/coordinate_converter.dart"; import "package:subsystems/subsystems.dart"; /// The port/device file to listen to the GPS on. @@ -21,6 +22,12 @@ final baseStationSocket = SocketInfo( port: 8005, ); +/// The offset of the GPS antenna's position on the rover +final Coordinates antennaOffset = Coordinates( + x: -0.18415, // 7.25 in + y: -0.20955, // 8.25 in +); + /// Listens to the GPS and sends its output to the Dashboard. /// /// Call [init] to start listening and [dispose] to stop. @@ -124,7 +131,16 @@ class GpsReader extends Service { // No fix return; } - final roverPosition = RoverPosition(gps: coordinates); + + final utmPosition = coordinates.toUTM(); + final offsetPosition = UTMCoordinates( + x: utmPosition.x + antennaOffset.x, + y: utmPosition.y + antennaOffset.y, + zoneNumber: utmPosition.zoneNumber, + ); + final roverPosition = RoverPosition( + gps: offsetPosition.toGps()..altitude = coordinates.altitude, + ); collection.server.sendMessage(roverPosition); collection.server.sendMessage(roverPosition, destination: autonomySocket); collection.server.sendMessage( diff --git a/subsystems/pubspec.yaml b/subsystems/pubspec.yaml index 463c202f..3b292336 100644 --- a/subsystems/pubspec.yaml +++ b/subsystems/pubspec.yaml @@ -12,6 +12,7 @@ dependencies: args: ^2.6.0 burt_network: ^2.7.0 collection: ^1.19.0 + coordinate_converter: ^1.2.3 csv: ^6.0.0 ffi: ^2.1.3 osc: ^1.0.0 diff --git a/video/lib/src/isolates/parent.dart b/video/lib/src/isolates/parent.dart index b32b2013..955a5468 100644 --- a/video/lib/src/isolates/parent.dart +++ b/video/lib/src/isolates/parent.dart @@ -69,7 +69,7 @@ class CameraManager extends Service { stopAll(); // Wait a bit after sending the stop command so the messages are received properly - await Future.delayed(const Duration(milliseconds: 750)); + await Future.delayed(const Duration(milliseconds: 1500)); await _commands?.cancel(); await _vision?.cancel(); diff --git a/video/lib/src/isolates/realsense.dart b/video/lib/src/isolates/realsense.dart index df4001d6..1811f583 100644 --- a/video/lib/src/isolates/realsense.dart +++ b/video/lib/src/isolates/realsense.dart @@ -64,7 +64,7 @@ class RealSenseIsolate extends CameraIsolate { frameProperties = FrameProperties.fromFrameDetails( captureWidth: camera.rgbResolution.width, captureHeight: camera.rgbResolution.height, - details: details, + details: details.deepCopy()..name = CameraName.ROVER_FRONT, ); sendLog(LogLevel.debug, "Started streaming from RealSense"); } From 99558158341ba560e83a0ce0d57e8edf868b2a1a Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Wed, 11 Feb 2026 13:50:42 -0500 Subject: [PATCH 12/29] Use IMU to calculate GPS offset based on rotation --- subsystems/lib/src/devices/gps.dart | 11 +++++++++-- subsystems/lib/src/devices/imu.dart | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/subsystems/lib/src/devices/gps.dart b/subsystems/lib/src/devices/gps.dart index 334d7adc..3663dbd3 100644 --- a/subsystems/lib/src/devices/gps.dart +++ b/subsystems/lib/src/devices/gps.dart @@ -1,6 +1,7 @@ import "dart:async"; import "dart:convert"; import "dart:io"; +import "dart:math"; import "dart:typed_data"; import "package:burt_network/burt_network.dart"; @@ -132,10 +133,16 @@ class GpsReader extends Service { return; } + final imuAngle = (collection.imu.lastValue.z + 90) * pi / 180; + final xOffset = + antennaOffset.x * cos(imuAngle) - antennaOffset.y * sin(imuAngle); + final yOffset = + antennaOffset.x * sin(imuAngle) + antennaOffset.y * cos(imuAngle); + final utmPosition = coordinates.toUTM(); final offsetPosition = UTMCoordinates( - x: utmPosition.x + antennaOffset.x, - y: utmPosition.y + antennaOffset.y, + x: utmPosition.x + xOffset, + y: utmPosition.y + yOffset, zoneNumber: utmPosition.zoneNumber, ); final roverPosition = RoverPosition( diff --git a/subsystems/lib/src/devices/imu.dart b/subsystems/lib/src/devices/imu.dart index 17067146..7da69346 100644 --- a/subsystems/lib/src/devices/imu.dart +++ b/subsystems/lib/src/devices/imu.dart @@ -30,6 +30,9 @@ class ImuReader extends Service { /// Whether or not the IMU is connected bool get isConnected => serial.isOpen; + /// The last received reading from the IMU + Orientation lastValue = Orientation(); + /// The subscription that will be notified when a new serial packet arrives. StreamSubscription>? subscription; StreamSubscription? _commandSubscription; @@ -67,6 +70,7 @@ class ImuReader extends Service { y: message.arguments[1] as double, z: message.arguments[2] as double, ); + lastValue = orientation; final position = RoverPosition( orientation: orientation, version: positionVersion, @@ -107,5 +111,6 @@ class ImuReader extends Service { await subscription?.cancel(); await _commandSubscription?.cancel(); await serial.dispose(); + lastValue = Orientation(); } } From bcca57ef8deebe542240bc7be1a633f79df0b538 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Tue, 17 Feb 2026 12:25:22 -0500 Subject: [PATCH 13/29] Regen protobuf --- burt_network/Protobuf | 2 +- burt_network/lib/src/generated/relays.pb.dart | 104 +++++++----------- .../lib/src/generated/relays.pbjson.dart | 50 +++++---- .../lib/src/generated/vision.pbenum.dart | 5 +- .../lib/src/generated/vision.pbjson.dart | 3 +- 5 files changed, 70 insertions(+), 94 deletions(-) diff --git a/burt_network/Protobuf b/burt_network/Protobuf index ab8ebd21..7712146d 160000 --- a/burt_network/Protobuf +++ b/burt_network/Protobuf @@ -1 +1 @@ -Subproject commit ab8ebd21ac0da710d1f9e5c26d1857e27bd7ba3c +Subproject commit 7712146d0300d3b7a12e1fe5723475c2e01e91ad diff --git a/burt_network/lib/src/generated/relays.pb.dart b/burt_network/lib/src/generated/relays.pb.dart index 753d4071..997117d1 100644 --- a/burt_network/lib/src/generated/relays.pb.dart +++ b/burt_network/lib/src/generated/relays.pb.dart @@ -26,11 +26,10 @@ class RelaysCommand extends $pb.GeneratedMessage { $1.BoolState? backRightMotor, $1.BoolState? frontLeftMotor, $1.BoolState? frontRightMotor, - $1.BoolState? leftDampeningMotor, - $1.BoolState? rightDampeningMotor, + $1.BoolState? middleLeftMotor, + $1.BoolState? middleRightMotor, $1.BoolState? arm, $1.BoolState? science, - $1.BoolState? drive, $1.BoolState? bypass, }) { final result = create(); @@ -39,13 +38,10 @@ class RelaysCommand extends $pb.GeneratedMessage { if (backRightMotor != null) result.backRightMotor = backRightMotor; if (frontLeftMotor != null) result.frontLeftMotor = frontLeftMotor; if (frontRightMotor != null) result.frontRightMotor = frontRightMotor; - if (leftDampeningMotor != null) - result.leftDampeningMotor = leftDampeningMotor; - if (rightDampeningMotor != null) - result.rightDampeningMotor = rightDampeningMotor; + if (middleLeftMotor != null) result.middleLeftMotor = middleLeftMotor; + if (middleRightMotor != null) result.middleRightMotor = middleRightMotor; if (arm != null) result.arm = arm; if (science != null) result.science = science; - if (drive != null) result.drive = drive; if (bypass != null) result.bypass = bypass; return result; } @@ -72,16 +68,14 @@ class RelaysCommand extends $pb.GeneratedMessage { enumValues: $1.BoolState.values) ..aE<$1.BoolState>(5, _omitFieldNames ? '' : 'frontRightMotor', enumValues: $1.BoolState.values) - ..aE<$1.BoolState>(6, _omitFieldNames ? '' : 'leftDampeningMotor', + ..aE<$1.BoolState>(6, _omitFieldNames ? '' : 'middleLeftMotor', enumValues: $1.BoolState.values) - ..aE<$1.BoolState>(7, _omitFieldNames ? '' : 'rightDampeningMotor', + ..aE<$1.BoolState>(7, _omitFieldNames ? '' : 'middleRightMotor', enumValues: $1.BoolState.values) ..aE<$1.BoolState>(8, _omitFieldNames ? '' : 'arm', enumValues: $1.BoolState.values) ..aE<$1.BoolState>(9, _omitFieldNames ? '' : 'science', enumValues: $1.BoolState.values) - ..aE<$1.BoolState>(10, _omitFieldNames ? '' : 'drive', - enumValues: $1.BoolState.values) ..aE<$1.BoolState>(11, _omitFieldNames ? '' : 'bypass', enumValues: $1.BoolState.values) ..hasRequiredFields = false; @@ -154,22 +148,22 @@ class RelaysCommand extends $pb.GeneratedMessage { void clearFrontRightMotor() => $_clearField(5); @$pb.TagNumber(6) - $1.BoolState get leftDampeningMotor => $_getN(5); + $1.BoolState get middleLeftMotor => $_getN(5); @$pb.TagNumber(6) - set leftDampeningMotor($1.BoolState value) => $_setField(6, value); + set middleLeftMotor($1.BoolState value) => $_setField(6, value); @$pb.TagNumber(6) - $core.bool hasLeftDampeningMotor() => $_has(5); + $core.bool hasMiddleLeftMotor() => $_has(5); @$pb.TagNumber(6) - void clearLeftDampeningMotor() => $_clearField(6); + void clearMiddleLeftMotor() => $_clearField(6); @$pb.TagNumber(7) - $1.BoolState get rightDampeningMotor => $_getN(6); + $1.BoolState get middleRightMotor => $_getN(6); @$pb.TagNumber(7) - set rightDampeningMotor($1.BoolState value) => $_setField(7, value); + set middleRightMotor($1.BoolState value) => $_setField(7, value); @$pb.TagNumber(7) - $core.bool hasRightDampeningMotor() => $_has(6); + $core.bool hasMiddleRightMotor() => $_has(6); @$pb.TagNumber(7) - void clearRightDampeningMotor() => $_clearField(7); + void clearMiddleRightMotor() => $_clearField(7); @$pb.TagNumber(8) $1.BoolState get arm => $_getN(7); @@ -189,22 +183,13 @@ class RelaysCommand extends $pb.GeneratedMessage { @$pb.TagNumber(9) void clearScience() => $_clearField(9); - @$pb.TagNumber(10) - $1.BoolState get drive => $_getN(9); - @$pb.TagNumber(10) - set drive($1.BoolState value) => $_setField(10, value); - @$pb.TagNumber(10) - $core.bool hasDrive() => $_has(9); - @$pb.TagNumber(10) - void clearDrive() => $_clearField(10); - /// Special commands @$pb.TagNumber(11) - $1.BoolState get bypass => $_getN(10); + $1.BoolState get bypass => $_getN(9); @$pb.TagNumber(11) set bypass($1.BoolState value) => $_setField(11, value); @$pb.TagNumber(11) - $core.bool hasBypass() => $_has(10); + $core.bool hasBypass() => $_has(9); @$pb.TagNumber(11) void clearBypass() => $_clearField(11); } @@ -216,11 +201,10 @@ class RelaysData extends $pb.GeneratedMessage { $1.BoolState? backRightMotor, $1.BoolState? frontLeftMotor, $1.BoolState? frontRightMotor, - $1.BoolState? leftDampeningMotor, - $1.BoolState? rightDampeningMotor, + $1.BoolState? middleLeftMotor, + $1.BoolState? middleRightMotor, $1.BoolState? arm, $1.BoolState? science, - $1.BoolState? drive, $1.BoolState? bypass, $1.BoolState? mechanicalOverride, $core.double? batteryVoltage, @@ -231,13 +215,10 @@ class RelaysData extends $pb.GeneratedMessage { if (backRightMotor != null) result.backRightMotor = backRightMotor; if (frontLeftMotor != null) result.frontLeftMotor = frontLeftMotor; if (frontRightMotor != null) result.frontRightMotor = frontRightMotor; - if (leftDampeningMotor != null) - result.leftDampeningMotor = leftDampeningMotor; - if (rightDampeningMotor != null) - result.rightDampeningMotor = rightDampeningMotor; + if (middleLeftMotor != null) result.middleLeftMotor = middleLeftMotor; + if (middleRightMotor != null) result.middleRightMotor = middleRightMotor; if (arm != null) result.arm = arm; if (science != null) result.science = science; - if (drive != null) result.drive = drive; if (bypass != null) result.bypass = bypass; if (mechanicalOverride != null) result.mechanicalOverride = mechanicalOverride; @@ -267,16 +248,14 @@ class RelaysData extends $pb.GeneratedMessage { enumValues: $1.BoolState.values) ..aE<$1.BoolState>(5, _omitFieldNames ? '' : 'frontRightMotor', enumValues: $1.BoolState.values) - ..aE<$1.BoolState>(6, _omitFieldNames ? '' : 'leftDampeningMotor', + ..aE<$1.BoolState>(6, _omitFieldNames ? '' : 'middleLeftMotor', enumValues: $1.BoolState.values) - ..aE<$1.BoolState>(7, _omitFieldNames ? '' : 'rightDampeningMotor', + ..aE<$1.BoolState>(7, _omitFieldNames ? '' : 'middleRightMotor', enumValues: $1.BoolState.values) ..aE<$1.BoolState>(8, _omitFieldNames ? '' : 'arm', enumValues: $1.BoolState.values) ..aE<$1.BoolState>(9, _omitFieldNames ? '' : 'science', enumValues: $1.BoolState.values) - ..aE<$1.BoolState>(10, _omitFieldNames ? '' : 'drive', - enumValues: $1.BoolState.values) ..aE<$1.BoolState>(11, _omitFieldNames ? '' : 'bypass', enumValues: $1.BoolState.values) ..aE<$1.BoolState>(12, _omitFieldNames ? '' : 'mechanicalOverride', @@ -352,22 +331,22 @@ class RelaysData extends $pb.GeneratedMessage { void clearFrontRightMotor() => $_clearField(5); @$pb.TagNumber(6) - $1.BoolState get leftDampeningMotor => $_getN(5); + $1.BoolState get middleLeftMotor => $_getN(5); @$pb.TagNumber(6) - set leftDampeningMotor($1.BoolState value) => $_setField(6, value); + set middleLeftMotor($1.BoolState value) => $_setField(6, value); @$pb.TagNumber(6) - $core.bool hasLeftDampeningMotor() => $_has(5); + $core.bool hasMiddleLeftMotor() => $_has(5); @$pb.TagNumber(6) - void clearLeftDampeningMotor() => $_clearField(6); + void clearMiddleLeftMotor() => $_clearField(6); @$pb.TagNumber(7) - $1.BoolState get rightDampeningMotor => $_getN(6); + $1.BoolState get middleRightMotor => $_getN(6); @$pb.TagNumber(7) - set rightDampeningMotor($1.BoolState value) => $_setField(7, value); + set middleRightMotor($1.BoolState value) => $_setField(7, value); @$pb.TagNumber(7) - $core.bool hasRightDampeningMotor() => $_has(6); + $core.bool hasMiddleRightMotor() => $_has(6); @$pb.TagNumber(7) - void clearRightDampeningMotor() => $_clearField(7); + void clearMiddleRightMotor() => $_clearField(7); @$pb.TagNumber(8) $1.BoolState get arm => $_getN(7); @@ -387,40 +366,31 @@ class RelaysData extends $pb.GeneratedMessage { @$pb.TagNumber(9) void clearScience() => $_clearField(9); - @$pb.TagNumber(10) - $1.BoolState get drive => $_getN(9); - @$pb.TagNumber(10) - set drive($1.BoolState value) => $_setField(10, value); - @$pb.TagNumber(10) - $core.bool hasDrive() => $_has(9); - @$pb.TagNumber(10) - void clearDrive() => $_clearField(10); - @$pb.TagNumber(11) - $1.BoolState get bypass => $_getN(10); + $1.BoolState get bypass => $_getN(9); @$pb.TagNumber(11) set bypass($1.BoolState value) => $_setField(11, value); @$pb.TagNumber(11) - $core.bool hasBypass() => $_has(10); + $core.bool hasBypass() => $_has(9); @$pb.TagNumber(11) void clearBypass() => $_clearField(11); @$pb.TagNumber(12) - $1.BoolState get mechanicalOverride => $_getN(11); + $1.BoolState get mechanicalOverride => $_getN(10); @$pb.TagNumber(12) set mechanicalOverride($1.BoolState value) => $_setField(12, value); @$pb.TagNumber(12) - $core.bool hasMechanicalOverride() => $_has(11); + $core.bool hasMechanicalOverride() => $_has(10); @$pb.TagNumber(12) void clearMechanicalOverride() => $_clearField(12); /// Special data @$pb.TagNumber(13) - $core.double get batteryVoltage => $_getN(12); + $core.double get batteryVoltage => $_getN(11); @$pb.TagNumber(13) - set batteryVoltage($core.double value) => $_setFloat(12, value); + set batteryVoltage($core.double value) => $_setFloat(11, value); @$pb.TagNumber(13) - $core.bool hasBatteryVoltage() => $_has(12); + $core.bool hasBatteryVoltage() => $_has(11); @$pb.TagNumber(13) void clearBatteryVoltage() => $_clearField(13); } diff --git a/burt_network/lib/src/generated/relays.pbjson.dart b/burt_network/lib/src/generated/relays.pbjson.dart index 9cf4a800..7b3575b4 100644 --- a/burt_network/lib/src/generated/relays.pbjson.dart +++ b/burt_network/lib/src/generated/relays.pbjson.dart @@ -53,20 +53,20 @@ const RelaysCommand$json = { '10': 'frontRightMotor' }, { - '1': 'left_dampening_motor', + '1': 'middle_left_motor', '3': 6, '4': 1, '5': 14, '6': '.BoolState', - '10': 'leftDampeningMotor' + '10': 'middleLeftMotor' }, { - '1': 'right_dampening_motor', + '1': 'middle_right_motor', '3': 7, '4': 1, '5': 14, '6': '.BoolState', - '10': 'rightDampeningMotor' + '10': 'middleRightMotor' }, {'1': 'arm', '3': 8, '4': 1, '5': 14, '6': '.BoolState', '10': 'arm'}, { @@ -77,7 +77,6 @@ const RelaysCommand$json = { '6': '.BoolState', '10': 'science' }, - {'1': 'drive', '3': 10, '4': 1, '5': 14, '6': '.BoolState', '10': 'drive'}, { '1': 'bypass', '3': 11, @@ -87,6 +86,9 @@ const RelaysCommand$json = { '10': 'bypass' }, ], + '9': [ + {'1': 10, '2': 11}, + ], }; /// Descriptor for `RelaysCommand`. Decode as a `google.protobuf.DescriptorProto`. @@ -95,12 +97,11 @@ final $typed_data.Uint8List relaysCommandDescriptor = $convert.base64Decode( 'JhY2tfbGVmdF9tb3RvchgCIAEoDjIKLkJvb2xTdGF0ZVINYmFja0xlZnRNb3RvchI0ChBiYWNr' 'X3JpZ2h0X21vdG9yGAMgASgOMgouQm9vbFN0YXRlUg5iYWNrUmlnaHRNb3RvchI0ChBmcm9udF' '9sZWZ0X21vdG9yGAQgASgOMgouQm9vbFN0YXRlUg5mcm9udExlZnRNb3RvchI2ChFmcm9udF9y' - 'aWdodF9tb3RvchgFIAEoDjIKLkJvb2xTdGF0ZVIPZnJvbnRSaWdodE1vdG9yEjwKFGxlZnRfZG' - 'FtcGVuaW5nX21vdG9yGAYgASgOMgouQm9vbFN0YXRlUhJsZWZ0RGFtcGVuaW5nTW90b3ISPgoV' - 'cmlnaHRfZGFtcGVuaW5nX21vdG9yGAcgASgOMgouQm9vbFN0YXRlUhNyaWdodERhbXBlbmluZ0' - '1vdG9yEhwKA2FybRgIIAEoDjIKLkJvb2xTdGF0ZVIDYXJtEiQKB3NjaWVuY2UYCSABKA4yCi5C' - 'b29sU3RhdGVSB3NjaWVuY2USIAoFZHJpdmUYCiABKA4yCi5Cb29sU3RhdGVSBWRyaXZlEiIKBm' - 'J5cGFzcxgLIAEoDjIKLkJvb2xTdGF0ZVIGYnlwYXNz'); + 'aWdodF9tb3RvchgFIAEoDjIKLkJvb2xTdGF0ZVIPZnJvbnRSaWdodE1vdG9yEjYKEW1pZGRsZV' + '9sZWZ0X21vdG9yGAYgASgOMgouQm9vbFN0YXRlUg9taWRkbGVMZWZ0TW90b3ISOAoSbWlkZGxl' + 'X3JpZ2h0X21vdG9yGAcgASgOMgouQm9vbFN0YXRlUhBtaWRkbGVSaWdodE1vdG9yEhwKA2FybR' + 'gIIAEoDjIKLkJvb2xTdGF0ZVIDYXJtEiQKB3NjaWVuY2UYCSABKA4yCi5Cb29sU3RhdGVSB3Nj' + 'aWVuY2USIgoGYnlwYXNzGAsgASgOMgouQm9vbFN0YXRlUgZieXBhc3NKBAgKEAs='); @$core.Deprecated('Use relaysDataDescriptor instead') const RelaysData$json = { @@ -140,20 +141,20 @@ const RelaysData$json = { '10': 'frontRightMotor' }, { - '1': 'left_dampening_motor', + '1': 'middle_left_motor', '3': 6, '4': 1, '5': 14, '6': '.BoolState', - '10': 'leftDampeningMotor' + '10': 'middleLeftMotor' }, { - '1': 'right_dampening_motor', + '1': 'middle_right_motor', '3': 7, '4': 1, '5': 14, '6': '.BoolState', - '10': 'rightDampeningMotor' + '10': 'middleRightMotor' }, {'1': 'arm', '3': 8, '4': 1, '5': 14, '6': '.BoolState', '10': 'arm'}, { @@ -164,7 +165,6 @@ const RelaysData$json = { '6': '.BoolState', '10': 'science' }, - {'1': 'drive', '3': 10, '4': 1, '5': 14, '6': '.BoolState', '10': 'drive'}, {'1': 'battery_voltage', '3': 13, '4': 1, '5': 2, '10': 'batteryVoltage'}, { '1': 'bypass', @@ -183,6 +183,9 @@ const RelaysData$json = { '10': 'mechanicalOverride' }, ], + '9': [ + {'1': 10, '2': 11}, + ], }; /// Descriptor for `RelaysData`. Decode as a `google.protobuf.DescriptorProto`. @@ -191,11 +194,10 @@ final $typed_data.Uint8List relaysDataDescriptor = $convert.base64Decode( 'tfbGVmdF9tb3RvchgCIAEoDjIKLkJvb2xTdGF0ZVINYmFja0xlZnRNb3RvchI0ChBiYWNrX3Jp' 'Z2h0X21vdG9yGAMgASgOMgouQm9vbFN0YXRlUg5iYWNrUmlnaHRNb3RvchI0ChBmcm9udF9sZW' 'Z0X21vdG9yGAQgASgOMgouQm9vbFN0YXRlUg5mcm9udExlZnRNb3RvchI2ChFmcm9udF9yaWdo' - 'dF9tb3RvchgFIAEoDjIKLkJvb2xTdGF0ZVIPZnJvbnRSaWdodE1vdG9yEjwKFGxlZnRfZGFtcG' - 'VuaW5nX21vdG9yGAYgASgOMgouQm9vbFN0YXRlUhJsZWZ0RGFtcGVuaW5nTW90b3ISPgoVcmln' - 'aHRfZGFtcGVuaW5nX21vdG9yGAcgASgOMgouQm9vbFN0YXRlUhNyaWdodERhbXBlbmluZ01vdG' - '9yEhwKA2FybRgIIAEoDjIKLkJvb2xTdGF0ZVIDYXJtEiQKB3NjaWVuY2UYCSABKA4yCi5Cb29s' - 'U3RhdGVSB3NjaWVuY2USIAoFZHJpdmUYCiABKA4yCi5Cb29sU3RhdGVSBWRyaXZlEicKD2JhdH' - 'Rlcnlfdm9sdGFnZRgNIAEoAlIOYmF0dGVyeVZvbHRhZ2USIgoGYnlwYXNzGAsgASgOMgouQm9v' - 'bFN0YXRlUgZieXBhc3MSOwoTbWVjaGFuaWNhbF9vdmVycmlkZRgMIAEoDjIKLkJvb2xTdGF0ZV' - 'ISbWVjaGFuaWNhbE92ZXJyaWRl'); + 'dF9tb3RvchgFIAEoDjIKLkJvb2xTdGF0ZVIPZnJvbnRSaWdodE1vdG9yEjYKEW1pZGRsZV9sZW' + 'Z0X21vdG9yGAYgASgOMgouQm9vbFN0YXRlUg9taWRkbGVMZWZ0TW90b3ISOAoSbWlkZGxlX3Jp' + 'Z2h0X21vdG9yGAcgASgOMgouQm9vbFN0YXRlUhBtaWRkbGVSaWdodE1vdG9yEhwKA2FybRgIIA' + 'EoDjIKLkJvb2xTdGF0ZVIDYXJtEiQKB3NjaWVuY2UYCSABKA4yCi5Cb29sU3RhdGVSB3NjaWVu' + 'Y2USJwoPYmF0dGVyeV92b2x0YWdlGA0gASgCUg5iYXR0ZXJ5Vm9sdGFnZRIiCgZieXBhc3MYCy' + 'ABKA4yCi5Cb29sU3RhdGVSBmJ5cGFzcxI7ChNtZWNoYW5pY2FsX292ZXJyaWRlGAwgASgOMgou' + 'Qm9vbFN0YXRlUhJtZWNoYW5pY2FsT3ZlcnJpZGVKBAgKEAs='); diff --git a/burt_network/lib/src/generated/vision.pbenum.dart b/burt_network/lib/src/generated/vision.pbenum.dart index 4e27f90f..1a50687c 100644 --- a/burt_network/lib/src/generated/vision.pbenum.dart +++ b/burt_network/lib/src/generated/vision.pbenum.dart @@ -23,16 +23,19 @@ class DetectedObjectType extends $pb.ProtobufEnum { DetectedObjectType._(2, _omitEnumNames ? '' : 'HAMMER'); static const DetectedObjectType BOTTLE = DetectedObjectType._(3, _omitEnumNames ? '' : 'BOTTLE'); + static const DetectedObjectType ROCK_HAMMER = + DetectedObjectType._(4, _omitEnumNames ? '' : 'ROCK_HAMMER'); static const $core.List values = [ DETECTION_TYPE_UNDEFINED, ARUCO, HAMMER, BOTTLE, + ROCK_HAMMER, ]; static final $core.List _byValue = - $pb.ProtobufEnum.$_initByValueList(values, 3); + $pb.ProtobufEnum.$_initByValueList(values, 4); static DetectedObjectType? valueOf($core.int value) => value < 0 || value >= _byValue.length ? null : _byValue[value]; diff --git a/burt_network/lib/src/generated/vision.pbjson.dart b/burt_network/lib/src/generated/vision.pbjson.dart index 62b88933..1d2ca60c 100644 --- a/burt_network/lib/src/generated/vision.pbjson.dart +++ b/burt_network/lib/src/generated/vision.pbjson.dart @@ -23,13 +23,14 @@ const DetectedObjectType$json = { {'1': 'ARUCO', '2': 1}, {'1': 'HAMMER', '2': 2}, {'1': 'BOTTLE', '2': 3}, + {'1': 'ROCK_HAMMER', '2': 4}, ], }; /// Descriptor for `DetectedObjectType`. Decode as a `google.protobuf.EnumDescriptorProto`. final $typed_data.Uint8List detectedObjectTypeDescriptor = $convert.base64Decode( 'ChJEZXRlY3RlZE9iamVjdFR5cGUSHAoYREVURUNUSU9OX1RZUEVfVU5ERUZJTkVEEAASCQoFQV' - 'JVQ08QARIKCgZIQU1NRVIQAhIKCgZCT1RUTEUQAw=='); + 'JVQ08QARIKCgZIQU1NRVIQAhIKCgZCT1RUTEUQAxIPCgtST0NLX0hBTU1FUhAE'); @$core.Deprecated('Use pnpResultDescriptor instead') const PnpResult$json = { From 60c69aeac58be2dcc1f0db8d1e512bc27ed24ddb Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Wed, 18 Feb 2026 12:48:25 -0500 Subject: [PATCH 14/29] Add arm auxillary subsystems program --- subsystems/bin/arm_auxillary.dart | 20 +++++++++++++ subsystems/bin/subsystems.dart | 47 ++++++++++++++++++++++++++++++- subsystems/lib/subsystems.dart | 41 ++++++++++++++++++++++----- 3 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 subsystems/bin/arm_auxillary.dart diff --git a/subsystems/bin/arm_auxillary.dart b/subsystems/bin/arm_auxillary.dart new file mode 100644 index 00000000..17d77990 --- /dev/null +++ b/subsystems/bin/arm_auxillary.dart @@ -0,0 +1,20 @@ +import "dart:io"; + +import "package:burt_network/udp.dart"; +import "package:subsystems/subsystems.dart"; +import "package:burt_network/logging.dart"; + +void main() async { + Logger.level = LogLevel.trace; + if (!await collection.init( + port: 8010, + useGps: false, + useImu: false, + destination: SocketInfo( + address: InternetAddress("192.168.1.20"), + port: 8001, + ), + )) { + await collection.dispose(); + } +} diff --git a/subsystems/bin/subsystems.dart b/subsystems/bin/subsystems.dart index 0ca44d56..edb47c8d 100644 --- a/subsystems/bin/subsystems.dart +++ b/subsystems/bin/subsystems.dart @@ -1,7 +1,52 @@ +import "dart:async"; +import "dart:io"; + +import "package:burt_network/burt_network.dart"; import "package:subsystems/subsystems.dart"; -import "package:burt_network/logging.dart"; + +/// Extra service to forward science data and commands to/from the auxillary board +class ScienceForwardService extends Service { + StreamSubscription? _commandSubscription; + StreamSubscription? _dataSubscription; + + @override + Future init() async { + _commandSubscription = collection.server.messages.onMessage( + name: ScienceCommand().messageName, + constructor: ScienceCommand.fromBuffer, + callback: (command) => collection.server.sendMessage( + command, + destination: SocketInfo( + address: InternetAddress("192.168.1.60"), + port: 8010, + ), + ), + ); + _dataSubscription = collection.server.messages.onMessage( + name: ScienceData().messageName, + constructor: (data) { + try { + return ScienceData.fromBuffer(data); + } catch (_) { + return ScienceData(); + } + }, + callback: (data) => collection.server.sendMessage(data), + ); + return true; + } + + @override + Future dispose() async { + await _commandSubscription?.cancel(); + await _dataSubscription?.cancel(); + _commandSubscription = null; + _dataSubscription = null; + } +} void main() async { Logger.level = LogLevel.trace; + collection.extraServices.add(ScienceForwardService()); if (!await collection.init()) await collection.dispose(); } diff --git a/subsystems/lib/subsystems.dart b/subsystems/lib/subsystems.dart index ce023b35..aae0a98a 100644 --- a/subsystems/lib/subsystems.dart +++ b/subsystems/lib/subsystems.dart @@ -25,7 +25,7 @@ class SubsystemsCollection extends Service { final firmware = FirmwareManager(); /// The UDP server. - late final server = RoverSocket(port: 8001, collection: this, device: Device.SUBSYSTEMS); + late final RoverSocket server; /// The GPS reader. final gps = GpsReader(); @@ -33,11 +33,26 @@ class SubsystemsCollection extends Service { /// The IMU reader. final imu = ImuReader(); + /// Extra services added on to the program, runtime specific + final List extraServices = []; + /// Timer for sending the subsystems status Timer? dataSendTimer; @override - Future init() async { + Future init({ + int port = 8001, + bool useGps = true, + bool useImu = true, + SocketInfo? destination, + }) async { + server = RoverSocket( + port: port, + collection: this, + device: Device.SUBSYSTEMS, + destination: destination, + keepDestination: destination != null, + ); await server.init(); logger.socket = server; var result = true; @@ -47,17 +62,23 @@ class SubsystemsCollection extends Service { ); try { result &= await firmware.init(); - result &= await gps.init(); - result &= await imu.init(); + if (useGps) result &= await gps.init(); + if (useImu) result &= await imu.init(); + for (final service in extraServices) { + result &= await service.init(); + } if (result) { logger.info("Subsystems initialized"); } else { logger.warning("The subsystems did not start properly"); } isReady = true; - return true; // The subsystems should keep running even when something goes wrong. + return true; // The subsystems should keep running even when something goes wrong. } catch (error) { - logger.critical("Unexpected error when initializing Subsystems", body: error.toString()); + logger.critical( + "Unexpected error when initializing Subsystems", + body: error.toString(), + ); return false; } } @@ -70,6 +91,9 @@ class SubsystemsCollection extends Service { await firmware.dispose(); await imu.dispose(); await gps.dispose(); + for (final service in extraServices) { + await service.dispose(); + } await server.dispose(); dataSendTimer?.cancel(); logger.socket = null; @@ -79,6 +103,9 @@ class SubsystemsCollection extends Service { @override Future onDisconnect() async { await super.onDisconnect(); + for (final service in extraServices) { + await service.onDisconnect(); + } logger.info("Stopping all hardware"); final stopDrive = DriveCommand(throttle: 0, setThrottle: true); final stopArm = ArmCommand(stop: true); @@ -87,7 +114,7 @@ class SubsystemsCollection extends Service { firmware.sendMessage(stopArm); firmware.sendMessage(stopScience); } - + /// Sends a [SubsystemsData] message over the network reporting the current status of subsystems void sendStatus([_]) { server.sendMessage( From 99ae15f431936f0ab1bdfe9b14d8dab232b01ea7 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Wed, 18 Feb 2026 12:59:13 -0500 Subject: [PATCH 15/29] Fix crash when restarting --- subsystems/bin/arm_auxillary.dart | 14 +++++---- subsystems/lib/subsystems.dart | 52 +++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/subsystems/bin/arm_auxillary.dart b/subsystems/bin/arm_auxillary.dart index 17d77990..6338678e 100644 --- a/subsystems/bin/arm_auxillary.dart +++ b/subsystems/bin/arm_auxillary.dart @@ -7,12 +7,14 @@ import "package:burt_network/logging.dart"; void main() async { Logger.level = LogLevel.trace; if (!await collection.init( - port: 8010, - useGps: false, - useImu: false, - destination: SocketInfo( - address: InternetAddress("192.168.1.20"), - port: 8001, + config: SubsystemsConfig( + port: 8010, + useGps: false, + useImu: false, + destination: SocketInfo( + address: InternetAddress("192.168.1.20"), + port: 8001, + ), ), )) { await collection.dispose(); diff --git a/subsystems/lib/subsystems.dart b/subsystems/lib/subsystems.dart index aae0a98a..43d17d21 100644 --- a/subsystems/lib/subsystems.dart +++ b/subsystems/lib/subsystems.dart @@ -16,6 +16,29 @@ export "src/can/socket_ffi.dart"; export "src/can/socket_interface.dart"; export "src/can/socket_stub.dart"; +/// Configuration for the subsystems program +class SubsystemsConfig { + /// The port to host the socket on + final int port; + + /// Whether or not to use the GPS + final bool useGps; + + /// Whether or not to use the IMU + final bool useImu; + + /// The default destination for the server + final SocketInfo? destination; + + /// Const constructor for [SubsystemsConfig] + const SubsystemsConfig({ + this.port = 8001, + this.useGps = true, + this.useImu = true, + this.destination, + }); +} + /// Contains all the resources needed by the subsystems program. class SubsystemsCollection extends Service { /// Whether the subsystems is fully initialized. @@ -36,23 +59,26 @@ class SubsystemsCollection extends Service { /// Extra services added on to the program, runtime specific final List extraServices = []; + /// Internal configuration (the one used when init was first called) + SubsystemsConfig? _config; + /// Timer for sending the subsystems status Timer? dataSendTimer; @override Future init({ - int port = 8001, - bool useGps = true, - bool useImu = true, - SocketInfo? destination, + SubsystemsConfig config = const SubsystemsConfig(), }) async { - server = RoverSocket( - port: port, - collection: this, - device: Device.SUBSYSTEMS, - destination: destination, - keepDestination: destination != null, - ); + if (_config == null) { + _config = config; + server = RoverSocket( + port: _config!.port, + collection: this, + device: Device.SUBSYSTEMS, + destination: _config!.destination, + keepDestination: _config!.destination != null, + ); + } await server.init(); logger.socket = server; var result = true; @@ -62,8 +88,8 @@ class SubsystemsCollection extends Service { ); try { result &= await firmware.init(); - if (useGps) result &= await gps.init(); - if (useImu) result &= await imu.init(); + if (_config!.useGps) result &= await gps.init(); + if (_config!.useImu) result &= await imu.init(); for (final service in extraServices) { result &= await service.init(); } From 06b910241f4ee177eb07dcdb646be1d358512eb5 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Wed, 18 Feb 2026 13:24:56 -0500 Subject: [PATCH 16/29] Filter out all rover paths in getPortNames() --- subsystems/lib/src/devices/serial_utils.dart | 24 +++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/subsystems/lib/src/devices/serial_utils.dart b/subsystems/lib/src/devices/serial_utils.dart index 66641529..9fc08b8b 100644 --- a/subsystems/lib/src/devices/serial_utils.dart +++ b/subsystems/lib/src/devices/serial_utils.dart @@ -9,13 +9,31 @@ import "package:subsystems/subsystems.dart"; Future getRealPath(String symlink) async => (await Process.run("realpath", [symlink])).stdout.trim(); +/// Gets a list of all /dev/rover_ paths +Future> getRoverPaths() async { + final devDir = Directory("/dev"); + const prefix = "/dev/rover_"; + + final output = []; + + await for (final entity in devDir.list()) { + if (entity.path.startsWith(prefix)) { + output.add(entity.path); + } + } + return output; +} + /// Gets all the names of all the ports. Future> getPortNames() async { final allPorts = DelegateSerialPort.allPorts.toSet(); if (!Platform.isLinux) return allPorts; - final imuPath = await getRealPath(imuPort); - final gpsPath = await getRealPath(gpsPort); - final forbiddenPorts = {imuPath, gpsPath, "/dev/ttyAMA10"}; + + final forbiddenPorts = {"/dev/ttyAMA10"}; + final roverPaths = await getRoverPaths(); + for (final path in roverPaths) { + forbiddenPorts.add(await getRealPath(path)); + } return allPorts.toSet().difference(forbiddenPorts); } From 7bcda7a939691cd1f3fefbfb52d6e0e926e31d67 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 13:05:42 -0500 Subject: [PATCH 17/29] Don't remove destination if keepDestination is true --- burt_network/lib/src/udp/burt_socket.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/burt_network/lib/src/udp/burt_socket.dart b/burt_network/lib/src/udp/burt_socket.dart index 3520a008..4ca8cbda 100644 --- a/burt_network/lib/src/udp/burt_socket.dart +++ b/burt_network/lib/src/udp/burt_socket.dart @@ -166,7 +166,9 @@ abstract class BurtSocket extends UdpSocket { Future onDisconnect() async { logger.info("Port $port is disconnected from $destination"); sendMessage(Disconnect(sender: device)); - destination = null; + if (!keepDestination) { + destination = null; + } await collection?.onDisconnect(); await super.onDisconnect(); } From 49fc13efe4a90610ae851c6f5abd4238a379857f Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 13:13:22 -0500 Subject: [PATCH 18/29] Don't assume connected if keepDestination is true --- burt_network/lib/src/udp/rover_heartbeats.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/burt_network/lib/src/udp/rover_heartbeats.dart b/burt_network/lib/src/udp/rover_heartbeats.dart index 63fdcda9..46bb9bb4 100644 --- a/burt_network/lib/src/udp/rover_heartbeats.dart +++ b/burt_network/lib/src/udp/rover_heartbeats.dart @@ -10,7 +10,7 @@ mixin RoverHeartbeats on BurtSocket { bool didReceivedHeartbeat = false; @override - bool get isConnected => destination != null; + bool get isConnected => destination != null && !keepDestination; @override Duration get heartbeatInterval => const Duration(seconds: 2); From 88dc12a4c972593056cdd076443566743aa39781 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 14:08:16 -0500 Subject: [PATCH 19/29] Added arm auxillary video program --- video/bin/arm_auxillary.dart | 19 ++++++++++++ video/bin/video.dart | 36 ++++++++++++++++++++++ video/lib/src/collection.dart | 57 +++++++++++++++++++++++++++++------ 3 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 video/bin/arm_auxillary.dart diff --git a/video/bin/arm_auxillary.dart b/video/bin/arm_auxillary.dart new file mode 100644 index 00000000..66ad8f7f --- /dev/null +++ b/video/bin/arm_auxillary.dart @@ -0,0 +1,19 @@ +import "dart:io"; + +import "package:burt_network/burt_network.dart"; +import "package:video/src/collection.dart"; + +void main() async { + if (!await collection.init( + config: VideoConfig( + port: 8011, + useLidar: false, + destination: SocketInfo( + address: InternetAddress("192.168.1.20"), + port: 8002, + ), + ), + )) { + await collection.dispose(); + } +} diff --git a/video/bin/video.dart b/video/bin/video.dart index fea859ae..ed7ba3c2 100644 --- a/video/bin/video.dart +++ b/video/bin/video.dart @@ -1,7 +1,43 @@ +import "dart:async"; +import "dart:io"; + +import "package:burt_network/burt_network.dart"; import "package:burt_network/logging.dart"; +import "package:burt_network/protobuf.dart"; +import "package:burt_network/service.dart"; import "package:video/video.dart"; +class CommandForwarder extends Service { + StreamSubscription? _commandSubscription; + + @override + Future init() async { + _commandSubscription = collection.videoServer.messages.onMessage( + name: VideoCommand().messageName, + constructor: VideoCommand.fromBuffer, + callback: (data) { + collection.videoServer.sendMessage( + data, + destination: SocketInfo( + address: InternetAddress("192.168.1.60"), + port: 8011, + ), + ); + }, + ); + + return true; + } + + @override + Future dispose() async { + await _commandSubscription?.cancel(); + _commandSubscription = null; + } +} + void main() async { Logger.level = LogLevel.all; + collection.extraServices.add(CommandForwarder()); await collection.init(); } diff --git a/video/lib/src/collection.dart b/video/lib/src/collection.dart index a28cd75f..aafd3157 100644 --- a/video/lib/src/collection.dart +++ b/video/lib/src/collection.dart @@ -5,14 +5,25 @@ import "package:video/src/lidar.dart"; import "package:video/video.dart"; +/// Configuration class for the video program +class VideoConfig { + /// The port to host the server on + final int port; + + /// Whether or not to enable the lidar + final bool useLidar; + + /// The explicit destination for the rover's server + final SocketInfo? destination; + + /// Const constructor for VideoConfig + const VideoConfig({this.port = 8002, this.useLidar = true, this.destination}); +} + /// Class to contain all video devices -class Collection extends Service { +class VideoCollection extends Service { /// The [RoverSocket] to send messages through - late final videoServer = RoverSocket( - port: 8002, - device: Device.VIDEO, - collection: this, - ); + late final RoverSocket videoServer; /// Main parent isolate final cameras = CameraManager(); @@ -20,14 +31,35 @@ class Collection extends Service { /// The lidar manager final lidar = LidarManager(); + /// Extra services added on to the program, runtime specific + final List extraServices = []; + + VideoConfig? _config; + /// Function to initialize cameras @override - Future init() async { + Future init({VideoConfig config = const VideoConfig()}) async { + if (_config == null) { + _config = config; + + videoServer = RoverSocket( + port: _config!.port, + device: Device.VIDEO, + collection: this, + destination: _config!.destination, + keepDestination: _config!.destination != null, + ); + } logger ..trace("Running in trace mode") ..debug("Running in debug mode"); await cameras.init(); - await lidar.init(); + if (_config!.useLidar) { + await lidar.init(); + } + for (final service in extraServices) { + await service.init(); + } await videoServer.init(); logger.info("Video program initialized"); return true; @@ -37,13 +69,18 @@ class Collection extends Service { @override Future dispose() async { await cameras.dispose(); - await lidar.dispose(); + if (_config!.useLidar) { + await lidar.dispose(); + } + for (final service in extraServices) { + await service.dispose(); + } await videoServer.dispose(); } } /// Holds all the devices connected -final collection = Collection(); +final collection = VideoCollection(); /// Displays logs in the terminal and sends them to the Dashboard final logger = BurtLogger(socket: collection.videoServer); From 0076a90aead9246e86deeddef3859bd4a9ddf6a1 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 14:27:09 -0500 Subject: [PATCH 20/29] Fix late initialization issue --- video/lib/src/collection.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/video/lib/src/collection.dart b/video/lib/src/collection.dart index aafd3157..0e2d6f7f 100644 --- a/video/lib/src/collection.dart +++ b/video/lib/src/collection.dart @@ -50,6 +50,7 @@ class VideoCollection extends Service { keepDestination: _config!.destination != null, ); } + logger.socket = videoServer; logger ..trace("Running in trace mode") ..debug("Running in debug mode"); @@ -83,4 +84,4 @@ class VideoCollection extends Service { final collection = VideoCollection(); /// Displays logs in the terminal and sends them to the Dashboard -final logger = BurtLogger(socket: collection.videoServer); +final logger = BurtLogger(); From ffb752b00fff0d348dd9b564737fa31837c9d9a9 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 14:28:32 -0500 Subject: [PATCH 21/29] Initialize video server first --- video/lib/src/collection.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/video/lib/src/collection.dart b/video/lib/src/collection.dart index 0e2d6f7f..37006cce 100644 --- a/video/lib/src/collection.dart +++ b/video/lib/src/collection.dart @@ -51,6 +51,7 @@ class VideoCollection extends Service { ); } logger.socket = videoServer; + await videoServer.init(); logger ..trace("Running in trace mode") ..debug("Running in debug mode"); @@ -61,7 +62,6 @@ class VideoCollection extends Service { for (final service in extraServices) { await service.init(); } - await videoServer.init(); logger.info("Video program initialized"); return true; } From 8026d827456af1ade3e9051f6112e3ba5d906b99 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 14:50:58 -0500 Subject: [PATCH 22/29] Add configuration for which cameras video will use --- video/bin/arm_auxillary.dart | 1 + video/bin/video.dart | 9 ++++++++- video/lib/src/collection.dart | 12 ++++++++++-- video/lib/src/isolates/parent.dart | 11 ++++++++--- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/video/bin/arm_auxillary.dart b/video/bin/arm_auxillary.dart index 66ad8f7f..a18e32d2 100644 --- a/video/bin/arm_auxillary.dart +++ b/video/bin/arm_auxillary.dart @@ -12,6 +12,7 @@ void main() async { address: InternetAddress("192.168.1.20"), port: 8002, ), + supportedCameras: [CameraName.BOTTOM_LEFT, CameraName.BOTTOM_RIGHT], ), )) { await collection.dispose(); diff --git a/video/bin/video.dart b/video/bin/video.dart index ed7ba3c2..3e6ce043 100644 --- a/video/bin/video.dart +++ b/video/bin/video.dart @@ -39,5 +39,12 @@ class CommandForwarder extends Service { void main() async { Logger.level = LogLevel.all; collection.extraServices.add(CommandForwarder()); - await collection.init(); + await collection.init( + config: VideoConfig( + supportedCameras: CameraName.values.toSet().difference({ + CameraName.BOTTOM_LEFT, + CameraName.BOTTOM_RIGHT, + }).toList(), + ), + ); } diff --git a/video/lib/src/collection.dart b/video/lib/src/collection.dart index 37006cce..8e88a9ed 100644 --- a/video/lib/src/collection.dart +++ b/video/lib/src/collection.dart @@ -16,8 +16,16 @@ class VideoConfig { /// The explicit destination for the rover's server final SocketInfo? destination; + /// The cameras controlled by the program + final List supportedCameras; + /// Const constructor for VideoConfig - const VideoConfig({this.port = 8002, this.useLidar = true, this.destination}); + const VideoConfig({ + this.port = 8002, + this.useLidar = true, + this.destination, + this.supportedCameras = CameraName.values, + }); } /// Class to contain all video devices @@ -55,7 +63,7 @@ class VideoCollection extends Service { logger ..trace("Running in trace mode") ..debug("Running in debug mode"); - await cameras.init(); + await cameras.init(supportedCameras: _config!.supportedCameras); if (_config!.useLidar) { await lidar.init(); } diff --git a/video/lib/src/isolates/parent.dart b/video/lib/src/isolates/parent.dart index 955a5468..c216094d 100644 --- a/video/lib/src/isolates/parent.dart +++ b/video/lib/src/isolates/parent.dart @@ -30,8 +30,13 @@ class CameraManager extends Service { StreamSubscription? _vision; StreamSubscription? _data; + List? _supportedCameras; + @override - Future init() async { + Future init({ + List supportedCameras = CameraName.values, + }) async { + _supportedCameras ??= supportedCameras; _commands = collection.videoServer.messages.onMessage( name: VideoCommand().messageName, constructor: VideoCommand.fromBuffer, @@ -45,7 +50,7 @@ class CameraManager extends Service { parent.init(); _data = parent.stream.listen(onData); - for (final name in CameraName.values) { + for (final name in _supportedCameras!) { switch (name) { case CameraName.CAMERA_NAME_UNDEFINED: case CameraName.ROVER_FRONT: @@ -187,7 +192,7 @@ class CameraManager extends Service { final command = VideoCommand( details: CameraDetails(status: CameraStatus.CAMERA_DISABLED), ); - for (final name in CameraName.values) { + for (final name in _supportedCameras!) { if (name == CameraName.CAMERA_NAME_UNDEFINED || name == CameraName.ROVER_FRONT) { continue; From eecad103268aedbca82d624b1ca07334a27b78a9 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 14:56:13 -0500 Subject: [PATCH 23/29] Don't send command to unsupported cameras --- video/lib/src/isolates/parent.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/video/lib/src/isolates/parent.dart b/video/lib/src/isolates/parent.dart index c216094d..6b6e0a56 100644 --- a/video/lib/src/isolates/parent.dart +++ b/video/lib/src/isolates/parent.dart @@ -174,6 +174,9 @@ class CameraManager extends Service { if (cameraName == CameraName.ROVER_FRONT) { cameraName = CameraName.AUTONOMY_DEPTH; } + if (!_supportedCameras!.contains(cameraName)) { + return; + } parent.sendToChild(data: command, id: cameraName); } From 4c18b1820b00db618163371cb712f0acc2a367a2 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 15:15:42 -0500 Subject: [PATCH 24/29] Fix infinite echo-ing --- video/bin/video.dart | 3 +++ video/lib/src/isolates/parent.dart | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/video/bin/video.dart b/video/bin/video.dart index 3e6ce043..76790cc2 100644 --- a/video/bin/video.dart +++ b/video/bin/video.dart @@ -16,6 +16,9 @@ class CommandForwarder extends Service { name: VideoCommand().messageName, constructor: VideoCommand.fromBuffer, callback: (data) { + // echo the command back to the dashboard + collection.videoServer.sendMessage(data); + // forward to auxillary program collection.videoServer.sendMessage( data, destination: SocketInfo( diff --git a/video/lib/src/isolates/parent.dart b/video/lib/src/isolates/parent.dart index 6b6e0a56..b12a8ddc 100644 --- a/video/lib/src/isolates/parent.dart +++ b/video/lib/src/isolates/parent.dart @@ -169,7 +169,6 @@ class CameraManager extends Service { /// Forwards the command to the appropriate camera. void _handleCommand(VideoCommand command) { - collection.videoServer.sendMessage(command); // echo the request var cameraName = command.details.name; if (cameraName == CameraName.ROVER_FRONT) { cameraName = CameraName.AUTONOMY_DEPTH; From a658dd55bbf7330dd963533af37db43f3094dd72 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:47:29 -0500 Subject: [PATCH 25/29] Regenerate protobuf --- burt_network/Protobuf | 2 +- .../lib/src/generated/base_station.pb.dart | 30 ++ .../src/generated/base_station.pbjson.dart | 17 +- .../lib/src/generated/science.pb.dart | 264 +++++++++++++++--- .../lib/src/generated/science.pbjson.dart | 113 +++++++- 5 files changed, 372 insertions(+), 54 deletions(-) diff --git a/burt_network/Protobuf b/burt_network/Protobuf index 7712146d..9e74c092 160000 --- a/burt_network/Protobuf +++ b/burt_network/Protobuf @@ -1 +1 @@ -Subproject commit 7712146d0300d3b7a12e1fe5723475c2e01e91ad +Subproject commit 9e74c092879fbb89d483899bb044123831f1f169 diff --git a/burt_network/lib/src/generated/base_station.pb.dart b/burt_network/lib/src/generated/base_station.pb.dart index daf09d3e..3572bd26 100644 --- a/burt_network/lib/src/generated/base_station.pb.dart +++ b/burt_network/lib/src/generated/base_station.pb.dart @@ -30,12 +30,14 @@ class AntennaFirmwareCommand extends $pb.GeneratedMessage { $1.MotorCommand? swivel, $core.bool? stop, $core.bool? calibrate, + $1.MotorCommand? pitch, }) { final result = create(); if (version != null) result.version = version; if (swivel != null) result.swivel = swivel; if (stop != null) result.stop = stop; if (calibrate != null) result.calibrate = calibrate; + if (pitch != null) result.pitch = pitch; return result; } @@ -57,6 +59,8 @@ class AntennaFirmwareCommand extends $pb.GeneratedMessage { subBuilder: $1.MotorCommand.create) ..aOB(3, _omitFieldNames ? '' : 'stop') ..aOB(4, _omitFieldNames ? '' : 'calibrate') + ..aOM<$1.MotorCommand>(5, _omitFieldNames ? '' : 'pitch', + subBuilder: $1.MotorCommand.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -118,16 +122,29 @@ class AntennaFirmwareCommand extends $pb.GeneratedMessage { $core.bool hasCalibrate() => $_has(3); @$pb.TagNumber(4) void clearCalibrate() => $_clearField(4); + + @$pb.TagNumber(5) + $1.MotorCommand get pitch => $_getN(4); + @$pb.TagNumber(5) + set pitch($1.MotorCommand value) => $_setField(5, value); + @$pb.TagNumber(5) + $core.bool hasPitch() => $_has(4); + @$pb.TagNumber(5) + void clearPitch() => $_clearField(5); + @$pb.TagNumber(5) + $1.MotorCommand ensurePitch() => $_ensure(4); } class AntennaFirmwareData extends $pb.GeneratedMessage { factory AntennaFirmwareData({ $0.Version? version, $1.MotorData? swivel, + $1.MotorData? pitch, }) { final result = create(); if (version != null) result.version = version; if (swivel != null) result.swivel = swivel; + if (pitch != null) result.pitch = pitch; return result; } @@ -147,6 +164,8 @@ class AntennaFirmwareData extends $pb.GeneratedMessage { subBuilder: $0.Version.create) ..aOM<$1.MotorData>(2, _omitFieldNames ? '' : 'swivel', subBuilder: $1.MotorData.create) + ..aOM<$1.MotorData>(3, _omitFieldNames ? '' : 'pitch', + subBuilder: $1.MotorData.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -189,6 +208,17 @@ class AntennaFirmwareData extends $pb.GeneratedMessage { void clearSwivel() => $_clearField(2); @$pb.TagNumber(2) $1.MotorData ensureSwivel() => $_ensure(1); + + @$pb.TagNumber(3) + $1.MotorData get pitch => $_getN(2); + @$pb.TagNumber(3) + set pitch($1.MotorData value) => $_setField(3, value); + @$pb.TagNumber(3) + $core.bool hasPitch() => $_has(2); + @$pb.TagNumber(3) + void clearPitch() => $_clearField(3); + @$pb.TagNumber(3) + $1.MotorData ensurePitch() => $_ensure(2); } /// / Command to control the movement of the MARS antenna. diff --git a/burt_network/lib/src/generated/base_station.pbjson.dart b/burt_network/lib/src/generated/base_station.pbjson.dart index d6780087..e6e29886 100644 --- a/burt_network/lib/src/generated/base_station.pbjson.dart +++ b/burt_network/lib/src/generated/base_station.pbjson.dart @@ -43,6 +43,14 @@ const AntennaFirmwareCommand$json = { '6': '.MotorCommand', '10': 'swivel' }, + { + '1': 'pitch', + '3': 5, + '4': 1, + '5': 11, + '6': '.MotorCommand', + '10': 'pitch' + }, {'1': 'stop', '3': 3, '4': 1, '5': 8, '10': 'stop'}, {'1': 'calibrate', '3': 4, '4': 1, '5': 8, '10': 'calibrate'}, ], @@ -51,8 +59,9 @@ const AntennaFirmwareCommand$json = { /// Descriptor for `AntennaFirmwareCommand`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List antennaFirmwareCommandDescriptor = $convert.base64Decode( 'ChZBbnRlbm5hRmlybXdhcmVDb21tYW5kEiIKB3ZlcnNpb24YASABKAsyCC5WZXJzaW9uUgd2ZX' - 'JzaW9uEiUKBnN3aXZlbBgCIAEoCzINLk1vdG9yQ29tbWFuZFIGc3dpdmVsEhIKBHN0b3AYAyAB' - 'KAhSBHN0b3ASHAoJY2FsaWJyYXRlGAQgASgIUgljYWxpYnJhdGU='); + 'JzaW9uEiUKBnN3aXZlbBgCIAEoCzINLk1vdG9yQ29tbWFuZFIGc3dpdmVsEiMKBXBpdGNoGAUg' + 'ASgLMg0uTW90b3JDb21tYW5kUgVwaXRjaBISCgRzdG9wGAMgASgIUgRzdG9wEhwKCWNhbGlicm' + 'F0ZRgEIAEoCFIJY2FsaWJyYXRl'); @$core.Deprecated('Use antennaFirmwareDataDescriptor instead') const AntennaFirmwareData$json = { @@ -60,13 +69,15 @@ const AntennaFirmwareData$json = { '2': [ {'1': 'version', '3': 1, '4': 1, '5': 11, '6': '.Version', '10': 'version'}, {'1': 'swivel', '3': 2, '4': 1, '5': 11, '6': '.MotorData', '10': 'swivel'}, + {'1': 'pitch', '3': 3, '4': 1, '5': 11, '6': '.MotorData', '10': 'pitch'}, ], }; /// Descriptor for `AntennaFirmwareData`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List antennaFirmwareDataDescriptor = $convert.base64Decode( 'ChNBbnRlbm5hRmlybXdhcmVEYXRhEiIKB3ZlcnNpb24YASABKAsyCC5WZXJzaW9uUgd2ZXJzaW' - '9uEiIKBnN3aXZlbBgCIAEoCzIKLk1vdG9yRGF0YVIGc3dpdmVs'); + '9uEiIKBnN3aXZlbBgCIAEoCzIKLk1vdG9yRGF0YVIGc3dpdmVsEiAKBXBpdGNoGAMgASgLMgou' + 'TW90b3JEYXRhUgVwaXRjaA=='); @$core.Deprecated('Use baseStationCommandDescriptor instead') const BaseStationCommand$json = { diff --git a/burt_network/lib/src/generated/science.pb.dart b/burt_network/lib/src/generated/science.pb.dart index b3e8bf31..10e9dae4 100644 --- a/burt_network/lib/src/generated/science.pb.dart +++ b/burt_network/lib/src/generated/science.pb.dart @@ -21,31 +21,206 @@ export 'package:protobuf/protobuf.dart' show GeneratedMessageGenericExtensions; export 'science.pbenum.dart'; +/// / Command to control the auger +class AugerCommand extends $pb.GeneratedMessage { + factory AugerCommand({ + $core.double? speedRpm, + ServoState? upperServo, + ServoState? lowerServo, + }) { + final result = create(); + if (speedRpm != null) result.speedRpm = speedRpm; + if (upperServo != null) result.upperServo = upperServo; + if (lowerServo != null) result.lowerServo = lowerServo; + return result; + } + + AugerCommand._(); + + factory AugerCommand.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory AugerCommand.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'AugerCommand', + createEmptyInstance: create) + ..aD(1, _omitFieldNames ? '' : 'speedRpm', fieldType: $pb.PbFieldType.OF) + ..aE(2, _omitFieldNames ? '' : 'upperServo', + enumValues: ServoState.values) + ..aE(3, _omitFieldNames ? '' : 'lowerServo', + enumValues: ServoState.values) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + AugerCommand clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + AugerCommand copyWith(void Function(AugerCommand) updates) => + super.copyWith((message) => updates(message as AugerCommand)) + as AugerCommand; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static AugerCommand create() => AugerCommand._(); + @$core.override + AugerCommand createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static AugerCommand getDefault() => _defaultInstance ??= + $pb.GeneratedMessage.$_defaultFor(create); + static AugerCommand? _defaultInstance; + + /// Speed of the auger in RPM, between 0.0 - 0.4 + @$pb.TagNumber(1) + $core.double get speedRpm => $_getN(0); + @$pb.TagNumber(1) + set speedRpm($core.double value) => $_setFloat(0, value); + @$pb.TagNumber(1) + $core.bool hasSpeedRpm() => $_has(0); + @$pb.TagNumber(1) + void clearSpeedRpm() => $_clearField(1); + + @$pb.TagNumber(2) + ServoState get upperServo => $_getN(1); + @$pb.TagNumber(2) + set upperServo(ServoState value) => $_setField(2, value); + @$pb.TagNumber(2) + $core.bool hasUpperServo() => $_has(1); + @$pb.TagNumber(2) + void clearUpperServo() => $_clearField(2); + + @$pb.TagNumber(3) + ServoState get lowerServo => $_getN(2); + @$pb.TagNumber(3) + set lowerServo(ServoState value) => $_setField(3, value); + @$pb.TagNumber(3) + $core.bool hasLowerServo() => $_has(2); + @$pb.TagNumber(3) + void clearLowerServo() => $_clearField(3); +} + +/// / Data from the auger +class AugerData extends $pb.GeneratedMessage { + factory AugerData({ + ServoState? lowerServo, + ServoState? upperServo, + $core.double? distanceToGroundCm, + $core.double? current, + }) { + final result = create(); + if (lowerServo != null) result.lowerServo = lowerServo; + if (upperServo != null) result.upperServo = upperServo; + if (distanceToGroundCm != null) + result.distanceToGroundCm = distanceToGroundCm; + if (current != null) result.current = current; + return result; + } + + AugerData._(); + + factory AugerData.fromBuffer($core.List<$core.int> data, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromBuffer(data, registry); + factory AugerData.fromJson($core.String json, + [$pb.ExtensionRegistry registry = $pb.ExtensionRegistry.EMPTY]) => + create()..mergeFromJson(json, registry); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo( + _omitMessageNames ? '' : 'AugerData', + createEmptyInstance: create) + ..aE(1, _omitFieldNames ? '' : 'lowerServo', + enumValues: ServoState.values) + ..aE(2, _omitFieldNames ? '' : 'upperServo', + enumValues: ServoState.values) + ..aD(3, _omitFieldNames ? '' : 'distanceToGroundCm', + fieldType: $pb.PbFieldType.OF) + ..aD(4, _omitFieldNames ? '' : 'current', fieldType: $pb.PbFieldType.OF) + ..hasRequiredFields = false; + + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + AugerData clone() => deepCopy(); + @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') + AugerData copyWith(void Function(AugerData) updates) => + super.copyWith((message) => updates(message as AugerData)) as AugerData; + + @$core.override + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static AugerData create() => AugerData._(); + @$core.override + AugerData createEmptyInstance() => create(); + @$core.pragma('dart2js:noInline') + static AugerData getDefault() => + _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static AugerData? _defaultInstance; + + @$pb.TagNumber(1) + ServoState get lowerServo => $_getN(0); + @$pb.TagNumber(1) + set lowerServo(ServoState value) => $_setField(1, value); + @$pb.TagNumber(1) + $core.bool hasLowerServo() => $_has(0); + @$pb.TagNumber(1) + void clearLowerServo() => $_clearField(1); + + @$pb.TagNumber(2) + ServoState get upperServo => $_getN(1); + @$pb.TagNumber(2) + set upperServo(ServoState value) => $_setField(2, value); + @$pb.TagNumber(2) + $core.bool hasUpperServo() => $_has(1); + @$pb.TagNumber(2) + void clearUpperServo() => $_clearField(2); + + /// Distance to ground, in centimeters + @$pb.TagNumber(3) + $core.double get distanceToGroundCm => $_getN(2); + @$pb.TagNumber(3) + set distanceToGroundCm($core.double value) => $_setFloat(2, value); + @$pb.TagNumber(3) + $core.bool hasDistanceToGroundCm() => $_has(2); + @$pb.TagNumber(3) + void clearDistanceToGroundCm() => $_clearField(3); + + @$pb.TagNumber(4) + $core.double get current => $_getN(3); + @$pb.TagNumber(4) + set current($core.double value) => $_setFloat(3, value); + @$pb.TagNumber(4) + $core.bool hasCurrent() => $_has(3); + @$pb.TagNumber(4) + void clearCurrent() => $_clearField(4); +} + /// / A command to the science subsystem. class ScienceCommand extends $pb.GeneratedMessage { factory ScienceCommand({ $core.double? carouselMotor, - $core.double? subsurfaceMotor, + $core.double? linearSlider, PumpState? pumps, - ServoState? funnel, CarouselCommand? carousel, $core.bool? calibrate, $core.bool? stop, $core.int? sample, ScienceState? state, $0.Version? version, + AugerCommand? auger, }) { final result = create(); if (carouselMotor != null) result.carouselMotor = carouselMotor; - if (subsurfaceMotor != null) result.subsurfaceMotor = subsurfaceMotor; + if (linearSlider != null) result.linearSlider = linearSlider; if (pumps != null) result.pumps = pumps; - if (funnel != null) result.funnel = funnel; if (carousel != null) result.carousel = carousel; if (calibrate != null) result.calibrate = calibrate; if (stop != null) result.stop = stop; if (sample != null) result.sample = sample; if (state != null) result.state = state; if (version != null) result.version = version; + if (auger != null) result.auger = auger; return result; } @@ -63,12 +238,10 @@ class ScienceCommand extends $pb.GeneratedMessage { createEmptyInstance: create) ..aD(1, _omitFieldNames ? '' : 'carouselMotor', fieldType: $pb.PbFieldType.OF) - ..aD(3, _omitFieldNames ? '' : 'subsurfaceMotor', + ..aD(3, _omitFieldNames ? '' : 'linearSlider', fieldType: $pb.PbFieldType.OF) ..aE(4, _omitFieldNames ? '' : 'pumps', enumValues: PumpState.values) - ..aE(5, _omitFieldNames ? '' : 'funnel', - enumValues: ServoState.values) ..aE(7, _omitFieldNames ? '' : 'carousel', enumValues: CarouselCommand.values) ..aOB(8, _omitFieldNames ? '' : 'calibrate') @@ -78,6 +251,8 @@ class ScienceCommand extends $pb.GeneratedMessage { enumValues: ScienceState.values) ..aOM<$0.Version>(12, _omitFieldNames ? '' : 'version', subBuilder: $0.Version.create) + ..aOM(13, _omitFieldNames ? '' : 'auger', + subBuilder: AugerCommand.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -110,13 +285,13 @@ class ScienceCommand extends $pb.GeneratedMessage { void clearCarouselMotor() => $_clearField(1); @$pb.TagNumber(3) - $core.double get subsurfaceMotor => $_getN(1); + $core.double get linearSlider => $_getN(1); @$pb.TagNumber(3) - set subsurfaceMotor($core.double value) => $_setFloat(1, value); + set linearSlider($core.double value) => $_setFloat(1, value); @$pb.TagNumber(3) - $core.bool hasSubsurfaceMotor() => $_has(1); + $core.bool hasLinearSlider() => $_has(1); @$pb.TagNumber(3) - void clearSubsurfaceMotor() => $_clearField(3); + void clearLinearSlider() => $_clearField(3); /// Control over other hardware @$pb.TagNumber(4) @@ -128,71 +303,73 @@ class ScienceCommand extends $pb.GeneratedMessage { @$pb.TagNumber(4) void clearPumps() => $_clearField(4); - @$pb.TagNumber(5) - ServoState get funnel => $_getN(3); - @$pb.TagNumber(5) - set funnel(ServoState value) => $_setField(5, value); - @$pb.TagNumber(5) - $core.bool hasFunnel() => $_has(3); - @$pb.TagNumber(5) - void clearFunnel() => $_clearField(5); - @$pb.TagNumber(7) - CarouselCommand get carousel => $_getN(4); + CarouselCommand get carousel => $_getN(3); @$pb.TagNumber(7) set carousel(CarouselCommand value) => $_setField(7, value); @$pb.TagNumber(7) - $core.bool hasCarousel() => $_has(4); + $core.bool hasCarousel() => $_has(3); @$pb.TagNumber(7) void clearCarousel() => $_clearField(7); /// High level commands @$pb.TagNumber(8) - $core.bool get calibrate => $_getBF(5); + $core.bool get calibrate => $_getBF(4); @$pb.TagNumber(8) - set calibrate($core.bool value) => $_setBool(5, value); + set calibrate($core.bool value) => $_setBool(4, value); @$pb.TagNumber(8) - $core.bool hasCalibrate() => $_has(5); + $core.bool hasCalibrate() => $_has(4); @$pb.TagNumber(8) void clearCalibrate() => $_clearField(8); @$pb.TagNumber(9) - $core.bool get stop => $_getBF(6); + $core.bool get stop => $_getBF(5); @$pb.TagNumber(9) - set stop($core.bool value) => $_setBool(6, value); + set stop($core.bool value) => $_setBool(5, value); @$pb.TagNumber(9) - $core.bool hasStop() => $_has(6); + $core.bool hasStop() => $_has(5); @$pb.TagNumber(9) void clearStop() => $_clearField(9); @$pb.TagNumber(10) - $core.int get sample => $_getIZ(7); + $core.int get sample => $_getIZ(6); @$pb.TagNumber(10) - set sample($core.int value) => $_setSignedInt32(7, value); + set sample($core.int value) => $_setSignedInt32(6, value); @$pb.TagNumber(10) - $core.bool hasSample() => $_has(7); + $core.bool hasSample() => $_has(6); @$pb.TagNumber(10) void clearSample() => $_clearField(10); @$pb.TagNumber(11) - ScienceState get state => $_getN(8); + ScienceState get state => $_getN(7); @$pb.TagNumber(11) set state(ScienceState value) => $_setField(11, value); @$pb.TagNumber(11) - $core.bool hasState() => $_has(8); + $core.bool hasState() => $_has(7); @$pb.TagNumber(11) void clearState() => $_clearField(11); @$pb.TagNumber(12) - $0.Version get version => $_getN(9); + $0.Version get version => $_getN(8); @$pb.TagNumber(12) set version($0.Version value) => $_setField(12, value); @$pb.TagNumber(12) - $core.bool hasVersion() => $_has(9); + $core.bool hasVersion() => $_has(8); @$pb.TagNumber(12) void clearVersion() => $_clearField(12); @$pb.TagNumber(12) - $0.Version ensureVersion() => $_ensure(9); + $0.Version ensureVersion() => $_ensure(8); + + @$pb.TagNumber(13) + AugerCommand get auger => $_getN(9); + @$pb.TagNumber(13) + set auger(AugerCommand value) => $_setField(13, value); + @$pb.TagNumber(13) + $core.bool hasAuger() => $_has(9); + @$pb.TagNumber(13) + void clearAuger() => $_clearField(13); + @$pb.TagNumber(13) + AugerCommand ensureAuger() => $_ensure(9); } /// / Data coming from the science subsystem. @@ -204,6 +381,7 @@ class ScienceData extends $pb.GeneratedMessage { $core.double? humidity, $core.double? temperature, $0.Version? version, + AugerData? auger, }) { final result = create(); if (sample != null) result.sample = sample; @@ -212,6 +390,7 @@ class ScienceData extends $pb.GeneratedMessage { if (humidity != null) result.humidity = humidity; if (temperature != null) result.temperature = temperature; if (version != null) result.version = version; + if (auger != null) result.auger = auger; return result; } @@ -235,6 +414,8 @@ class ScienceData extends $pb.GeneratedMessage { ..aD(5, _omitFieldNames ? '' : 'temperature', fieldType: $pb.PbFieldType.OF) ..aOM<$0.Version>(6, _omitFieldNames ? '' : 'version', subBuilder: $0.Version.create) + ..aOM(7, _omitFieldNames ? '' : 'auger', + subBuilder: AugerData.create) ..hasRequiredFields = false; @$core.Deprecated('See https://github.com/google/protobuf.dart/issues/998.') @@ -313,6 +494,17 @@ class ScienceData extends $pb.GeneratedMessage { void clearVersion() => $_clearField(6); @$pb.TagNumber(6) $0.Version ensureVersion() => $_ensure(5); + + @$pb.TagNumber(7) + AugerData get auger => $_getN(6); + @$pb.TagNumber(7) + set auger(AugerData value) => $_setField(7, value); + @$pb.TagNumber(7) + $core.bool hasAuger() => $_has(6); + @$pb.TagNumber(7) + void clearAuger() => $_clearField(7); + @$pb.TagNumber(7) + AugerData ensureAuger() => $_ensure(6); } const $core.bool _omitFieldNames = diff --git a/burt_network/lib/src/generated/science.pbjson.dart b/burt_network/lib/src/generated/science.pbjson.dart index fa360709..309ac8ec 100644 --- a/burt_network/lib/src/generated/science.pbjson.dart +++ b/burt_network/lib/src/generated/science.pbjson.dart @@ -81,21 +81,100 @@ final $typed_data.Uint8List carouselCommandDescriptor = $convert.base64Decode( 'hUX1RVQkUQARINCglQUkVWX1RVQkUQAhIQCgxORVhUX1NFQ1RJT04QAxIQCgxQUkVWX1NFQ1RJ' 'T04QBBINCglGSUxMX1RVQkUQBRIQCgxGSUxMX1NFQ1RJT04QBg=='); +@$core.Deprecated('Use augerCommandDescriptor instead') +const AugerCommand$json = { + '1': 'AugerCommand', + '2': [ + { + '1': 'speed_rpm', + '3': 1, + '4': 1, + '5': 2, + '9': 0, + '10': 'speedRpm', + '17': true + }, + { + '1': 'upper_servo', + '3': 2, + '4': 1, + '5': 14, + '6': '.ServoState', + '10': 'upperServo' + }, + { + '1': 'lower_servo', + '3': 3, + '4': 1, + '5': 14, + '6': '.ServoState', + '10': 'lowerServo' + }, + ], + '8': [ + {'1': '_speed_rpm'}, + ], +}; + +/// Descriptor for `AugerCommand`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List augerCommandDescriptor = $convert.base64Decode( + 'CgxBdWdlckNvbW1hbmQSIAoJc3BlZWRfcnBtGAEgASgCSABSCHNwZWVkUnBtiAEBEiwKC3VwcG' + 'VyX3NlcnZvGAIgASgOMgsuU2Vydm9TdGF0ZVIKdXBwZXJTZXJ2bxIsCgtsb3dlcl9zZXJ2bxgD' + 'IAEoDjILLlNlcnZvU3RhdGVSCmxvd2VyU2Vydm9CDAoKX3NwZWVkX3JwbQ=='); + +@$core.Deprecated('Use augerDataDescriptor instead') +const AugerData$json = { + '1': 'AugerData', + '2': [ + { + '1': 'lower_servo', + '3': 1, + '4': 1, + '5': 14, + '6': '.ServoState', + '10': 'lowerServo' + }, + { + '1': 'upper_servo', + '3': 2, + '4': 1, + '5': 14, + '6': '.ServoState', + '10': 'upperServo' + }, + { + '1': 'distance_to_ground_cm', + '3': 3, + '4': 1, + '5': 2, + '10': 'distanceToGroundCm' + }, + {'1': 'current', '3': 4, '4': 1, '5': 2, '10': 'current'}, + ], +}; + +/// Descriptor for `AugerData`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List augerDataDescriptor = $convert.base64Decode( + 'CglBdWdlckRhdGESLAoLbG93ZXJfc2Vydm8YASABKA4yCy5TZXJ2b1N0YXRlUgpsb3dlclNlcn' + 'ZvEiwKC3VwcGVyX3NlcnZvGAIgASgOMgsuU2Vydm9TdGF0ZVIKdXBwZXJTZXJ2bxIxChVkaXN0' + 'YW5jZV90b19ncm91bmRfY20YAyABKAJSEmRpc3RhbmNlVG9Hcm91bmRDbRIYCgdjdXJyZW50GA' + 'QgASgCUgdjdXJyZW50'); + @$core.Deprecated('Use scienceCommandDescriptor instead') const ScienceCommand$json = { '1': 'ScienceCommand', '2': [ {'1': 'carousel_motor', '3': 1, '4': 1, '5': 2, '10': 'carouselMotor'}, - {'1': 'subsurface_motor', '3': 3, '4': 1, '5': 2, '10': 'subsurfaceMotor'}, - {'1': 'pumps', '3': 4, '4': 1, '5': 14, '6': '.PumpState', '10': 'pumps'}, + {'1': 'linear_slider', '3': 3, '4': 1, '5': 2, '10': 'linearSlider'}, { - '1': 'funnel', - '3': 5, + '1': 'auger', + '3': 13, '4': 1, - '5': 14, - '6': '.ServoState', - '10': 'funnel' + '5': 11, + '6': '.AugerCommand', + '10': 'auger' }, + {'1': 'pumps', '3': 4, '4': 1, '5': 14, '6': '.PumpState', '10': 'pumps'}, { '1': 'carousel', '3': 7, @@ -124,17 +203,21 @@ const ScienceCommand$json = { '10': 'version' }, ], + '9': [ + {'1': 2, '2': 3}, + {'1': 5, '2': 7}, + ], }; /// Descriptor for `ScienceCommand`. Decode as a `google.protobuf.DescriptorProto`. final $typed_data.Uint8List scienceCommandDescriptor = $convert.base64Decode( 'Cg5TY2llbmNlQ29tbWFuZBIlCg5jYXJvdXNlbF9tb3RvchgBIAEoAlINY2Fyb3VzZWxNb3Rvch' - 'IpChBzdWJzdXJmYWNlX21vdG9yGAMgASgCUg9zdWJzdXJmYWNlTW90b3ISIAoFcHVtcHMYBCAB' - 'KA4yCi5QdW1wU3RhdGVSBXB1bXBzEiMKBmZ1bm5lbBgFIAEoDjILLlNlcnZvU3RhdGVSBmZ1bm' - '5lbBIsCghjYXJvdXNlbBgHIAEoDjIQLkNhcm91c2VsQ29tbWFuZFIIY2Fyb3VzZWwSHAoJY2Fs' - 'aWJyYXRlGAggASgIUgljYWxpYnJhdGUSEgoEc3RvcBgJIAEoCFIEc3RvcBIWCgZzYW1wbGUYCi' - 'ABKAVSBnNhbXBsZRIjCgVzdGF0ZRgLIAEoDjINLlNjaWVuY2VTdGF0ZVIFc3RhdGUSIgoHdmVy' - 'c2lvbhgMIAEoCzIILlZlcnNpb25SB3ZlcnNpb24='); + 'IjCg1saW5lYXJfc2xpZGVyGAMgASgCUgxsaW5lYXJTbGlkZXISIwoFYXVnZXIYDSABKAsyDS5B' + 'dWdlckNvbW1hbmRSBWF1Z2VyEiAKBXB1bXBzGAQgASgOMgouUHVtcFN0YXRlUgVwdW1wcxIsCg' + 'hjYXJvdXNlbBgHIAEoDjIQLkNhcm91c2VsQ29tbWFuZFIIY2Fyb3VzZWwSHAoJY2FsaWJyYXRl' + 'GAggASgIUgljYWxpYnJhdGUSEgoEc3RvcBgJIAEoCFIEc3RvcBIWCgZzYW1wbGUYCiABKAVSBn' + 'NhbXBsZRIjCgVzdGF0ZRgLIAEoDjINLlNjaWVuY2VTdGF0ZVIFc3RhdGUSIgoHdmVyc2lvbhgM' + 'IAEoCzIILlZlcnNpb25SB3ZlcnNpb25KBAgCEANKBAgFEAc='); @$core.Deprecated('Use scienceDataDescriptor instead') const ScienceData$json = { @@ -153,6 +236,7 @@ const ScienceData$json = { {'1': 'humidity', '3': 4, '4': 1, '5': 2, '10': 'humidity'}, {'1': 'temperature', '3': 5, '4': 1, '5': 2, '10': 'temperature'}, {'1': 'version', '3': 6, '4': 1, '5': 11, '6': '.Version', '10': 'version'}, + {'1': 'auger', '3': 7, '4': 1, '5': 11, '6': '.AugerData', '10': 'auger'}, ], }; @@ -161,4 +245,5 @@ final $typed_data.Uint8List scienceDataDescriptor = $convert.base64Decode( 'CgtTY2llbmNlRGF0YRIWCgZzYW1wbGUYASABKAVSBnNhbXBsZRIjCgVzdGF0ZRgCIAEoDjINLl' 'NjaWVuY2VTdGF0ZVIFc3RhdGUSEAoDY28yGAMgASgCUgNjbzISGgoIaHVtaWRpdHkYBCABKAJS' 'CGh1bWlkaXR5EiAKC3RlbXBlcmF0dXJlGAUgASgCUgt0ZW1wZXJhdHVyZRIiCgd2ZXJzaW9uGA' - 'YgASgLMgguVmVyc2lvblIHdmVyc2lvbg=='); + 'YgASgLMgguVmVyc2lvblIHdmVyc2lvbhIgCgVhdWdlchgHIAEoCzIKLkF1Z2VyRGF0YVIFYXVn' + 'ZXI='); From c3cf074f29c6500bbef0a8bb7ed7daa1918efbef Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:55:44 -0500 Subject: [PATCH 26/29] Fix lints --- video/bin/video.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/video/bin/video.dart b/video/bin/video.dart index 76790cc2..4e61fded 100644 --- a/video/bin/video.dart +++ b/video/bin/video.dart @@ -2,9 +2,6 @@ import "dart:async"; import "dart:io"; import "package:burt_network/burt_network.dart"; -import "package:burt_network/logging.dart"; -import "package:burt_network/protobuf.dart"; -import "package:burt_network/service.dart"; import "package:video/video.dart"; class CommandForwarder extends Service { From ca59e65f20dc8feb9bc0cd2a113dd2ed0b0a2b15 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:18:26 -0500 Subject: [PATCH 27/29] Forward arm and science commands to aux board --- subsystems/bin/subsystems.dart | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/subsystems/bin/subsystems.dart b/subsystems/bin/subsystems.dart index edb47c8d..8ae6655a 100644 --- a/subsystems/bin/subsystems.dart +++ b/subsystems/bin/subsystems.dart @@ -5,34 +5,34 @@ import "package:burt_network/burt_network.dart"; import "package:subsystems/subsystems.dart"; /// Extra service to forward science data and commands to/from the auxillary board -class ScienceForwardService extends Service { - StreamSubscription? _commandSubscription; - StreamSubscription? _dataSubscription; +class AuxillaryForwarder extends Service { + StreamSubscription? _commandSubscription; + StreamSubscription? _dataSubscription; @override Future init() async { - _commandSubscription = collection.server.messages.onMessage( - name: ScienceCommand().messageName, - constructor: ScienceCommand.fromBuffer, - callback: (command) => collection.server.sendMessage( - command, - destination: SocketInfo( - address: InternetAddress("192.168.1.60"), - port: 8010, - ), - ), - ); - _dataSubscription = collection.server.messages.onMessage( - name: ScienceData().messageName, - constructor: (data) { - try { - return ScienceData.fromBuffer(data); - } catch (_) { - return ScienceData(); - } - }, - callback: (data) => collection.server.sendMessage(data), - ); + _commandSubscription = collection.server.messages + .where( + (e) => + e.name == ArmCommand().messageName || + e.name == ScienceCommand().messageName, + ) + .listen( + (wrapper) => collection.server.sendWrapper( + wrapper, + destination: SocketInfo( + address: InternetAddress("192.168.1.60"), + port: 8010, + ), + ), + ); + _dataSubscription = collection.server.messages + .where( + (e) => + e.name == ArmData().messageName || + e.name == ScienceData().messageName, + ) + .listen(collection.server.sendWrapper); return true; } @@ -47,6 +47,6 @@ class ScienceForwardService extends Service { void main() async { Logger.level = LogLevel.trace; - collection.extraServices.add(ScienceForwardService()); + collection.extraServices.add(AuxillaryForwarder()); if (!await collection.init()) await collection.dispose(); } From 694132c8e455ca26dca12c31840e0e449d1829a5 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:28:02 -0500 Subject: [PATCH 28/29] Updated udev ports --- lib/all_devices.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/all_devices.dart b/lib/all_devices.dart index d9a7ba14..26e05eff 100644 --- a/lib/all_devices.dart +++ b/lib/all_devices.dart @@ -16,21 +16,21 @@ const devices = [ humanName: "Rear Camera", alias: "rover_cam_rear", type: DeviceType.camera, - port: "1-2.4:1.0", + port: "1-1.1:1.0", index: 0, ), Device( humanName: "Bottom Left Camera", alias: "rover_cam_bottom_left", type: DeviceType.camera, - port: "1-2.3:1.0", + port: "3-2.3:1.0", index: 0, ), Device( humanName: "Bottom Right Camera", alias: "rover_cam_bottom_right", type: DeviceType.camera, - port: "1-2.2:1.0", + port: "3-2.2:1.0", index: 0, ), // ==================== Subsystems Cameras ==================== @@ -38,21 +38,21 @@ const devices = [ humanName: "Subsystems Camera 1", alias: "rover_cam_subsystem_1", type: DeviceType.camera, - port: "3-1.2:1.0", + port: "1-2.2.3:1.0", index: 0, ), Device( humanName: "Subsystems Camera 2", alias: "rover_cam_subsystem_2", type: DeviceType.camera, - port: "3-1.3:1.0", + port: "1-2.4:1.0", index: 0, ), Device( humanName: "Subsystems Camera 3", alias: "rover_cam_subsystem_3", type: DeviceType.camera, - port: "3-1.4:1.0", + port: "1-2.3:1.0", index: 0, ), // ==================== Sensors ==================== From 37b9b5c4ab798052be6f5d729883148158e5a847 Mon Sep 17 00:00:00 2001 From: Gold87 <91761103+Gold872@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:34:18 -0500 Subject: [PATCH 29/29] Send vision data to autonomy --- video/lib/src/isolates/parent.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/video/lib/src/isolates/parent.dart b/video/lib/src/isolates/parent.dart index b12a8ddc..356e92ce 100644 --- a/video/lib/src/isolates/parent.dart +++ b/video/lib/src/isolates/parent.dart @@ -187,6 +187,9 @@ class CameraManager extends Service { // we're extremely short on time, it leaves analysis as an implementation detail of Video, and // it doesn't add much latency (from 24 FPS on the camera to 23 FPS on the Dashboard). collection.videoServer.sendMessage(data); + if (data.frame.isEmpty) { + collection.videoServer.sendMessage(data, destination: autonomySocket); + } } /// Stops all the cameras managed by this class.