private void doMovement() {
		// Do minimal risk movement
		Vector target = state.robotPosition.clone();
		Vector bestTarget = state.robotPosition;
		double angle = 0;

		double bestRisk = calculateRisk(bestTarget);
		double enemyDistance = state.robotPosition.distance(getTargetPosition());

		// a little dynamic distancing
		// enemyDistance += 18*max((enemyDistance-36-50)/100.0,1.0);
		enemyDistance += Tools.limit(-18, -24.48 + 0.18 * enemyDistance, 18);

		while(angle < Math.PI * 2) {
			double targetDistance = Math.min(200, enemyDistance);

			target.setLocationAndProject(state.robotPosition, angle, targetDistance);
			
			if(State.wavelessField.contains(target)) {
				double risk = calculateRisk(target);

				if(risk < bestRisk) {
					bestRisk = risk;
					bestTarget = target.clone();
				}
			}
			
			angle += Math.PI / 32.0;
		}

		double travelAngle = state.robotPosition.angleTo(bestTarget);

		double forward = state.robotPosition.distance(bestTarget);

		double angleToTurn = Utils.normalRelativeAngle(travelAngle - state.robotBodyHeading);
		int direction = 1;

		if(Math.abs(angleToTurn) > Math.PI / 2.0) {
			angleToTurn = Utils.normalRelativeAngle(angleToTurn - Math.PI);
			direction = -1;
		}

		// Slow down so we do not ram head long into the walls and can instead
		// turn to avoid them
		double maxVelocity = Rules.MAX_VELOCITY;

		if(!State.battlefield.contains(state.robotPosition.clone().project(state.robotBodyHeading, state.robotVelocity * 3.25))) {
			maxVelocity = 0;
		}

		if(!State.battlefield.contains(state.robotPosition.clone().project(state.robotBodyHeading, state.robotVelocity * 5))) {
			maxVelocity = 4;
		}

		if(angleToTurn > 0.7 && state.robotVelocity < 7) {
			maxVelocity = 0;
		}

		bot.setMaxVelocity(maxVelocity);
		bot.setTurnBody(angleToTurn);
		bot.setMove(forward * direction);

		move.updateNextPosition(angleToTurn, maxVelocity, direction);
	}