示例#1
0
        float[] ustavki = new float[3];             //изначальные рассогласования фактического местоположения робота и камер
        public override void ReceiveOdomData(string OdometryData)
        {
            RobotOdomData = new float[3];
            if (OdometryData != "")
            {
                // string someString = RobPos;
                string[] words = OdometryData.Split(new char[] { ';' });//парсим строку в массив words
                for (int i = 0; i < 3; i++)
                {
                    RobotOdomData[i] = float.Parse(words[i], System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
                }
                float alpha = RobotOdomData[0];

                RobotOdomData[0] = RobotOdomData[1];
                RobotOdomData[1] = alpha;

                var s = RobotOdomData[0].ToString() + " " + RobotOdomData[1].ToString() + " " + RobotOdomData[2].ToString();

                Form1.f.Invoke(new Action(() => Form1.f.richTextBox2.Text = s));

                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                //здесь осуществить взятие текущих координат из сети

                if (y == 0)
                {
                    y = 1;
                    if (tc != null)         // здесь происходит отправка задающих команд на куку
                    {
                        string control_str; //отправляем нулевые уставки на куку
                        control_str = string.Format(CultureInfo.InvariantCulture, "LUA_Base({0}, {1}, {2})", 0, 0, 0);
                        if (control_str != null)
                        {
                            tc.Send(control_str);                     //отправляем команду на сервер куки
                        }
                        //Form1.f.timer1.Enabled = false;
                        //System.Threading.Thread.Sleep(5000);
                        // Form1.f.timer1.Enabled = true;
                    }


                    float[] camodom = OFC.getCamOdom();

                    //float ledx = 0.1f * (float)Math.Cos(RobotOdomData[2]);//так как метка лежит не поцентру робота а чуть ближе к корме то пересчитываем полученные координаты
                    //float ledy = 0.1f * (float)Math.Sin(RobotOdomData[2]);

                    //camodom[0] = camodom[0] + ledx;
                    //camodom[1] = camodom[1] + ledy;
                    camodom[1] = camodom[1] * -1;
                    if (k == 0)
                    {
                        ustavki[0] = camodom[0];
                        ustavki[1] = camodom[1];
                        ustavki[2] = camodom[2];
                        k          = 1;
                    }

                    float XG; // Х координата
                    float YG; // Y координата
                    float AG = camodom[2];
                    XG = ustavki[0] - camodom[0];
                    // XG = XG;
                    YG = ustavki[1] - camodom[1];
                    //YG = YG * -1;
                    var sb = XG.ToString() + " " + YG.ToString() + " " + camodom[2].ToString();
                    Form1.f.Invoke(new Action(() => Form1.f.rtb_tcp2.Text = sb));


                    // XG = XG * (-1);// умножаем на минс 1 чтобы инвертировать ось Y и она совпадала с глобальной осью координат Y
                    //для проверки сделаем навигациб только по камерам

                    float usrednenieX = Math.Abs(RobotOdomData[0]) - Math.Abs(XG);//высчитываем разницу между одометрий и камерами
                    float usrednenieY = Math.Abs(RobotOdomData[1]) - Math.Abs(YG);
                    RobotOdomData[0] = RobotOdomData[0] - usrednenieX / 10;
                    RobotOdomData[1] = RobotOdomData[1] - usrednenieY / 10;
                    float usrednenieA = Math.Abs(RobotOdomData[2]) - Math.Abs(camodom[2]);
                    RobotOdomData[2] = RobotOdomData[2] + usrednenieA / 100;// RobotOdomData[2] + usrednenieA / 50;

                    float[] newOdom = new float[3];
                    newOdom[0] = RobotOdomData[0];
                    newOdom[1] = RobotOdomData[1];
                    newOdom[2] = RobotOdomData[2];
                    //   key2 = 1;

                    SendOdom(newOdom);
                }
                y++;//чтобы каждые 100 циклов программы y обнулялся и заходил в зону взятия данных с камер
                if (y == 100)
                {
                    y = 0;
                }
            }
        }
示例#2
0
        public static void FinishFile(XG.Model.Domain.File aFile)
        {
            lock (aFile)
            {
                if (aFile.MissingSize > 0)
                {
                    return;
                }

                #region DISABLE ALL MATCHING PACKETS

                // TODO remove all CD* packets if a multi packet was downloaded

                string fileName = XG.Model.Domain.Helper.ShrinkFileName(aFile.Name, 0);
                List<Packet> matchedPackets = (from server in Servers.All from channel in server.Channels from bot in channel.Bots from packet in bot.Packets where packet.Enabled && (XG.Model.Domain.Helper.ShrinkFileName(packet.RealName, 0).EndsWith(fileName) || XG.Model.Domain.Helper.ShrinkFileName(packet.Name, 0).EndsWith(fileName)) select packet).ToList();
                foreach (Packet tPack in matchedPackets)
                {
                    Log.Info("FinishFile(" + aFile + ") disabling " + tPack + " from " + tPack.Parent);
                    tPack.Enabled = false;
                    tPack.Commit();
                }

                #endregion

                string tmpPath = Settings.Default.TempPath + aFile.TmpName;
                string readyPath = Settings.Default.ReadyPath + aFile.Name;

                try
                {
                    if (FileSystem.MoveFile(tmpPath, readyPath))
                    {
                        Files.Remove(aFile);

                        // great, all went right, so lets check what we can do with the file
                        var thread = new Thread(() => HandleFile(readyPath));
                        thread.Name = "HandleFile|" + aFile.Name;
                        thread.Start();
                    }
                    else
                    {
                        Log.Fatal("FinishFile(" + aFile + ") cant move file");
                    }
                }
                catch (Exception ex)
                {
                    Log.Fatal("FinishFile(" + aFile + ") cant finish file", ex);

                    FireNotificationAdded(Notification.Types.FileFinishFailed, aFile);
                }
            }
        }
示例#3
0
 protected void Parse(XG.Plugin.Irc.Parser.AParser aParser, string aMessage)
 {
     aMessage = XG.Plugin.Irc.Parser.Helper.RemoveSpecialIrcChars(aMessage);
     var message = new Message
     {
         Channel = Channel,
         Nick = Bot.Name,
         Text = aMessage
     };
     aParser.Parse(message);
 }
示例#4
0
 protected void Parse(XG.Plugin.Irc.Parser.AParser aParser, XG.Plugin.Irc.IrcConnection aConnection, IrcEventArgs aEvent)
 {
     string tMessage = XG.Plugin.Irc.Parser.Helper.RemoveSpecialIrcChars(aEvent.Data.Message);
     aParser.Parse(aConnection, tMessage, aEvent);
 }
示例#5
0
 Model.Domain.Result LoadBySearch(XG.Model.Domain.Search aSearch, bool aShowOfflineBots, int aCount, int aPage, string aSortBy, string aSort)
 {
     var results = Webserver.Search.Packets.GetResults(aSearch, aShowOfflineBots, (aPage - 1) * aCount, aCount, aSortBy, aSort == "desc");
     List<Model.Domain.Packet> all = new List<XG.Plugin.Webserver.SignalR.Hub.Model.Domain.Packet>();
     foreach (var term in results.Packets.Keys)
     {
         var objects = Helper.XgObjectsToHubObjects(results.Packets[term]).Cast<Model.Domain.Packet>();
         objects.ToList().ForEach(p => p.GroupBy = term);
         all.AddRange(objects);
     }
     UpdateLoadedClientObjects(Context.ConnectionId, new HashSet<Guid>(all.Select(o => o.Guid)), aCount);
     return new Model.Domain.Result { Total = results.Total, Results = all };
 }
示例#6
0
		public void Part(XG.Model.Domain.Channel aChan)
		{
			try
			{
				_client.RfcPart(aChan.Name);
			}
			catch (NotConnectedException) {}
		}
示例#7
0
		public void Join(XG.Model.Domain.Channel aChannel)
		{
			Join(aChannel.Name);
		}