Exemple #1
0
        // Updates the robot table in GUI with new data
        public void updateRobotTable()
        {
            foreach (Robot robot in Program.robotList)
            {
                AForge.DoublePoint position = robot.getPosition();
                int[] motorSignal           = robot.getMotorSignals();
                this.robotTable.Rows[robot.getID()].Cells[0].Value = robot.getID();
                this.robotTable.Rows[robot.getID()].Cells[1].Value = robot.getDetected();
                this.robotTable.Rows[robot.getID()].Cells[2].Value = robot.isBlocked();
                this.robotTable.Rows[robot.getID()].Cells[3].Value = "(" + position.X + ", " + position.Y + ")";
                this.robotTable.Rows[robot.getID()].Cells[4].Value = robot.getHeading();
                this.robotTable.Rows[robot.getID()].Cells[5].Value = robot.getSpeed();
                this.robotTable.Rows[robot.getID()].Cells[6].Value = String.Join(", ", motorSignal);

                List <Robot> neighbors     = robot.getNeighbors();
                string       neighborsTemp = "None";
                if (neighbors.Count != 0)
                {
                    neighborsTemp = "";
                    foreach (Robot neighbor in neighbors)
                    {
                        neighborsTemp += neighbor.getID().ToString() + ", ";
                    }
                }
                this.robotTable.Rows[robot.getID()].Cells[7].Value = neighborsTemp;
            }
        }
Exemple #2
0
 public override void calculateNextMove(AForge.DoublePoint robotPosition, double speed, AForge.DoublePoint heading, List <Robot> neighbors, out double referenceSpeed, out AForge.DoublePoint referenceHeading)
 {
     if (collisionArea != null)
     {
         calculateNextMove(collisionArea, robotPosition, speed, heading, neighbors, out referenceSpeed, out referenceHeading);
     }
     else
     {
         throw new Exception("CollisionArea is null");
     }
 }
Exemple #3
0
        public override void paintStrategy(Graphics g, AForge.DoublePoint scaling)
        {
            if (collisionArea != null)
            {
                Rectangle paintRectangle = new Rectangle((int)(scaling.X * collisionArea.getX()),
                                                         (int)(scaling.Y * collisionArea.getY()),
                                                         (int)(scaling.X * collisionArea.getWidth()), (int)(scaling.Y * collisionArea.getHeight()));
                g.FillRectangle(new SolidBrush(Color.FromArgb(50, 255, 0, 0)), paintRectangle);
            }

            if (robotPosition != null && corner1 != null && corner2 != null)
            {
                g.DrawLine(new Pen(new SolidBrush(Color.Black), 2),
                           new Point((int)(scaling.X * robotPosition.X), (int)(scaling.Y * robotPosition.Y)),
                           new Point((int)(scaling.X * corner1.X), (int)(scaling.Y * corner1.Y)));
                g.DrawLine(new Pen(new SolidBrush(Color.Black), 2), new Point((int)(scaling.X * robotPosition.X), (int)(scaling.Y * robotPosition.Y)),
                           new Point((int)(scaling.X * corner2.X), (int)(scaling.Y * corner2.Y)));
            }
        }
Exemple #4
0
        /*
         * This function firstly applies the rendevouz, and when the robots are in a certain range from each other the flocking strategy
         */
        public override void calculateNextMove(AForge.DoublePoint robotPosition, double speed, AForge.DoublePoint heading, List <Robot> neighbors, out double referenceSpeed, out AForge.DoublePoint referenceHeading)
        {
            bool startFlocking = false;

            double distance;

            for (int i = 0; i < neighbors.Count; i++)
            {
                distance = robotPosition.DistanceTo(neighbors[i].getPosition());
                if (distance < startFlockingRange)
                {
                    startFlocking = true;
                }
            }

            if (startFlocking)
            {
                flockingStrategy.calculateNextMove(robotPosition, speed, heading, neighbors, out referenceSpeed, out referenceHeading);
            }
            else
            {
                rendevouzStrategy.calculateNextMove(robotPosition, speed, heading, neighbors, out referenceSpeed, out referenceHeading);
            }
        }
Exemple #5
0
        public void calculateNextMove(CollisionArea collisionArea, AForge.DoublePoint robotPosition, double speed, AForge.DoublePoint heading, List <Robot> neighbors, out double referenceSpeed, out AForge.DoublePoint referenceHeading)
        {
            bool go = true;

            if (ControlStrategy.isAtHeading(collisionArea, robotPosition, heading))
            {
                int distance = collisionArea.distance2Middle(robotPosition);

                if (queue.Count == 0)
                {
                    foreach (Robot neighbor in neighbors)
                    {
                        if (ControlStrategy.isAtHeading(collisionArea, neighbor.getPosition(), neighbor.getHeading()))
                        {
                            if (distance > collisionArea.distance2Robot(neighbor))
                            {
                                queue.Add(neighbor.getID());
                                go = false;
                            }
                        }
                    }
                }
                else
                {
                    foreach (Robot neighbor in neighbors)
                    {
                        if (ControlStrategy.isAtHeading(collisionArea, neighbor.getPosition(), neighbor.getHeading()))
                        {
                            foreach (int ID in queue)
                            {
                                if (ID == neighbor.getID())
                                {
                                    go = false;
                                    break;
                                }
                            }
                        }
                    }
                }
                foreach (Robot neighbor in neighbors)
                {
                    if (collisionArea.intersects(neighbor.getPosition()))
                    {
                        go = false;
                        break;
                    }
                }
            }
            else
            {
                queue.Clear();
            }

            if (go)
            {
                referenceSpeed   = speed;
                referenceHeading = heading;
            }
            else
            {
                stopStrategy.calculateNextMove(collisionArea.getNearestPoint(robotPosition), Program.robotRadius, robotPosition, speed, heading, neighbors, out referenceSpeed, out referenceHeading);
            }

            corner1            = collisionArea.getHeadingEdges(robotPosition, heading)[0];
            corner2            = collisionArea.getHeadingEdges(robotPosition, heading)[1];
            this.robotPosition = robotPosition;
        }
Exemple #6
0
 public static bool isPointInRectangle(AForge.DoublePoint p, RectangleF rect) => isPointInRectangle(p.X, p.Y, rect);
Exemple #7
0
 public override void paintStrategy(Graphics g, AForge.DoublePoint scaling)
 {
 }