-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3367e94
commit ba6ca40
Showing
52 changed files
with
7,158 additions
and
2 deletions.
There are no files selected for viewing
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Sphinx build info version 1 | ||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. | ||
config: 3f2d5eb0f30a1ec065592d2fbc241d52 | ||
tags: 645f666f9bcd5a90fca523b33c5a78b7 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
.. LDR_SIMULATION documentation master file, created by | ||
sphinx-quickstart on Wed Jul 17 15:14:54 2024. | ||
You can adapt this file completely to your liking, but it should at least | ||
contain the root `toctree` directive. | ||
Welcome to LDR_SIMULATION's documentation! | ||
========================================== | ||
|
||
.. toctree:: | ||
:maxdepth: 2 | ||
:caption: Contents: | ||
|
||
|
||
|
||
Indices and tables | ||
================== | ||
|
||
* :ref:`genindex` | ||
* :ref:`modindex` | ||
* :ref:`search` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
# Introduction | ||
Dans le cadre des travaux de recherche menés au LDR sur les plateformes embarquées, les chercheurs souhaitent mettre en place des environnements de développements et de tests plus récents et robustes pour 2 applications en particulier, dans l’ordre d’importance : | ||
|
||
- La programmation embarquée, en particulier avec OS Temps Réel. | ||
Mettre en place un environnement de dev/tests avec sondes logicielles pour le temps réel. Pour réaliser des tests de systèmes contraints, possiblement utilisant des architectures matérielles diverses (ARM, RISC-V, etc.), les chercheurs ont besoin d’un environnement clair, générant des traces analysables (quantité de mémoire utilisée, temps passé sur le processeur et lors des accès aux périphériques, décisions d’ordonnancement, etc.). | ||
|
||
- Simulateur pour robotique/drone. | ||
Mettre en place un environnement de dev/tests avec, par exemple CoppeliaSim et Python/ROS, génération de scénario et récupération des données de vol et de l’environnement simulé. | ||
Différents travaux sont réalisés depuis plusieurs années avec l’ONERA sur des simulations utilisant de drones. Ces travaux utilisent d’anciens simulateurs difficiles à maintenir aujourd’hui, ce qui rend complexe la reproduction de certains résultats. Plusieurs exemples existent pour des applications spécifiques, comme avec le robot Poppy et ROS. | ||
|
||
La documentation de la partie "Simulation" est disponible dans le dossier LDR_Simulation | ||
|
||
# Simulation | ||
|
||
La simulation c’est la création d’un modèle virtuel d’une machine, tout en prenant en considération l’environnement de travail et tous les autres facteurs influents. Ça nous permet de savoir si la conception peut fonctionner après la fabrication. Ça nous permet de tester différentes machines/algorithmes dans un même environnement (plusieurs drones dans un parc urbain et voir comment chaque drone navigue entre les arbres et réagit aux obstacles), et de tester une machine dans différents environnements (simuler un seul modèle de drone au-dessus d'une forêt avec des vents variables, dans un désert avec des températures élevées ou à l’intérieur de la maison). | ||
|
||
Comparaison entre CoppeliaSim et GazeboSim qui sont tous deux des simulateurs de robotique mais avec des caractéristiques distinctes, L’objectif de cette comparaison est de déterminer le simulateur le plus adapté à nos besoins. | ||
|
||
## La restitution des avantages/inconvénients | ||
|
||
### Le simulateur CoppeliaSim | ||
|
||
| **Avantages** | **Inconvénients** | | ||
|--- |--- | | ||
| L'installation est simple et rapide<br>sur Windows, une version portable est<br>également disponible. | L’exécution n’est pas possible via le<br>terminal directement sans avoir lancer<br>CoppeliaSim avant. | | ||
| La création des scènes est simple,<br>la personnalisation est également<br>possible grâce aux script intégrés | un facteur de temps réel n’est pas très<br>lent que le temps réel (pour l’exemple<br>de BubbleRob il est de 0.99 donc 9900 fois<br>plus lent que le temps réel). | | ||
| Interface graphique conviviale et<br>facile à utiliser, la création des<br>scènes est donc simple, la personnalisation<br>est possible grâce aux script intégrés | | | ||
| CoppeliaSim n’est pas déterministe<br>mais on peut le configurer pour l’être<br>en modifiantcertains paramètres mais ces <br>modifications influencent négativement sur<br>le comportement dans les simulations<br>(disparition des objets par exemple) | | | ||
|
||
|
||
### Le simulateur GazeboSim | ||
|
||
| **Avantages** | **Inconvénients** | | ||
|--- |--- | | ||
| L’installation et la prise en main de <br>la plateforme sur Linux est plus facile <br>à installer et à configurer | L’installation sur Windows est complexe<br>car des installations supplémentaires<br>sont nécessaires (via conda-forge,<br>vcpkg ou WSL) | | ||
| La création d’une scène est en XML <br>et son exécution est dans un terminal <br>directement sans passer par l’interface<br>graphique | Windows n'est pas une plateforme officiellement<br>supportée par Open Robotics pour Gazebo | | ||
| GazeboSim offre une personnalisation<br>avancée car il supporte plusieurs langages<br> de programmation (Python, C++) | L’installation nécessite une version <br>spécifique sur Linux (ubuntu 22.04) donc<br>manque de flexibilité | | ||
| Un facteur de temps réel est beaucoup<br>plus rapide que le temps réel | L'interface graphique de GazeboSim<br>est complexe pour les débutants <br>(notamment pour la version classique). | | ||
| | Une carte graphique Nvidia avec support<br>CUDA est requise pour l’exécution de<br>certaines simulations. | | ||
|
||
|
||
## Les besoins pour la simulation | ||
|
||
Les besoins coté recherche et coté enseignement (rajouter le tableau et commentez le en bas) | ||
- Un simulateur qui a l’interface graphique de coppeliasim mais qu’on pourra utiliser comme Gazebo, c’est-à-dire on pourra créer notre scène sur un fichier et avoir un seul dossier qui contient notre projet, on pourra lancer le projet dans un terminal sans ouvrir le simulateur avant. | ||
- Un simulateur facile à installer sur windows de preférence (car sur linux certaines exécutions bug) | ||
- Un simulateur avec un facteur temps réel qui soit proche du temps réel | ||
Image du tableau | ||
Après avoir tester les deux simulateurs j’ai choisi comme outil de simulation CoppeliaSim pour sa facilité et son efficacité. | ||
|
||
### Tableau récapitulatif | ||
|
||
**TIPS COPPELIASIM** | ||
|
||
- Toujours enregistrer la scène avant de lancer la simulation sinon tous les objets que vous avez rajoutés ou toutes modifications apportées seront disparus | ||
- Toujours arrêter la simulation en cours avant de lancer une nouvelle simulation | ||
- Si vous avez ouvert plusieurs scènes à la fois, arrêtez la simulation de toutes les scènes avant de lancer une nouvelle simulation | ||
- Si vous voulez déplacer un objet avec la main ou en tapant les coordonnées que vous souhaitez, cliquez sur ça | ||
|
||
## Application réelle | ||
|
||
Créer une scène "DronePainting" qui contient deux drones (ou plus, qui sait), et faire en sorte qu'ils volent vers un mur et dessinent des points selon mes indications (ils peuvent former un rectangle par exemple), la programmation est sous Python et la visualisation est sur CoppeliaSim. | ||
Lancer la simulation en mode stepped pour avoir une simulation déterministe et reproductible | ||
|
||
Pour la simulation j’ai dans un premier temps crée une scène ou un drone se déplace vers un mur et marque deux points dans deux positions différentes : je vais expliquer comment j’ai rajouté le nozzle paint également. | ||
Par la suite j’ai créé une autre scène ou deux drones se déplacent de la même manière tout en étant reproductible donc pour se faire, il a fallu créer une loop pour que les taches asynchrones en arrière-plan ce qui permet une exécution non bloquante. |
123 changes: 123 additions & 0 deletions
123
docs/build/html/_static/_sphinx_javascript_frameworks_compat.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
/* Compatability shim for jQuery and underscores.js. | ||
* | ||
* Copyright Sphinx contributors | ||
* Released under the two clause BSD licence | ||
*/ | ||
|
||
/** | ||
* small helper function to urldecode strings | ||
* | ||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL | ||
*/ | ||
jQuery.urldecode = function(x) { | ||
if (!x) { | ||
return x | ||
} | ||
return decodeURIComponent(x.replace(/\+/g, ' ')); | ||
}; | ||
|
||
/** | ||
* small helper function to urlencode strings | ||
*/ | ||
jQuery.urlencode = encodeURIComponent; | ||
|
||
/** | ||
* This function returns the parsed url parameters of the | ||
* current request. Multiple values per key are supported, | ||
* it will always return arrays of strings for the value parts. | ||
*/ | ||
jQuery.getQueryParameters = function(s) { | ||
if (typeof s === 'undefined') | ||
s = document.location.search; | ||
var parts = s.substr(s.indexOf('?') + 1).split('&'); | ||
var result = {}; | ||
for (var i = 0; i < parts.length; i++) { | ||
var tmp = parts[i].split('=', 2); | ||
var key = jQuery.urldecode(tmp[0]); | ||
var value = jQuery.urldecode(tmp[1]); | ||
if (key in result) | ||
result[key].push(value); | ||
else | ||
result[key] = [value]; | ||
} | ||
return result; | ||
}; | ||
|
||
/** | ||
* highlight a given string on a jquery object by wrapping it in | ||
* span elements with the given class name. | ||
*/ | ||
jQuery.fn.highlightText = function(text, className) { | ||
function highlight(node, addItems) { | ||
if (node.nodeType === 3) { | ||
var val = node.nodeValue; | ||
var pos = val.toLowerCase().indexOf(text); | ||
if (pos >= 0 && | ||
!jQuery(node.parentNode).hasClass(className) && | ||
!jQuery(node.parentNode).hasClass("nohighlight")) { | ||
var span; | ||
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); | ||
if (isInSVG) { | ||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); | ||
} else { | ||
span = document.createElement("span"); | ||
span.className = className; | ||
} | ||
span.appendChild(document.createTextNode(val.substr(pos, text.length))); | ||
node.parentNode.insertBefore(span, node.parentNode.insertBefore( | ||
document.createTextNode(val.substr(pos + text.length)), | ||
node.nextSibling)); | ||
node.nodeValue = val.substr(0, pos); | ||
if (isInSVG) { | ||
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); | ||
var bbox = node.parentElement.getBBox(); | ||
rect.x.baseVal.value = bbox.x; | ||
rect.y.baseVal.value = bbox.y; | ||
rect.width.baseVal.value = bbox.width; | ||
rect.height.baseVal.value = bbox.height; | ||
rect.setAttribute('class', className); | ||
addItems.push({ | ||
"parent": node.parentNode, | ||
"target": rect}); | ||
} | ||
} | ||
} | ||
else if (!jQuery(node).is("button, select, textarea")) { | ||
jQuery.each(node.childNodes, function() { | ||
highlight(this, addItems); | ||
}); | ||
} | ||
} | ||
var addItems = []; | ||
var result = this.each(function() { | ||
highlight(this, addItems); | ||
}); | ||
for (var i = 0; i < addItems.length; ++i) { | ||
jQuery(addItems[i].parent).before(addItems[i].target); | ||
} | ||
return result; | ||
}; | ||
|
||
/* | ||
* backward compatibility for jQuery.browser | ||
* This will be supported until firefox bug is fixed. | ||
*/ | ||
if (!jQuery.browser) { | ||
jQuery.uaMatch = function(ua) { | ||
ua = ua.toLowerCase(); | ||
|
||
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || | ||
/(webkit)[ \/]([\w.]+)/.exec(ua) || | ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || | ||
/(msie) ([\w.]+)/.exec(ua) || | ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || | ||
[]; | ||
|
||
return { | ||
browser: match[ 1 ] || "", | ||
version: match[ 2 ] || "0" | ||
}; | ||
}; | ||
jQuery.browser = {}; | ||
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; | ||
} |
Oops, something went wrong.