Space Engineers

Space Engineers

AI Mining Drone Script
DerLaCroix  [developer] Jun 11, 2016 @ 9:40am
FULL DESCRIPTION/MANUAL
Automatic mining drone (using autopilot)
DerLaCroix
& KaTsulChi (LCD Saving)
Version 1.2 (07.10.2016)

This code enables a mining drone to work (mostly) autonomous.

HOW DO I USE THIS:
1. Make sure you meet the hardware requirements (see below).
Ship will display error messages through the antenna if you lack something.
Make sure to #REINIT ship after an error message - it will not do anything until reinitialized.
2. Set AI_TIMER up to execute Run without parameters and then restart itself every second, don't start it, yet.
3. Go into the program editor - edit settings for ship size and thrust. Check code, Save and Exit.
4. Go into GPS tab and copy the target coords. (Make sure they are within 50m of the asteroid,
or the ship will simply return because it can't find it.)
4. Set up the command line. See commands below.
Good template: Example: #REINIT#TARGET GPS:Asteroid:-45.78:-71.36:0.38: #SMART#GARBAGEDUMPON#CARGOLIMIT:5
Ship is reinitialized for good measure, Initial mining place is set to "Asteroid", Smart mining activated,
Garbage dumping is on, Cargolimit set to 5%, which means the ship will return often.
If you want to drop cargo instead of docking, use the #THROWOUT parameter, as well.

5. Position ship so that it is in line with the docking port or at the position it should throw out cargo.
6. MAKE SURE REMOTE CONTROL IS SET TO "ONE WAY".
7. Start AI_TIMER (1 second interval).
8. Go do something else while it works, you can check on it via the antenna status displays from afar.

WHAT WILL IT DO?
After turning on, it will attempt to reverse into the home position and dock.
If docking fails, ship will display an error. (This means the docking was not possible or the ship wasn't lined up well.)

Once docked, it will unload all cargo, and recharge all batteries to at least 99% before moving out.
AI will then remember it's home dock for the future, undock from connector and move out for ~10 seconds at low speed.
It will remember some waypoints on the way out to be able to park correctly on returning.
Don't be alarmed if it doesn't immediately move out after declaring to do so - connectors "stick" sometimes. The drone AI will
increase forward thrust until it is let go, and only then start the departing countdown once it is moving.

(When using #THROWOUT to unload, it will simply remember the current position and orientation as home.)

After departing, it will use autopilot to fly to given #TARGET coordinates(Head out). Drone might fly strangely at first - this
is the Autopilot collision avoidance behaviour. Collision avoidance will be turned off at 100m from target, for it might not want
to get close to the target asteroid.

Once it arrived there, AI will attempt to find an asteroid there.(Within the 50m sensor range.)
It will then proceed to mine that asteroid - for a normal sized asteroid, it will go straight for the centre at first try, and then
mine around the edges at further passes. If the cargo is less than #CARGOLIMIT (default 50%) full after the asteroid is cleared,
it will turn around and make another pass.

Once it has contact to stone, it will steadily increase thrust to make sure it will push through the asteroid while weight increases.
Also, sometimes the drills "stick" to the asteroid. This will also be solved at some point by the steady thrust increase.
This has the side effect that the ship will occasionally stop while flying freely in mining mode (holes in asteroid of while
approching/after exiting) - speed limiting to soften impacts once we break through with high thrust cannot discern between these states.

Once the container is full enough, it will return to home coordinates. If #SMART mining is active, it will save the last exit point
as the next target to return after unloading.

AI will engage autopilot to return to the departing/arrival point, and then attempt to reverse into dock (or just arrive at throwout position.)
Don't be alarmed if the ship turns around during docking and heads 'back' - autopilot is a bit overzealous, sometimes.
It will get back on course, and if autopilot shuts of for some reason (it does that...) it will resume automatically.
If docking cannot be done for some reason (off course/connector off/damaged, etc), the drone will return to arrival point and
retry the docking approach.
You will notice that the drone is flying circles if that happens - just look what the issue is, pause timer, repair, restart timer.
Unless the damage makes a #reinit necessary, the drone will simply resume its work once the timer triggers, again.

After docking (or reaching throwout position) it will unload/charge (or dump cargo), and then head out again.

#RETURN command will cause the drone to return home and stay there (after clearing the asteroid, of course).
It will only head out again if given the #GO command.

If average battery charge drops below the #MINCHARGE threshold, it will also return to dock.

Status messages through the antenna will keep you informed.


///////////////////////////////////////////////////////////////////////////////
//
// Configuration/Settings you will find in the code - You may need to edit these
///////////////////////////////////////////////////////////////////////////////

For determining the rough outline of ship size, needed to determine sensor range for more efficient mining.
Set this to the maximum size of the hole the ship will drill, or a bit more.
int shipDiameter = 8;

Minimal thrust per thruster needed to move the empty ship in percent. Set as low as possible. (Default 3%)
Ship will use this as starting point and spool up the engines until the ship starts moving.
int defaultMinimumThrust = 3;

Sensor range - ONLY edit this if you are using a sensor range mod.
int sensorRange = 50;


//////////////////////////////////////////////////////////////////////////////
// HArdware requirements
//////////////////////////////////////////////////////////////////////////////
Thruster Groups for FORWARD and REVERSE
Please keep in mind that forward and reverse thrusters work best if they are equally sized.

1 Timer block called AI_TIMER
Set to 1 second, triggering the program Run (NO PARAMETERS) and Timer start

1 Sensor at the front of the ship called SENSOR
It will be used for asteroid detection while mining.
1 Remote control (obviously)
1 Antenna to send messages. set range appropriately to your needs.
1 LCD Panel named AI_MEMORY to save setttings to avoid problems on server reset.

1 block called FRONT at the front of the ship
1 block called REAR directly in line behind the FRONT.
Will be used for direction determination and to calculate the size of the ship (for mining).

At least 1 Connector (or Ejector, for the system, they are the same object class, so I sadly can't distinguish between them). If you have multiple Connectors and don't use #THROWOUT, it will attempt to lock all of them.
(Even though the program can address ejectors only as connectors, they obviously can't lock.)
For throw out reasons, all available connector(or ejector) blocks will be used. (GARBAGEDUMP is ignored.)
Connector blocks named GARBAGEDUMP (e.g. a stone remover), reactors, or sorters will be ignored when cargo content is measured.
Be advised that using garbage dump ejectors leads to lot of debris during the mining.
(And lag, which causes a whole lot of trouble, just as well.) Dumping stone from the
Dumping it from the station after it was taken off the drone is much more efficient.
Garbage dumping is very efficient at making the most out of each mining pass, though.


///////////////////////////////////////////////////////////////////////////////////////77777
Available Command Parameters (Will be read from argument, you can use more than one in each execute.)
/////////////////////////////////

Remember that the timer will execute the program without sending any the arguments,
so you don't need to delete the commands after use.

#REINIT
AI will analyse the ship and reinit.
(Use this after you changed the ship layout or had to repair things.)
First run of the script will always initialize the ship.
This will remove all coordinates and will trigger the initial docking sequence, so use only while at home position.

#TARGET <Gps-coordinates> (As copied from the GPS screen - Unedited!)
Sets target coordinates for mining.
Drone will move there and try to find an asteroid to mine (~50m search range)
(If #SMART Mining is active, these coordinates will be internally altered after first use. The old start point is lost.)

#THROWOUT
Drone will not attempt to dock at home, but rather set connector to throw out after parking at the spot it was initialized.
Make sure you have Collectors set up.

#CARGOLIMIT:<percentage>
Overwrites the default 50% cargo filled limit for returning home. (Only if <percentage> is a valid number.)
This is to prevent wasteful mining passes when the cargo hold is already full.

#MINCHARGE:<percentage>
Overwrites the default 50% battery charge limit for returning home. (Only if <percentage> is a valid number.)

#SMART
Drone will use the coordinates where it last exited the asteroid as new destination.
This prolongs the time it can still find the asteroid, and may enable it to find new ones nearby.
(TODO later versions)Once the asteroid is not detectable any more, it will attempt to find a new one on the way home.

#DUMB
Turns smart mining off - drone will always mine from the last start point. (default mode)
Useful to primarily exploit a specific deposit on the asteroid.

#GARBAGEDUMPON
#GARBAGEDUMPOFF
Activates/deactivates automated garbage dumping while mining. (Default is OFF)

#RETURN
Drone will return to home at the next possible moment, and stay docked.

#GO
Cancels RETURN command.
Last edited by DerLaCroix; Oct 8, 2016 @ 3:12pm
< >
Showing 1-9 of 9 comments
DerLaCroix  [developer] Jul 2, 2016 @ 4:43pm 
ADDENDUM:

Right now, it only works if you are using english language in the game - it does parse button texts to analyze states/ take actions. I will try to incorporate other languages, soon.

The current strings used are the
"Ready To Lock"
and
"Locked"
text of the connector status.

If you can post these values for your language, I could incorporate them and enable the script for your language.
DerLaCroix  [developer] Jul 7, 2016 @ 3:51pm 
IMPORTANT - set your remote control to "ONE WAY". The drone will get stuck after a waypoint if you don't.

NEW FUNCTION:

Version 1.1 update - new command available:

#GRINDER
Drone will use deconstruction mode. (Grinding down non-user targets with grinders)

Drone will not attempt to deconstruct objects of the drone's owner. Change ownership to deconstruct own vessels.

Make sure the target cannot float away too fast, or the drone might lose contact after a few passes.

Drone may get stuck in wreckage - check on it in regular intervals.
You may want to increase the minimum thrust, components are pretty heavy.
Devlah Jul 21, 2016 @ 1:46pm 
Suggestion: Add to the manual somewhere mentioning that the autopilot function needs to be set to "One Way" in order to ensure proper operation, or alter coding to change this setting on program start.
DerLaCroix  [developer] Jul 23, 2016 @ 3:28pm 
Thank you, I added it. Next version will check for it.
DudemanGT Aug 15, 2016 @ 10:36am 
Do i need to physically name a block FRONT and REAR? and what blocks qualify to used as such. can i name the sensor on the nose as FRONT?
Devlah Aug 16, 2016 @ 9:21pm 
In the case of drilling drones, since the drill is usually in front anyway, I just name the drill FRONT.
DerLaCroix  [developer] Aug 18, 2016 @ 11:34pm 
Yes, you need to Physically name them. You can use any block, as long as it is along the center axis. I do need them to know how the ship is aligned in space and which direction it travels.

(Sorry, my internet was down the last two weeks)
Last edited by DerLaCroix; Aug 18, 2016 @ 11:34pm
DerLaCroix  [developer] Oct 8, 2016 @ 3:15pm 
To use the LCD save oprion, you need to add a LCD panel named AI_MEMORY.
TheCatWorld Oct 19, 2017 @ 8:08am 
Traduction EN-FR
Traduction EN-FR

--------------------------------------------------------------------------------

DESCRIPTION/MANUEL COMPLET

Drone minier automatique (utilisant un pilote automatique)
DerLaCroix et KaTsulChi (Sauvegarde LCD)
La version 1.2 (07.10.2016)

Ce code permet à un drone minier de fonctionner de manière (Le plus possible) autonome.

COMMENT UTILISER CECI :
1. Assurez-vous que vous respectez les équipements requis (voir ci-dessous).
Le vaisseau affichera des messages d'erreur par l'antenne si vous manquez de quelque chose.
Assurez-vous de #REINIT le vaisseau après un message d'erreur - il ne fera rien jusqu'à être réinitialisé.
2. Réglez AI_TIMER pour exécuter "Run" sans paramètres, puis redémarrez toutes les secondes, ne le démarrez pas encore.
3. Allez dans l'éditeur de programme - Modifiez les paramètres pour la taille et la poussée du navire. Vérifiez le code, Enregistrer et Quitter.
4. Allez dans l'onglet GPS et copiez les coords cibles. (Assurez-vous qu'ils sont à 50 m de l'astéroïde,
ou le vaisseau retournera simplement a son point de départ parce qu'il ne peut pas le trouver.)
4. Configurez la ligne de commande. Voir les commandes ci-dessous.
Bon modèle : Exemple: # REINIT # TARGET GPS: Astéroïde: -45.78: -71.36: 0.38: # SMART # GARBAGEDUMPON # CARGOLIMIT: 5
Le navire est réinitialisé pour faire bonne mesure, l'emplacement d'extraction initial est réglé sur "Astéroïde", l'exploration intelligente activée,
La vidange des ordures est activée, le Cargolimit est fixé à 5%, ce qui signifie que le navire reviendra souvent.
Si vous souhaitez larguer des marchandises au lieu de les amarrer, utilisez également le paramètre #THROWOUT.

5. Placez le navire de façon à ce qu'il soit aligné avec le port d'amarrage ou à l'endroit où il devrait jeter la cargaison.
6. ASSUREZ-VOUS QUE LA TÉLÉCOMMANDE EST RÉGLÉE «ONE WAY».
7. Démarrez AI_TIMER (intervalle de 1 seconde).
8. Allez faire autre chose pendant que ça marche, vous pouvez le vérifier via les affichages d'état de l'antenne de loin.

QUE FERA-T-IL ?
Après l'allumage, il essayera de faire marche arrière dans la position de départ et le dock.
Si l'amarrage échoue, le vaisseau affichera une erreur. (Cela signifie que l'amarrage n'était pas possible ou le vaisseau n'a pas été bien aligné.)

Une fois amarré, il déchargera toute la cargaison et rechargera toutes les batteries à au moins 99 % avant de partir.
l'IA se souviendra alors que c'est son dock à l'avenir, déconnection du dock et bouger ailleurs pendant ~10 secondes à faible vitesse.
Il se rappellera quelques points de cheminement en sortant pour pouvoir se garer correctement au retour.
Ne soyez pas alarmé s'il ne bouge pas immédiatement après avoir déclaré - connecteurs "collent" parfois. L'IA drone augmentera la poussée en avant jusqu'à ce qu'il soit libéré et seulement commencera ensuite le compte à rebours une fois qu'il se déplace.

( En utilisant #THROWOUT pour débarquer, il se rappellera simplement la position actuelle et l'orientation comme maison.)

Après le départ, il utilisera le pilote automatique pour piloter vers la donnée #TARGET des coordonnées (Voir plus haut). Le drone pourrait voler étrangement en premier - ceci est le comportement d'évitement de collision du Pilote automatique. L'évitement de collision sera éteint à 100m de l'objectif, car il pourrait ne pas vouloir se rapprocher de l'astéroïde cible.

Une fois qu'il est arrivé là, l'IA essayera de trouver un astéroïde. (Dans les 50m des capteurs.)
Il passera alors au minage que l'astéroïde - pour un astéroïde de taille normale, il ira tout droit pour le centre au premier essai et ensuite le minera autour des bords aux prochains passages. Si la cargaison est moins remplie que #CARGOLIMIT (et manque à ses engagements 50 %) après que l'astéroïde est dégagé, il se retournera et fera un autre passage.

Une fois qu'il a contacté la pierre, il augmentera régulièrement la poussée pour s'assurer qu'elle poussera à travers l'astéroïde pendant que le poids augmente.
Aussi, parfois, les foreuses "collent" à l'astéroïde. Cela sera également résolu à un moment donné par l'augmentation constante de la poussée.
Cela a l'effet secondaire que le navire s'arrêtera de temps en temps en volant librement en mode minier (des trous dans l'astéroïde d'approche/sortie) - la limitation de vitesse pour adoucir les impacts une fois que nous perçons avec une poussée élevée ne peut discerner entre ces états.

Une fois que le conteneur est assez plein, il retournera aux coordonnées de départ. Si l'extraction de #SMART est active, il économisera le dernier point de sortie comme l'objectif suivant pour retourner après le déchargement.

l'IA engagera le pilote automatique pour retourner au point de départ/arrivée et essayera ensuite de faire marche arrière dans le dock (ou arrivera juste à la position de throwout.)
Ne soyez pas alarmé si le vaisseau se retourne pendant l'amarrage et est la tête "en arrière" - le pilote automatique est un peu trop zélé, parfois.
Il reprendra le cap, et si le pilote automatique se bloque pour une raison quelconque (il le fait...), il le reprendra automatiquement.
Si l'amarrage ne peut pas être fait pour quelque raison (hors route/connecteur désactivé/endommagé, etc.), le drone retournera au point d'arrivée et réessayera l'approche.
Vous remarquerez que le drone fait des cercles si cela arrive - il suffit de regarder quel est le problème, mettre en pause la minuterie, réparer, redémarrer la minuterie.
A moins que le dommage ne rende nécessaire un #réinit, le drone reprendra son travail une fois que le timer déclenché.

Après l'amarrage (ou le fait d'atteindre la position de throwout) il déchargera/chargera (ou déversera la cargaison) et repartira.

La commande #RETURN fera que le drone rentre a la position de départ et reste là (après avoir nettoyé l'astéroïde, bien sûr).
Il ne sortira de nouveau que si la commande #GO est donnée.

Si la charge moyenne de la batterie tombe en dessous du seuil #MINCHARGE, elle retournera également à la station d'accueil.

Les messages de statut par l'antenne vous garderont informés.


/////////////////////////////////////// /////////////////////////////////////// / // // Configuration / Paramètres que vous trouverez dans le code - Vous devrez peut-être modifier /////////////////////////////////////// ////////////////////////////////////////

Pour déterminer le contour approximatif de la taille du vaisseau, nécessaire pour déterminer la portée du capteur pour une exploitation plus efficace.
Réglez ceci sur la taille maximale du trou que le navire va forer, ou un peu plus.
int shipDiameter = 8;

Propulsion minimale par propulseur nécessaire pour déplacer le vaisseau vide en pourcentage. Réglez aussi bas que possible. (3% par défaut)
Le navire utilisera ceci comme point de départ et lancera les moteurs jusqu'à ce que le vaisseau commence à se déplacer.
int defaultMinimumThrust = 3;

Plage de capteur - modifiez-la UNIQUEMENT si vous utilisez une gamme de capteurs mod.
int sensorRange = 50;


/////////////////////////////////////// /////////////////////////////////////// // ÉQUIPEMENTS REQUIS /////////////////////////////////////// ///////////////////////////////////////

Groupes de Propulseur pour FORWARD et REVERSE
Gardez à l'esprit que les propulseurs avant et arrière fonctionnent le mieux s'ils sont de la même taille.

1 bloc de Minuteur appelé AI_TIMER
Réglez sur 1 seconde, en déclenchant le programme "Run" (PAS DE PARAMETRES) et Timer start

1 Capteur en avant du bateau appelé SENSOR
Il sera utilisé pour la détection d'astéroïdes pendant l'exploitation minière.
1 Télécommande (évidemment)
1 Antenne pour envoyer des messages. Réglez la gamme de façon appropriée à vos besoins.
1 Panneau LCD nommé AI_MEMORY pour enregistrer les réglages afin d'éviter les problèmes lors de la réinitialisation du serveur.

1 bloc appelé FRONT à l'avant du vaisseau
1 bloc appelé REAR directement en ligne derrière le FRONT.
Sera utilisé pour la détermination de la direction et pour calculer la taille du navire (pour l'exploitation minière).

Au moins 1 connecteur (ou éjecteur, pour le système, ils sont la même classe d'objet, donc je ne peux malheureusement pas distinguer entre eux). Si vous avez plusieurs connecteurs et n'utilisez pas #THROWOUT, il tentera de les verrouiller tous.
(Même si le programme ne peut traiter les éjecteurs que comme des connecteurs, ils ne peuvent évidemment pas se verrouiller.)
Pour des raisons de rejet, tous les blocs de connecteur (ou d'éjecteur) disponibles seront utilisés. (GARBAGEDUMP est ignoré.)
Les blocs de connecteurs nommés GARBAGEDUMP (par exemple un dissolvant de pierre), les réacteurs ou les trieurs seront ignorés lorsque la teneur de la cargaison est mesurée.
Soyez avisé que l'utilisation d'éjecteurs de déversement d'ordures conduit à beaucoup de débris pendant l'exploitation minière.
(Et lag, qui cause beaucoup d'ennuis, également.) Un dépotoir de pierre sur la station après qu'il a été retiré du drone est beaucoup plus efficace.
Le déchargement des déchets est très efficace pour tirer le meilleur parti de chaque passe minière.


////////////////////////////////////////////////// ///////////////////////////////////// 77777
Paramètres de commande disponibles (Sera lu à partir de l'argument, vous pouvez en utiliser plus d'un dans chaque exécution.)
////////////////////////////////

Rappelez-vous que la minuterie exécutera le programme sans envoyer les arguments,
vous n'avez donc pas besoin de supprimer les commandes après utilisation.

#REINIT
AI va analyser le vaisseau et le réintroduire.
(Utilisez-le après avoir changé la disposition du navire ou dû réparer des objets).
La première exécution du script initialisera toujours le navire.
Cela supprimera toutes les coordonnées et déclenchera la séquence d'accueil initiale, alors n'utilisez que lorsque vous êtes à la position de départ.

#TARGET <Coordonnées GPS> (Copié depuis l'écran GPS - Non édité!)
Définit les coordonnées cibles pour l'exploration minière.
Le Drone va se déplacer là-bas et essayer de trouver un astéroïde à miner (plage de recherche de ~ 50m)
(Si #SMART Mining est actif, ces coordonnées seront modifiées en interne après la première utilisation.) L'ancien point de départ est perdu.

#THROWOUT
Le Drone ne tentera pas d'accoster au dock, mais plutôt de jeter après le stationnement à l'endroit où il a été initialisé.
Assurez-vous que vous avez mis en place des collecteurs.

#CARGOLIMIT: <pourcentage>
Remplace la limite par défaut de 50% remplie pour le retour au dock. (Seulement si <pourcentage> est un nombre valide.)
Cela permet d'éviter les pertes minières lorsque la soute est déjà pleine.

#MINCHARGE: <pourcentage>
Remplace la limite de charge par défaut de 50% pour retourner au dock. (Seulement si <pourcentage> est un nombre valide.)

#SMART
Drone utilisera les coordonnées où il a quitté l'astéroïde en tant que nouvelle destination.
Cela prolonge le temps qu'il peut encore trouver l'astéroïde, et peut lui permettre d'en trouver de nouveaux à proximité.
(TODO versions ultérieures) Une fois que l'astéroïde n'est plus détectable, il essaiera de trouver un nouveau sur le chemin du retour.

#DUMB
Active le minage intelligent - le drone extraira toujours du dernier point de départ. (mode par défaut)
Utile pour exploiter principalement un dépôt spécifique sur l'astéroïde.

#GARBAGEDUMPON
#GARBAGEDUMPOFF
Active / désactive le déchargement automatique des ordures lors de l'extraction. (La valeur par défaut est OFF)

#RETURN
Drone retournera à la position de départ et restera à quai.

#GO
Annule la commande RETURN.
Last edited by TheCatWorld; Oct 19, 2017 @ 8:29am
< >
Showing 1-9 of 9 comments
Per page: 1530 50