Skip to content

Commit

Permalink
labo 2
Browse files Browse the repository at this point in the history
  • Loading branch information
willGuimont committed Aug 20, 2022
1 parent c49f849 commit bc4c354
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 42 deletions.
32 changes: 19 additions & 13 deletions Laboratoire 0.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,11 @@
},
{
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"# Introduction au simulateur\n",
"\n",
Expand Down Expand Up @@ -142,7 +147,7 @@
"- La machine a au moins 4G de RAM\n",
"- Si possible, plus d'un CPU\n",
"\n",
"Avant de lancer la VM, ajoutez un `port forwarding` dans `Network -> Advanced -> Port Forwarding`. Ensuite, ajoutez une règle pour `forward` le port `9090` de la machine hôte au port `9090` de la machine invitée.\n",
"Avant de lancer la VM, ajoutez un `port forwarding` dans `Settings -> Network -> Advanced -> Port Forwarding`. Ensuite, ajoutez une règle pour `forward` le port `9090` de la machine hôte au port `9090` de la machine invitée.\n",
"\n",
"![port_forwarding](doc/port_forwarding.png)\n",
"\n",
Expand Down Expand Up @@ -177,11 +182,18 @@
"```\n",
"4. Redémarrer la machine avec\n",
"```bash\n",
"sudo shutdown now\n",
"sudo reboot now\n",
"```\n",
"\n",
"Si cela ne fonctionne toujours pas, il faudrait créer une nouvelle machine virtuelle vierge et y installer les dépendances. Les étapes d'installations sont détaillées dans le notebook `ConfigurationVM.ipynb`.\n",
"\n",
"## Mise-à-jour du simulateur\n",
"\n",
"```bash\n",
"cd catkin_ws\n",
"git pull\n",
"```\n",
"\n",
"## Création d'une carte\n",
"\n",
"En guise d'introduction au simulateur, nous allons construire une carte avec les données du LiDAR avec un algorithme que vous allez étudier plus tard dans le cours : SLAM [Simultaneous localization and mapping](https://www.wikiwand.com/en/Simultaneous_localization_and_mapping).\n",
Expand All @@ -200,7 +212,7 @@
"\n",
"En bas de la fenêtre principale de Gazebo, il y a un compteur affichant le `Real Time Factor`. Ce facteur représente la vitesse relative de la simulation par rapport au temps réel. Ce facteur devrait être près de 1, si ce n'est pas le cas, nous allons ajuster le pas de la simulation.\n",
"\n",
"Lancez un autre terminal avec `CTRL-ALT-T` et entrez-y:\n",
"Lancez un autre terminal avec `CTRL-ALT-T` (ou dans un nouvel onglet `CTRL-SHIFT-T`) et entrez-y:\n",
"\n",
"```bash\n",
"gz physics -s 0.001\n",
Expand Down Expand Up @@ -273,13 +285,7 @@
"![mapping](doc/mapping.png)\n",
"\n",
"Vous pouvez maintenant choisir `2D Nav Goal` et placer un vecteur dans la carte, le robot va s'y rendre de façon autonome en évitant les obstacles."
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
]
},
{
"cell_type": "markdown",
Expand Down Expand Up @@ -592,7 +598,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -606,7 +612,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
"version": "3.10.5"
},
"widgets": {
"state": {},
Expand All @@ -615,4 +621,4 @@
},
"nbformat": 4,
"nbformat_minor": 4
}
}
64 changes: 38 additions & 26 deletions Laboratoire 2.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand All @@ -51,7 +50,9 @@
"from robmob.robot import Robot\n",
"from robmob.sensors import GyroSensor\n",
"from robmob.sensors import SimulatorSensor, IN_SIMULATION\n",
"from robmob.visualization import Visualizer"
"from robmob.visualization import Visualizer\n",
"\n",
"import numpy as np"
]
},
{
Expand All @@ -69,7 +70,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -100,7 +100,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -129,7 +128,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -165,7 +163,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -218,7 +215,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -248,7 +244,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -299,7 +294,7 @@
"\n",
"> **PROTIP** Utilisez l'opérateur modulo % pour ramener l'angle en 0 et 360\n",
"\n",
"Si vous utilisez le simulateur, vous devrez utiliser le code suivant pour obtenir le `real_time_factor` du simulateur. Le `real_time_factor` sera un facteur multiplicatif au temps d'intégration `dt = real_time_factor / gyro.SAMPLE_RATE`. Ce facteur vient compenser le fait que votre ordinateur et le simulateur ne s'exécutent pas au même rythme. Si le `real_time_factor` est égal à 2, si une seconde se passe sur votre ordinateur, 2 secondes se seront écoulées dans la simulation. Ainsi, il faut ajuster le temps d'intégration."
"**Si vous utilisez le simulateur**, vous devrez utiliser le code suivant pour obtenir le `real_time_factor` du simulateur. Le `real_time_factor` sera un facteur multiplicatif au temps d'intégration `dt = real_time_factor / gyro.SAMPLE_RATE`. Ce facteur vient compenser le fait que votre ordinateur et le simulateur ne s'exécutent pas au même rythme. Si le `real_time_factor` est égal à 2, si une seconde se passe sur votre ordinateur, 2 secondes se seront écoulées dans la simulation. Ainsi, il faut ajuster le temps d'intégration."
]
},
{
Expand Down Expand Up @@ -337,10 +332,10 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": [],
"pycharm": {
"name": "#%%\n"
}
},
"tags": []
},
"outputs": [],
"source": [
Expand All @@ -357,7 +352,6 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand Down Expand Up @@ -400,6 +394,24 @@
"> **PROTIP** Il est possible que vous observiez que l'angle dérive rapidement. Ce la peut être causé par un changement de température du robot (voir OffDr dans la datasheet). Si cela est le cas, réévaluez le code de la partie 2 pour recalculer `z_offset`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Maintenant, produisez un graphique montrant la vitesse angulaire du robot en fonction du temps, et un deuxième montrant l'angle du robot dans le temps."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# TODO graphique vitesse angulaire\n",
"\n",
"# TODO graphique position"
]
},
{
"cell_type": "markdown",
"metadata": {
Expand All @@ -410,24 +422,26 @@
"source": [
"### Partie 4 - Influence de l'angle du gyroscope\n",
"\n",
"> **Attention:** Ne pas faire en simulation!\n",
"\n",
"Faites de nouveaux la partie précédente, mais en plaçant le capteur sur un plan\n",
"incliné (utilisez les Lego inclinés à cette fin). Faites quelques tours de 360 degrés, toujours en marquant\n",
"un tour complet d’une pause de quelques secondes. Comparez les résultats de l'angle final obtenu avec\n",
"l'intégration du signal calibré par rapport à un estimé de 360 degrés. En particulier, est-ce\n",
"capteur vient changer la mesure?\n",
"\n",
"Dans le simulateur, commencez par mettre la simulation sur pause en cliquand sur le bouton pause en bas à gauche de l'écran. Ensuite, créer deux cubes en dehors de l'arène grâce à la barre d'outil en haut. Ensuite, changer l'échelle des cubes afin de construire une pente similaire à la figure suivante:\n",
"**Dans le simulateur**, commencez par mettre la simulation sur pause en cliquand sur le bouton pause en bas à gauche de l'écran. Ensuite, un cube en dehors de l'arène grâce à la barre d'outil en haut. Ensuite, changer l'échelle des cubes afin de former un plan comme sur la figure suivante. Ensuite, utilisez l'outil de rotation pour lui donner une légère pente. La pente ne doit pas être trop abrupte.\n",
"\n",
"![pente dans gazebo](doc/gazebo_slope.png)\n",
"\n",
"La pente ne doit pas être trop abrupte. Relancer la simulation pour que les objets puissent tomber en place, puis, refaite pause. Maintenant suivez les étapes suivantes pour chaque bloc afin de les rendre statiques:\n",
"Maintenant suivez les étapes suivantes pour chaque bloc afin de les rendre statiques:\n",
"\n",
"- Clique droit -> edit model -> onglet Model :\n",
"- Clique droit sur le cube -> Edit Model -> Onglet Model dans le menu de gauche :\n",
" - décocher auto-disable\n",
" - cocher static\n",
" - aller a File -> Exit Model Editor -> Save and Exit -> Sauvegarder le fichier\n",
"\n",
"Vous pouvez maintenant placer le robot sur la pente et réaliser l'expérience."
"Vous pouvez maintenant placer le robot sur la pente et réaliser l'expérience. Faites attention de ne pas laisser tomber le robot de trop haut, sinon la simulation risque de diverger."
]
},
{
Expand Down Expand Up @@ -517,21 +531,22 @@
"\n",
"Pour la simulation, vous pouvez ajouter des objets comme vous avez fait dans le laboratoire 1. Voir le lien suivant pour ajouter des objets dans le monde de gazebo : http://gazebosim.org/tutorials?tut=build_world!\n",
"\n",
"- Après la création de l'objet -> clique droit -> edit model -> onglet Model :\n",
"- Après la création de l'objet -> clique droit -> Edit Model -> Onglet Model dans le menu de gauche :\n",
" - décocher auto-disable\n",
" - cocher static\n",
" - clique gauche sur l'objet pour le selectionner\n",
" - clique droit -> Open link inspector -> Visual -> Geometry -> choisir les dimensions (exemple : 0.005, 0.2, 1.0)\n",
" - Aller a l'onglet collision -> Geometry -> memes valeurs que dans Visual\n",
" - cliquer Ok\n",
" - aller a File -> Exit Model Editor -> Save and Exit -> Sauvegarder le fichier"
" - aller a File -> Exit Model Editor -> Save and Exit -> Sauvegarder le fichier\n",
" \n",
"Faites tourner le robot grâce à `roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand All @@ -558,7 +573,6 @@
" real_time_factor = simulator.mean_real_time_factor()\n",
"else:\n",
" real_time_factor = 1\n",
"print(real_time_factor)\n",
"\n",
"current_angle = 0\n",
"last_measure_time = time.time()\n",
Expand All @@ -573,18 +587,16 @@
" number_of_measures = math.floor(time_since_last_measure * gyro.SAMPLE_RATE)\n",
"\n",
" #Intégration des dernière mesures depuis la dernière mise-à-jour\n",
" current_angle += np.sum((gyro_measures_z[-number_of_measures:] - z_offset) * (1 / gyro.SAMPLE_RATE))\n",
" current_angle += np.sum((gyro_measures_z[-number_of_measures:] - z_offset) * (real_time_factor / gyro.SAMPLE_RATE))\n",
"\n",
" current_ir_volt = ir_sensor.peek_data()\n",
"\n",
" map_points.append([math.radians(current_angle), fn_volt_to_cm(current_ir_volt)])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
},
Expand All @@ -609,7 +621,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
Expand All @@ -623,7 +635,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
"version": "3.10.5"
},
"widgets": {
"state": {},
Expand All @@ -632,4 +644,4 @@
},
"nbformat": 4,
"nbformat_minor": 4
}
}
Binary file modified doc/gazebo_slope.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 19 additions & 3 deletions robmob/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,25 @@ class SharpSensor(Sensor):
SAMPLE_RATE = 50

# Calibration table of the high range sharp sensor, for 15+ cm.
HIGH_RANGE_CALIB_TABLE = np.asarray(
[[15, 2.76], [20, 2.53], [30, 1.99], [40, 1.53], [50, 1.23], [60, 1.04], [70, 0.91], [80, 0.82], [90, 0.72],
[100, 0.66], [110, 0.6], [120, 0.55], [130, 0.50], [140, 0.46], [150, 0.435], [150, 0]])
HIGH_RANGE_CALIB_TABLE = np.asarray([
[15, 2.76],
[20, 2.53],
[30, 1.99],
[40, 1.53],
[50, 1.23],
[60, 1.04],
[70, 0.91],
[80, 0.82],
[90, 0.72],
[100, 0.66],
[110, 0.6],
[120, 0.55],
[130, 0.50],
[140, 0.46],
[150, 0.435],
[200, 0],
[np.inf, 0]
])

def __init__(self, analog_input_id=0, buffer_size=100):
"""
Expand Down

0 comments on commit bc4c354

Please sign in to comment.