Ejecuta un ejemplo completo con Turtlesim
Resumen
Turtlesim es una herramienta de simulación sencilla que demuestra los conceptos fundamentales de ROS 2, tales como nodos, temas (topics) y servicios. En esta sección, ejecutarás un ejemplo completo con Turtlesim, controlarás la tortuga, monitorearás los temas y visualizarás el sistema con rqt.
Configura la redirección de pantalla
Linux
Permite que Docker acceda a tu servidor X:
$ xhost +local:docker
macOS
En macOS, utiliza XQuartz para proporcionar soporte X11. Instala XQuartz usando Homebrew:
Instala XQuartz usando Homebrew:
$ brew install --cask xquartzAbre XQuartz desde Aplicaciones, luego navega a
Preferences > Securityy habilitaAllow connections from network clients. Reinicia tu computadora para asegurarte de que los cambios surtan efecto.Después de reiniciar, abre una terminal y permite las conexiones locales:
$ defaults write org.xquartz.X11 nolisten_tcp -bool false $ xhost +localhost $ xhost + 127.0.0.1
Inicia el contenedor
Inicia el contenedor utilizando la misma configuración de Docker Compose de la sección del espacio de trabajo.
Para Linux:
$ cd ws_linux
$ docker compose up -d
$ docker compose exec ros2 /bin/bash
Para macOS:
$ cd ws_mac
$ docker compose up -d
$ docker compose exec ros2 /bin/bash
Instala y ejecuta Turtlesim
Dentro del contenedor, instala el paquete Turtlesim:
Actualiza el gestor de paquetes:
$ sudo apt updateInstala el paquete Turtlesim:
$ sudo apt install -y ros-humble-turtlesimEjecuta el nodo de Turtlesim:
$ ros2 run turtlesim turtlesim_node
Debería aparecer una ventana en tu escritorio que muestra una tortuga en una cuadrícula.
Controla la tortuga
Abre una nueva terminal y conéctate al mismo contenedor, luego inicia el nodo teleop de teclado:
$ ros2 run turtlesim turtle_teleop_keyEste nodo te permite controlar la tortuga usando tu teclado. Utiliza las teclas de flecha para mover la tortuga hacia adelante, atrás, izquierda y derecha. Presiona
Ctrl+Cpara detener el nodo teleop.Mueve la tortuga por la ventana. Deberías ver cómo dibuja una línea a su paso.
Monitorea los temas (topics)
Abre otra terminal y conéctate al mismo contenedor, luego lista todos los temas activos:
$ ros2 topic listDeberías ver una salida similar a la siguiente:
/parameter_events /rosout /turtle1/cmd_vel /turtle1/color_sensor /turtle1/poseObtén información sobre un tema específico:
$ ros2 topic info /turtle1/poseVerás el tipo de tema y qué nodos publican y se suscriben a él.
Visualiza el sistema con rqt
Abre otra terminal y conéctate al mismo contenedor, luego actualiza el gestor de paquetes:
$ sudo apt updateInstala rqt:
$ sudo apt install -y 'ros-humble-rqt*'Inicia rqt:
$ ros2 run rqt_gui rqt_gui
Debería aparecer una ventana de rqt. rqt proporciona varios complementos (plugins) útiles para visualizar y monitorear sistemas ROS 2.
Gráfico de nodos (Node Graph)
Puedes explorar el gráfico de nodos navegando a Plugins > Introspection > Node Graph. Se abrirá una nueva pestaña que muestra nodos y temas con sus conexiones ilustradas como líneas. Esta visualización demuestra cómo el nodo teleop envía comandos de velocidad al nodo Turtlesim, y cómo el nodo Turtlesim publica los datos de posición a través de los temas correspondientes.
Monitor de temas (Topic Monitor)
Puedes monitorear los temas activos navegando a Plugins > Topics > Topic Monitor. Se abrirá una nueva pestaña que muestra todos los temas activos y sus valores actuales. Selecciona el icono del ojo junto a /turtle1/pose para monitorearlo. A medida que mueves la tortuga, observa cómo se actualizan los valores de pose en tiempo real, mostrando el cambio de posición y orientación de la tortuga según tus comandos.
Llamador de servicios (Service Caller)
Puedes llamar a servicios desde rqt usando Plugins > Services > Service Caller. Selecciona un servicio como /turtle1/teleport_absolute, ingresa valores para los campos de la solicitud y selecciona Call para enviar la solicitud.
Gráficos (Plots)
Para graficar los datos de un tema a lo largo del tiempo, navega a Plugins > Visualization > Plot. Por ejemplo, en la ventana de Plot, escribe /turtle1/pose/x en el campo Topic y presiona Enter. Mueve la tortuga y observa cómo se muestra la posición en el eje X en una gráfica a lo largo del tiempo.
Llama a servicios de ROS 2
Turtlesim proporciona servicios para realizar acciones como reposicionar la tortuga y limpiar el trayecto.
Lista los servicios disponibles:
$ ros2 service listDeberías ver servicios como
/turtle1/set_pen(para cambiar el color y grosor de la pluma),/turtle1/teleport_absolute(para mover la tortuga a una posición específica) y/turtle1/teleport_relative(para mover la tortuga con respecto a su posición actual).Teletransporta la tortuga a una nueva posición:
$ ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute " x: 1.0 y: 3.0 theta: 0.0 "La tortuga debería moverse instantáneamente a la posición especificada (1.0, 3.0).
Crea un publicador sencillo
Crea un script de Python que publique comandos de velocidad para controlar la tortuga de forma programática. En una nueva terminal, crea un archivo llamado
move_turtle.py:import rclpy from geometry_msgs.msg import Twist import time def main(): rclpy.init() node = rclpy.create_node('turtle_mover') publisher = node.create_publisher(Twist, 'turtle1/cmd_vel', 10) # Crear un mensaje de tipo twist msg = Twist() msg.linear.x = 2.0 # Moverse hacia adelante a 2 m/s msg.angular.z = 1.0 # Rotar a 1 rad/s # Publicar el mensaje for i in range(50): publisher.publish(msg) time.sleep(0.1) # Detener la tortuga msg.linear.x = 0.0 msg.angular.z = 0.0 publisher.publish(msg) node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main()Ejecuta el script:
$ python3 move_turtle.pyLa tortuga debería moverse en forma circular durante 5 segundos y luego detenerse.
Resumen
En esta sección, configuraste la redirección de pantalla, utilizaste los nodos de Turtlesim, inspeccionaste nodos y temas, y visualizaste el sistema usando rqt. Por último, interactuaste con servicios de ROS 2 y creaste un publicador sencillo para mover la tortuga de forma programática.
Estos conceptos fundamentales se aplican directamente a las aplicaciones de robótica del mundo real con sensores y actuadores reales.