Guidage et Surveillance d'un véhicule à travers un Cockpit de conduite

De Wiki de Projets IMA
Révision datée du 7 avril 2014 à 12:32 par Nmartin1 (discussion | contributions) (Le véhicule ROBUCAR)

Dans le cadre de la quatrième année au sein de la spécialité Informatique-Microélectronique-Automatique, nous allons réaliser un projet permettant de piloter et surveiller un véhicule autonome à travers un cockpit de conduite. Ce projet sera encadré par Rochdi MERZOUKI.

Résumé du projet:

Dans le cadre du projet InTraDE, transport autonome du fret, nous souhaitons relier le cockpit de conduite de la salle C002 à un véhicule mobile RobuCar. Pour cela, le cockpit qui fonctionne sous le simulateur de dynamique du véhicule SCANeR Studio, communiquera directement via le réseau WiFi avec un véhicule autonome Robucar. Tout d'abord, nous modéliserons le parking de Polytech Lille sur le logiciel SCANeR Studio. Ensuite, nous intégrerons à ce terrain un véhicule Robucar déjà modélisé. Nous élaborerons alors un scénario dans SCANeR mettant en scène plusieurs véhicules, pilotés automatiquement par SCANeR et le Robucar, piloté par une API (Application Programming Interface) sur le PC supervision. L'objectif de ce projet est de récupérer des consignes de vitesse et d'angle de braquage des roues du véhicule Robucar grâce à un programme MATLAB déjà opérationnel et de les envoyer au PC Supervision où ils seront récupérées par une API. Celle-ci prendra en charge l'acheminement de ces données vers le cockpit de simulation et sur les channels adéquates pour que l'API (ModelHandler) qui contrôle le véhicule simulé prenne en compte ces consignes et les applique au modèle dynamique. De ce fait, nous verrons évoluer en temps réel le Robucar dans la simulation et simultanément, le volant du cockpit suivra les mouvements du véhicule réel. L'utilisateur pourra ainsi suivre le déplacement de la Robucar dans la simulation et observer, parallèlement, les mouvements du volant dans le cockpit.


Pour aller plus loin

On pourra également télé-opérer le véhicule réel à tout moment, c'est à dire le piloter via le cockpit. La manipulation pourra éventuellement être réalisée avec deux Robucars.


Matériel à disposition

Pour notre projet nous avons à disposition:

- un véhicule Robucar muni d'un PC intégré et d'une carte d'acquisition DSPACE (en C002)

- un PC supervision (en C002)

- un Cockpit de simulation (en C002)

- un Accès au logiciel de simulation SCANeR Studio (en C002)

Nous travaillerons sur le logiciel de développement Microsoft Visual Studio 2005.


Définition des outils à disposition

Logiciel de simulation Temps Réel SCANeR Studio

SCANeR Studio: Logiciel de simulation pour la recherche et l'ingénierie

SCANeR Studio est un logiciel de simulation de conduite automobile Temps Réel offrant à ses utilisateurs une interface de surveillance ou de contrôle d'un véhicule. Il permet la représentation d'un environnement, modélisé en 3D par le logiciel, auquel un ou plusieurs véhicules sont intégrés. Les véhicules simulés peuvent être contrôlés de différentes façons:

- automatiquement par la simulation

- avec un joystick

- avec un cockpit de simulation

- en reproduisant les mouvements d'un véhicule réel etc

Chacun de ces modes est programmé par une API intégrée au logiciel. Pour réaliser une simulation, il faut un terrain munis d'un ou plusieurs véhicules et créer un scénario. Ce scénario va intégrer les API nécessaires à notre application. Certaines API existantes sont utiles pour, par exemple, récupérer des données sur le véhicule simulé (vitesse, position etc). Dans notre projet, nous allons développer et utiliser plusieurs API permettant d'échanger des informations entre le Robucar, le cockpit de simulation et un PC de supervision. Dans un premier temps, nous développerons un Serveur sur l'ordinateur de la Robucar pour communiquer avec une API Client sur le PC de supervision du cockpit.


Le véhicule ROBUCAR

Véhicule Robucar

Le Robucar est un véhicule automatique "intelligent", autonome et électrique, commercialisé par la société ROBOSOFT. Il est composé d'un châssis à quatre roues motrices et directrices pilotables séparément. Il y a donc deux paramètres de commande pour chaque roue (orientation, vitesse de rotation). Il est équipé d'un ordinateur de bord et d'une carte d'acquisition Temps Réel DSPACE qui récupère les données du véhicule. L'accès à ces données est rendu possible par la librairie CLIB. Dans le cadre de notre projet, nous assimilerons la Robucar à un véhicule classique. Nous considérons donc que seules les roues avant du véhicule sont directionnelles. De plus, elles évoluent ensemble et sont donc orientées dans la même directions à tout instants.

Création d'un Serveur UDP

Pour créer une communication entre le PC supervision et le PC intégré au Robucar, nous avons choisi de créer un serveur UDP. Nous avons préféré ce protocole au TCP car il est plus rapide et la perte de quelques paquets n'est pas gênante pour notre application. Le serveur est implémenté en langage C++ sur Windows grâce à la bibliothèque « Winsock2.h ». La RobuCar est piloté avec un programme Matlab et son programme Simulink correspondant. On charge dans le logiciel dSPACE ControlDesk du Robucar le programme équivalent à celui sur MATLAB avec des noms de variables propres à la bibliothèque CLIB. Une interface apparaît et nous pouvons alors récupérer, en pilotant le véhicule, des valeurs de consignes pour l’angle de braquage des roues et la vitesse moyenne des roues. On récupère directement ces deux consignes dans l’API Serveur grâce à la librairie « clib32.h ». Sur le PC supervision, l'API Client se connecte au serveur et reçoit alors des paquets contenant une consigne de vitesse et de braquage


Journal de bord

Séance du 05/02/2014

Parking Polytech Lille modélisé

Lors de cette première séance, nous avons pris en main le logiciel SCANeR Studio et notamment le mode terrain qui permet de concevoir un environnement de simulation. De ce fait, nous avons débuté la conception du parking de Polytech Lille sur le logiciel.

Séance du 10/02/2014

Pendant cette séance, nous avons finalisé la conception du parking sur SCANeR Studio et avons débuté l'élaboration d'un scénario mettant en scène un Robucar qui est de type "vehicle Advanced" et plusieurs véhicules de type "vehicle simple" qui seront pilotés automatiquement par le logiciel. Le Robucar est piloté par l'API ModelHandler et nous pouvons donc dès à présent tester la fonctionnalité de notre terrain.

Résultats des simulations sur le terrain: - Dans certains virages et dans le rond point à l'entrée du parking, le comportement des véhicules en mode automatique est anormal - Les véhicules se comportent normalement sur les lignes droites, aux Cédez-le-passage et dans les virages à 90 degrés.

Séance du 13/02/2014

Les virages étaient modélisés en "Polyline" ce qui est compliqué à traiter d'un point de vue logiciel. Nous avons dû re-modéliser plusieurs virages en prenant des sections de route plus simples. Ainsi, les défauts de trajectoire des véhicules sont corrigés. Le parking est opérationnel pour l'élaboration de notre scénario futur.


Séance du 13/02/2014

La prochaine étape est la conception de deux API: un serveur UDP qui sera lancé sur la Robucar et un client, lancé sur le PC de supervision. Nous commençons à nous auto-former sur la conception d'une API sous SCANeR Studio en prenant connaissance de la documentation disponible. On décide de réaliser une API simple qui affiche la vitesse d'un véhicule de type simple. On débute alors la conception de cette API.

Séance du 19/02/2014

En première partie de séance, nous nous entretenons avec le doctorant Vincent XX pour faire un point sur les API. On évoquera entre autre les points suivants:

- comprendre l'utilisation des canaux (EXPORT CHANNEL)

- mettre à disposition la documentation nécessaire pour les utiliser

- comment transformer un projet C++ en une API qui évoluera dans le logiciel

Nous entretiendrons également avec M. Merzouki pour définir plus précisément le cahier des charges. Les points abordés sont les suivants:

- Programmation d'un Serveur UDP sur l'ordinateur intégré au Robucar pour communiquer en WIFI avec une API Client

- Programmation d'une API Client à implanter sur le logiciel SCANeR du PC Supervision

- Conception d'une seconde API permettant d'envoyer des consignes de vitesse et de braquage dans la simulation

- Fusion de ces deux API

En seconde partie de séance, nous commençons à prendre en main l'utilisation des sockets en C++ pour le serveur UDP et l'API Client. Nous utiliserons les sources suivantes:

Frampeip: Serveur en mode non connecté

Cours IMASC : Programmation Réseau

Linux: Tutoriel sur les Serveurs

Séance du 03/03/2014

Nous commençons à nous focaliser sur le fonctionnement du Robucar. Vincent nous explique comment marche la DSPACE et comment utiliser un programme MATLAB pour récupérer des données du véhicule tels que la vitesse, l'angle de braquage, la position de la boîte de vitesse etc. On découvre aussi le fonctionnement du Cockpit en utilisant une API déjà fonctionnelle permettant d'envoyer des commandes au cockpit depuis la simulation. Cette API est implantée sur le logiciel SCANeR du PC Supervision. Nous continuons la programmation du serveur UDP de l'API Client.

Séance du 06/03/2014

Les Premiers tests du serveur:

- On met le PC Supervision et le PC du Robucar sur le même réseau

- On essaie de se "pinger" l'un l'autre pour vérifier la connexion entre les deux ordinateurs

Problème rencontré: Les codes du serveur et du client ne compilent pas car il manque des librairies. Nous renseignons les librairies manquantes et corrigeons les erreurs de compilation.

Séance du 12/03/2014

Nous réorganisons les codes du serveur et du client avec l'aide de M. Redon. Le serveur et l'API Client ne fonctionne actuellement pas. Afin d'accéder aux données de la DSPACE, il nous faut utiliser un Parser, programmé par un doctorant ayant travaillé sur le Robucar auparavant. Ce parser prend en paramètre les noms des variables dans le programme Simulink et nous renvoie leur nom système correspondant, exploitable en C++. Pour cela, il faut indiquer au parser le chemin (path) et le nom exact des variables dans Simulink. Dans le serveur UDP, on récupère donc grâce à la librairie Clib les valeurs de la vitesse et l'angle de braquage des roues du Robucar.

Séance du 19/03/2014

Le serveur UDP est fonctionnel. Les échanges de paquets entre les deux PC connectés se font rapidement. Grâce à un compteur dans le programme du Serveur, on constate que beaucoup de paquets sont perdus mais ceci ne devrait pas poser trop de problèmes dans la simulation

Séance du 26/03/2014

On débute la programmation de la seconde API permettant d'envoyer des données à la simulation. Pour ce faire, on doit prendre en main l'écriture sur les EXPORT CHANNELS. En effet, ils permettent d'échanger des informations entre les différentes API. Ici, on cherche à échanger des données entre cette API et l'API ModelHandler qui pilote le modèle (Robucar dans la simulation). On va donc renseigner les cases mémoires de la vitesse et de l'angle de braquage des roues dans lesquelles Modelhandler lis ces informations pour les envoyer sur le modèle de la simulation.

Séance du 31/03/2014

On continue la programmation de l'API elle est terminée rapidement. On réalise les premiers tests de l'API dans Scaner Studio. Pour ce faire, on charge notre terrain (parking de Polytech Lille), on ajoute un scénario qui dans notre cas est l'ajout d'un véhicule de type Advanced piloté par Modelhandler. On ajoute ensuite une API en utilisant le fichier .exe généré par notre projet sur Visual Studio.

Problèmes rencontrés:

- Problème dans les héritages des dépendances supplémentaires du projet dans Microsoft Visual Studio: on doit ajouter certaines librairies supplémentaires

- l'API bloque la simulation bien qu'elle compile correctement indépendamment de la simulation

Séance du 02/04/2014

L'API envoyant des données fixes à SCANeR Studio est fonctionnelle.

Les problèmes résolus sont :

- Le format d'envoi des consignes de vitesse et de braquage n'était pas correct (Float au lieu de Double)

- Il est nécessaire de démarrer le moteur en fixant la variable "IgnitionKey" à 3 ce qui correspond à moteur en marche (Engine Start)

- Il est préférable d'écrire sur la variable "TimeOfUpdate" pour "synchroniser" l'envoi de données entre ModelHandler qui fonctionne à 500Hz et notre API qui fonctionne à 100Hz

- On mettra également la boîte de vitesse à 1 (GearBox)

Nous commençons à fusionner l'API client et cette API.