neurali:gazebo_package_esempi
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
neurali:gazebo_package_esempi [2015/07/26 08:44] – [Creare il file.urdf] profpro | neurali:gazebo_package_esempi [2023/06/09 10:47] (current) – profpro | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | < [[neurali: | ||
+ | ====== Esempio package ROS per Gazebo ====== | ||
+ | |||
+ | |||
+ | http:// | ||
+ | |||
+ | ===== 3 package ===== | ||
+ | |||
+ | In questo workspace creeremo 3 package di esempio, per simulare un piccolo carrello chiamando Gazebo dentro ROS | ||
+ | |||
+ | - mybot_gazebo: | ||
+ | - mybot_description: | ||
+ | - mybot_control: | ||
+ | |||
+ | |||
+ | mkdir -p ~/ | ||
+ | cd ~/ | ||
+ | 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 ~/ | ||
+ | Oltre al solito | ||
+ | source / | ||
+ | |||
+ | cd ~/ | ||
+ | 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 | ||
+ | |||
+ | <code xml> | ||
+ | <?xml version=" | ||
+ | <sdf version=" | ||
+ | <world name=" | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ====Creare file.launch==== | ||
+ | roscd mybot_gazebo/ | ||
+ | nano mybot_world.launch | ||
+ | |||
+ | Quest è una prima versione del file.launch, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <arg name=" | ||
+ | <arg name=" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 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:// | ||
+ | * http:// | ||
+ | * Si può creare il proprio modello con un metalinguaggio di programmazione come xacro | ||
+ | |||
+ | roscd mybot_description | ||
+ | mkdir urdf | ||
+ | cd urdf | ||
+ | nano mybot.xacro | ||
+ | | ||
+ | [[neurali: | ||
+ | |||
+ | 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, | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <gazebo reference=" | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | <gazebo reference=" | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | NOTA: Il tag %%< | ||
+ | ---- | ||
+ | |||
+ | ====Modificare file.launch in mybot_gazebo==== | ||
+ | <code xml> | ||
+ | <!-- urdf xml robot description che verrà convertita e caricata da ROS usando un parametro " | ||
+ | <param name=" | ||
+ | |||
+ | <!-- carica robot_description per costruire e depositare il robot in gazebo --> | ||
+ | <node name=" | ||
+ | | ||
+ | |||
+ | <!-- verrà realizzato anche un file launch per il ros_control | ||
+ | <include file=" | ||
+ | </ | ||
+ | |||
+ | ===== In mybot_control ===== | ||
+ | |||
+ | La **connessione a ROS** si ottiene per mezzo di un [[neurali: | ||
+ | |||
+ | Avendo usato un tag %%< | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <plugin name=" | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ====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' | ||
+ | < | ||
+ | mybot: | ||
+ | # Publish all joint states ----------------------------------- | ||
+ | joint_state_controller: | ||
+ | type: joint_state_controller/ | ||
+ | publish_rate: | ||
+ | | ||
+ | |||
+ | # Effort Controllers --------------------------------------- | ||
+ | leftWheel_effort_controller: | ||
+ | type: effort_controllers/ | ||
+ | joint: left_wheel_hinge | ||
+ | pid: {p: 100.0, i: 0.1, d: 10.0} # gain?? | ||
+ | rightWheel_effort_controller: | ||
+ | type: effort_controllers/ | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | |||
+ | <!-- Caricare controllo giunti (joint) e configurazioni da file.yaml --> | ||
+ | < | ||
+ | |||
+ | <!-- load the controllers --> | ||
+ | <node name=" | ||
+ | pkg=" | ||
+ | type=" | ||
+ | output=" | ||
+ | args=" | ||
+ | /> | ||
+ | |||
+ | |||
+ | <!-- avvierà un node ROS che trasforma TF lo stato dei giunti (joint) in 3D per vedere la traiettoria su rviz, ecc --> | ||
+ | <node name=" | ||
+ | <param name=" | ||
+ | <remap from="/ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | =====Avvio===== | ||
+ | |||
+ | Dopo aver specificato il mio robot??? | ||
+ | |||
+ | source ~/ | ||
+ | |||
+ | 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???, | ||
+ | |||
+ | rostopic pub -1 / | ||
+ | rostopic pub -1 / | ||
+ | |||
+ | Questo permette di monitorare lo stato dei giunti | ||
+ | |||
+ | rostopic echo / | ||
+ | | ||
+ | [[neurali: |