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); }
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(); } }
//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"); } }