Este tutorial tiene como propósito dar una introduccion al uso de las herramientas de ROS en conjunto a una simulacion corriendo en Ignition. Al final de este tutorial, tendrá un resultado similar al que se muestra en este video.
Para este tutorial usaremos Ignition Dome y ROS Melodic; no obstante,
tenga en cuenta que este tutorial es valido para releases de Ignition compatibles con ros_ign_bridge
y releases de ROS compatibles con teleop_twist_keyboard y ros_ign.
Primero completaremos los pasos del tutorial y posteriormente explicaremos que sucede detrás de escenas.
-
Instalar Ignition Dome
- Enlace a las instrucciones: Dome Installation
-
Instalar ROS Melodic
- Enlace a las instrucciones: ROS Melodic Installation
-
Instalar
ros_ign. Usaremos ROS Melodic# Agregar https://packages.osrfoundation.org sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list' wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt-get update # Instalar `ros_ign` sudo apt install ros-melodic-ros-ign
-
Instalar
teleop_twist_keyboardsudo apt-get install ros-melodic-teleop-twist-keyboard
mkdir -p ~/ign_teleop_tutorial_ws/src
git clone [email protected]:Blast545/ign_tutorials.git ~/ign_teleop_tutorial_ws/src
cd ~/ign_teleop_tutorial_ws
catkin_makeAbriremos dos terminales que compartan el mismo entorno. En cada una, correremos los siguientes comandos:
# Shell 1
source ~/ign_teleop_tutorial_ws/devel/setup.bash
roslaunch roslaunch ign_tutorials diff_drive_demo.launch# Shell 2
rosrun teleop_twist_keyboard teleop_twist_keyboard.pyDespués de estos pasos, queda un entorno similar al siguiente:

Por ultimo, usando la terminal con el nodo teleop_twist_keyboard se pueden enviar comandos para mover el robot:

Para este tutorial hemos usado el mundo de ejemplo tunnel.sdf, este incluye un vehículo tipo "diff-drive" y contiene varias funcionalidades
disponibles del simulador Ignition. El sistema de comandos para el plugin diff drive funciona de esta manera:
- El nodo
teleop_twist_keyboardtoma las teclas presionadas por el usuario y las convierte en comandos ROS Twist. ros_ign_bridgese subscribe a esos comandos ROS Twist y los convierte en mensajes Ignition Transport.- Los mensajes Ignition Transport son usados por el plugin diff drive ejecutado como parte de la simulacion del
tunnel.sdf. - El simulador mueve al robot apropiadamente, de acuerdo a los mensajes recibidos desde el plugin diff drive.
Podemos observar la parte del codigo del launchfile que usa el ros_ign_bridge:
<node
pkg="ros_ign_bridge"
type="parameter_bridge"
name="$(anon ros_ign_bridge)"
output="screen"
args="/model/vehicle/odometry@nav_msgs/[email protected] /cmd_vel@geometry_msgs/[email protected] ">
</node>Los mensajes van y vienen a través del tópico /cmd_vel, este tópico es usado tanto en la capa de Ignition Transport como del lado de ROS.
De entrada, toma mensajes geometry_msgs/Twist y de salida usa mensajes de tipo ignition.msgs.Twist.
Lo mismo aplica para la configuración de odometría mostrada en rviz.
Por último, mirando el código del archivo SDF ign_ws/src/ign-gazebo/examples/worlds/tunnel.sdf vemos que:
<plugin
filename="ignition-gazebo-diff-drive-system"
name="ignition::gazebo::systems::DiffDrive">
<left_joint>left_rear_wheel</left_joint>
<left_joint>left_front_wheel</left_joint>
<right_joint>right_rear_wheel</right_joint>
<right_joint>right_front_wheel</right_joint>
<wheel_separation>1.25</wheel_separation>
<wheel_radius>0.3</wheel_radius>
<odom_publish_frequency>1</odom_publish_frequency>
<topic>cmd_vel</topic>
</plugin>Así queda configurado el plugin diff drive para recibir comandos desde el tópico cmd_vel y controlar las
cuatro articulaciones: left_rear_wheel, left_front_wheel, right_rear_wheel y right_front_wheel
que controlan el movimiento del robot.
Como ejercicio, ¿Puede tomar alguna de las siguientes tareas?
- Enviar mensajes al robot directamente usando Ignition Transport.
- Puede chequear este tutorial de ignition: Moving the robot.
- Revise la estructura del model sdf
tunnel.sdf.
- ¿Puede cambiar el launchfile para usar otro motor de física? como TPE.
- Revise el tutorial de
ign-physics: Switching physics engines.
- Revise el tutorial de
- El mundo de ejemplo
diff_drive.sdf(ign_ws/src/ign-gazebo/examples/worlds/diff_drive.sdf) no usa el mismo tópicocmd_velpara recibir comandos de velocidad, ¿Puede modificar el tutorial para usar este mundo de ejemplo y enviar comandos a alguno de esos robots?- Puede revisar
diff_drive.sdfexample commands y ajustar losros_ignbridges apropiadamente.
- Puede revisar
¿Quiere saber mas de Ignition Gazebo? Revise los siguientes enlaces:
- Portal principal del simulador Ignition portal.
- Revise los tutoriales oficiales tutorials for Ignition Dome.
- Discussiones y anuncios en Gazebo/Ignition community forum.
