public void TravelToPosition(Vector3D position, bool enableAvoidance, double maximumVelocity = 100, double safetyMargin = 1.25, bool turnSelf = true)
            {
                double distanceFromTargetSQ = (position - ControlPosition).LengthSquared();

                if (distanceFromTargetSQ > 1 || controller.GetShipSpeed() > 0.0001)
                {
                    if (enableAvoidance)
                    {
                        if (avoidanceCheckCounter++ > 100)
                        {
                            double scanDistance = CalculateStoppingDistance() * safetyMargin;
                            avoidanceCheckCounter = 0;

                            collisionAvoidance.Scan(scanDistance);
                        }


                        if (collisionAvoidance.CheckForObjects())
                        {
                            Vector3D heading = Vector3D.Normalize(position - ControlPosition);
                            Vector3D nextDir = Vector3D.Zero;
                            collisionAvoidance.NextPosition(ref nextDir, heading);

                            ThrustToVelocity(nextDir * maximumVelocity);
                            gyroControl.StopRotation(gyros);
                            return;
                        }
                    }

                    TravelToPosition(position, maximumVelocity, safetyMargin, turnSelf);
                }
            }