Пример #1
0
        private void linkLabelRunHardware_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            double m = double.Parse(textBoxMsM.Text);
            double m1 = double.Parse(textBoxMsM1.Text);
            double l1 = double.Parse(textBoxMsL1.Text);
            double m2 = double.Parse(textBoxMsM2.Text);
            double l2 = double.Parse(textBoxMsL2.Text);
            double ss = double.Parse(textBoxMsSS.Text);
            double theta = double.Parse(textBoxMsTheta.Text);
            double theta1 = double.Parse(textBoxMsTheta1.Text);
            double theta2 = double.Parse(textBoxMsTheta2.Text);
            double theta3 = double.Parse(textBoxMsTheta3.Text);
            double theta4 = double.Parse(textBoxMsTheta4.Text);
            Bipedal5Link.Bipedal5LinkHardware b = new Bipedal5Link.Bipedal5LinkHardware(m, m1, m2, l1, l2, new Bipedal5Link.PointD(0.92, 0.32), new double[] { theta, theta1, theta2, theta3, theta4 }, ss, Hardware);

            NewCentralPatternGenerator();

            timerUnstable.Stop();
            panelUnstable.Hide();

            int steps = int.Parse(textBoxSteps.Text);
            double deltatime = double.Parse(textBoxDeltaTime.Text);
            double u0 = double.Parse(textBoxCpgU0.Text);

            StatusBufferG.Clear(Color.Black);
            StatusBufferG.DrawString(B.Parameters(), F1, Brushes.DarkOrange, 0, 10);
            StatusBufferG.DrawString(CPG.Parameters(), F1, Brushes.DarkOrange, 440, 10);

            double[] joints;
            double[] feedback = new double[9];

            for (int s = 0 ; s < 100000 ; s++)
                joints = CPG.RunStep(u0, feedback, deltatime);

            Abort = false;
            labelHardwareStatus.Text = "starting..";
            System.Windows.Forms.Application.DoEvents();
            Hardware.Start();
            labelHardwareStatus.Text = "running..";

            // time coupling
            double simulationtime = 0;
            DateTime realtimestart = DateTime.Now;
            TimeSpan realtime;

            for (int s = 0 ; (s < steps) & !Abort ; s++)
            {
                // Run CPG step
                joints = CPG.RunStep(u0, new double[] { 0, feedback[1], -feedback[1], feedback[2], -feedback[2], 0, 0, 0, 0 }, deltatime);

                // Run Musculo-Skeletal system step
                feedback = b.RunStep(joints, deltatime);

                simulationtime = s * deltatime;
                realtime = DateTime.Now.Subtract(realtimestart);
                if (simulationtime > realtime.TotalSeconds)
                {
                    b.UpdateHardware();

                    DisplayBufferG.Clear(C1);
                    b.Draw(DisplayBufferG, new PointF(10, 240), 500);
                    DisplayBufferG.DrawString("running on hardware...", F1, Brushes.Orange, 550, 170);
                    LabelDisplayG.DrawImage(DisplayBuffer, 0, 0);

                    StatusBufferG.FillRectangle(Brushes.Black, 240, 0, 200, 160);
                    StatusBufferG.DrawString(b.Status(), F1, Brushes.DarkOrange, 240, 10);
                    StatusBufferG.FillRectangle(Brushes.Black, 640, 0, 200, 160);
                    StatusBufferG.DrawString(CPG.Status(), F1, Brushes.DarkOrange, 640, 10);
                    LabelStatusG.DrawImage(StatusBuffer, 0, 0);

                    CPGBufferG.Clear(Color.Black);
                    CPG.Draw(CPGBufferG);
                    LabelCPGG.DrawImage(CPGBuffer, 0, 0);

                    System.Windows.Forms.Application.DoEvents();

                }
            }

            labelHardwareStatus.Text = "stopping..";
            System.Windows.Forms.Application.DoEvents();
            Hardware.Stop();
            labelHardwareStatus.Text = "stopped";
        }
Пример #2
0
        private void linkLabelRunHardware_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            double m      = double.Parse(textBoxMsM.Text);
            double m1     = double.Parse(textBoxMsM1.Text);
            double l1     = double.Parse(textBoxMsL1.Text);
            double m2     = double.Parse(textBoxMsM2.Text);
            double l2     = double.Parse(textBoxMsL2.Text);
            double ss     = double.Parse(textBoxMsSS.Text);
            double theta  = double.Parse(textBoxMsTheta.Text);
            double theta1 = double.Parse(textBoxMsTheta1.Text);
            double theta2 = double.Parse(textBoxMsTheta2.Text);
            double theta3 = double.Parse(textBoxMsTheta3.Text);
            double theta4 = double.Parse(textBoxMsTheta4.Text);

            Bipedal5Link.Bipedal5LinkHardware b = new Bipedal5Link.Bipedal5LinkHardware(m, m1, m2, l1, l2, new Bipedal5Link.PointD(0.92, 0.32), new double[] { theta, theta1, theta2, theta3, theta4 }, ss, Hardware);

            NewCentralPatternGenerator();

            timerUnstable.Stop();
            panelUnstable.Hide();

            int    steps     = int.Parse(textBoxSteps.Text);
            double deltatime = double.Parse(textBoxDeltaTime.Text);
            double u0        = double.Parse(textBoxCpgU0.Text);

            StatusBufferG.Clear(Color.Black);
            StatusBufferG.DrawString(B.Parameters(), F1, Brushes.DarkOrange, 0, 10);
            StatusBufferG.DrawString(CPG.Parameters(), F1, Brushes.DarkOrange, 440, 10);

            double[] joints;
            double[] feedback = new double[9];

            for (int s = 0; s < 100000; s++)
            {
                joints = CPG.RunStep(u0, feedback, deltatime);
            }

            Abort = false;
            labelHardwareStatus.Text = "starting..";
            System.Windows.Forms.Application.DoEvents();
            Hardware.Start();
            labelHardwareStatus.Text = "running..";

            // time coupling
            double   simulationtime = 0;
            DateTime realtimestart  = DateTime.Now;
            TimeSpan realtime;

            for (int s = 0; (s < steps) & !Abort; s++)
            {
                // Run CPG step
                joints = CPG.RunStep(u0, new double[] { 0, feedback[1], -feedback[1], feedback[2], -feedback[2], 0, 0, 0, 0 }, deltatime);

                // Run Musculo-Skeletal system step
                feedback = b.RunStep(joints, deltatime);

                simulationtime = s * deltatime;
                realtime       = DateTime.Now.Subtract(realtimestart);
                if (simulationtime > realtime.TotalSeconds)
                {
                    b.UpdateHardware();

                    DisplayBufferG.Clear(C1);
                    b.Draw(DisplayBufferG, new PointF(10, 240), 500);
                    DisplayBufferG.DrawString("running on hardware...", F1, Brushes.Orange, 550, 170);
                    LabelDisplayG.DrawImage(DisplayBuffer, 0, 0);

                    StatusBufferG.FillRectangle(Brushes.Black, 240, 0, 200, 160);
                    StatusBufferG.DrawString(b.Status(), F1, Brushes.DarkOrange, 240, 10);
                    StatusBufferG.FillRectangle(Brushes.Black, 640, 0, 200, 160);
                    StatusBufferG.DrawString(CPG.Status(), F1, Brushes.DarkOrange, 640, 10);
                    LabelStatusG.DrawImage(StatusBuffer, 0, 0);

                    CPGBufferG.Clear(Color.Black);
                    CPG.Draw(CPGBufferG);
                    LabelCPGG.DrawImage(CPGBuffer, 0, 0);

                    System.Windows.Forms.Application.DoEvents();
                }
            }

            labelHardwareStatus.Text = "stopping..";
            System.Windows.Forms.Application.DoEvents();
            Hardware.Stop();
            labelHardwareStatus.Text = "stopped";
        }