< [[neurali:gazebo]] ====== Esempio package ROS per Gazebo ====== http://www.generationrobots.com/en/content/75-gazebo-and-ros ===== 3 package ===== In questo workspace creeremo 3 package di esempio, per simulare un piccolo carrello chiamando Gazebo dentro ROS - mybot_gazebo: file world e launch - mybot_description: modello 3d - mybot_control: interfaccia per ROS (file yaml e launch) mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace cd .. catkin_make Avremo generato delle nuove cartelle Ogni volta che vogliamo usare questo pacchetto dovremo preventivamente dare su ogni terminale: source ~/catkin_ws/devel/setup.bash Oltre al solito source /opt/ros/indigo/setup.bash cd ~/catkin_ws/src catkin_create_pkg mybot_gazebo gazebo_ros catkin_create_pkg mybot_description catkin_create_pkg mybot_control Abbiamo creato CMakeLists.txt e package.xml dentro ogni cartella =====In mybot_gazebo===== ====Creare file.world ==== non usare cd, ma roscd roscd mybot_gazebo mkdir launch worlds cd worlds nano mybot.world model://sun model://ground_plane ====Creare file.launch==== roscd mybot_gazebo/launch nano mybot_world.launch Quest è una prima versione del file.launch, ma vedere anche [[neurali:gazebo_package_esempi&#modificare filelaunch]] roslaunch mybot_gazebo mybot_world.launch =====In mybot_description===== ==== Creare il file.urdf ==== * Si possono utilizzare modelli esistenti (;;Ora NON uso .sdf perché oltre a Gazebo c'è anche ROS;;) * http://wiki.ros.org/urdf/Examples ([[neurali:guardian]] robotnik) ([[neurali:husky]] clearpath) * http://wiki.ros.org/Robots * Si può creare il proprio modello con un metalinguaggio di programmazione come xacro roscd mybot_description mkdir urdf cd urdf nano mybot.xacro [[neurali:ROS approfondimento XACRO|approfondimento XACRO]] I modelli ottenuti dovranno avere opportuni tag per colore, coefficiente di attrito, opportuni giunti (joint) e opportuni controlli sui movimenti (Attuatori) ==== Creare il file.gazebo ==== myrobot.gazebo Ogni elemento che compone il robot (case, ruote, braccio, manipolatore, sensori, ecc.) avrà un diverso file.urdf che dovranno essere messi insieme tramite apposito tag %%%% nel file myrobot.gazebo Gazebo/Orange 0.0 0.0 Gazebo/Red ---- NOTA: Il tag %%%% può essere inserito anche nel file.xacro.........??? ---- ====Modificare file.launch in mybot_gazebo==== ===== In mybot_control ===== La **connessione a ROS** si ottiene per mezzo di un [[neurali:gazebo scrivere un plugin|plugin di Gazebo]] Avendo usato un tag %%%% nel file.urdf, ora posso collegarci un plugin modificando il file myrobot.gazebo /mybot ====Creare il File.yaml==== roscd mybot_control mkdir config cd config nano mybot_control.yaml Definisco: 2 giunti perché uso due ruote, e un sensore che restituisce l'angolo delle ruote (propriocezione) mybot: # Publish all joint states ----------------------------------- joint_state_controller: type: joint_state_controller/JointStateController publish_rate: 50 # Effort Controllers --------------------------------------- leftWheel_effort_controller: type: effort_controllers/JointEffortController joint: left_wheel_hinge pid: {p: 100.0, i: 0.1, d: 10.0} # gain?? rightWheel_effort_controller: type: effort_controllers/JointEffortController joint: right_wheel_hinge pid: {p: 100.0, i: 0.1, d: 10.0} ====Creare il File.launch==== roscd mybot_control mkdir launch cd launch nano mybot_control.launch =====Avvio===== Dopo aver specificato il mio robot??? source ~/catkin_ws/devel/setup.bash??? roslaunch mybot_gazebo mybot_world.launch In un altro terminale, questo comando permette di vedere i controllori in azioine rostopic list In altro terminale, dopo opportuna inizializzazione???, inviare i comandi di controllo, uno per ruota. Successivamente si potrà aggiungere un plugin che è subscriber del topic **cmd_vel**, e inviare opportuni comandi alle due ruote. rostopic pub -1 /mybot/leftWheel_effort_controller/command std_msgs/Float64 "data: 1.5" rostopic pub -1 /mybot/rightWheel_effort_controller/command std_msgs/Float64 "data: 1.0" Questo permette di monitorare lo stato dei giunti rostopic echo /mybot/joint_states [[neurali:gazebo package esempio_aggiungere_qualcosa|Aggiungere telecomando e telecamera]]