Example Source Code

Example Source Code

Example

using RoboticsConnection.Serializer;
using RoboticsConnection.Serializer.Ids;
using RoboticsConnection.Serializer.Sensors;
using RoboticsConnection.Serializer.Components;
using RoboticsConnection.Serializer.Controllers;
using System;
using System.Threading;

namespace test
{
	class Program
	{
		static Serializer serializer;
		static PIDMotorController pmc;
		static bool started = false;

		static void Main(string[] args)
		{
			try
			{
				serializer = new Serializer();
				serializer.PortName = "COM11";

				pmc = new PIDMotorController(serializer);

				serializer.CommunicationStarted += 
					new SerializerEventHandler(serializer_CommunicationStarted);

				serializer.StartCommunication();

				while (!started)
				{
					Console.WriteLine("Waiting...");
				}

				while (true)
				{
					serializer.PumpEvents();
					DriveDistance(50.0);
					Thread.Sleep(500);
					Rotate();
					Thread.Sleep(500);
				}
			}
			finally
			{
				serializer.ShutDown();
			}
		}

		static void DriveDistance(double distance)
		{
			int vel1 = 0;
			int vel2 = 0;
			pmc.Speed = 12;
			pmc.Distance = 10;
			pmc.TravelDistance();

			Console.WriteLine("Driving");

			// Spin until the PID Distance algorithm has finsihed...
			// Only useful when using TravelDistance() and Rotate()
			while (pmc.QueryStatus())
			{
				pmc.QueryVelocities(ref vel1, ref vel2);
				Console.WriteLine("Velocity: {0} : {1}", vel1, vel2);
			}
			Console.WriteLine("Arrived");
		}

		static void Rotate()
		{
			int vel1 = 0;
			int vel2 = 0;
      
			// Command robot to rotate 180 degrees, then stop:
			pmc.RotationAngle = 180;
			pmc.Rotate();

			Console.WriteLine("Rotating");

			while (pmc.QueryStatus())
			{
				pmc.QueryVelocities(ref vel1, ref vel2);
				Console.WriteLine("Velocity: {0} : {1}", vel1, vel2);
			}
			Console.WriteLine("Rotation Complete");
		}

		static void serializer_CommunicationStarted(Serializer sender)
		{
			Console.WriteLine("Communication started");

			serializer.Units = Units.English;
			serializer.BlinkLED(LedId.Led1, 20);

			// NOTE: This examples uses parameters configured for the
			// Traxster Robot Kit.

			// Set velocity and distance PID parameters:
			pmc.VelProportional = 10;
			pmc.VelIntegral = 0;
			pmc.VelDerivative = 5;
			pmc.VelLoop = 45;
			pmc.DistProportional = 1;
			pmc.DistIntegral = 0;
			pmc.DistDerivative = 0;
			pmc.DistAcceleration = 1;
			pmc.DistDeadband = 5;
			pmc.DeadbandEnabled = true;

			// Set Physical drivetrain configuration parameters.
			pmc.EncoderResolution = 4;
			pmc.GearReduction = 0.0185;
			pmc.WheelDiameter = 2.525;
			pmc.WheelTrack = 10.00;
			pmc.VelocityDivider = 3.57;

			started = true;
		}    
	}
}


Last Updated: 3/16/2008