31/03/2014

Creer une requête distante avec Jena sur un serveur Fuseki

source : https://www.cambridgesemantics.com/fr/semantic-university/sparql-by-example, slide 50depuis le répertoire jena/bat
GET -H "Accept: text/turtle" http://dbpedia.org/sparql

une requete directement dans la zone requete de fuseki :
SELECT *
 WHERE { ?subject ?p ?object }
ou avec les namespace :
 PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX example: <http://example.org/ns#>
SELECT *
 WHERE { ?subject ?p ?object }
dans un navigateur : 
http://fuseki-smag0.rhcloud.com/ds/query?query=%0D%0ASELECT+*%0D%0A%09WHERE+%7B+%3Fsubject+%3Fp+%3Fobject+%7D&output=text&stylesheet=
sous DOS : 
GET -H "Accept: text/turtle" http://fuseki-smag0.rhcloud.com/ds/query?query=%0D%0ASELECT+*%0D%0A%09WHERE+%7B+%3Fsubject+%3Fp+%3Fobject+%7D

27/03/2014

Réclamations, Doutes, Demandes

On est partis pour... Ok, si je considère... allez... que dans 20 ans tout sera connecté dans ma maison et branché sur internet et commandable par mon smartphone (ou autre...)
Un paquet de questions se posent ...
Parce qu'un projet comme ça pose beaucoup de problème : éthique, sécurité, confidentialité, ...

Si vous avez des doutes, des peurs, des requêtes, des oppositions, quand au projet, ... c'est normal, j'ai aussi souvent peur de ce que je ne connais pas ...

On va tenter de  trouver des solutions à ces questions :
- Les robots vont-ils donner plus de chômage ?
- Vais-je perdre mon boulot ? 
- Qui est responsable d'un robot qui commettrait un délit ?
- Comment être sûr que mes informations personnelles ne sont pas diffusées sur le Net ?
- Comment désactiver un robot qui se trouverait dans ma maison ... et que j'y ferais des trucs que je n'ai pas envie qu'il voie ?
- Comment être certain que le robot dont j'ai besoin sera disponible au moment où j'en aurai besoin ? 
- Où vont-ils se ranger dans ma maison ?
- Comment le robot qui me fera le café va t-il savoir que le matin je mets deux sucres dans mon café et que le soir je n'en met qu'un ?
... et toutes les autres questions que vous pourriez-vous poser...

 Je vous invite au "Café des prudents, sceptiques & des opposants" : le café PSO, la discussion y est libre et plus elle sera virulente, plus on pourra approfondir les sujets et trouver des solutions.
Et juste à côté du café PSO, on va ouvrir le café SPO... le "Café des Sujets, Propriétés, & Objets", ce café parlera plus de technique et de la manière dont l'information peut être stockée : sous forme de triplet avec  :
un sujet, une propriété, un objet.
pour faire simple : 
<voiture> <couleur><rouge>
<david><age><37>
<pcduino Rover><type><robot>
...

d'autres cafés sont en train d'ouvrir leurs portes... Tenez... par exemple, je vois là-bas M. GéoTrouvetout... c'est lui qui tient le "café DIMB & DUMB" , le café des DIYeurs, des inventeurs, des makers et des bricoleurs, il y a également Mr Holon qui tient le "café SMA" , le café des Agents et des Multi-agents..., et d'autres encore... des boutiques, aussi où les inventeurs et fabricants exposent leurs projets... que du beau monde... il y a même un espace réservé pour l'utilisation du projet Smag0 par les enfants...

Vous trouverez également LA MAISON DES DEFIS : c'est l'endroit où l'on réalise les trucs qui ne sont normalement pas réalisables...
Et la place reste ouverte... n'importe qui peut se poser sur un banc et lancer un sujet de conversation, une idée, un problème...


Pour afficher le groupe de discussion en pleine page, suivez ce lien

Le systeme multi-agent sous forme de holon

Trouvé ce texte de Descartes dans une des thèses :http://sebastian.rodriguez.free.fr/files/ThesisSRodriguez_print.pdf )
Les hommes sont les proies d'une si aveugle curiosité qu'ils conduisent souvent leur esprit par des chemins inconnus, et sans aucune raison d'espérer, mais seulement pour courir leur chance d'y trouver par hasard ce qu'ils cherchent ; comme quelqu'un qui brûlerait d'un désir si brutal de découvrir un trésor, qu'il ne cesserait de courir les rues ça et là, cherchant si par hasard il n'en trouverait pas un qu'un voyageur aurait perdu. C'est ainsi que travaillent presque tous les chimistes, la plupart des géomètres, et plus d'un philosophe ; et certes je ne nie point que parfois ils ne vagabondent avec assez de bonne fortune pour trouver quelque vérité ; je n'admets pas pour autant qu'ils en soient plus habiles, mais seulement plus chanceux. Il vaut cependant bien mieux ne jamais songer à chercher la vérité sur quelque objet que ce soit, que le faire sans méthode : car il est très certain que ces recherches désordonnées et ces méditations obscures troublent la lumière naturelle et aveuglent l'esprit ; et tous ceux qui s'habituent ainsi à marcher dans les ténèbres affaiblissent tant leur vue que par la suite ils ne peuvent plus supporter la lumière du jour ; l'expérience aussi le confirme, puisque nous voyons très souvent ceux qui ne se sont jamais souciés d'étudier porter des jugements bien plus solides et bien plus clairs sur ce qui se présente à eux, que ceux qui ont passé tout leur temps dans les écoles. DESCARTES

Les systèmes multi-agents : 

Qu'est ce qu'un système multi-agent ?
http://www.lirmm.fr/~ferber/publications/LesSMA_Ferber.pdf

Les méthodes de conception de systèmes multi-agent :

Diamond : http://tel.archives-ouvertes.fr/docs/00/18/90/46/PDF/These_Jean-Paul_Jamont_2005.pdf
Aspecs :  http://www.aspecs.org/Home ou en   Pdf

Un agent particulier, le holon : 

Holons dans les systèmes multi-agents[modifier | modifier le code]

Les systèmes multi-agents sont des systèmes composés d'entités logicielles autonomes. Ils sont capables de simuler un système ou de résoudre des problèmes. L'holon peut être vu comme une sorte d'agent récursif : un agent composé d'agents qui, a un niveau donné, a son propre comportement comme un conséquence partielle des comportements de ses composants5. Janus Multiagent Platform est un exemple de plate-forme logicielle capable de faire tourner des holons.
( source Wikipedia :
http://fr.wikipedia.org/wiki/Holon_(philosophie)#Holons_dans_les_syst.C3.A8mes_multi-agents )


Exemlpe de systèmes multi-agent :
Janus Project (Java) : http://www.janus-project.org/Home
Spade (Python) :
Jade (Java) :
Quelque chose en ruby, où autre ? faites-le nous savoir qu'on rajoute l'info .
Dans jade, spade, Janus, les agents respectent les normes de la FIPA pour les communications .
Les systèmes multi-agents ont l'air un peu veillots...
Pour se renseigner sur la programmation des agents :
https://www.google.fr/search?q=programmation+agent+java&oq=java+programmation+ag&aqs=chrome.1.69i57j0.8663j0j4&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8
Un autre type d'agent directement natif dans java (à voir si ça correspond?) : http://blog.xebia.fr/2008/05/02/java-agent-instrumentez-vos-classes/

Pour en savoir plus : 

https://www.google.fr/search?q=holon&oq=holon&aqs=chrome..69i57j0l5.1180j0j4&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8#q=holon+multi-agent


25/03/2014

Hidden Orchestra, rien à voir avec le projet

Quelle peut bien être la signification du parcours du jeune homme dans le clip Anitphon de Hidden Orchestra ? Vous avez une idée ?

Explications : sur le clip Antiphon de Hidden Orchestra, une quinzaine de coordonnées sont affichées, j'ai retracé le parcours du jeune homme (il fait d'ailleurs, ceci dit en passant, 498 km de marche à pied (estimé à 101 heures par google maps) ... enfin j'en connais qui ne sont pas loin ;-)(private joke)... mais bon !
En regardant de plus près, avec les images satellites, c'est bien son bon parcours, on reconnais notamment l'horloge universelle Urania, et il finit bien au bord de la mer...
Cependant... le clip ne dure que 6 minutes... ça fait donc du 83 km/h... va peut-être falloir l'insrire au prochains jeux olympiques ...

Le problème c'est que je n'arrive pas à savoir si son trajet a une signification... et pourquoi il fait tant de demi-tours !
Si vous avez une idée, merci de bien vouloir la partager.

voir le parcours sur GoogleMaps 






Agrandir le plan


Mais peut-être que des fois ...
 j'aime bien me creuser la tête pour pas grand chose....
 Ah si ... ça a peut-être un rapport avec mon projet alors !...
 + ça donne des idées de réalité augmentée ! ou de chasse au trésor rocambolesque , mais presque !!!

Pourquoi du RDF ? pour jouer de la musique ?

- RDF ( resource description Framework) ? c'est un langage permettant de décrire des ressources d'un domaine... (voir wikipedia). Partageable, distribuable, interprétable par les machines....
- Ok ! c'est donc pour ça que tu veux absolument l'utiliser ?
- Oui, distribuable : donc les ressources sont décrites une fois et partagées entre les modules / robots , à condition de gérer la confidentialité des infos ... Et je me suis dit que je pouvais décrire avec la méthode Diamond qui est une méthode pour construire des systèmes multi-agents... J'en ai d'ailleurs fait une première version sur une autre page du blog, c'est diamond.owl. Et je suis en train d'essayer de la visualiser avec Processing.
Par extension, et si j'y arrive, je devrais pouvoir appliquer ce principe :
 [- visualiser / modifier les fichiers RDF/ontologies sous forme de graphes (Processing ? javascript + D3 ou jointjs)
- transmettre des infos à des machines (ordi/robot/module/agent) dans un format interpretable par elles.]
 à n'importe quelle méthode, comme une recette de cuisine, ou la procédure pour faire du café, pour ouvrir un placard ou y ranger les satanés légos qui trainenet.
- N'importe quelle méthode ou procédure ? Pourquoi pas une chanson, alors ? c'est comme une méthode ! Regarde : si on prend par exemple cette page http://www.francetabs.com/tablatures-partitions/brigitte/battez-vous-tab-guitare12488.html où on trouve les tablatures de Brigitte (désolé, je ne suis pas un crack en solfège, mais la suite doit être applicable aussi !)

ACCORDS
Accord guitare D (xx0232) Accord guitare E (022100) Accord guitare Em (022000) Accord guitare Em7 (022030) Accord guitare A (x02220)
TABLATURE
d|———————————|——————————|————————————||
a|———————————|——————————|————2—0—————||
e|—12———11———|—10———9———|—0—3————3—0—|| clap-clap
   .tremolo-------------    ¬¬        


d|—–2————4———|——5————7———|—2—————————2——||
a|—–2————6———|—–5———–4———|—2———2—0———2——||
e|—––———––———|————––––––—|—0—3————–3—0—|| clap-clap
   .tremolo-------------     ¬¬


       Em       EmM7          Em7       Em6
Faites-vous la guerre pour me faire la cour
 Em
Maintenant battez-vous
  Em       EmM7    Em7    Em6
Soyez gangsters, soyez voyous
 Em
Maintenant battez-vous
      

(...) 
--Fin de l'extrait.

ça nous dit : à la basse : sur la corde de MI faire les notes 12, puis 11, puis 10, puis 9, puis 0, 3, corde de LA : 2, puis 0, re-corde de MI 3 puis 0, puis Clap-Clap.


Et tu dis que tu peux transmettre ça à une machine ?
- Bien sûr, le format rdf est fait pour ça ! Attend, je te montre ! D'abord , tu lance Protégé, et dedans, tu y décris tout ce dont tu as besoin pour ta méthode, ou tout autre chose ( On pourrais par exemple y décrire la procédure pour une opération chirurgicale ( ;-) Oh Coco... Private Joke !) .
Ensuite tu décris des Classes qui regroupent des éléments de même type, avec des sous classes éventuellement, puis des Entités (ou des Individuals) avec des propriétés.
Pour notre exemple, on pourra par exemple creer une classe Note, une classe Accord, une classe Corde, une classe Position, c'est à toi de décrire ton domaine comme tu le souhaite.
Deux personnes différentes pourront décrire le même domaine de deux manières différentes... ce n'est pas un problème, on pourra toujours rapprocher ensuite deux ontologies...
Dans diamond.owl, j'ai utilisé des Classes Etape et des propriétés first (pour indiquer la première Etape) puis des proprietes next pour lier les différents Individuals ou entités...
Un accord peut être décrit comme un ensemble de 3 notes...
On peut dans le même fichier décrire à la fois tous les instruments, et n'afficher (on ne jouer que les bonnes informations en fonction des requêtes).
Exemple qui ne fonctionnera pas en l'état mais possible :  SELECT Accord WHERE {?Accord ?Instrument ?Guitare} ORDERBY ?Ordre

Essaie Protégé,  si tu veux un exemple : tu peux récupérer diamond-first.owl, et si tu veux des infos sur comment utiliser Protégé pour décrire un domaine, tu peux aller voir tout en bas de cet article : http://smag0.blogspot.fr/2014/03/creer-une-interface-pour-visualiser-les.html et récupérer le tutoriel Pizza-Gloria

+++ On peut même certainement s'amuser avec les machines à états finis dans une Ontologie... à voir : http://www.w3.org/TR/2014/CR-scxml-20140313/




pcDuino achat groupé , promo

Si vous aussi vous souhaitez commander une carte pcDuino, on peut peut être faire des commandes groupées (faudra peut-être rajouter la TVA !) pour limiter les frais de port (faites moi savoir si vous êtes intéressés en mettant un commentaire ou me contactant sur ce blog ou page google+) :


Différence entre pcDuino, pcDuino V2, et pcDuino V3 :


 La nouvelle carte pcDuino V3 sortira apparemment en mai 2014 : 55,69 € (conversion au 25/03/14 de 77$)
  • USB WiFi
  • Ethernet 10/100/1000Mbps


La carte pcDuino V2 : 47,73 € (66$)
RJ45 and built-in WiFi 

voir les caractéristiques sur le site du fabricant


La carte pcDuino V1 : 42,67 € (59$)
RJ45  et possibilité d'ajouter un dongle Wifi en option.



  Détail du matériel nécessaire pour le Rover pcDuino :

 (extrait de l'article http://smag0.blogspot.fr/2014/03/rover-pcduino-introduction.html

Budget Estimatif à la date du 15/03/14 :
 - 1 carte pcDuino V2 à 47,46 € ( 66$) http://store.linksprite.com/pcDuinoV2_47Euros
 - 1 webcam 3 axes (PZT) à 17,98 € (25 $) http://store.linksprite.com/webcam3axesPZT
 - 1 T-Board à 7,12 € (9.90$) http://store.linksprite.com/t-board-to-bridge-arduino-shield-to-pcduino-with-level-shifter/
 - 1 Plate-Forme à 11,69 € (16.25$) http://store.linksprite.com/linkerbot-platform/
 - 1 Arduino MotorShield à 9,70 € (13.50$) http://store.linksprite.com/motor-shield/

 Soit un total de 93.95 Euros pour les éléments de base d'un rover Wifi à base de pcDuinoV2 ( DE PLUS , IL Y A UN COUPON DE REDUCTION DE 20% EN CE MOMENT)

 A rajouter frais de port : (entre 15 et 20 €)

 rajouter les cables, vis... (je tente dès que possible de vous faire une estimation plus précise ;-)

24/03/2014

Créer une interface pour visualiser les ontologies avec Processing

Un petit tutoriel ?

Ca fait un bout de temps que je cherche, mais là je pense être sur une bonne piste. Le but étant de pouvoir créer facilement l'interface d'une application, en décrivant ses étapes dans une ontologie.
Après quelques tests et , l'utilisation de Processing semble être une piste encourageante  ;-).

Et même permettre à des non programmeurs de créer des applications, simplement en les décrivant !

Voici donc la recette d'un "Processing de HelloRdf à la sauce Jena", récupérant les information dans une ontologie (RDF/OWL), le but étant ensuite de récupérer les informations décrites dans la méthode diamond.owl ou de toute autre méthode écrite en rdf/owl pour créér l'application adéquate ;-).
On devrait de la même manière pouvoir visualiser des requêtes Sparql qui retournent des flux formatés RDF.

Pour ceux qui sont trop pressés, le fichier source est disponible ici ( Clic sur Fichier, puis télécharger pour récupérer l'archive complète , A ouvrir avec Processing)
-   helloRdf.zip 
- une autre version avec visualisation de toutes les classes Smag0touteclasseOK


" Processing de HelloRdf à la sauce Jena"

Ingrédients : 

- 1 petit fichier owl/rdf ,
- quelques lignes dans un sketch Processing ,
- quelques librairies Jena pour lier le tout.

Instructions : 

1 : Commençons par préparer nos outils de travail. 


Téléchargez et décompressez, si ce n'est déjà fait, les trois outils suivants. Vous trouverez sur chacun des sites de la documentation détaillée pour l'installation et l'utilisation  :
  1. Protege (version utilisée 4.3.0)
  2. Processing (version utilisée 2.1.1)
  3. Jena (version utilisée 2.11.1)
Un tutoriel de prise en main de chacun de ces logiciels est disponible tout en bas de cette page pour ceux qui ne les maîtriseraient pas  ;-).

Protege et Processing sont des applications et vous pouvez les utiliser directement, par contre, pour Jena, on va seulement utiliser les librairies, comme le décrit Ian Dickinson dans son tutoriel dédié à l'intégration de Jena dans Eclipse :
Commencez par lancer Processing et créez un nouveau sketch vide (un sketch étant un programme dans Processing)  et enregistrez le, par exemlpe sous le nom "helloRdf".




Ceci devrait vous créer un nouveau répertoire "helloRdf" dans Mesdocuments/Processing qui est le répertoire par défaut des sketches de Processing , et à l'intérieur de celui-ci, un fichier helloRdf.pde. Pour visualiser ce répertoire, vous pouvez utiliser le menu Sketch/Show Sketch Folder de l'application Processing.








Comme décrit pour l'intégration de Jena dans Eclipse (Blog de Ian Dickinson) nous allons intégrer les bibliothèques de Jena.

Commencez par créer un répertoire
"code" dans le répertoire helloRdf, juste à côté (ou au dessous ;-) du fichier helloRdf.pde. Profitez en également pour créer un répertoire "data" qui nous servira par la suite pour y stocker les fichiers de données :



Rendez-vous ensuite dans le répertoire ou vous avez décompréssé Jena et copiez toutes les librairies (.jar) se trouvant dans le répertoire lib et collez -les dans le répertoire "code" que vous avez créé précedemment dans le répertoire du sketch helloRdf.








Maintenant que nous sommes prêts, mettons-nous au travail.


2 : Création de l'architecture du sketch Processing :


Processing étant basé sur Java , on peut y intégrer toute sorte de package de la même manière, avec import.
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Resource;

Insérez ensuite les deux fonctions primordiales de Processing qui permettent de mettre en place (setup) et de dessiner (draw) :

void setup(){

}

void draw(){
}

A l'interieur de la fonction setup(), saisissez les lignes suivantes pour déterminer la taille de l'application et sa couleur de fond : 

  size(300, 300);
  background(255,255,128);


Cliquez ensuite sur l'icone du triangle (ou CTRL+R) pour executer votre code :





Vous devriez voir apparaitre une fenetre identique à celle-ci :



Vous pouvez tester avec d'autres valeurs pour voir leur effet :
size (largeur de la fenêtre, hauteur de la fentre);
background(rouge, vert, bleu, alpha);

Bien ! maintenant que nous savons utiliser Processing, passons aux choses sérieuses : Le paramétrage de cette application grâce à un fichier la décrivant, j'ai nommé l'ontologie "hello.owl"


3. Création de l'ontologie de configuration hello.owl

Commençons par une ontologie très simple, composée d'un seul "Individual", on ne peut pas faire plus simple comme ontologie .
Lancez Protégé et cliquez sur l'onglet "Individuals" :


Cliquez ensuite sur le losange violet avec un plus (attention ! celui qui se trouve dans la fenêtre Individuals, car il y en a plusieurs) :



Créez un nouvel "Individual", c'est à dire une nouvelle Entité (ou Instanciation) et nommez la ProcessingConfiguration en respectant les majuscules :




Le nouvel Individual doit apparaitre dans la fenêtre correspondante :






Profitez-en pour sauvegarder votre fichier "hello.owl" au format (RDF/XML) dans le répertoire "data" du sketch HelloRdf que nous avons précédemment créé avec Processing, par la commande File / SaveAs :


 Enregistrement au format (RDF/XML) dans le répertoire data du sketch HelloRdf




Pour info, il arrive assez régulièrement que Protégé bloque, ou plante carrément quand on tente de cliquer sur un élément tout récemment créé. Si ça vous arrive aussi, pensez à sauvegarder régulièrement ;-).

Ondevrait ensuite pouvoir modifier l'entité ProcessingConfiguration, lors du test et de la confection des copies d'écrans, ça semble bloquer... ok je supprimme cette entité (losange avec une croix dessus) et je la recréé depuis l'onglet Entité en cliquant sur le plus situé à côté de "membres"



Création de l'Entité ProcessingConfiguration :




Cliquez maintenant sur cette Entité, puis sur DataPropertyAssertion, pour lui ajouter des propriétés sizeX, sizeY, background, (grâce aux trois boutons verts) vous devez enregistrer les valeurs une par une et valider à chaque fois :




Voici l'Individual ProcessingConfiguration avec ses propriétés ( attention dataProperty et non Object Property) :



Sauvegardez de nouveau votre fichier "hello.owl" , il est prêt à être utilisé par notre sketch HelloRdf !

4. Les fondations de notre applications étant posés, attaquons nous au bati ! Ah! Tiens ! c'est plus une recette ???

Nous aurons besoin deux deux nouvelles classes dans le sketch HelloRdf : l'une pour instancier notre application et une autre servant d'utilitaire pour la lecture du fichier..


En cliquant dans Processing sur le petit triangle vers le bas vous pourrez créer un "NewTab"... et bien créez en deux : l'un nommé "Application", et l'autre  "OwlFile" et remplissez les comme suit  ( n'oubliez pas de modifier également le premier fichier ( HelloRdf avec le setup qui instancie l'application et récupère les valeurs de cette application !)








code complet de la classe Application : 


class Application {

  String defaultInputFileName="hello.owl";
  int sizeX = 10;
  int sizeY = 20;
  color background = color(0, 0, 0);
  Model model = ModelFactory.createDefaultModel();
  String NS;
  String configURI;


  Application() {
    OwlFile owlFile = new OwlFile(defaultInputFileName);
    creation(owlFile.model);
  } 

  void creation(Model _model) {
    model = _model;
    NS = model.getNsPrefixURI("");
    println("Namespace : "+NS);
    //model.write(System.out);
    // recupere la configuration pour Processing, mais possibilite de creer d'autres fichiers de config selon les supports (html5, Java, ruby, python...) !
    readConfiguration(model, "Processing"); 

    // Affiche la configuration
    println("\n**********************************************************************************\n**********************************************************************************\n");
    println("Cette application utilise le fichier de configuration : \t" +defaultInputFileName);
    println("Les informations de configurations sont des propriétés de l'individual \t "+configURI);
    println("Config décrite dans ce fichier : background :"+hex(background)+" + size : ("+sizeX+","+sizeY+")");
    println("de la même manière, on doit pouvoir creer des pages différentes, des formulaires, des animations, des boutons, des agents (? ;-P)...");
  }


  void readConfiguration(Model _model, String _metaApplication) {
    model = _model;
    String metaApplication = _metaApplication;
    // determine la configuration en fonction de la MetaApplication (une meta application permettant de creer une autre application)
    configURI = NS+metaApplication+"Configuration";
    String sizeXURI = NS+"sizeX";
    String sizeYURI = NS+"sizeY";
    String backgroundURI = NS+"background";
    Resource config  = model.createResource(configURI);
    Property sizeXprop = model.createProperty(sizeXURI);
    Property sizeYprop = model.createProperty(sizeYURI);
    Property backgroundProp = model.createProperty(backgroundURI);
    sizeX =  int(config.getProperty(sizeXprop).getObject().toString());
    sizeY =  int(config.getProperty(sizeYprop).getObject().toString());
    background  =  unhex(config.getProperty(backgroundProp).getObject().toString());
    println("test :"+sizeX+ " "+ sizeY+" "+hex(background));
  }
}

Code complet de la classe OwlFile : 

class OwlFile {
  String inputFileName;
  BufferedReader reader;
  Model model = ModelFactory.createDefaultModel();

  OwlFile(String path) {
    ouverture (path);
  } 

  void ouverture(String _path) {
    inputFileName = _path;
   // println ("cette application utilise le fichier " +inputFileName+);
    reader = createReader(inputFileName);
    // lire le fichier RDF/XML
    model.read(reader, null);
    // l'écrire sur la sortie standard
    // model.write(System.out);
  }
}

Code complet du premier fichier helloRdf.pde :


import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Resource;

Application application;

void setup(){
  application = new Application();
  size(application.sizeX, application.sizeY);
  background(application.background);
}

void draw() {
  
}


Sauvegardez et cliquez sur le triangle pour lancer l'application helloRdf avec les propriétés que vous avez saisies dans Protégé au format RDF.





Reste plus qu'à récupérer les classes et les Individuals de l'ontologie diamond.owl, et les lier par leur propriétés , pour ce faire, voir  : http://www.gicentre.net/utils

Pour ceux qui sont trop pressés, le fichier source est disponible ici ( Clic sur Fichier, puis télécharger pour récupérer l'archive complète , A ouvrir avec Processing)
-   helloRdf.zip 
- une autre version avec visualisation de toutes les classes Smag0touteclasseOK

Pour Zoomer, tourner, et deplacer : https://www.youtube.com/watch?v=LBrGDqxusVA

Et pour ceux qui découvrent Processing : http://fr.flossmanuals.net/_booki/processing/processing.pdf
Et pour ceux qui découvrent Protégé et les ontologies : http://python.espe-bretagne.fr/master-hst-ue9-2/wp-content/uploads/2013/03/Tutoriel-Pizza-gloria-1.pdf
Et pour ceux qui découvrent Jena :  http://igm.univ-mlv.fr/~ocure/LIGM_LIKE/Teaching/imac3/5_SW.pdf

A plus.... au plaisir de lire vos remarques et commentaires, ou contributions ;-)

Bon c'est pas le tout de rigoler.... mais faut que j'aille bosser, moi...



21/03/2014

Interface : Visualisation d'une ontologie owl créée avec Protégé, convertie au format Json pour l'integrer à D3.js ou exhibit

Pour créer une visualisation d'ontologie dans une interface Web.


Démarrer le serveur Fuseki avec les options suivantes :
fuseki-server --update --mem /diamond
ensuite sur le serveur fuseki (http://127.0.0.1:3333), utiliser le cadre File upload au bas de la page sparql.tpl.
Puis sur la même page, dans le cadre SPARQL Query,  lancer la requête (en selectionnant OUTput : JSON) :
SELECT  *  WHERE {?Sujet ?Propriete ?Objet}

Télécharger le fichier nouvellement créé et le renommer avec l'extension .json

Ce fichier peut maintenant être directement utilisable par les moteurs de visualisation javascript tels que D3 ou Exhibit.

par exemple pour l'integrer dans une page html utilisant d3.js, utilisez le code suivant :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>D3 Test</title>
<script type="text/javascript" src="d3/d3.js"></script>
</head>
<body>
<script type="text/javascript">
// DATA

d3.json("data/diamond.json", function(diamond) {
console.log(diamond);
});

//  test paragraphe
d3.select("body")
.append("p")
.text("Smag0!");
</script>
</body>
</html>

ensuite vous pouvez vérifier l'insertion des données dans la page en utilisant la console de développement fournie par GoogleChrome , ou Firefox  :


GRRRRRR ! Après  2 jours à me prendre la tête, je me rend compte que le Json de Fuseki n'est pas le même que le Json de D3.js... et que je ne suis pas le premier à me prendre la tête dessus...
Sommes nous bloqués ? Non, on va le tenter en csv d'après la procédure décrite sur ce blog : http://www.d3noob.org/2013/03/d3js-force-directed-graph-example-basic.html

cet article semble également interessant http://graus.nu/thesis/algorithm-performance-measurement-confusion-matrix/ parlant de matrice de confusion dans le domaine du Machine Learning (aprentissage des machines)

Sinon une autre option pourrait-être d'utiliser : http://jointjs.com/demos (mais y'a un truc à voir avec la license Free / pas free ?)

Le but étant d'obtenir quelque chose comme ça : http://bl.ocks.org/d3noob/5141278

et pour le fun, j'aime bien celui-là : http://bl.ocks.org/mbostock/1249681

reprendre aussi l'idée de cluster : http://bl.ocks.org/mbostock/7881887

et le rendre en plus zoomable : http://bl.ocks.org/mbostock/7607535 et oui, rien que ça...
Une autre idée du cluster : https://github.com/Leaflet/Leaflet.markercluster



19/03/2014

Mise en place d'un serveur Fuseki / Sparql

mise en place d'un serveur Fuseki / Sparql interrogeable à cette adresse http://fuseki-smag0.rhcloud.com hébergé par Openshift.com , d'après le code fourni ici : https://github.com/semfact/openshift-fuseki

Pour l'utiliser, voir les références officielles du W3C au bas de cette page : http://fuseki-smag0.rhcloud.com/
et la notice ici https://jena.apache.org/documentation/serving_data/

(ne pas oublier de mettre l'option --update pour pouvoir effecttuer des maj/update )

Exemple à saisir dans le cadre SPARQL UPDATE pour insérer des données: 
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX ns: <http://example.org/ns#>
INSERT DATA
{ GRAPH <http://example/bookStore> { <http://example/book1>  ns:price  42 } }



exemple de requete pour interroger le serveur : 

select * WHERE {?s ?p ?o}

ou via le protocole : 

http://fuseki-smag0.rhcloud.com/ds/query?query=select+*+WHERE+%7B%3Fs+%3Fp+%3Fo%7D&output=xml&stylesheet=%2Fxml-to-html.xsl

cette install semble utiliser la config jenkins, mais il faudrait creer un web service -> JBOSS ? https://community.jboss.org/en/tools/blog/2012/06/27/deploy-from-eclipse-to-openshift-in-a-breeze#jive_content_id_Dont_get_your_fingers_dirty_use_the_JBoss_Tools_for_OpenShift

Reste à intégrer les autres composantes : janus (systeme multi-agent) ,  les différentes ontologies communes utiles...

( à voir pour la config : http://csarven.ca/how-to-create-a-linked-data-site)
à noter : machine à état fini : https://github.com/niclashoyer/finito

11/03/2014

Rover pcDuino partie logicielle

Édit (25/11/2015) :

I DID IT, JE L'AI FAIT !!!

Yahoo, Eureka, ça fonctionne...

Ça roule, ça tourne, ça envoie les images... !!!

Bon ok j'ai mis le temps, mais j'y suis arrivé. J'ai mon robot explorateur, une première étape du projet "Smag0" beaucoup plus vaste, de "robot qui range ma chambre".

Contrôlable par une interface web, une application mobile, ou adaptable à toute autre interface, le robot se déplace dans la maison et vous envoie les images, que vous soyez chez vous, au bureau ou à l'autre bout du monde !!!

Je m'apprête à préparer un "kit" pour ce robot explorateur avec tout le matériel nécessaire et les instructions, pas à pas pour en monter un vous même, ou encore à le proposer déjà tout monté, alors faites-moi signe si ce projet de robot vous intéresse par mailscenaristeur@gmail.com ou par twitter  @DFaveris . 

 Voir aussi http://smag0.blogspot.fr/2014/03/rover-pcduino-introduction.html pour l'introduction et la partie matérielle.
et un guide pour l'installation des composants utiles  http://smag0.blogspot.fr/2015/12/reinstallation-pcduino.html

 
Introduction
1. Matériel
1.1 Outils nécessaires
1.2 Découverte du matériel
1.3 Montage de la caméra PTZ
1.4 Assemblage de la plate-forme
1.5 Instruction de câblage
2. Partie Logicielle
2.1 Configurer pcDuino en point d'accès WiFi
2.2 Installer Video Stream Server sur pcDuino
2.3 Installer le logiciel de contrôle
2.4 Contrôler le rover avec un PC
2.5 Contrôler le Rover avec un appareil Android
2.5.1Introduction
2.5.2 GUI
2.5.3 Introduction au code source
2.5.3.1Module de contrôle d'interface
2.5.3.2 Module de conversion du format d'images
2.5.3.3 Module de communication
2.5.4 Guide de l'utilisateur
2.6 Liens de téléchargement

 Cette partie est la deuxième partie, la partie logicielle, pour consulter l'introduction et la partie matérielle cliquez ici

infos pour éviter des galères : 
régler l'heure sur pcduino :  sudo ntpdate ntp.ubuntu.com 
régler le clavier en français : sudo setxkbmap fr


2. Partie Logicielle

Le pcDuino sert de point d'accès Wi-Fi, et un serveur de flux vidéo. Il peut transmettre
vidéo en temps réel, et accepter le commandement de commande de client par WiFi. il
contrôle le mouvement de Rover et la rotation de la caméra.



################################################################################
EDIT pour le PCDUINO V2 avec carte Wifi Noir : 
source : http://learn.linksprite.com/wifi/enable-the-wireless-ap-function-on-pcduino-v2/
################################################################################
This tutorial is use to pcDuino V2 with black wifi module (rt1818cus driver) and pcDuino Lite WiFi with black wifi module (rt1818cus driver)

The pcDuino 2 / 3, Lite Wifi with Green WiFi Module (rt1818eus driver) is different .
The built-in hostapd can’t support system service mode. However, there are one package available online.

1.Download  software tools:
$sudo apt-get update
$sudo apt-get install git vim
$sudo apt-get install isc-dhcp-server
2. Download source code for drivers from official website:
$wget ftp://WebUser:Lc9FuH5r@58.211.24.153/cn/wlan/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
#http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true#2742
3.Download header file for compiling the driver:
$sudo apt-get install pcduino-linux-headers-3.4.29+

$cd  /usr/src/ linux-headers-3.4.29+/arch
$cp  arm  armv7l  -rf
Note:  You will need to reboot pcDuino after this step if you are using pcDuino Lite wifi, wait for  3 seconds at  u-boot stage, enter the command, otherwise it can not be started properly.
$setenv loglevel 8 ramfs
$boot
$mount  /deV/nandd /mnt
$cd  /mn lib/modules/3.4.29+/kernel/drivers
$rm gpu –rf
$reboot
4. Delete original “8188cu.ko”:
$rm  /lib/modules/3.4.29+/kernel/drivers/net/wireless/rtl8192cu/8192cu.ko
$rm  /lib/modules/3.4.29+/kernel/drivers/net/wireless/8192cu.ko
5. Compile installing driver:
$unzip  RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
$cd   RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911
$chmod +x install.sh
$sudo ./install.sh
6. Finish Installation:
ubuntu@ubuntu:~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911$ lsmod
Module                  Size  Used by
8192cu                624916  0
sw_interrupt            2424  0
gpio                    4509  0
pwm                     5050  0
adc                     1671  0
hardwarelib             1551  4 sw_interrupt,gpio,pwm,adc
rt5370sta             616973  0

INSTALLATION HOSTAPD : 

$git clone https://github.com/jenssegers/RTL8188-hostapd

$cd RTL8188-hostapd/hostapd
$sudo make install
Install 8188’s hostapd:
$cd  RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd
$tar xvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
$cd  hostapd
$sudo make install
Configure hostapd:
$vim  /etc/hostapd/hostapd.conf
# Basic configuration
interface=wlan3  #it depends on your own connection
ssid=wifi
channel=1
#bridge=br0
# WPA and WPA2 configuration
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
# Hardware configuration
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8192CU
manufacturer=Realtek
service hostapd restart
Name this wifi AP as wifi, password as 12345678
Now you need to reset your wifi password, and you can find this wifi available, but if it’s not working, you need to configure your internet.
vim /etc/network/interfaces
auto wlan3
iface wlan3 inet static
        address 192.168.100.1
        netmask 255.255.255.0              
service networking restart
Configure dhcp:
vim /etc/dhcp/dhcpd.conf #add it in the end
subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.10 192.168.100.100;
  option routers 192.168.100.1;
  option domain-name-servers 8.8.8.8;
}
service isc-dhcp-server restart

################################################################################

2.1 Configurer pcDuino en point d'accès WiFi

  Le noyau (20130531) publié sur le site pcDuino habituellement seulement fournit pilote en mode WiFi STA. Il n'a pas les iptables pour le routage IP soit. Donc, la première étape consiste à remplacer le limage du noyau de pcDuino.
 
Vous pouvez télécharger tous les fichiers nécessaires à l'adresse :  https://s3.amazonaws.com/linksprite/pcduino/wifiAP.rar

Copier wifiAP le répertoire ubuntu:
 ubuntu@ubuntu:~$ ls
Desktop Downloads Pictures Templates c_enviroment wifiAP
Documents Music Public Videos sample
$ sudo mount /dev/nanda /boot
$ sudo cp uImage /boot -f
$ sudo cp evb.bin /boot -f
$ sudo cp 3.4.292B.tar.bz2 /lib/modules/
$ cd /lib/modules/
ubuntu@ubuntu:/lib/modules$sudo tar -xvf 3.4.292B.tar.bz2

Redémarrer pcDuino :

$sudo reboot
Consulter les modules logiciels en utilisant la commande '$ lsmod ':
root@ubuntu:/home/ubuntu# lsmod
Module Size Used by
rt5370sta 617141 0
8192cu 537048 0
rt2800usb 11321 0
rt2800lib 40721 1 rt2800usb
crc_ccitt 1094 1 rt2800lib
rt2x00usb 7245 1 rt2800usb
rt2x00lib 31040 3 rt2800usb,rt2800lib,rt2x00usb
mali_drm 2087 1
drm 157060 2 mali_drm
mac80211 257514 3 rt2800lib,rt2x00usb,rt2x00lib
cfg80211 150671 2 rt2x00lib,mac80211
mali 91258 0
disp_ump 823 0
ump 44002 4 mali,disp_ump
Redémarrez et modifier / etc / modules, retirez rt5370sta:

$sudo modprobe rt2800usb
$echo 148F 5370 > /sys/bus/usb/drivers/rt2800usb/new_id
Vous pouvez également modifier la commande ci-dessus dans un port série de débogage.
Si nous activons WLAN, "$ ifconfig wlan3 up", nous allons voir le message d'erreur suivant:

root@ubuntu:~# ifconfig wlan3 up
[ 1043.640000] phy0 -> rt2x00lib_request_firmware: Error –
Failed to request Firmware.
SIOCSIFFLAGS: No such file or directory
Il montre qu'il n'ya pas de firmware pour le dongle USB WiFi. Nous avons besoin de le mettre dans le bon endroit.  (A Modifier si pcDuino V2 ?)
Utilisez la commande "$ modinfo rt2800usb" et trouver le nom de firmware est rt2870.bin.


 root@ubuntu:~# modinfo rt2800usb
filename:
/lib/modules/3.4.29+/kernel/drivers/net/wireless/rt2x00/rt28
00usb.ko
license: GPL
firmware: rt2870.bin
description: Ralink RT2800 USB Wireless LAN driver.
version: 2.3.0
author: http://rt2x00.serialmonkey.com
 Copiez le firmware dans le répertoire correct:

 $sudo cp rt2870.bin /lib/firmware/
 Maintenant, nous redémarrons WLAN, alors nous pouvons trouver une connexion Wi-Fi:

 ”$sudo ifconfig wlan3 up”
Installez iptables:

 $sudo apt-get install iptables vim iw
Après l'installation est terminée, vérifiez si iptables a été installé avec succès:
$sudo iptables -L
root@ubuntu:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Télécharger et éditer hostapd:
En compilant nous aurons besoin "libnl-dev" et "libssl-dev". Alors  installons-les en premier.


 $sudo apt-get install libnl-dev libssl-dev
Hostpad 1.0 can be downloaded from http://hostap.epitest.fi/releases/.
A complete list of commands are:

ubuntu@ubuntu:~$ wget
http://hostap.epitest.fi/releases/hostapd-1.0.tar.gz
ubuntu@ubuntu:~$ tar xvf hostapd-1.0.tar.gz
ubuntu@ubuntu:~$ cd hostapd-1.0
ubuntu@ubuntu:~/hostapd-1.0$ cd hostapd/
ubuntu@ubuntu:~/hostapd-1.0/hostapd$ vim defconfig
 Trouvez la ligne contenant “#CONFIG_IEEE80211N=y”, enlevez le dièse ‘#’
Sauvegarder et quittez


ubuntu@ubuntu:~/hostapd-1.0/hostapd$ cp defconfig .config
ubuntu@ubuntu:~/hostapd-1.0/hostapd$ make
CC main.c
CC config_file.c
CC ../src/ap/hostapd.c
CC ../src/ap/wpa_auth_glue.c
CC ../src/ap/drv_callbacks.c
CC ../src/ap/ap_drv_ops.c
CC ../src/ap/utils.c
CC ../src/ap/authsrv.c
ubuntu@ubuntu:~/hostapd-1.0/hostapd$ sudo make install
mkdir -p /usr/local/bin
for i in hostapd hostapd_cli; do cp -f $i /usr/local/bin/$i; done
Vérifiez si hostpad a été installé avec succès:

ubuntu@ubuntu:~/hostapd-1.0/hostapd$ hostapd -v
hostapd v1.0
User space daemon for IEEE 802.11 AP management,
IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
Copyright (c) 2002-2012, Jouni Malinen <j@w1.fi> and
contributors
Maintenant, nous commençons à configurer hostpad.
Nous espérons que notre hotspot est configuré comme suit,


SSID: ssid=pcduino
Password: wpa_pass
phrase=1234567890
Encryption: wpa_key_mgmt=WPA-PSK
 Configurez comme suit:

 root@ubuntu:~# nano /etc/hostapd.conf
interface=wlan3
driver=nl80211
ssid=pcduino
hw_mode=g
channel=11
dtim_period=1
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=1
ieee80211n=0
wpa=2
wpa_passphrase=1234567890
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

 Note: si wlan3 peuvent changer, nous devons utiliser "ipconfig" pour vérifier.
Une fois la configuration terminée, nous utilisons les commandes suivantes pour vérifier la configuration.


 root@ubuntu:~# hostapd -dd /etc/hostapd.conf
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd.conf
nl80211: interface wlan4 in phy phy0
rfkill: initial event: idx=0 type=2 op=0 soft=0 hard=0
rfkill: initial event: idx=1 type=1 op=0 soft=0 hard=0
nl80211: Using driver-based off-channel TX
nl80211: Register frame command failed (type=208): ret=-114 (Operation already in progress)
nl80211: Register frame match – hexdump(len=1): 06
nl80211: Failed to register Action frame processing – ignore for now
nl80211: Add own interface ifindex 5
nl80211: Set mode ifindex 5 iftype 3 (AP)
nl80211: Create interface iftype 6 (MONITOR)
nl80211: New interface mon.wlan4 created: ifindex=7
nl80211: Add own interface ifindex 7
BSS count 1, BSSID mask 00:00:00:00:00:00 (0 bits)
nl80211: Regulatory information – country=00
nl80211: 2402-2472 @ 40 MHz
nl80211: 2457-2482 @ 40 MHz
nl80211: 2474-2494 @ 20 MHz
nl80211: 5170-5250 @ 40 MHz
nl80211: 5735-5835 @ 40 MHz
nl80211: Added 802.11b mode based on 802.11g information
Allowed channel: mode=1 chan=1 freq=2412 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=2 freq=2417 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=3 freq=2422 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=4 freq=2427 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=5 freq=2432 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=6 freq=2437 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=7 freq=2442 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=8 freq=2447 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=9 freq=2452 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=10 freq=2457 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=11 freq=2462 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=1 freq=2412 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=2 freq=2417 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=3 freq=2422 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=4 freq=2427 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=5 freq=2432 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=6 freq=2437 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=7 freq=2442 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=8 freq=2447 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=9 freq=2452 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=10 freq=2457 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=11 freq=2462 MHz max_tx_power=20 dBm
Completing interface initialization
Mode: IEEE 802.11g Channel: 11 Frequency: 2462 MHz
nl80211: Set freq 2462 (ht_enabled=0 sec_channel_offset=0)
RATE[0] rate=10 flags=0×1
RATE[1] rate=20 flags=0×1
RATE[2] rate=55 flags=0×1
RATE[3] rate=110 flags=0×1
RATE[4] rate=60 flags=0×0
RATE[5] rate=90 flags=0×0
RATE[6] rate=120 flags=0×0
RATE[7] rate=180 flags=0×0
RATE[8] rate=240 flags=0×0
RATE[9] rate=360 flags=0×0
RATE[10] rate=480 flags=0×0
RATE[11] rate=540 flags=0×0
Flushing old station entries

Ensuite, installez le serveur DHCP.
$sudo apt-get install dhcp3-server
Une fois que c'est fait, configurez le serveur DHCP:
$sudo nano /etc/dhcp/dhcpd.conf
Ajoutez les lignes suivantes à la fin du fichier:
subnet 192.168.0.0 netmask 255.255.255.0
{
range 192.168.0.2 192.168.0.10;
option routers 192.168.0.1; #router address
option domain-name-servers 8.8.8.8;
}
Redémarrez hostapd:
root@ubuntu:~# killall hostapd
hostapd: no process found
root@ubuntu:~# hostapd -B /etc/hostapd.conf
Configuration file: /etc/hostapd.conf
Using interface wlan4 with hwaddr 00:c3:16:a0:03:00 and ssid ‘pcduino’
Définissez l'adresse IP de WiFi de pcDuino:
root@ubuntu:~# ifconfig wlan4 192.168.0.1
Activez DHCP :
root@ubuntu:~# dhcpd wlan4 -pf /var/run/dhcp-server/dhcpd.pid
Internet Systems Consortium DHCP Server 4.1-ESV-R4
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Wrote 0 leases to leases file.
Listening on LPF/wlan4/00:c3:16:a0:03:00/192.168.0.0/24
Sending on LPF/wlan4/00:c3:16:a0:03:00/192.168.0.0/24
Sending on Socket/fallback/fallback-net
Activez l'IP forwarding:
root@ubuntu:~# echo 1 >/proc/sys/net/ipv4/ip_forward
 Réglez NAT:
root@ubuntu:~# iptables -t nat -A POSTROUTING -o eth0 -j
MASQUERADE
Après la configuration ci-dessus est fait, nous devrions voir un point d'accès nommé "pcduino".
Remarque: Dans le débogage, vérifiez votre WiFi en utilisant "ipconfig" et le changement wlan en conséquence.

Installer Video Stream Server sur pcDuino

 

Nous utilisons le package opensource mjpg-streamer de mettre en œuvre le serveur de transmission vidéo. Le client peut être un navigateur ou une application spéciale.

D'abord installer quelques logiciels.

$sudo apt-get install libv4l-dev
$sudo apt-get install libjpeg8-dev
$sudo apt-get install subversion
$sudo apt-get install imagemagick
Le libv4l-dev et ibjpeg8-dev sont des bibliothèques. La Subversion et ImageMagick sont nécessaires pour compiler le code source mjpg-streamer.


Ensuite téléchargez, compiler et installer le logiciel serveur vidéo mjpg-streamer.


$svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
! remplacé par : svn co svn co https://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer

$cd mjpg-streamer
$make USE_LIBV4L2=true clean all
$sudo make DESTDIR=/usr install
Après l'installation est terminée, nous devons ouvrir le serveur de vidéo-streamer jpg. La commande pour activer le service est:

$mjpg_streamer -i "/usr/lib/input_uvc.so -d /dev/video0 -y -r 320x240 -f 10" -o "/usr/lib/output_http.so -p 8090 -w /var/www/mjpg_streamer"
Les paramètres sont les suivants:

-d: device
-r: resolution
-f: frequency
Si votre webcam ne prend pas en charge le format MJPEG, nous pouvons utiliser '-y' pour spécifier d'utiliser le format YUYV au lieu du format MJPEG.

-p: port
-w: web directory

Sur un terminal pcDuino nous utilisons la commande "ipconfig" pour obtenir l'adresse IP de l'pcDuino. Puis dans un navigateur en un client, visitez http://192.168.1.3:8090/?action=stream pour accéder à la vidéo en temps réel. L'adresse 192.168.1.3 est l'adresse IP de l'pcDuino.
(erreur sur le document originel ? action = steam au lieu de stream ? voir copie ecran)

 

Installer le logiciel de contrôle

traduction à reprendre page 60

Contrôler le rover avec un PC

Contrôler le Rover avec un appareil Android

Introduction

GUI

Introduction au code source

- Module de contrôle d'interface
- Module de conversion du format d'images
- Module de communication

Guide de l'utilisateur

Liens de téléchargement