[[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_esempimodificare 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]]