public static void Main() { ILogger logger = new MqttLogger(); GpioController gpioController; try { gpioController = new GpioController(); logger.Warn("IO Enabled."); } catch (NotSupportedException) { gpioController = null; logger.Warn("No GPIO. IO Disabled"); } IFileSystem fileSystem = new FileSystem(); RobotConfig configs = RobotConfig.LoadFile(Internal.CONFIG_FILE_NAME, fileSystem, m => logger.Info(m)).GetAwaiter().GetResult(); logger.MinLevel = CalculateLoggingLevelFromConfigs(configs, LoggingLevel.INFO); logger.Info($"Set logging level to {logger.MinLevel}"); Robot robot = Robot.CreateInstance(gpioController, configs, logger); robot.Initialize().Wait(); logger.Info("EllieBot is Fully Operational."); Console.WriteLine("EllieBot is Operational and Nominal."); Console.WriteLine("Press any key to exit"); Console.ReadLine(); }
private Robot(ICommandProcessor cmdProcessor, GpioController controller, RobotConfig configs, ILogger logger) { this.CommandProcessor = cmdProcessor; this.Configuration = configs; this.Logger = logger; this.GpioController = controller; }
private void UpdateConfigControls(RobotConfig config) { connectionPort.Text = config.Port.ToString(); workspaceLowerX.Text = config.Limits.LowerWorkspacePoint.X.ToString(); workspaceLowerY.Text = config.Limits.LowerWorkspacePoint.Y.ToString(); workspaceLowerZ.Text = config.Limits.LowerWorkspacePoint.Z.ToString(); workspaceUpperX.Text = config.Limits.UpperWorkspacePoint.X.ToString(); workspaceUpperY.Text = config.Limits.UpperWorkspacePoint.Y.ToString(); workspaceUpperZ.Text = config.Limits.UpperWorkspacePoint.Z.ToString(); a1LowerLimit.Text = config.Limits.A1AxisLimit.Min.ToString(); a1UpperLimit.Text = config.Limits.A1AxisLimit.Max.ToString(); a2LowerLimit.Text = config.Limits.A2AxisLimit.Min.ToString(); a2UpperLimit.Text = config.Limits.A2AxisLimit.Max.ToString(); a3LowerLimit.Text = config.Limits.A3AxisLimit.Min.ToString(); a3UpperLimit.Text = config.Limits.A3AxisLimit.Max.ToString(); a4LowerLimit.Text = config.Limits.A4AxisLimit.Min.ToString(); a4UpperLimit.Text = config.Limits.A4AxisLimit.Max.ToString(); a5LowerLimit.Text = config.Limits.A5AxisLimit.Min.ToString(); a5UpperLimit.Text = config.Limits.A5AxisLimit.Max.ToString(); a6LowerLimit.Text = config.Limits.A6AxisLimit.Min.ToString(); a6UpperLimit.Text = config.Limits.A6AxisLimit.Max.ToString(); correctionLimitXYZ.Text = config.Limits.CorrectionLimit.XYZ.ToString(); correctionLimitABC.Text = config.Limits.CorrectionLimit.ABC.ToString(); velocityLimitXYZ.Text = config.Limits.VelocityLimit.XYZ.ToString(); velocityLimitABC.Text = config.Limits.VelocityLimit.ABC.ToString(); accelerationLimitXYZ.Text = config.Limits.AccelerationLimit.XYZ.ToString(); accelerationLimitABC.Text = config.Limits.AccelerationLimit.ABC.ToString(); t00.Text = config.Transformation[0, 0].ToString("F3"); t01.Text = config.Transformation[0, 1].ToString("F3"); t02.Text = config.Transformation[0, 2].ToString("F3"); t03.Text = config.Transformation[0, 3].ToString("F3"); t10.Text = config.Transformation[1, 0].ToString("F3"); t11.Text = config.Transformation[1, 1].ToString("F3"); t12.Text = config.Transformation[1, 2].ToString("F3"); t13.Text = config.Transformation[1, 3].ToString("F3"); t20.Text = config.Transformation[2, 0].ToString("F3"); t21.Text = config.Transformation[2, 1].ToString("F3"); t22.Text = config.Transformation[2, 2].ToString("F3"); t23.Text = config.Transformation[2, 3].ToString("F3"); t30.Text = config.Transformation[3, 0].ToString("F3"); t31.Text = config.Transformation[3, 1].ToString("F3"); t32.Text = config.Transformation[3, 2].ToString("F3"); t33.Text = config.Transformation[3, 3].ToString("F3"); }
public void LoadConfig(string configFile) { string jsonString = File.ReadAllText(configFile); RobotConfig config = new RobotConfig(jsonString); Robot.Config = config; UpdateConfigControls(config); }
internal static Robot CreateInstance(GpioController gpioController, RobotConfig configs, ILogger logger) { if (Instance != null) { return(Instance); } ICommandProcessor commandProcessor = new CommandProcessor(logger); Instance = new Robot(commandProcessor, gpioController, configs, logger); return(Instance); }
void Start() { configOptions = new RobotConfig(); if (configOptions.valid) { Debug.Log ("Options initialised ok"); Network.init(); headProps = new Property(); //variables int rate = 100; int[] jntPosMax = new int[]{30,60,55,15,52,90}; int[] jntPosMin = new int[]{-40,-70,-55,-35,-50,0}; int[] error_tol = new int[]{1, 1, 1, 1, 1, 1}; int Type = 3; int TotalJoints = 6; int[] axisMap = new int[]{0, 1, 2, 3, 4, 5}; double Vel = 20.0; double[] Zeros = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; double[] Encoder = new double[]{0.017453, 0.017453, 0.017453, 0.017453, 0.017453, 0.017453}; string partName = "/head"; string device = "controlboardwrapper2"; string subdevice = "simulationcontrol"; //formatting variables into string string properties = "(ENDINI) (rate " + rate + ") (LIMITS (jntPosMax"; properties += arrToStr(jntPosMax); properties += ") (jntPosMin"; properties += arrToStr(jntPosMin); properties +=") (error_tol"; properties += arrToStr(error_tol); properties += ")) (GENERAL (Type " + Type; properties += ") (TotalJoints " + TotalJoints; properties += ") (AxisMap" + arrToStr(axisMap); properties += ") (Vel " + formatDouble(Vel); properties += ") (Zeros" + arrToStr(Zeros); properties += ") (Encoder"; properties += arrToStr(Encoder); properties += ")) (name " + partName + ") (device "+ device; properties += ") (subdevice "+ subdevice +")"; Debug.Log(properties); //initialise properties class with string headProps.fromString(properties); } else { Debug.Log("Configuration failed."); } }
private static void Main(string[] args) { RobotConfig config = LoadConfig("./config.json"); GRPCServer server = config.GrpcServer; Channel channel = new Channel(String.Format("{0}:{1}", server.Host, server.Port) , ChannelCredentials.Insecure); var client = new QQBotClient(new ChatBotHub.ChatBotHubClient(channel)); client.ListenTunnel().Wait(); channel.ShutdownAsync().Wait(); Console.WriteLine("Tunnel stopped; program exit."); }
public bool OsInitialization() { try { _robotConfig = _robotSettings.GetEnviromentSettings(); if (_robotConfig == null || _robotConfig.MatrixSize == null || _robotConfig.Position == null) { _log.Message(LogLevel.Warn, "Default settings will be applied, Config Settings read error"); _robotConfig = RobotConstantsValues.RobotDefaultCongifs; } Console.WriteLine($"Robot {_robotConfig.Name} settings read finish!"); Console.WriteLine($"Start position :---> [{ _robotConfig.Position.X}:{ _robotConfig.Position.Y}:{ _robotConfig.Position.Direction}]"); Console.WriteLine($"Matrix settings :---> [{ _robotConfig.MatrixSize.Max_X_Value}:{ _robotConfig.MatrixSize.Max_Y_Value}]"); RobotCommand command = new RobotCommand { QueueId = 0, Type = RobotCommandType.Initialization, CurentDirection = _robotConfig.Position.Direction, MoveTo = new Position { X = _robotConfig.Position.X, Y = _robotConfig.Position.Y, } }; var cmdResult = _robotStateMachine.Build(RobotCommandType.Initialization).ProcessState(command, _robotConfig.MatrixSize); if (cmdResult.isSuccess && cmdResult.stateResponse != null && cmdResult.stateResponse.CurrentPosition != null) { _currentPosition = cmdResult.stateResponse.CurrentPosition; } _log.Message(LogLevel.Info, cmdResult.isSuccess ? $"{RobotCommandType.Initialization} Success" : $"{RobotCommandType.Initialization} Failure"); return(cmdResult.isSuccess); } catch (Exception ex) { Console.WriteLine(RobotConstantsValues.CriticalErrorOccuredMissionWillNotContinue); _log.Exception(ex); return(false); } }
public void MainRobotService_OsInitialization_Failure_When_RobotStateMachine_InitFailure_Result_False() { //Arrange RobotConfig config = new RobotConfig { Position = new RobotPosition(), MatrixSize = new MatrixSize() }; _robotSettingsMock.Setup(x => x.GetEnviromentSettings()).Returns(config); _robotStateMachineMock.Setup(x => x.Build(It.IsAny <RobotCommandType>()).ProcessState(It.IsAny <RobotCommand>(), It.IsAny <MatrixSize>())).Returns(DemoResult(false, false)); //Act bool result = _mainRobotService.OsInitialization(); //Arrange Assert.False(result); }
private void SaveConfig(object sender, RoutedEventArgs e) { RobotConfig config = CreateConfigurationFromFields(); var saveFileDialog = new Microsoft.Win32.SaveFileDialog { InitialDirectory = Path.Combine(Directory.GetCurrentDirectory(), App.ConfigDir), CheckPathExists = true, FilterIndex = 2, Title = "Save configuration file", DefaultExt = "json", Filter = "JSON files |*.json", FileName = "robot.config.json" }; if (saveFileDialog.ShowDialog() == true && saveFileDialog.FileName != "") { File.WriteAllText(saveFileDialog.FileName, config.ToJsonString()); } }
public void Close(JaguarCtrl jc, RobotConfig robotCfg, string configFile) { double centerLat = double.Parse(centerLatitude); double centerLong = double.Parse(centerLongitude); try { centerLat = double.Parse(jc.txtStartLat.Text); } catch { } try { centerLong = double.Parse(jc.txtStartLong.Text); } catch { } jc.jaguarSetting.GoogleEarthStartLat = centerLat; jc.jaguarSetting.GoogleEarthStartLong = centerLong; try { robotCfg.WriteXml(configFile); } catch { } try { PostMessage(googleEarth.GetMainHwnd(), WM_QUIT, 0, 0); } catch { } }
private void LoadConfig(object sender, RoutedEventArgs e) { var openFileDialog = new Microsoft.Win32.OpenFileDialog { InitialDirectory = Path.Combine(Directory.GetCurrentDirectory(), App.ConfigDir), Title = "Select configuration file", CheckFileExists = true, CheckPathExists = true, DefaultExt = "json", Filter = "JSON files |*.json", FilterIndex = 2, ReadOnlyChecked = true, ShowReadOnly = true, Multiselect = false }; if (openFileDialog.ShowDialog() == true) { Stream fileStream; StreamReader streamReader; try { if ((fileStream = openFileDialog.OpenFile()) != null) { using (fileStream) using (streamReader = new StreamReader(fileStream)) { string jsonString = streamReader.ReadToEnd(); RobotConfig config = new RobotConfig(jsonString); Robot.Config = config; UpdateConfigControls(config); } } } catch (Exception ex) { MainWindow.ShowErrorDialog("Could not load configuration file.", ex); } } }
public void MainRobotService_OsInitialization_Failure_When_GetEnviromentNullOrSomethingIsWrong_Result_False(TestOptions exceptionOption) { //Arrange RobotConfig config = new RobotConfig { Position = new RobotPosition(), MatrixSize = new MatrixSize() }; switch (exceptionOption) { case TestOptions.NULL_RETURN: _robotSettingsMock.Setup(x => x.GetEnviromentSettings()).Returns((RobotConfig)null); break; case TestOptions.THROWS_EXCEPTION: _robotSettingsMock.Setup(x => x.GetEnviromentSettings()).Throws <Exception>(); break; case TestOptions.NULL_Config_MatrixSize: config.MatrixSize = null; _robotSettingsMock.Setup(x => x.GetEnviromentSettings()).Returns(config); break; case TestOptions.NULL_Config_Position: _robotSettingsMock.Setup(x => x.GetEnviromentSettings()).Returns(config); config.Position = null; break; } //Act bool result = _mainRobotService.OsInitialization(); //Arrange Assert.False(result); }
public JaguarCtrl() { simulatedJaguar = new AxDDrRobotSentinel_Simulator(); navigation = new Navigation(this); drRobotConnect = new DrRobotRobotConnection(this); drRobotConnect.connectRobot(); robotCfg = drRobotConnect.robotConfig; jaguarSetting = (RobotConfig.RobotConfigTableRow)robotCfg.RobotConfigTable.Rows[0]; InitializeComponent(); // Setup graphics for simulation SetStyle(ControlStyles.OptimizedDoubleBuffer, false); this.Paint += new System.Windows.Forms.PaintEventHandler(this.JaguarCtrl_Paint); panelGE.Visible = false; mapResolution = trackBarZoom.Value * zoomConstant; // Start Simulated Sensor Update Thread runSensorThread = true; sensorThread = new Thread(runSensorLoop); sensorThread.Start(); }
public iCubLogicalJoints(RobotConfig config) { simControl = new OdeLogicalJoint[MAX_PART,MAX_AXIS]; int head = PART_HEAD; int rawHead = PART_HEAD_RAW; OdeLogicalJoint[] sub; if (config.actHead){ string headName = "head"; // for (int i=0; i<4; i++) { getController(head,0).init(headName,"hinge",0,+1, config); getController(head,1).init(headName,"hinge",1,-1, config); getController(head,2).init(headName,"hinge",2,-1, config); getController(head,3).init(headName,"hinge",3,+1, config); // } // for the eyes, we need to map vergence/version onto // individual hinge joints getController(rawHead,4).init(headName,"hinge",4,-1, config); getController(rawHead,5).init(headName,"hinge",5,+1, config); getController(head,4).init(getController(rawHead,4), getController(rawHead,5), getController(head,5), +1); getController(head,5).init(getController(rawHead,4), getController(rawHead,5), getController(head,4), -1); //////////////////////////////////////////////////////////// // Setting up the left and right arms for (int arm = PART_ARM_LEFT; arm <= PART_ARM_RIGHT; arm++) { string armName = (arm==PART_ARM_LEFT)?"leftarm":"rightarm"; if (arm == PART_ARM_RIGHT && config.actRArm){ getController(arm,0).init(armName,"hinge",0,-1, config); getController(arm,1).init(armName,"hinge",1,+1, config); getController(arm,2).init(armName,"hinge",2,-1, config); getController(arm,3).init(armName,"hinge",3,+1, config); getController(arm,4).init(armName,"hinge",4,-1, config); getController(arm,5).init(armName,"universalAngle1",5,-1, config); getController(arm,6).init(armName,"universalAngle2",5,-1, config); } if (arm == PART_ARM_LEFT && config.actLArm){ getController(arm,0).init(armName,"hinge",0,-1, config); getController(arm,1).init(armName,"hinge",1,-1, config); getController(arm,2).init(armName,"hinge",2,+1, config); getController(arm,3).init(armName,"hinge",3,+1, config); getController(arm,4).init(armName,"hinge",4,+1, config); getController(arm,5).init(armName,"universalAngle1",5,+1, config); getController(arm,6).init(armName,"universalAngle2",5,-1, config); } if (arm == PART_ARM_RIGHT && config.actRHand){ getController(arm,7).init(armName,"hinge",6,+1, config); sub = null; sub = getController(arm,7).nest(1); sub[0].init(armName,"hinge",8,-1, config); getController(arm,8).init(armName,"universalAngle1",22,-1, config);//thumb getController(arm,9).init(armName,"universalAngle2",22,-1, config);//thumb getController(arm,10).init(armName,"hinge",23,-1, config); sub = null; sub = getController(arm,10).nest(1); sub[0].init(armName,"hinge",24,-1, config); getController(arm,11).init(armName,"hinge",10,-1, config);//index proximal getController(arm,12).init(armName,"hinge",14,-1, config); sub = null; sub = getController(arm,12).nest(1); sub[0].init(armName,"hinge",18,-1, config); getController(arm,13).init(armName,"hinge",11,-1, config);//middle finger getController(arm,14).init(armName,"hinge",15,-1, config); sub = null; sub = getController(arm,14).nest(1); sub[0].init(armName,"hinge",19,-1, config); getController(arm,15).init(armName,"hinge",12,-1, config);//ring + pinky sub = null; sub = getController(arm,15).nest(2); sub[0].init(armName,"hinge",16,-1, config); sub[1].init(armName,"hinge",20,-1, config); } if (arm == PART_ARM_LEFT && config.actLHand ){ getController(arm,7).init(armName,"hinge",6,+1, config); sub = null; sub = getController(arm,7).nest(1); sub[0].init(armName,"hinge",8,-1, config); /*getController(arm,8).init(armName,"hinge",22,+1);//thumb getController(arm,9).init(armName,"hinge",23,+1); getController(arm,10).init(armName,"hinge",24,+1); */ getController(arm,8).init(armName,"universalAngle1",22,+1, config);//thumb getController(arm,9).init(armName,"universalAngle2",22,-1, config);//thumb getController(arm,10).init(armName,"hinge",23,+1, config); sub = null; sub = getController(arm,10).nest(1); sub[0].init(armName,"hinge",24,+1, config); getController(arm,11).init(armName,"hinge",10,+1, config);//index proximal getController(arm,12).init(armName,"hinge",14,+1, config); sub = null; sub = getController(arm,12).nest(1); sub[0].init(armName,"hinge",18,+1, config); getController(arm,13).init(armName,"hinge",11,+1, config);//middle finger getController(arm,14).init(armName,"hinge",15,+1, config); sub = null; sub = getController(arm,14).nest(1); sub[0].init(armName,"hinge",19,+1, config); getController(arm,15).init(armName,"hinge",12,+1, config);//ring + pinky sub = null; sub = getController(arm,15).nest(2); sub[0].init(armName,"hinge",16,+1, config); sub[1].init(armName,"hinge",20,+1, config); } } if (config.actLegs){ for (int leg = PART_LEG_LEFT; leg <= PART_LEG_RIGHT; leg++) { string legName = (leg==PART_LEG_LEFT)?"leftleg":"rightleg"; // changed for demo look below for previous joint setup if (leg == PART_LEG_RIGHT){ getController(leg,0).init(legName,"hinge",5,-1, config); getController(leg,1).init(legName,"hinge",4,-1, config); getController(leg,2).init(legName,"hinge",3,-1, config); getController(leg,3).init(legName,"hinge",2,-1, config); getController(leg,4).init(legName,"hinge",1,+1, config); getController(leg,5).init(legName,"hinge",0,-1, config); }else{ getController(leg,0).init(legName,"hinge",5,-1, config); getController(leg,1).init(legName,"hinge",4,+1, config); getController(leg,2).init(legName,"hinge",3,+1, config); getController(leg,3).init(legName,"hinge",2,-1, config); getController(leg,4).init(legName,"hinge",1,+1, config); getController(leg,5).init(legName,"hinge",0,+1, config); } } } if (config.actTorso){ int torso = PART_TORSO; string torsoName = "torso"; getController(torso,0).init(torsoName,"hinge",2,+1, config); getController(torso,1).init(torsoName,"hinge",1,+1, config); getController(torso,2).init(torsoName,"hinge",0,-1, config); } } initialised = true;; }
static void Main(string[] args) { RunLocal = AppContext.BaseDirectory; logs = new Logs(RunLocal); Reload(); if (ConfigUtils.Config.RunQQ == 0 || ConfigUtils.Config.RunGroup.Count == 0) { Console.WriteLine("运行QQ和运行群未设置,请设置后重启"); Console.Read(); return; } RobotConfig = new() { IP = ConfigUtils.Config.IP, Port = ConfigUtils.Config.Port, Name = "BotBiliBili", Pack = new() { 49 }, RunQQ = ConfigUtils.Config.RunQQ, Time = 10000, CallAction = Message, LogAction = Log, StateAction = State }; robot = new(); robot.Set(RobotConfig); robot.Start(); CheckThread.Start(); while (true) { string temp = Console.ReadLine(); string[] arg = temp.Split(' '); if (arg[0] == "stop") { CheckThread.Stop(); HttpUtils.Cancel(); robot.Stop(); return; } else if (arg[0] == "test") { if (arg.Length < 2) { Error("错误的参数"); continue; } if (arg[1] == "video") { if (arg.Length != 3) { Error("错误的参数"); continue; } if (arg[2].StartsWith("AV")) { var data = HttpUtils.GetVideoA(arg[2]); VideoPicGen.Gen(data); Log("已生成"); } else if (arg[2].StartsWith("BV")) { var data = HttpUtils.GetVideoB(arg[2]); VideoPicGen.Gen(data); Log("已生成"); } else { Error("不正确的视频号"); continue; } } else if (arg[1] == "dynamic") { if (arg.Length != 3) { Error("错误的参数"); continue; } var data = HttpUtils.GetDynamic(arg[2]); DynamicPicGen.Gen(data); Log("已生成"); } else if (arg[1] == "duser") { if (arg.Length != 3) { Error("错误的参数"); continue; } var data = HttpUtils.GetDynamicUid(arg[2]); DynamicPicGen.Gen(data); Log("已生成"); } else if (arg[1] == "live") { if (arg.Length != 3) { Error("错误的参数"); continue; } var data = HttpUtils.GetLive(arg[2]); LivePicGen.Gen(data); Log("已生成"); } else if (arg[1] == "nuser") { if (arg.Length != 3) { Error("错误的参数"); continue; } var data1 = HttpUtils.SearchUser(arg[2]); if (data1 == null) { Error($"搜索不到用户:{arg[2]}"); return; } var data2 = data1["data"]["result"] as JArray; if (data2.Count == 0) { Error($"搜索:{arg[2]} 没有结果"); return; } string id = data2[0]["mid"].ToString(); data1 = HttpUtils.GetDynamicUid(id); if (data1 == null) { Error($"获取不到动态:{id}"); return; } string temp1 = DynamicPicGen.Gen(data1); Program.Log($"已生成{temp1}"); } } else if (arg[0] == "reload") { Reload(); Log("已重读"); } } }
private static LoggingLevel CalculateLoggingLevelFromConfigs(RobotConfig configs, LoggingLevel fallbackLoggingLevel = LoggingLevel.INFO) { return(configs == null || string.IsNullOrWhiteSpace(configs.DebuggingLevel) || !Enum.TryParse(configs.DebuggingLevel, out LoggingLevel configLoggingLevel) ? fallbackLoggingLevel : configLoggingLevel); }
///////////////////////////////////////////////////////////////// #region form funtion public JaguarCtrl(DrRobotRobotConnection form, RobotConfig robotConfig) { drRobotConnect = form; robotCfg = robotConfig; jaguarSetting = (RobotConfig.RobotConfigTableRow)robotCfg.RobotConfigTable.Rows[0]; InitializeComponent(); }
/** * Initialize a regular control unit. */ public void init(string unit, string type, int index, int sign, RobotConfig conf) { //initialise parameters for particular joint type, name and index this.number = index; this.type = type; this.unit = unit; this.dryFriction = conf.motorDryFriction; this.maxTorque = conf.motorMaxTorque; this.sign = sign; }