Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
simulatorgazebo [2019/02/14 10:16] mgp3212019 [Simulateur Gazebo] |
simulatorgazebo [2019/04/25 14:08] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Simulateur Gazebo ===== | + | ======Simulateur Gazebo====== |
- | ==== Prérequis : ==== | + | **Auteur :** Yao ZHAO |
+ | |||
+ | =====Prérequis :===== | ||
Environnement Linux : Ubuntu 18.04 | Environnement Linux : Ubuntu 18.04 | ||
- | ==== Installation du ROS Melodic : ==== | + | =====Installation du ROS Melodic :===== |
- | Modification du “sources.list”: | + | **Modification du “sources.list”:** |
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' | sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' | ||
- | Mettre en place les clés : | + | **Mettre en place les clés :** |
- | sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 | + | |
+ | sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116 // | ||
- | Installation : | + | **Installation :** |
sudo apt update | sudo apt update | ||
+ | |||
sudo apt install ros-melodic-desktop-full | sudo apt install ros-melodic-desktop-full | ||
- | Initialisation rosdep : | + | **Initialisation rosdep :** |
sudo rosdep init | sudo rosdep init | ||
+ | |||
rosdep update | rosdep update | ||
- | Configuration environnement : | + | **Configuration environnement :** |
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc | echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc | ||
+ | |||
source ~/.bashrc | source ~/.bashrc | ||
- | Installation des packages dépendants : | + | **Installation des packages dépendants :** |
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential | sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential | ||
- | + | ||
- | + | ||
[Explication porvenant de : http://wiki.ros.org/melodic/Installation/Ubuntu] | [Explication porvenant de : http://wiki.ros.org/melodic/Installation/Ubuntu] | ||
Line 35: | Line 46: | ||
- | ==== Intégration Turtlebot3: ==== | + | =====Intégration Turtlebot3:===== |
- | Création des répertoires: | + | **Création des répertoires:** |
mkdir ~/catkin_ws | mkdir ~/catkin_ws | ||
+ | |||
mkdir ~/catkin_ws/src | mkdir ~/catkin_ws/src | ||
- | Télécharger des codes sources de Turtlebot3: | + | **Télécharger des codes sources de Turtlebot3:** |
cd ~/catkin_ws/src/ | cd ~/catkin_ws/src/ | ||
+ | |||
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git | git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git | ||
+ | |||
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git | git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git | ||
+ | |||
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git | git clone https://github.com/ROBOTIS-GIT/turtlebot3.git | ||
- | Installation: | + | **Installation:** |
cd ~/catkin_ws && catkin_make | cd ~/catkin_ws && catkin_make | ||
- | Configuration environnement: | + | **Configuration environnement:** |
Ajouter les lignes suivantes dans le fichier “~/.bashrc”: | Ajouter les lignes suivantes dans le fichier “~/.bashrc”: | ||
+ | |||
source ~/catkin_ws/devel/setup.bash | source ~/catkin_ws/devel/setup.bash | ||
+ | |||
export TURTLEBOT3_MODEL=burger | export TURTLEBOT3_MODEL=burger | ||
Line 65: | Line 86: | ||
- | Utilisation des codes sources pour la partie Gazebo : | + | =====Utilisation des codes sources pour la partie Gazebo :===== |
- | Les codes sources contiennent deux fichier “gazeboEntity.py” et “simGazebo.py” qui se situent dans le répertoire “program_gazebo” sur la branche “dev-Yao_ZHAO”. | + | Les codes sources contiennent deux fichier “gazeboEntity.py” et “simGazebo.py” qui se situent dans le répertoire “programmeGazebo”. |
- | Le fichier gazeboEntity.py contient les méthodes suivantes: | + | ====Le fichier gazeboEntity.py contient les méthodes suivantes:==== |
- | * __init__ : | + | ** _init _ :** |
La méthode de construction, deux paramètes “model_name” et “relative_entity_name” sont nécessaires. | La méthode de construction, deux paramètes “model_name” et “relative_entity_name” sont nécessaires. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
+ | </code> | ||
- | * pre_get_model_state : | + | **pre_get_model_state :** |
Initialisation des paramètres pour utiliser le service “/gazebo/get_model_state”, ceci est appelée dans les méthodes get_position,get_orientation,get_linear et get_angular. | Initialisation des paramètres pour utiliser le service “/gazebo/get_model_state”, ceci est appelée dans les méthodes get_position,get_orientation,get_linear et get_angular. | ||
- | * get_position : | + | **get_position :** |
Permet de récupérer la position d’un objet. | Permet de récupérer la position d’un objet. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.get_position() | model.get_position() | ||
+ | </code> | ||
- | * get_orientation : | + | **get_orientation :** |
Permet de récupérer l’orientation d’un objet. | Permet de récupérer l’orientation d’un objet. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.get_orientation() | model.get_orientation() | ||
+ | </code> | ||
- | * get_linear : | + | **get_linear :** |
Permet de récupérer la vitesse linéaire. | Permet de récupérer la vitesse linéaire. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.get_linear() | model.get_linear() | ||
+ | </code> | ||
- | * get_angular : | + | **get_angular :** |
Permet de récupérer la vitesse angulaire. | Permet de récupérer la vitesse angulaire. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.get_angular() | model.get_angular() | ||
+ | </code> | ||
- | * remove_entity : | + | **remove_entity :** |
Permet de supprimer un objet. | Permet de supprimer un objet. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.remove_entity() | model.remove_entity() | ||
+ | </code> | ||
- | * set_model_position : | + | **set_model_position :** |
Permet de modifier la position d’un objet, trois paramètres les positions x,y,z sont nécessaires. | Permet de modifier la position d’un objet, trois paramètres les positions x,y,z sont nécessaires. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.set_model_position(2,2,0) | model.set_model_position(2,2,0) | ||
+ | </code> | ||
- | * set_model_orientation : | + | **set_model_orientation :** |
Permet de modifier l’orientation d’un objet, trois paramètres les orientations x,y,z sont nécessaires. | Permet de modifier l’orientation d’un objet, trois paramètres les orientations x,y,z sont nécessaires. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
model.set_model_orientation(0,0,-1) | model.set_model_orientation(0,0,-1) | ||
+ | </code> | ||
+ | **move_robot :** | ||
+ | Permet de faire avancer le turtlebot, une liste contenant une vitesse linéaire et une vitesse angulaire et un temps de simulation sont nécessaire. | ||
- | * move_robot : | ||
- | Permet de faire avancer le turtlebot, une liste contenant une vitesse linéaire et une vitesse angulaire est nécessaire. | ||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
model = GazeboEntity("turtlebot3_burger","world") | model = GazeboEntity("turtlebot3_burger","world") | ||
+ | # list contient les vitesses | ||
+ | list = [0.3,0] | ||
+ | # t est le temps de simulation | ||
+ | t=4 | ||
try: | try: | ||
- | model.move_robot(list) | + | model.move_robot(list,t) |
except rospy.ROSInterruptException: | except rospy.ROSInterruptException: | ||
pass | pass | ||
+ | </code> | ||
+ | ====Le fichier simGazebo.py contient les méthodes suivantes:==== | ||
- | + | **start :** | |
- | Le fichier simGazebo.py contient les méthodes suivantes: | + | |
- | + | ||
- | + | ||
- | * start : | + | |
Permet de démarrer une simulation. | Permet de démarrer une simulation. | ||
+ | <code> | ||
Exemple d’utilisation: | Exemple d’utilisation: | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.start() | simulateur.start() | ||
+ | </code> | ||
- | * enPause : | + | **enPause :** |
Permet de mettre en pause la simulation. | Permet de mettre en pause la simulation. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.enPause() | simulateur.enPause() | ||
+ | </code> | ||
- | * resetSimulation : | + | **resetSimulation :** |
Permet de réinitialiser la simuation (timing, les positions des objets...) | Permet de réinitialiser la simuation (timing, les positions des objets...) | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.resetSimulation() | simulateur.resetSimulation() | ||
+ | </code> | ||
- | * resetWorld : | + | **resetWorld :** |
Permet de réinitialiser le world. | Permet de réinitialiser le world. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.resetWorld() | simulateur.resetWorld() | ||
+ | </code> | ||
- | * getListModel : | + | **getListModel :** |
Permet de récupérer la liste des objet dans le world. | Permet de récupérer la liste des objet dans le world. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.getListModel() | simulateur.getListModel() | ||
+ | </code> | ||
- | * getSimTime : | + | **getSimTime :** |
Permet de récupérer le temps de simulation. | Permet de récupérer le temps de simulation. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.getSimTime() | simulateur.getSimTime() | ||
+ | </code> | ||
- | + | **loadWorld :** | |
- | * loadWorld : | + | |
Permet de charger un world, une paramètre d’une liste des ficher launcher est nécessaire. | Permet de charger un world, une paramètre d’une liste des ficher launcher est nécessaire. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
list = ['/home/yao/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch/turtlebot3_stage_1.launch'] | list = ['/home/yao/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/launch/turtlebot3_stage_1.launch'] | ||
simulateur.loadWorld(list) | simulateur.loadWorld(list) | ||
+ | </code> | ||
- | * callbackAllProperties : | + | **callbackAllProperties :** |
Fonction callback appelé par la fonction getAllProperties. | Fonction callback appelé par la fonction getAllProperties. | ||
- | * callbackListModel : | + | **callbackListModel :** |
Fonction callback appelé par la fonction getListModelBySuscriber. | Fonction callback appelé par la fonction getListModelBySuscriber. | ||
- | * callbackPose : | + | **callbackPose :** |
Fonction callback appelé par la fonction getAllPose. | Fonction callback appelé par la fonction getAllPose. | ||
- | * callbackTwist : | + | **callbackTwist :** |
Fonction callback appelé par la fonction getAllTwist. | Fonction callback appelé par la fonction getAllTwist. | ||
- | * getAllProperties : | + | **getAllProperties :** |
Permet de récupérer tous les properties de tous les objets de type Suscriber. | Permet de récupérer tous les properties de tous les objets de type Suscriber. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.getAllProperties() | simulateur.getAllProperties() | ||
+ | </code> | ||
- | * getListModelBySuscriber : | + | **getListModelBySuscriber :** |
Permet de récupérer une liste des objets dans le world de type Suscriber. | Permet de récupérer une liste des objets dans le world de type Suscriber. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.getListModelBySuscriber() | simulateur.getListModelBySuscriber() | ||
+ | </code> | ||
- | * getAllPose : | + | **getAllPose :** |
Permet de récupérer les positions et les orientations des objets dans le world de type Suscriber. | Permet de récupérer les positions et les orientations des objets dans le world de type Suscriber. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.getAllPose() | simulateur.getAllPose() | ||
+ | </code> | ||
- | * getAllTwist : | + | **getAllTwist :** |
Permet de récupérer les vitesse des objets dans le world de type Suscriber. | Permet de récupérer les vitesse des objets dans le world de type Suscriber. | ||
+ | |||
Exemple d’utilisation: | Exemple d’utilisation: | ||
+ | <code> | ||
simulateur = Simulator() | simulateur = Simulator() | ||
simulateur.getAllTwist() | simulateur.getAllTwist() | ||
+ | </code> | ||
+ |