diff --git a/cmd/ssl-simulation-controller/main.go b/cmd/ssl-simulation-controller/main.go index 42f1668..47ae603 100644 --- a/cmd/ssl-simulation-controller/main.go +++ b/cmd/ssl-simulation-controller/main.go @@ -12,10 +12,11 @@ var visionAddress = flag.String("visionAddress", "224.5.23.2:10006", "The addres var trackerAddress = flag.String("trackerAddress", "224.5.23.2:10010", "The address (ip+port) from which tracker packages are received") var refereeAddress = flag.String("refereeAddress", "224.5.23.1:10003", "The address (ip+port) from which referee packages are received") var simControlPort = flag.String("simControlPort", "10300", "The port to which simulation control packets are send") +var robotSpecConfig = flag.String("robotSpecConfig", "config/robot-specs.yaml", "The robot specs config file") func main() { flag.Parse() - ctl := simctl.NewSimulationController(*visionAddress, *refereeAddress, *trackerAddress, *simControlPort) + ctl := simctl.NewSimulationController(*visionAddress, *refereeAddress, *trackerAddress, *simControlPort, *robotSpecConfig) ctl.Start() signals := make(chan os.Signal, 1) diff --git a/config/robot-specs.yaml b/config/robot-specs.yaml new file mode 100644 index 0000000..c8ced85 --- /dev/null +++ b/config/robot-specs.yaml @@ -0,0 +1,29 @@ +robot-specs: + "TIGERs Mannheim": + radius: 0.09 + height: 0.15 + mass: 2 + max_linear_kick_speed: 8 + max_chip_kick_speed: 8 + center_to_dribbler: 0.073 + limits: + acc_speedup_absolute_max: 3 + acc_speedup_angular_max: 50 + acc_brake_absolute_max: 6 + acc_brake_angular_max: 50 + vel_absolute_max: 3 + vel_angular_max: 20 + "ER-Force": + radius: 0.09 + height: 0.15 + mass: 2 + max_linear_kick_speed: 8 + max_chip_kick_speed: 8 + center_to_dribbler: 0.073 + limits: + acc_speedup_absolute_max: 3 + acc_speedup_angular_max: 50 + acc_brake_absolute_max: 6 + acc_brake_angular_max: 50 + vel_absolute_max: 3 + vel_angular_max: 20 \ No newline at end of file diff --git a/go.mod b/go.mod index ed15868..1620f9c 100644 --- a/go.mod +++ b/go.mod @@ -5,4 +5,5 @@ go 1.15 require ( github.com/golang/protobuf v1.4.3 google.golang.org/protobuf v1.25.0 + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 2384568..0133b5b 100644 --- a/go.sum +++ b/go.sum @@ -63,5 +63,9 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/internal/geom/ssl_gc_geometry.pb.go b/internal/geom/ssl_gc_geometry.pb.go index b25e3ae..3b791cc 100644 --- a/internal/geom/ssl_gc_geometry.pb.go +++ b/internal/geom/ssl_gc_geometry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_gc_geometry.proto package geom diff --git a/internal/referee/ssl_gc_common.pb.go b/internal/referee/ssl_gc_common.pb.go index 430d240..1d3c5dc 100644 --- a/internal/referee/ssl_gc_common.pb.go +++ b/internal/referee/ssl_gc_common.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_gc_common.proto package referee diff --git a/internal/referee/ssl_gc_game_event.pb.go b/internal/referee/ssl_gc_game_event.pb.go index 4232199..853f1af 100644 --- a/internal/referee/ssl_gc_game_event.pb.go +++ b/internal/referee/ssl_gc_game_event.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_gc_game_event.proto package referee diff --git a/internal/referee/ssl_gc_referee_message.pb.go b/internal/referee/ssl_gc_referee_message.pb.go index 121f14c..8b499b9 100644 --- a/internal/referee/ssl_gc_referee_message.pb.go +++ b/internal/referee/ssl_gc_referee_message.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_gc_referee_message.proto package referee diff --git a/internal/simctl/robot_specs.go b/internal/simctl/robot_specs.go new file mode 100644 index 0000000..9049e15 --- /dev/null +++ b/internal/simctl/robot_specs.go @@ -0,0 +1,115 @@ +package simctl + +import ( + "github.com/RoboCup-SSL/ssl-simulation-controller/internal/referee" + "github.com/golang/protobuf/proto" + "gopkg.in/yaml.v2" + "io/ioutil" + "log" +) + +type TeamRobotSpecs struct { + Teams map[string]RobotSpec `yaml:"robot-specs"` +} + +type RobotSpec struct { + Radius float32 `yaml:"radius"` + Height float32 `yaml:"height"` + Mass float32 `yaml:"mass"` + MaxLinearKickSpeed float32 `yaml:"max_linear_kick_speed"` + MaxChipKickSpeed float32 `yaml:"max_chip_kick_speed"` + CenterToDribbler float32 `yaml:"center_to_dribbler"` + Limits Limits `yaml:"limits"` +} + +type Limits struct { + AccSpeedupAbsoluteMax float32 `yaml:"acc_speedup_absolute_max,omitempty"` + AccSpeedupAngularMax float32 `yaml:"acc_speedup_angular_max,omitempty"` + AccBrakeAbsoluteMax float32 `yaml:"acc_brake_absolute_max,omitempty"` + AccBrakeAngularMax float32 `yaml:"acc_brake_angular_max,omitempty"` + VelAbsoluteMax float32 `yaml:"vel_absolute_max,omitempty"` + VelAngularMax float32 `yaml:"vel_angular_max,omitempty"` +} + +type RobotSpecSetter struct { + c *SimulationController + + teamRobotSpecs TeamRobotSpecs + appliedTeams map[referee.Team]string +} + +func (r *RobotSpecSetter) LoadRobotSpecs(configFile string) { + data, err := ioutil.ReadFile(configFile) + if err != nil { + log.Println("Could not read robot spec file: ", err) + } + if err := yaml.Unmarshal(data, &r.teamRobotSpecs); err != nil { + log.Println("Could not unmarshal robot spec file: ", err) + } + r.appliedTeams = map[referee.Team]string{} +} + +func (r *RobotSpecSetter) handleRobotSpecs() { + if *r.c.lastRefereeMsg.Command != referee.Referee_HALT { + // Only during HALT + return + } + + r.updateTeam(referee.Team_BLUE, *r.c.lastRefereeMsg.Blue.Name) + r.updateTeam(referee.Team_YELLOW, *r.c.lastRefereeMsg.Yellow.Name) +} + +func (r *RobotSpecSetter) updateTeam(team referee.Team, teamName string) { + if r.appliedTeams[team] != teamName { + if spec, ok := r.teamRobotSpecs.Teams[teamName]; ok { + protoSpec := mapRobotSpec(spec) + protoSpec.Id = new(referee.RobotId) + protoSpec.Id.Id = new(uint32) + protoSpec.Id.Team = new(referee.Team) + *protoSpec.Id.Id = 0 + *protoSpec.Id.Team = team + r.sendConfig(protoSpec) + r.appliedTeams[team] = teamName + } + } +} + +func (r *RobotSpecSetter) sendConfig(robotSpec *RobotSpecs) { + log.Printf("Sending robot spec %v", robotSpec) + + command := SimulatorCommand{ + Config: &SimulatorConfig{ + RobotSpecs: []*RobotSpecs{ + robotSpec, + }}, + } + + if data, err := proto.Marshal(&command); err != nil { + log.Println("Could not marshal command: ", err) + } else { + r.c.simControlClient.Send(data) + } +} + +func mapRobotSpec(spec RobotSpec) (protoSpec *RobotSpecs) { + protoSpec = new(RobotSpecs) + protoSpec.Radius = &spec.Radius + protoSpec.Height = &spec.Height + protoSpec.Mass = &spec.Mass + protoSpec.MaxLinearKickSpeed = &spec.MaxLinearKickSpeed + protoSpec.MaxChipKickSpeed = &spec.MaxChipKickSpeed + protoSpec.CenterToDribbler = &spec.CenterToDribbler + protoSpec.Limits = mapRobotLimits(spec.Limits) + return +} + +func mapRobotLimits(limits Limits) (protoLimits *RobotLimits) { + protoLimits = new(RobotLimits) + protoLimits.AccSpeedupAbsoluteMax = &limits.AccSpeedupAbsoluteMax + protoLimits.AccSpeedupAngularMax = &limits.AccSpeedupAngularMax + protoLimits.AccBrakeAbsoluteMax = &limits.AccBrakeAbsoluteMax + protoLimits.AccBrakeAngularMax = &limits.AccBrakeAngularMax + protoLimits.VelAbsoluteMax = &limits.VelAbsoluteMax + protoLimits.VelAngularMax = &limits.VelAngularMax + return +} diff --git a/internal/simctl/simctl.go b/internal/simctl/simctl.go index f8751a1..e2ed488 100644 --- a/internal/simctl/simctl.go +++ b/internal/simctl/simctl.go @@ -24,9 +24,10 @@ type SimulationController struct { ballReplacer BallReplacer robotCountMaintainer RobotCountMaintainer + robotSpecsSetter RobotSpecSetter } -func NewSimulationController(visionAddress, refereeAddress, trackerAddress string, simControlPort string) (c *SimulationController) { +func NewSimulationController(visionAddress, refereeAddress, trackerAddress, simControlPort, robotSpecConfig string) (c *SimulationController) { c = new(SimulationController) c.visionServer = sslnet.NewMulticastServer(visionAddress, c.onNewVisionData) c.refereeServer = sslnet.NewMulticastServer(refereeAddress, c.onNewRefereeData) @@ -34,6 +35,8 @@ func NewSimulationController(visionAddress, refereeAddress, trackerAddress strin c.simControlPort = simControlPort c.ballReplacer.c = c c.robotCountMaintainer.c = c + c.robotSpecsSetter.c = c + c.robotSpecsSetter.LoadRobotSpecs(robotSpecConfig) return } @@ -101,6 +104,7 @@ func (c *SimulationController) handle() { c.ballReplacer.handleReplaceBall() c.robotCountMaintainer.handleRobotCount() + c.robotSpecsSetter.handleRobotSpecs() } func (c *SimulationController) Start() { diff --git a/internal/simctl/ssl_simulation_config.pb.go b/internal/simctl/ssl_simulation_config.pb.go index 55e8e0d..56c2101 100644 --- a/internal/simctl/ssl_simulation_config.pb.go +++ b/internal/simctl/ssl_simulation_config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_simulation_config.proto package simctl @@ -10,9 +10,9 @@ import ( referee "github.com/RoboCup-SSL/ssl-simulation-controller/internal/referee" vision "github.com/RoboCup-SSL/ssl-simulation-controller/internal/vision" proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" ) @@ -218,14 +218,14 @@ type RobotSpecs struct { MaxLinearKickSpeed *float32 `protobuf:"fixed32,7,opt,name=max_linear_kick_speed,json=maxLinearKickSpeed" json:"max_linear_kick_speed,omitempty"` // Max chip kick speed [m/s] (unset = unlimited) MaxChipKickSpeed *float32 `protobuf:"fixed32,8,opt,name=max_chip_kick_speed,json=maxChipKickSpeed" json:"max_chip_kick_speed,omitempty"` - // Width of the dribbler [m] (implicitly defines the distance from robot center to dribbler and opening angle) - DribblerWidth *float32 `protobuf:"fixed32,9,opt,name=dribbler_width,json=dribblerWidth" json:"dribbler_width,omitempty"` + // Distance from robot center to dribbler [m] (implicitly defines the opening angle and dribbler width) + CenterToDribbler *float32 `protobuf:"fixed32,9,opt,name=center_to_dribbler,json=centerToDribbler" json:"center_to_dribbler,omitempty"` // Movement limits Limits *RobotLimits `protobuf:"bytes,10,opt,name=limits" json:"limits,omitempty"` // Wheel angle configuration WheelAngles *RobotWheelAngles `protobuf:"bytes,13,opt,name=wheel_angles,json=wheelAngles" json:"wheel_angles,omitempty"` // Custom robot spec for specific simulators (the protobuf files are managed by the simulators) - Custom *any.Any `protobuf:"bytes,14,opt,name=custom" json:"custom,omitempty"` + Custom *anypb.Any `protobuf:"bytes,14,opt,name=custom" json:"custom,omitempty"` } // Default values for RobotSpecs fields. @@ -308,9 +308,9 @@ func (x *RobotSpecs) GetMaxChipKickSpeed() float32 { return 0 } -func (x *RobotSpecs) GetDribblerWidth() float32 { - if x != nil && x.DribblerWidth != nil { - return *x.DribblerWidth +func (x *RobotSpecs) GetCenterToDribbler() float32 { + if x != nil && x.CenterToDribbler != nil { + return *x.CenterToDribbler } return 0 } @@ -329,7 +329,7 @@ func (x *RobotSpecs) GetWheelAngles() *RobotWheelAngles { return nil } -func (x *RobotSpecs) GetCustom() *any.Any { +func (x *RobotSpecs) GetCustom() *anypb.Any { if x != nil { return x.Custom } @@ -342,7 +342,7 @@ type RealismConfig struct { unknownFields protoimpl.UnknownFields // Custom config for specific simulators (the protobuf files are managed by the simulators) - Custom *any.Any `protobuf:"bytes,1,opt,name=custom" json:"custom,omitempty"` + Custom *anypb.Any `protobuf:"bytes,1,opt,name=custom" json:"custom,omitempty"` } func (x *RealismConfig) Reset() { @@ -377,7 +377,7 @@ func (*RealismConfig) Descriptor() ([]byte, []int) { return file_ssl_simulation_config_proto_rawDescGZIP(), []int{3} } -func (x *RealismConfig) GetCustom() *any.Any { +func (x *RealismConfig) GetCustom() *anypb.Any { if x != nil { return x.Custom } @@ -464,87 +464,78 @@ var File_ssl_simulation_config_proto protoreflect.FileDescriptor var file_ssl_simulation_config_proto_rawDesc = []byte{ 0x0a, 0x1b, 0x73, 0x73, 0x6c, 0x5f, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x65, - 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x75, 0x6d, 0x61, 0x74, 0x72, - 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x13, 0x73, 0x73, - 0x6c, 0x5f, 0x67, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x19, 0x73, 0x73, 0x6c, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x65, - 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb7, 0x02, 0x0a, 0x0b, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x5f, 0x73, - 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x61, 0x63, 0x63, 0x53, 0x70, - 0x65, 0x65, 0x64, 0x75, 0x70, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x78, - 0x12, 0x35, 0x0a, 0x17, 0x61, 0x63, 0x63, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x5f, - 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x14, 0x61, 0x63, 0x63, 0x53, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x41, 0x6e, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x33, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x5f, 0x62, - 0x72, 0x61, 0x6b, 0x65, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x61, - 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x61, 0x63, 0x63, 0x42, 0x72, 0x61, 0x6b, - 0x65, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x31, 0x0a, 0x15, - 0x61, 0x63, 0x63, 0x5f, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, - 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x61, 0x63, 0x63, - 0x42, 0x72, 0x61, 0x6b, 0x65, 0x41, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x61, 0x78, 0x12, - 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6c, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x76, 0x65, 0x6c, 0x41, 0x62, - 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x76, 0x65, 0x6c, - 0x5f, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0d, 0x76, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x61, - 0x78, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, - 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x72, 0x6f, - 0x6e, 0x74, 0x52, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x5f, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x02, 0x28, 0x02, 0x52, 0x09, 0x62, 0x61, 0x63, - 0x6b, 0x52, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x6c, - 0x65, 0x66, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x02, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x4c, - 0x65, 0x66, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x66, - 0x74, 0x18, 0x04, 0x20, 0x02, 0x28, 0x02, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x4c, 0x65, - 0x66, 0x74, 0x22, 0xc5, 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x70, 0x65, 0x63, - 0x73, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x08, 0x2e, - 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x06, 0x72, - 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x04, 0x30, 0x2e, 0x30, - 0x39, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x04, 0x30, 0x2e, 0x31, 0x35, 0x52, - 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x6d, - 0x61, 0x78, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x5f, 0x73, - 0x70, 0x65, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x4c, - 0x69, 0x6e, 0x65, 0x61, 0x72, 0x4b, 0x69, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2d, - 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x68, 0x69, 0x70, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x5f, - 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x61, 0x78, - 0x43, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x25, 0x0a, - 0x0e, 0x64, 0x72, 0x69, 0x62, 0x62, 0x6c, 0x65, 0x72, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x64, 0x72, 0x69, 0x62, 0x62, 0x6c, 0x65, 0x72, 0x57, - 0x69, 0x64, 0x74, 0x68, 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, - 0x73, 0x2e, 0x73, 0x75, 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, - 0x52, 0x06, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0c, 0x77, 0x68, 0x65, 0x65, - 0x6c, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x75, 0x6d, 0x61, - 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, - 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x52, - 0x0b, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x06, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, - 0x6e, 0x79, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x3d, 0x0a, 0x0d, 0x52, 0x65, - 0x61, 0x6c, 0x69, 0x73, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x06, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x82, 0x02, 0x0a, 0x0f, 0x53, 0x69, - 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, - 0x08, 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x53, 0x53, 0x4c, 0x5f, 0x47, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x4a, 0x0a, 0x0b, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x73, - 0x75, 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x52, 0x0a, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, - 0x69, 0x73, 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x75, - 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x73, + 0x73, 0x6c, 0x5f, 0x67, 0x63, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x19, 0x73, 0x73, 0x6c, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x67, + 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb7, 0x02, 0x0a, 0x0b, 0x52, 0x6f, 0x62, + 0x6f, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x5f, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x61, 0x63, 0x63, 0x53, + 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x4d, 0x61, + 0x78, 0x12, 0x35, 0x0a, 0x17, 0x61, 0x63, 0x63, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, + 0x5f, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x14, 0x61, 0x63, 0x63, 0x53, 0x70, 0x65, 0x65, 0x64, 0x75, 0x70, 0x41, 0x6e, + 0x67, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x33, 0x0a, 0x16, 0x61, 0x63, 0x63, 0x5f, + 0x62, 0x72, 0x61, 0x6b, 0x65, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x5f, 0x6d, + 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x61, 0x63, 0x63, 0x42, 0x72, 0x61, + 0x6b, 0x65, 0x41, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x31, 0x0a, + 0x15, 0x61, 0x63, 0x63, 0x5f, 0x62, 0x72, 0x61, 0x6b, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x75, 0x6c, + 0x61, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x61, 0x63, + 0x63, 0x42, 0x72, 0x61, 0x6b, 0x65, 0x41, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x4d, 0x61, 0x78, + 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6c, 0x5f, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x76, 0x65, 0x6c, 0x41, + 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x4d, 0x61, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x76, 0x65, + 0x6c, 0x5f, 0x61, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0d, 0x76, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x4d, + 0x61, 0x78, 0x22, 0x8e, 0x01, 0x0a, 0x10, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x57, 0x68, 0x65, 0x65, + 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6e, 0x74, + 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x02, 0x52, 0x0a, 0x66, 0x72, + 0x6f, 0x6e, 0x74, 0x52, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, + 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x02, 0x28, 0x02, 0x52, 0x09, 0x62, 0x61, + 0x63, 0x6b, 0x52, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x5f, + 0x6c, 0x65, 0x66, 0x74, 0x18, 0x03, 0x20, 0x02, 0x28, 0x02, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, + 0x4c, 0x65, 0x66, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x5f, 0x6c, 0x65, + 0x66, 0x74, 0x18, 0x04, 0x20, 0x02, 0x28, 0x02, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x4c, + 0x65, 0x66, 0x74, 0x22, 0x90, 0x03, 0x0a, 0x0a, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x70, 0x65, + 0x63, 0x73, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x02, 0x28, 0x0b, 0x32, 0x08, + 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x06, + 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x04, 0x30, 0x2e, + 0x30, 0x39, 0x52, 0x06, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x06, 0x68, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x04, 0x30, 0x2e, 0x31, 0x35, + 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x15, + 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x5f, + 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x12, 0x6d, 0x61, 0x78, + 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x4b, 0x69, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, + 0x2d, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x68, 0x69, 0x70, 0x5f, 0x6b, 0x69, 0x63, 0x6b, + 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6d, 0x61, + 0x78, 0x43, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x63, 0x6b, 0x53, 0x70, 0x65, 0x65, 0x64, 0x12, 0x2c, + 0x0a, 0x12, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x72, 0x69, 0x62, + 0x62, 0x6c, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x63, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x54, 0x6f, 0x44, 0x72, 0x69, 0x62, 0x62, 0x6c, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x06, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x52, + 0x6f, 0x62, 0x6f, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x52, 0x06, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x73, 0x12, 0x34, 0x0a, 0x0c, 0x77, 0x68, 0x65, 0x65, 0x6c, 0x5f, 0x61, 0x6e, 0x67, 0x6c, + 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x52, 0x6f, 0x62, 0x6f, 0x74, + 0x57, 0x68, 0x65, 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x77, 0x68, 0x65, + 0x65, 0x6c, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, + 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x3d, 0x0a, 0x0d, 0x52, 0x65, 0x61, 0x6c, 0x69, 0x73, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x06, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0xc6, 0x01, 0x0a, 0x0f, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, + 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x08, 0x67, 0x65, 0x6f, + 0x6d, 0x65, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x53, 0x53, + 0x4c, 0x5f, 0x47, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x67, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x0b, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x52, 0x0a, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x35, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x73, + 0x6d, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x69, 0x73, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x73, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, @@ -570,24 +561,24 @@ func file_ssl_simulation_config_proto_rawDescGZIP() []byte { var file_ssl_simulation_config_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_ssl_simulation_config_proto_goTypes = []interface{}{ - (*RobotLimits)(nil), // 0: edu.tigers.sumatra.simulation.RobotLimits - (*RobotWheelAngles)(nil), // 1: edu.tigers.sumatra.simulation.RobotWheelAngles - (*RobotSpecs)(nil), // 2: edu.tigers.sumatra.simulation.RobotSpecs - (*RealismConfig)(nil), // 3: edu.tigers.sumatra.simulation.RealismConfig - (*SimulatorConfig)(nil), // 4: edu.tigers.sumatra.simulation.SimulatorConfig + (*RobotLimits)(nil), // 0: RobotLimits + (*RobotWheelAngles)(nil), // 1: RobotWheelAngles + (*RobotSpecs)(nil), // 2: RobotSpecs + (*RealismConfig)(nil), // 3: RealismConfig + (*SimulatorConfig)(nil), // 4: SimulatorConfig (*referee.RobotId)(nil), // 5: RobotId - (*any.Any)(nil), // 6: google.protobuf.Any + (*anypb.Any)(nil), // 6: google.protobuf.Any (*vision.SSL_GeometryData)(nil), // 7: SSL_GeometryData } var file_ssl_simulation_config_proto_depIdxs = []int32{ - 5, // 0: edu.tigers.sumatra.simulation.RobotSpecs.id:type_name -> RobotId - 0, // 1: edu.tigers.sumatra.simulation.RobotSpecs.limits:type_name -> edu.tigers.sumatra.simulation.RobotLimits - 1, // 2: edu.tigers.sumatra.simulation.RobotSpecs.wheel_angles:type_name -> edu.tigers.sumatra.simulation.RobotWheelAngles - 6, // 3: edu.tigers.sumatra.simulation.RobotSpecs.custom:type_name -> google.protobuf.Any - 6, // 4: edu.tigers.sumatra.simulation.RealismConfig.custom:type_name -> google.protobuf.Any - 7, // 5: edu.tigers.sumatra.simulation.SimulatorConfig.geometry:type_name -> SSL_GeometryData - 2, // 6: edu.tigers.sumatra.simulation.SimulatorConfig.robot_specs:type_name -> edu.tigers.sumatra.simulation.RobotSpecs - 3, // 7: edu.tigers.sumatra.simulation.SimulatorConfig.realism_config:type_name -> edu.tigers.sumatra.simulation.RealismConfig + 5, // 0: RobotSpecs.id:type_name -> RobotId + 0, // 1: RobotSpecs.limits:type_name -> RobotLimits + 1, // 2: RobotSpecs.wheel_angles:type_name -> RobotWheelAngles + 6, // 3: RobotSpecs.custom:type_name -> google.protobuf.Any + 6, // 4: RealismConfig.custom:type_name -> google.protobuf.Any + 7, // 5: SimulatorConfig.geometry:type_name -> SSL_GeometryData + 2, // 6: SimulatorConfig.robot_specs:type_name -> RobotSpecs + 3, // 7: SimulatorConfig.realism_config:type_name -> RealismConfig 8, // [8:8] is the sub-list for method output_type 8, // [8:8] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name diff --git a/internal/simctl/ssl_simulation_control.pb.go b/internal/simctl/ssl_simulation_control.pb.go index 48d4b4a..134c491 100644 --- a/internal/simctl/ssl_simulation_control.pb.go +++ b/internal/simctl/ssl_simulation_control.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_simulation_control.proto package simctl @@ -490,27 +490,25 @@ var file_ssl_simulation_control_proto_rawDesc = []byte{ 0x70, 0x6f, 0x72, 0x74, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x70, 0x65, 0x65, 0x64, 0x22, 0xa5, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, + 0x70, 0x65, 0x65, 0x64, 0x22, 0x87, 0x01, 0x0a, 0x10, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x49, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x73, 0x75, 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x46, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, - 0x73, 0x2e, 0x73, 0x75, 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5a, 0x0a, 0x11, - 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x45, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, 0x2e, 0x73, - 0x75, 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x6f, 0x62, 0x6f, 0x43, 0x75, 0x70, 0x2d, 0x53, - 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x69, 0x6d, 0x63, 0x74, 0x6c, + 0x74, 0x72, 0x6f, 0x6c, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5a, + 0x0a, 0x11, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x65, 0x64, 0x75, 0x2e, 0x74, 0x69, 0x67, 0x65, 0x72, 0x73, + 0x2e, 0x73, 0x75, 0x6d, 0x61, 0x74, 0x72, 0x61, 0x2e, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x6f, 0x62, 0x6f, 0x43, 0x75, 0x70, + 0x2d, 0x53, 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x69, 0x6d, 0x63, 0x74, 0x6c, } var ( @@ -533,7 +531,7 @@ var file_ssl_simulation_control_proto_goTypes = []interface{}{ (*SimulatorCommand)(nil), // 3: edu.tigers.sumatra.simulation.SimulatorCommand (*SimulatorResponse)(nil), // 4: edu.tigers.sumatra.simulation.SimulatorResponse (*referee.RobotId)(nil), // 5: RobotId - (*SimulatorConfig)(nil), // 6: edu.tigers.sumatra.simulation.SimulatorConfig + (*SimulatorConfig)(nil), // 6: SimulatorConfig (*SimulatorError)(nil), // 7: edu.tigers.sumatra.simulation.SimulatorError } var file_ssl_simulation_control_proto_depIdxs = []int32{ @@ -541,7 +539,7 @@ var file_ssl_simulation_control_proto_depIdxs = []int32{ 0, // 1: edu.tigers.sumatra.simulation.SimulatorControl.teleport_ball:type_name -> edu.tigers.sumatra.simulation.TeleportBall 1, // 2: edu.tigers.sumatra.simulation.SimulatorControl.teleport_robot:type_name -> edu.tigers.sumatra.simulation.TeleportRobot 2, // 3: edu.tigers.sumatra.simulation.SimulatorCommand.control:type_name -> edu.tigers.sumatra.simulation.SimulatorControl - 6, // 4: edu.tigers.sumatra.simulation.SimulatorCommand.config:type_name -> edu.tigers.sumatra.simulation.SimulatorConfig + 6, // 4: edu.tigers.sumatra.simulation.SimulatorCommand.config:type_name -> SimulatorConfig 7, // 5: edu.tigers.sumatra.simulation.SimulatorResponse.errors:type_name -> edu.tigers.sumatra.simulation.SimulatorError 6, // [6:6] is the sub-list for method output_type 6, // [6:6] is the sub-list for method input_type diff --git a/internal/simctl/ssl_simulation_error.pb.go b/internal/simctl/ssl_simulation_error.pb.go index da2f903..f613b89 100644 --- a/internal/simctl/ssl_simulation_error.pb.go +++ b/internal/simctl/ssl_simulation_error.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_simulation_error.proto package simctl diff --git a/internal/tracker/ssl_vision_detection_tracked.pb.go b/internal/tracker/ssl_vision_detection_tracked.pb.go index 348b311..37775a2 100644 --- a/internal/tracker/ssl_vision_detection_tracked.pb.go +++ b/internal/tracker/ssl_vision_detection_tracked.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_vision_detection_tracked.proto package tracker diff --git a/internal/tracker/ssl_vision_wrapper_tracked.pb.go b/internal/tracker/ssl_vision_wrapper_tracked.pb.go index 2962827..ef7fcfe 100644 --- a/internal/tracker/ssl_vision_wrapper_tracked.pb.go +++ b/internal/tracker/ssl_vision_wrapper_tracked.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_vision_wrapper_tracked.proto package tracker diff --git a/internal/vision/ssl_vision_detection.pb.go b/internal/vision/ssl_vision_detection.pb.go index d935459..07831f2 100644 --- a/internal/vision/ssl_vision_detection.pb.go +++ b/internal/vision/ssl_vision_detection.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_vision_detection.proto package vision diff --git a/internal/vision/ssl_vision_geometry.pb.go b/internal/vision/ssl_vision_geometry.pb.go index fb0e6c3..3196b59 100644 --- a/internal/vision/ssl_vision_geometry.pb.go +++ b/internal/vision/ssl_vision_geometry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_vision_geometry.proto package vision diff --git a/internal/vision/ssl_vision_wrapper.pb.go b/internal/vision/ssl_vision_wrapper.pb.go index 95d7d26..33377bd 100644 --- a/internal/vision/ssl_vision_wrapper.pb.go +++ b/internal/vision/ssl_vision_wrapper.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.12.4 +// protoc v3.15.6 // source: ssl_vision_wrapper.proto package vision diff --git a/proto/ssl_simulation_config.proto b/proto/ssl_simulation_config.proto index f7f84c7..5913632 100644 --- a/proto/ssl_simulation_config.proto +++ b/proto/ssl_simulation_config.proto @@ -1,6 +1,5 @@ syntax = "proto2"; option go_package = "github.com/RoboCup-SSL/ssl-simulation-controller/internal/simctl"; -package edu.tigers.sumatra.simulation; import "ssl_gc_common.proto"; import "ssl_vision_geometry.proto"; @@ -50,8 +49,8 @@ message RobotSpecs { optional float max_linear_kick_speed = 7; // Max chip kick speed [m/s] (unset = unlimited) optional float max_chip_kick_speed = 8; - // Width of the dribbler [m] (implicitly defines the distance from robot center to dribbler and opening angle) - optional float dribbler_width = 9; + // Distance from robot center to dribbler [m] (implicitly defines the opening angle and dribbler width) + optional float center_to_dribbler = 9; // Movement limits optional RobotLimits limits = 10; // Wheel angle configuration