private RobotSpecification BuildRobotSpec() { RobotSpecification specRobot = new RobotSpecification(); specRobot.RobotID = "R7"; specRobot.BehaviorsPath = @"C:\Devel\EmergeStudio\BehaviorSet-R7\bin\Debug"; SpecComm cs1 = new SpecComm() { Name = "Drive", CommunicatorType = SpecComm.CommType.Serial, HasTelemetry = true, HasRemoteControl = true }; cs1.Parameters.Add("COMPORT", "COM25"); cs1.Parameters.Add("BAUD", "9600"); specRobot.CommSpecs.Add(cs1); specRobot.SensorSpecs.Add(new SpecSensor { Name = "DistFwd", Position = 0, RetType = typeof(int), Plot = true }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "DistR30", Position = 1, RetType = typeof(int), Plot = true }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "DistL30", Position = 2, RetType = typeof(int), Plot = true }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "DistL90", Position = 3, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "Heading", Position = 4, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "Encoder1", Position = 5, RetType = typeof(int), Plot = true }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "Encoder2", Position = 6, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "Speed", Position = 7, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "Direction", Position = 8, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "IsPower", Position = 9, RetType = typeof(bool) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "HasArrived", Position = 10, RetType = typeof(bool) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "ArmBase", Position = 11, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "ArmElbow", Position = 12, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "ArmWrist", Position = 13, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "ArmWristRot", Position = 14, RetType = typeof(int) }); specRobot.SensorSpecs.Add(new SpecSensor { Name = "ArmGripper", Position = 15, RetType = typeof(int) }); SpecBehavior bs = new SpecBehavior() { Name = "Blocked", Priority = 1 }; bs.Parameters.Add("Parameter1", "abc"); specRobot.BehaviorSpecs.Add("Blocked", bs); specRobot.BehaviorSpecs.Add("Avoid", new SpecBehavior() { Name = "Avoid", Priority = 2 }); specRobot.BehaviorSpecs.Add("Cruise", new SpecBehavior() { Name = "Cruise", Priority = 3 }); specRobot.HaltRequests.Add(new Request() { Name = "Halt/Reset", Channel = "Drive", Command = "EH" }); specRobot.HaltRequests.Add(new Request() { Name = "Power Off", Channel = "Drive", Command = "p1" }); specRobot.GeneralSpecs.Add("CruiseDistance", "40"); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnPower2", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnPower3", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnFunc1", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnFunc2", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnFunc3", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnVidUp", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnVidDown", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnVidLeft", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnVidRight", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnVidCenter", IsEnabled = false }); specRobot.ControlSpecs.Add(new SpecControl() { ControlName = "btnVidScan", IsEnabled = false }); // Save it // specRobot.Save("Test.xml"); return specRobot; }
public RobotSpecification(string filename) { BehaviorsPath = Path.GetDirectoryName(filename); XDocument doc = XDocument.Load(filename); // Robot ID RobotID = doc.Descendants("RobotID").First().Value; // Comm Specs var x = doc.Descendants("CommSpecs"); var specComms = from cs in doc.Descendants("CommSpecs").Descendants("CommSpec") select cs; foreach (XElement elSpecComm in specComms) { SpecComm sc = new SpecComm(); sc.Name = elSpecComm.Element("Name").Value; sc.CommunicatorType = (SpecComm.CommType)Enum.Parse(typeof(SpecComm.CommType), elSpecComm.Element("CommunicatorType").Value, true); sc.HasTelemetry = (bool)bool.Parse(elSpecComm.Element("HasTelemetry").Value); sc.HasRemoteControl = (bool)bool.Parse(elSpecComm.Element("HasRemoteControl").Value); var parameters = from parm in elSpecComm.Descendants("Parameters").Descendants("Parameter") select parm; foreach (XElement elParm in parameters) sc.Parameters.Add(elParm.Attribute("Name").Value, elParm.Attribute("Value").Value); m_CommSpec.Add(sc); } // Sensor Specs var specSensors = from ss in doc.Descendants("SensorSpecs").Descendants("SensorSpec") select ss; foreach (XElement elSpecSensor in specSensors) { SpecSensor ss = new SpecSensor(); ss.Name = elSpecSensor.Element("Name").Value; ss.Position = (int)int.Parse(elSpecSensor.Element("Position").Value); ss.RetType = Type.GetType(elSpecSensor.Element("RetType").Value); ss.Plot = (bool)bool.Parse(elSpecSensor.Element("Plot").Value); m_SensorSpecs.Add(ss); } // Behavior Specs var specBehaviors = from bs in doc.Descendants("BehaviorSpecs").Descendants("BehaviorSpec") select bs; foreach (XElement elSpecBehavior in specBehaviors) { SpecBehavior bs = new SpecBehavior(); bs.Name = elSpecBehavior.Element("Name").Value; bs.Priority = (int)int.Parse(elSpecBehavior.Element("Priority").Value); var parameters = from parm in elSpecBehavior.Descendants("Parameters").Descendants("Parameter") select parm; foreach (XElement elParm in parameters) bs.Parameters.Add(elParm.Attribute("Name").Value, elParm.Attribute("Value").Value); m_BehaviorSpecs.Add(bs.Name, bs); } // General Specs var specGeneral = from gs in doc.Descendants("GeneralSpecs").Descendants("GeneralSpec") select gs; foreach (XElement elGeneral in specGeneral) m_GeneralSpecs.Add(elGeneral.Attribute("Name").Value, elGeneral.Attribute("Value").Value); // Halt Requests var requestsHalt = from hr in doc.Descendants("HaltRequests").Descendants("HaltRequest") select hr; foreach (XElement elHaltRequest in requestsHalt) { Request req = new Request(); req.Name = elHaltRequest.Element("Name").Value; req.Channel = elHaltRequest.Element("Channel").Value; req.Command = elHaltRequest.Element("Command").Value; m_HaltRequests.Add(req); } // Control Specs var specControls = from hr in doc.Descendants("ControlSpecs").Descendants("ControlSpec") select hr; foreach (XElement elSpecControl in specControls) { SpecControl cs = new SpecControl(); cs.ControlName = elSpecControl.Element("ControlName").Value; cs.Text = elSpecControl.Element("Text").Value; cs.IsEnabled = (bool)bool.Parse(elSpecControl.Element("IsEnabled").Value); m_ControlSpecs.Add(cs); } // Route Specs var specRoute = from rs in doc.Descendants("RouteSpecs").Descendants("RouteSpec") select rs; foreach (XElement elSpecRoute in specRoute) { SpecRoute rs = new SpecRoute(); rs.OperatorName = elSpecRoute.Element("OperatorName").Value; rs.Parameters = elSpecRoute.Element("Parameters").Value; m_RouteSpecs.Add(rs); } }