Ejemplo n.º 1
0
void turnToDirection(int turnDirection) {
	adjustAngle();
	int currentDir;
	currentDir = currentDirection();
	double target = (currentDir + turnDirection) * M_PI / 2;

	while(fabs(currentHeading() - target) > turnThreshold) {
		if(fabs(currentHeading() - target) < slowThreshold) {
			if(currentHeading() > target) {
				set_motors(-5,5);
			}
			if(currentHeading() < target) {
				set_motors(5,-5);
			}
		} else {
			if(currentHeading() > target) {
				set_motors(-15,15);
			}
			if(currentHeading() < target) {
				set_motors(15,-15);
			}
		}
		calcPos();
	}
	set_motors(0,0);
	adjustAngle();
	usleep(10000);
}
Ejemplo n.º 2
0
double CSDirection::getAngle(const short sum[4], short ma) {
  int nbMax   = ma == sum[0] ? 1 : 0;
  nbMax       = ma == sum[1] ? nbMax + 1 : nbMax;
  nbMax       = ma == sum[2] ? nbMax + 1 : nbMax;
  nbMax       = ma == sum[3] ? nbMax + 1 : nbMax;
  double diff = 50.0;

  if (nbMax == 1) {
    double angle, corrAngle;
    if (ma == sum[0]) {
      angle                      = 0.0;
      corrAngle                  = adjustAngle(sum, 0, 3, 1);
      if (corrAngle < 0.0) angle = 180.0;
    } else if (ma == sum[1]) {
      angle     = 45.0;
      corrAngle = adjustAngle(sum, 1, 0, 2);
    } else if (ma == sum[2]) {
      angle     = 90.0;
      corrAngle = adjustAngle(sum, 2, 1, 3);
    } else {
      angle     = 135.0;
      corrAngle = adjustAngle(sum, 3, 2, 0);
    }
    return angle + corrAngle + diff;
  }
  ///* ?????????????????????? kiprobalni
  if (nbMax == 2) {
    if (ma == sum[0] && ma == sum[1]) return 22.5 + diff;
    if (ma == sum[0] && ma == sum[3]) return 157.5 + diff;
    if (ma == sum[1] && ma == sum[2]) return 67.5 + diff;
    if (ma == sum[2] && ma == sum[3]) return 112.5 + diff;
  }
  //*/
  return 1.0;
}
Ejemplo n.º 3
0
void Straight()
{
	adjustAngle();
	// Going Up

	int i;
	int motorSpeed;

	for (i = 0; i < 11; i++) {
		set_motors(3 * i, 3 * i);
		usleep(100000);
	}

	if(currentDirection() == 0 || currentDirection() == 4) {
		idealY += 60;
		printf("UP TargetY: %f\n",idealY);

		while(fabs(currentY()-idealY) > 1) {
			if(fabs(currentY()-idealY) < 10) {
				if(currentY() < idealY) {
					correctToStraight(2 * fabs(currentY()-idealY));
					// set_motors(motorSpeed, motorSpeed);
				} else {
					correctToStraight(-2 * fabs(currentY()-idealY));
					// set_motors(-5 -2 * fabs(currentY()-idealY),-5 -2 * fabs(currentY()-idealY));
				}
			} else if(currentY() < idealY) {
				set_motors(40,40);
			} else if(currentY() > idealY) {
				set_motors(-40,-40);
			}
			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.y += 1;
	}

	// Going Down
	if(currentDirection() == 2) {
		idealY -= 60;
		printf("DOWN TargetY: %f\n",idealY);

		while(fabs(currentY()-idealY) > 1) {
			if(fabs(currentY()-idealY) < 10) {
				if(currentY() > idealY) {
					correctToStraight(2 * fabs(currentY()-idealY));
					// set_motors(5 + 2 * fabs(currentY()-idealY), 5 + 2 * fabs(currentY()-idealY));
				} else {
					correctToStraight(-2 * fabs(currentY()-idealY));
					// set_motors(-5 -2 * fabs(currentY()-idealY),-5 -2 * fabs(currentY()-idealY));
				}
			} else if(currentY() < idealY) {
				set_motors(-40,-40);
			} else if(currentY() > idealY) {
				set_motors(40,40);
			}
			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.y -= 1;
	}

	// Going Right
	if(currentDirection() == 1) {
		idealX += 60;
		printf("RIGHT TargetX: %f\n",idealX);

		while(fabs(currentX()-idealX) > 1) {
			if(fabs(currentX()-idealX) < 10) {
				if(currentX() < idealX) {
					correctToStraight(2 * fabs(currentX()-idealX));
					// set_motors(5 + 2 * fabs(currentX()-idealX),5 + 2 * fabs(currentX()-idealX));
				} else {
					correctToStraight(-2 * fabs(currentX()-idealX));
					// set_motors(-5 -2 * fabs(currentX()-idealX),-5 -2 * fabs(currentX()-idealX));
				}
			} else if(currentX() < idealX) {
				set_motors(40,40);
			} else if(currentX() > idealX) {
				set_motors(-40,-40);
			}

			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.x += 1;
	}

	// Going Left
	if(currentDirection() == 3) {
		idealX -= 60;
		printf("LEFT TargetX: %f\n",idealX);

		while(fabs(currentX()-idealX) > 1) {
			if(fabs(currentX()-idealX) < 10) {
				if(currentX() > idealX) {
					correctToStraight(2 * fabs(currentX()-idealX));
					// set_motors(5 + 2 * fabs(currentX()-idealX),5 + 2 * fabs(currentX()-idealX));
				} else {
					correctToStraight(-2 * fabs(currentX()-idealX));
					// set_motors(-5 -2 * fabs(currentX()-idealX),-5 -2 * fabs(currentX()-idealX));
				}
			} else if(currentX() < idealX) {
				set_motors(-40,-40);
			} else if(currentX() > idealX) {
				set_motors(40,40);
			}
			calcPos();
			//printf("X:%f Y:%f\n", currentX(),currentY());
		}
		set_motors(0,0);
		bCoord.x -= 1;
	}
}
Ejemplo n.º 4
0
void Entity::turnRight()
{
    adjustAngle(-0.1);
}
Ejemplo n.º 5
0
void Entity::turnLeft()
{
    adjustAngle(0.1);
}
Ejemplo n.º 6
0
	void Ball::SetAngle(float angle)
	{
		this->angle = angle;
		adjustAngle();
	}
Ejemplo n.º 7
0
	void Ball::calcAngle()
	{
		angle = std::atan2(vy, vx);
		adjustAngle();
	}
Ejemplo n.º 8
0
	void Ball::Bounce(float wall_angle)
	{
		angle = 2 * (M_PI + wall_angle) - angle;
		adjustAngle();
	}