private void setupAndStartDrone(Vector3D Target, string WP_Name, bool dockingMode)
 {
     RemoteControl.SetAutoPilotEnabled(false);
     RemoteControl.ClearWaypoints();
     RemoteControl.AddWaypoint(Target, WP_Name);
     RemoteControl.ApplyAction("CollisionAvoidance_On");
     RemoteControl.ApplyAction("AutoPilot_On");
     RemoteControl.ApplyAction((dockingMode)? "DockingMode_On" : "DockingMode_Off");
     RemoteControl.SetAutoPilotEnabled(true);
 }
Beispiel #2
0
 public void SwitchFlyMode(bool thrusterMode)
 {
     if (control.ControlThrusters != thrusterMode)
     {
         control.ApplyAction("ControlThrusters");
     }
 }
        /**
         * AreaDefenceDroneAI
         * ==============================
         * Copyright (c) 2015 Thomas Klose <*****@*****.**>
         * Source:
         *
         * Summary
         * ------------------------------
         *
         *
         * Abstract
         * ------------------------------
         *
         *
         * Example
         * ------------------------------
         *
         */
        void Main(string args)
        {
            IMyRemoteControl RemoteControl = GridTerminalSystem.GetBlockWithName("RC") as IMyRemoteControl;

            if (RemoteControl != null)
            {
                //GPS: ORIGIN: -56148.91:23763.12:-2721.73:
                Vector3D origin = new Vector3D(-56148.91, 23763.12, -2721.73);


                RemoteControl.SetAutoPilotEnabled(false);
                RemoteControl.ClearWaypoints();
                RemoteControl.AddWaypoint(origin, "WP_Name");
                RemoteControl.ApplyAction("CollisionAvoidance_On");
                RemoteControl.ApplyAction("AutoPilot_On");
                RemoteControl.ApplyAction("DockingMode_Off");
                RemoteControl.SetAutoPilotEnabled(true);

                // ADDAI Brain = new ADDAI(RC, GridTerminalSystem, origin, 500.0, 50.0);
                // Brain.run();
            }
        }
Beispiel #4
0
            //Primary Generic Functions
            //==========================

            //Use For General Drone Flying:
            void RC_Manager(Vector3D TARGET, IMyRemoteControl RC, bool TURN_ONLY)
            {
                //Uses Rotation Control To Handle Max Rotational Velocity
                //---------------------------------------------------------
                if (RC.GetShipVelocities().AngularVelocity.AbsMax() > PrecisionMaxAngularVel)
                {
                    print("转动速度放缓"); RC.SetAutoPilotEnabled(false); return;
                }
                //Setup Of Common Variables
                //--------------------------------------------
                Vector3D DronePosition   = RC.GetPosition();
                Vector3D Drone_To_Target = Vector3D.Normalize(TARGET - DronePosition);
                //Override Direction Detection
                //-------------------------------
                double To_Target_Angle = Vector3D.Dot(Vector3D.Normalize(RC.GetShipVelocities().LinearVelocity), Drone_To_Target);
                double Ship_Velocity   = RC.GetShipVelocities().LinearVelocity.Length();

                //Turn Only: (Will drift ship automatically)
                //--------------------------------------------

                /*List<MyWaypointInfo> way = new List<MyWaypointInfo>();
                 *      RC.GetWaypointInfo(way);
                 *      if (way.Count>0)
                 *      {
                 *          if (way[0].Coords!= TARGET)
                 *          {
                 *              //RC.ApplyAction("AutoPilot_Off");
                 *              //RC.ClearWaypoints();
                 *          }
                 *      }*/

                if (TURN_ONLY)
                {
                    //if (way.Count <1)
                    {
                        RC.ClearWaypoints();
                        GYRO.GyroOverride = false;
                        RC.AddWaypoint(TARGET, "母船起点");
                        RC.FlightMode = FlightMode.OneWay;
                        RC.Direction  = Base6Directions.Direction.Forward;
                        RC.ApplyAction("AutoPilot_On");
                        RC.ApplyAction("CollisionAvoidance_Off");
                        RC.ControlThrusters = false;
                    }
                    return;
                }
                //Drift Cancellation Enabled:
                //-----------------------------
                if (To_Target_Angle < 0.4 && Ship_Velocity > 3)
                {
                    //Aim Gyro To Reflected Vector
                    Vector3D DRIFT_VECTOR           = Vector3D.Normalize(RC.GetShipVelocities().LinearVelocity);
                    Vector3D REFLECTED_DRIFT_VECTOR = -1 * (Vector3D.Normalize(Vector3D.Reflect(DRIFT_VECTOR, Drone_To_Target)));
                    Vector3D AIMPINGPOS             = (-1 * DRIFT_VECTOR * 500) + DronePosition;

                    //if (way.Count < 1 )
                    {
                        RC.ClearWaypoints();
                        GYRO.GyroOverride = false;
                        RC.AddWaypoint(AIMPINGPOS, "AIMPINGPOS");
                        RC.SpeedLimit = 100;
                        RC.FlightMode = FlightMode.OneWay;
                        RC.Direction  = Base6Directions.Direction.Forward;
                        RC.ApplyAction("AutoPilot_On");
                        RC.ApplyAction("CollisionAvoidance_Off");
                    }
                }

                //System Standard Operation:
                //---------------------------
                else
                {
                    //Assign To RC, Clear And Refresh Command
                    List <ITerminalAction> action = new List <ITerminalAction>();
                    RC.GetActions(action);
                    RC.ControlThrusters = true;
                    RC.ClearWaypoints();
                    GYRO.GyroOverride = false;
                    RC.AddWaypoint(TARGET, "目标");
                    RC.SpeedLimit = 100;
                    RC.FlightMode = FlightMode.OneWay;
                    RC.Direction  = Base6Directions.Direction.Forward;
                    RC.ApplyAction("AutoPilot_On");
                    RC.ApplyAction("DockingMode_Off");
                    RC.ApplyAction("CollisionAvoidance_On");
                }
            }