Ce message est en mode wiki. Tous les comptes de plus de 30 jours avec plus de 30 messages peuvent le modifier.
Ce wiki s'adresse à tous ceux qui ont le désir de comprendre quelques fondamentaux avant de se lancer ou pas dans l'aventure passionnante des robots. Sommaire :
IntroductionPour déplacer un simple objet dans SL il existe plusieurs solutions de scripts ou d'instructions LSL, voici les principales: Objet NON physique (masse = 0; gravité = 0): llSetPos(vector_pos); llSetPrimitiveParams( [POSITION,vector_position] ); Objet physique: . LlMoveToTarget(vector_position,x,y) . LlApplyImpulse . LlPushObject et utilisation des functions "Linden Vehicle" llSetVehicleType llSetVehicleFloatParam llSetVehicleVectorParam llSetVehicleRotationParam llSetVehicleFlags etc... Bouger un objet non physique est somme toute assez facile et pourrait être: llSetPos( llGetPos() + < 0.0, 0.0, 2.0 >); // monter de 2 mètres Quelques expériences...surprenantes!Si vous n'avez jamais jouer réellement avec les prims physiques, ou que votre science n'est QUE théorique je vous conseille vivement de lire attentivement la suite quelque soit votre niveau en script... Objet non physiqueRéalisons un petit script dans une simple box. Code PHP:
Modifions le script pour qu'il enchaine 2 déplacements: Code PHP:
Objet physiqueMaintenant rendons physique la box entre les 2 déplacements: Code PHP:
Citation :
Code PHP:
Normal ou bof me direz vous... Erreur!! essayer de lancer un paquet de farine au dessus de votre tête pas sûr que vous le contempliez en lévitation!!! Maintenant avec l'edit menu ramenez le au sol...pour recommencer cette expérience. Un problème ?? Que constatez vous? Oui la box se repositionne à sa place initiale! Surprenant... et important à connaitre. Maintenant ajoutons l'instruction llStopMoveToTarget(); Code PHP:
Définissons quelques règles Citation :
Le petit script qui va bien... Code PHP:
Normal? bof?.... Encore une fois soyez humble quand vous touchez au monde la physique Démonstration par l'exemple...modifions le script pour qu'il reste 5s en hauteur avant de revenir...facile il y a juste un timer à modifier... Code PHP:
Pourquoi?? Juste parce que la règle 4 s'est appliquée et a annulée la règle 3! Corrigeons le script... Code PHP:
Normal ? bof? Plus cette fois j'espère, rester humble!, car il y a ENCORE un erreur... Je vous laisse la trouver Refaite cette expérience et percuter votre boite avec vos pieds. Que se passe t'il? votre boite se retrouve sans dessus dessous la pauvre à plusieurs mètres de son origine! Imaginez la tête de votre robot... Pourquoi? toujours les règles 3 et 4 ! On a commit 2 erreurs en faisant le llStopMoveToTarget(): la première est d'avoir arrêté le mouvement de retour AVANT que la boite n'ait eu le temps de revenir!! la seconde de ne pas "figer" la position de retour. Corrigeons le script: Code PHP:
L'introduction que j'aurais pu faire concernant les prims physiques aurait pu être celle ci: Vous savez scrypté?, vous disposez de bonnes connaissances SL? très bien....oubliez tout! Maintenant une autre expérience nous allons nous déplacer de x = 1m y=2m et z= 3m (hauteur) et revenir à la position initiale. Nous colorions en bleu la face supérieure de la box Le script: Code PHP:
La prim part en vrille à chaque clic! Les scripteurs vont de suite réagir ... en disant: normal! on doit appliquer la rotation sur la position! pfff élémentaire!! On connait comment marche le llSetPos patati patata... Vérifions... Code PHP:
Nous pouvons édifier une règle et TOUJOURS s'en souvenir... Citation :
Code PHP:
Il existe 2 autres instructions • llLookAt • llStopLookAt je vous laisse lire le wiki, votre ami. Édifions la dernière règle. Citation :
Mon premier robot followerFollower veut dire suiveur. Le code suivant malgé sa simplicité sera votre base de travail dans...99% des cas! Créez une box, coloriez la face du dessus en bleu et insérez le script ci dessous. Script: Code PHP:
Explications: Le robot va donc vous suivre et se positionner à votre droite et vous regarder. Principe: On met la prim en mode physique et on lance un timer de 1s (cadenceur) qui lance la fonction FollowMe. Code PHP:
La position du robot sera décalé de celle du owner de x +1.0, y+ 1.0, z +0.4 en tenant compte de sa rotation Le facing sera effectuée par la fonction llLookAt( Pos - <1.0, 1.0, -0.4>*Rot , 0.4, 0.4). On regarde le owner au dessus de la moitié de la hauteur + .4m. Les impératifs à prendre en compteLe principal problème à propos des robots est de ne pas les perdre! Passons en revue quelques cas. Le Owner quitte le jeu ou la régionLa façon la plus sûre et la plus rapide de savoir si un agent est présent sur une région est la fonction llGetAgentSize qui retournera un vecteur à zéro si l'agent n'est pas présent sur région. Dans le script du follower cela pourrait être implanté de la façon suivante: Code PHP:
Le robot ne peut pas entrer sur une parcelleCertainement un des premiers gros problèmes concernant le déplacement des robots. Que je passe t'il quand un objet physique rencontre une frontière interdite? Il reste coincé, les instructions llMoveToTarget imposées par le status physique de l'objet restent stériles quelques soient la destination choisie...Le piège s'est refermé. La première étape est de détecter que le robot est "coincé". Pour ce faire on peut définir deux critères interressants La distance entre l'agent et le robot La vélocité de l'objet. et établir une équation qui devrait nous alerter. Si la distance > 1m et que le robot reste immobile on peut dire qu'il est coincé. Scriptons la sous forme de fonction: Code PHP:
Pour sortir le robot de cette mauvaise posture il faut réaliser 2 choses: Repasser l'objet en mode non physique Et utiliser le llSetPrimitiveParams [POSITION]qui est la seule instruction capable de déplacer l'objet. Cette fonction a une limite bien connue, celle de ne pas pouvoir déplacer un objet de plus de 10m. Ce qui dans notre cas est plus que problématique. En effet le owner peut sortir du terrain à un endroit et revenir à un autre distant de plus de 10m du robot. Heureusement une faille dans la fonction a permit de mettre au point la fameuse warPos capable de déplacer un objet à plus de 1000m. http://wiki.secondlife.com/wiki/WarpPos Le code pourrait ressembler à cela: Code PHP:
Parcel no_scriptPeut être contourné facilement par l'utilisation de llRequestPermissions. http://wiki.secondlife.com/wiki/LlRequestPermissions If a script has taken controls, it and other scripts in the same prim will not be stopped if the Agent enters a No-Script Area. This is done to keep vehicle control alive and AOs functional. This is an intentional feature. le script devra donc contenir : Code PHP:
Le script finalCode PHP:
ConclusionsSuggestionsVous devez prendre le temps d'ajuster, d'améliorer, d'ajouter des fonctions dans le script Motor Engine V1.0 mais son dénaturer sa fonction première: vous suivre.Quelques pistes: Le robot dans ses déplacements va heurter des objets et quelques fois se bloquer lui même contre un objet quelconque (mur par exemple) vous devez prévoir cette situation. Vous devez tester les frontières world off sous peine de perdre votre robot. Allez vite est une chose...allez intelligemment aussi Imaginez l'improbable, l'impossible ... Tester et faite tester votre robot dans différents lieux ou situations. Prévoyez des procédures d'urgence. Mettez un balise de détresse dans le robot. Prévoyez un mode RHM ( relation homme/machine ) menu / chat etc... Un robot doit être doté d'un minimum d'IA ( intelligence artificielle) pour le rendre plus autonome et apporter un plus. Un exemple de robot doté de quelques fonctions utiles : https://www.xstreetsl.com/modules.ph...9&random=49839 Conseil sur l'architecture1 Fonction = 1 Script Faite le distinguo entre une fonction vitale de votre robot et un module de confort. Exemple: Le script qui écouterait les ordres du owner est une fonction vitale. Un script qui ferait dire bonjour au robot est un module de confort Mettez une racine différente. Robot_engine Robot_Listen module_talk module_dance Un "bon" robot contient une bonne dizaine de scripts tous les scripts qui sont pas utiles dans certaines situations sont à "stopper" llSetScriptState ( "module_dance",FALSE); Faire un robot vous permettra d'employer 100 % des instructions LSL et 3/4 de ses fonctions... c'est une chance...mais aussi quelques nuits blanches Espérant vous avoir donné l'envie de créer votre robot personnel Seb, |
|
05/10/2009, 19h02 |
|
[Wiki] Créer son robot
Suivre |
|
Partager | Rechercher |
Suivre |
Connectés sur ce fil1 connecté (0 membre et 1 invité)
Afficher la liste détaillée des connectés
|