Ejemplo n.º 1
0
 //ROV控制部分**********************************************************************************************************
 #region
 private void button1_Click(object sender, EventArgs e)//打开串口ROV
 {
     if (!ROV.IsOpen)
     {
         ROV.PortName = comboBox_ROV.Text; //设置串口名
         ROV.BaudRate = 9600;              //设置默认波特率
         try
         {
             ROV.Open();                                                                  //打开串口
             button1.Text         = "关闭串口";
             comboBox_ROV.Enabled = false;                                                //关闭使能
             ROV.DataReceived    += new SerialDataReceivedEventHandler(ROV_DataReceived); //串口接收处理函数
         }
         catch
         {
             MessageBox.Show("ROV串口打开失败!");
         }
     }
     else
     {
         try
         {
             ROV.Close();                 //关闭串口
             button1.Text         = "打开串口";
             comboBox_ROV.Enabled = true; //打开使能
         }
         catch
         {
             MessageBox.Show("ROV串口关闭失败!");
         }
     }
 }
        private void LedBtn_MouseUp(object sender, MouseEventArgs e)
        {
            ROV rov = robotThread.Robot;

            if (rov != null)
            {
                rov.Led.Enabled = false;
            }
        }
        private void ServoSelector_DropDown(object sender, EventArgs e)
        {
            ServoSelector.Items.Clear();
            ROV robot = thread.Robot;

            if (robot != null)
            {
                foreach (KeyValuePair <string, Servo> servo in robot.Servos)
                {
                    ServoSelector.Items.Add(new ServoWrapper(servo.Value, servo.Key));
                }
            }
        }
        private void ThrusterSelector_DropDown(object sender, EventArgs e)
        {
            ThrusterSelector.Items.Clear();
            ROV robot = thread.Robot;

            if (robot != null)
            {
                foreach (KeyValuePair <string, Thruster> thruster in robot.Thrusters)
                {
                    ThrusterSelector.Items.Add(new ThrusterWrapper(thruster.Value, thruster.Key));
                }
            }
        }
Ejemplo n.º 5
0
 private void ROV_DataReceived(object sender, SerialDataReceivedEventArgs e)//显示ROV返回的信息
 {
     try
     {
         string str = ROV.ReadExisting(); //字符串方式读
         textBox1.AppendText(str);        //添加文本
         textBox1.ScrollToCaret();        //自动显示至最后行
         ROV_control_order();             //不断向ROV发指令,避免点击太快响应跟不上
     }
     catch (Exception exp)
     {
         MessageBox.Show(exp.Message);
     }
 }
Ejemplo n.º 6
0
        private void ROV_control_order()
        {
            textBox1.Focus();//点击按钮后让textBox1获得焦点,避免焦点落在按钮上使键盘失效
            string order = "#" + order_convert(label7.Text) + order_convert(label8.Text) + order_convert(label9.Text) + order_convert(label10.Text) + "$";

            //发送数据
            if (ROV.IsOpen)
            {                     //如果串口开启
                ROV.Write(order); //写数据
            }
            else
            {
                MessageBox.Show("串口未打开");
            }
        }
        private void Timer1_Tick(object sender, EventArgs e)
        {
            ROV rov = robotThread.Robot;

            TestBtnMeter.Value = rov?.Button0?.State ?? false;
            TestBtn2.Value     = rov?.Button1?.State ?? false;

            TempLabel.Text            = "Temperature: " + ((rov == null) ? "----" : rov.IMU.Temperature.ToString().PadLeft(4)) + "°C";
            AccelVectorPanel.Vector   = rov?.IMU?.Accelerometer ?? new Vector3();
            MagVectorPanel.Vector     = rov?.IMU?.Magnetometer ?? new Vector3();
            GyroVectorPanel.Vector    = rov?.IMU?.Gyroscope ?? new Vector3();
            EulerVectorPanel.Vector   = rov?.IMU?.Euler ?? new Vector3();
            LinearVectorPanel.Vector  = rov?.IMU?.LinearAccel ?? new Vector3();
            GravityVectorPanel.Vector = rov?.IMU?.Gravity ?? new Vector3();
            Quaternion quat = rov?.IMU?.Quaternion ?? new Quaternion();

            QuatVectorPanel.Vector = new Vector4(quat.X, quat.Y, quat.Z, quat.W);

            WaterTempLabel.Text = "Water Temp: " + ((rov == null) ? "----------" : rov.PressureSensor.Temperature.ToString("0.00").PadLeft(10)) + "°C";
            PressureLabel.Text  = "Pressure: " + ((rov == null) ? "----------" : rov.PressureSensor.Pressure.ToString("0.00").PadLeft(10)) + " mBar";
            AltitudeLabel.Text  = "Altitude: " + ((rov == null) ? "----------" : rov.PressureSensor.Altitude.ToString("0.00").PadLeft(10)) + " m above mean sea";
            DepthLabel.Text     = "Depth: " + ((rov == null) ? "----------" : rov.PressureSensor.Depth.ToString("0.00").PadLeft(10)) + " m";
        }
        private void HardwarePingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ROV robot = robotThread.Robot;

            if (robot == null)
            {
                MessageBox.Show("No robot connected!");
            }
            else
            {
                Log.Info("Pinging...");
                long?timeMs = robot.Ping(1000);
                if (timeMs == null)
                {
                    Log.Info("Ping failed.");
                    MessageBox.Show("Ping failed.");
                }
                else
                {
                    Log.Info("Ping responded in " + ((long)timeMs).ToString() + " ms.");
                    MessageBox.Show("Ping: " + (long)timeMs + " ms");
                }
            }
        }
 private void InputDataTimer_Tick(object sender, EventArgs e)
 {
     ROV rov = robotThread.Robot;
 }
Ejemplo n.º 10
0
        //解包
        public static void DataHandler(List <byte> Buffer, ref ROV rov)
        {
            byte[] RxBuffer = Buffer.ToArray();
            //功能选择,机械臂开合,充放气
            //这里我还没写好
            if (RxBuffer[0] == Startbit_Motion)
            {
                rov.engine.engine1_speed = BitConverter.ToInt16(RxBuffer, 1);
                rov.engine.engine2_speed = BitConverter.ToInt16(RxBuffer, 3);
                rov.engine.engine3_speed = BitConverter.ToInt16(RxBuffer, 5);
                rov.engine.engine4_speed = BitConverter.ToInt16(RxBuffer, 7);
                rov.engine.engine5_speed = BitConverter.ToInt16(RxBuffer, 9);
                rov.engine.engine6_speed = BitConverter.ToInt16(RxBuffer, 11);

                rov.sensor.angle_pitch = BitConverter.ToSingle(RxBuffer, 13);
                rov.sensor.angle_roll  = BitConverter.ToSingle(RxBuffer, 17);
                rov.sensor.gyro_x      = BitConverter.ToSingle(RxBuffer, 21);
                rov.sensor.gyro_y      = BitConverter.ToSingle(RxBuffer, 25);
                rov.sensor.gyro_z      = BitConverter.ToSingle(RxBuffer, 29);
                rov.sensor.deapth      = BitConverter.ToSingle(RxBuffer, 33);

                rov.mode_value = BitConverter.ToUInt16(RxBuffer, 37);

                rov.servo.servo1 = BitConverter.ToUInt16(RxBuffer, 39);
                rov.servo.servo2 = BitConverter.ToUInt16(RxBuffer, 41);
                rov.servo.servo3 = BitConverter.ToUInt16(RxBuffer, 43);
                rov.servo.servo4 = BitConverter.ToUInt16(RxBuffer, 45);
            }

            if (RxBuffer[0] == Startbit_PIDData)
            {
                rov.pidData_pitch.P = BitConverter.ToSingle(RxBuffer, 1);
                rov.pidData_pitch.I = BitConverter.ToSingle(RxBuffer, 5);
                rov.pidData_pitch.D = BitConverter.ToSingle(RxBuffer, 9);

                rov.pidData_pitch_w.P = BitConverter.ToSingle(RxBuffer, 13);
                rov.pidData_pitch_w.I = BitConverter.ToSingle(RxBuffer, 17);
                rov.pidData_pitch_w.D = BitConverter.ToSingle(RxBuffer, 21);

                rov.pidData_depth.P = BitConverter.ToSingle(RxBuffer, 25);
                rov.pidData_depth.I = BitConverter.ToSingle(RxBuffer, 29);
                rov.pidData_depth.D = BitConverter.ToSingle(RxBuffer, 33);

                rov.pidData_yaw_w.P = BitConverter.ToSingle(RxBuffer, 37);
                rov.pidData_yaw_w.I = BitConverter.ToSingle(RxBuffer, 41);
                rov.pidData_yaw_w.D = BitConverter.ToSingle(RxBuffer, 45);

                if (!(Form_PID1 == null || Form_PID1.IsDisposed))
                {
                    Form_PID1.PID_ParaTextChange();//更新当前PID值
                }
            }

            if (RxBuffer[0] == Startbit_Motion_Control)
            {
                rov.setpara.depth_set = BitConverter.ToSingle(RxBuffer, 1);
                rov.setpara.pitch_set = BitConverter.ToSingle(RxBuffer, 5);
                rov.setpara.yaw_w_set = BitConverter.ToSingle(RxBuffer, 9);
                if (!(Form_PID1 == null || Form_PID1.IsDisposed))
                {
                    Form_PID1.PID_ParaTextChange();//更新当前PID值
                }
            }
        }
Ejemplo n.º 11
0
        //装包
        public static byte[] DataToSendProcessor(byte startbit, ROV rov)
        {
            byte        endbit   = 0x00;
            List <byte> TXBuffer = new List <byte>
            {
                startbit
            };

            if (startbit == Startbit_Engine_Control)
            {
                TXBuffer.AddRange(BitConverter.GetBytes(rov.engine.engine1_speed));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.engine.engine2_speed));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.engine.engine3_speed));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.engine.engine4_speed));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.engine.engine5_speed));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.engine.engine6_speed));
            }

            if (startbit == Startbit_PIDData)
            {
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_pitch.P));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_pitch.I));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_pitch.D));

                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_pitch_w.P));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_pitch_w.I));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_pitch_w.D));

                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_depth.P));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_depth.I));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_depth.D));

                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_yaw_w.P));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_yaw_w.I));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.pidData_yaw_w.D));
            }

            if (startbit == Startbit_Motion_Control)
            {
                TXBuffer.AddRange(BitConverter.GetBytes(rov.setpara.depth_set));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.setpara.pitch_set));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.setpara.yaw_w_set));
            }

            if (startbit == Startbit_Mode)
            {
                TXBuffer.AddRange(BitConverter.GetBytes(rov.mode_value));
            }

            //键盘部分
            if (startbit == Startbit_Key)
            {
                //TXBuffer.Add(Convert.ToByte((handle.Left_x + 1) / 2 * 255));
                //TXBuffer.Add(Convert.ToByte((handle.Left_y + 1) / 2 * 255));
                //TXBuffer.Add(Convert.ToByte((handle.Right_x + 1) / 2 * 255));
                //TXBuffer.Add(Convert.ToByte((handle.Right_y + 1) / 2 * 255));
            }

            if (startbit == Startbit_Camera)
            {
                TXBuffer.Add(Convert.ToByte(rov.Camera_angle));
            }

            if (startbit == Startbit_Servo)
            {
                TXBuffer.AddRange(BitConverter.GetBytes(rov.servo.servo1));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.servo.servo2));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.servo.servo3));
                TXBuffer.AddRange(BitConverter.GetBytes(rov.servo.servo4));
            }

            for (int i = 0; i < TXBuffer.Count; i++)
            {
                endbit += TXBuffer[i];
            }
            TXBuffer.Add(endbit);
            byte[] TXData = TXBuffer.ToArray();
            return(TXData);
        }
Ejemplo n.º 12
0
        public ActionResult Create(FormCollection collection)
        {
            var  rovname = "";
            long rovid;

            ViewBag.successMessage = "";
            ViewBag.errorMessage   = "";
            try
            {
                var action = Request.Form["action"].ToString();
                if (action == "create")
                {
                    rovname = Request.Form["rovname"].ToString();
                    var obj_rov = (
                        from p in db.ROVs
                        where (p.name == rovname && p.active == true)
                        select p
                        ).FirstOrDefault();
                    if (obj_rov != null)
                    {
                        ViewBag.successMessage = "";
                        ViewBag.errorMessage   = "Reason of Visit already exists";
                    }
                    if (obj_rov == null)
                    {
                        ROV dbrov = new ROV();
                        dbrov.name   = rovname;
                        dbrov.cd     = DateTime.Now;
                        dbrov.cb     = SessionHandler.UserId;
                        dbrov.active = true;
                        db.ROVs.Add(dbrov);
                        db.SaveChanges();
                        ViewBag.successMessage = "Record has been saved successfully";
                        ViewBag.errorMessage   = "";
                    }
                }
                if (action == "edit")
                {
                    rovid   = Convert.ToInt32(Request.Form["id"].ToString());
                    rovname = Request.Form["rovname"].ToString();
                    ROV dbrov = new ROV();
                    dbrov                 = db.ROVs.Where(r => r.rovID == rovid).FirstOrDefault();
                    dbrov.name            = rovname;
                    dbrov.md              = DateTime.Now;
                    dbrov.mb              = SessionHandler.UserId;
                    db.Entry(dbrov).State = EntityState.Modified;
                    db.SaveChanges();
                    ViewBag.successMessage = "Record has been saved successfully";
                    ViewBag.errorMessage   = "";
                }
                if (action == "delete")
                {
                    rovid = Convert.ToInt32(Request.Form["id"].ToString());
                    ROV dbrov = new ROV();
                    dbrov                 = db.ROVs.Where(r => r.rovID == rovid).FirstOrDefault();
                    dbrov.active          = false;
                    db.Entry(dbrov).State = EntityState.Modified;
                    db.SaveChanges();
                    ViewBag.successMessage = "Record has been deleted successfully";
                    ViewBag.errorMessage   = "";
                }
                var rov = db.ROVs.Where(r => r.active == true).ToList();
                return(View(rov));
            }
            catch (Exception ex)
            {
                ViewBag.errorMessage = "Error occurred while processing your request.";
                var _rov = db.ROVs.Where(r => r.active == true).ToList();
                return(View(_rov));
            }
        }
        protected override bool Loop()
        {
            ROV robot = robotThread.Robot;

            if ((robot != null) && (Enabled))
            {
                //Grab all inputs at once
                Twist input        = inputThread.Input;
                bool  gripperLOpen = inputThread.GripperLOpen;
                bool  gripperROpen = inputThread.GripperROpen;
                bool  netOpen      = inputThread.NetOpen;

                //Move servos for direction control
                robot.PwmA1.DutyCycle = input.Linear.X;
                robot.PwmD1.DutyCycle = input.Linear.X;

                //Move gripper L
                GripperPosition gripperL = GripperL;
                if (gripperL != null)
                {
                    if (gripperLOpen)
                    {
                        gripperL.Open(robot.LeftGripperServo);
                    }
                    else
                    {
                        gripperL.Close(robot.LeftGripperServo);
                    }
                }

                //Move gripper R
                GripperPosition gripperR = GripperR;
                if (gripperR != null)
                {
                    if (gripperROpen)
                    {
                        gripperR.Open(robot.RightGripperServo);
                    }
                    else
                    {
                        gripperR.Close(robot.RightGripperServo);
                    }
                }

                //Move Net
                GripperPosition net = Settings.NetGripper;
                if (net != null)
                {
                    if (netOpen)
                    {
                        net.Open(robot.NetServo);
                    }
                    else
                    {
                        net.Close(robot.NetServo);
                    }
                }
            }

            return(Sleep(10));
        }