Introducción a ROS¶

Robotic Operating System

Es un marco de trabajo (framework) ubicado en el camino medio entre el hardware y software de los sistemas robóticos.

[ https://doi.org/10.1126/scirobotics.abm6074 ]

Versiones y distribuciones¶

Existen dos versiones de ROS llamadas ROS2 y ROS1, y en ellas cada año se crea una distribución. La última distribución de ROS1 fue lanzada en el 2020, ya que solo se va a continuar con ROS2.

humble logo

La distribución "Humble Hawksbill" para ROS2 salió en el 2022.

Conceptos Claves en ROS¶

  • ROS Graph
  • Nodo node
  • Parámetro param
  • Tema topic
  • Servicio service
  • Acción action

ROS Graph¶

El ROS Graph es la red de los diferentes elementos que constituyen una applicación robótica. Una representación grafica de la configuración es mostrada a continuación:

Grafo de ROS que contiene nodos, temas y servicios

Iniciemos ROS¶

enlace de descarga

Nodos en ROS (nodes)¶

  • ros2 run
  • ros2 node list
  • ros2 node info

Temas en ROS (topic)¶

Temas en ROS (topic)¶

Temas en ROS (topic)¶

  • rqt_graph
  • ros2 topic list
  • ros2 topic echo
  • ros2 topic info
  • ros2 interface show
  • ros2 topic pub
  • ros2 topic hz

Servicio en ROS (service)¶

Servicio en ROS (service)¶

Servicio en ROS (service)¶

  • ros2 service list
  • ros2 service type
  • ros2 service find
  • ros2 interface show
  • ros2 service call

Parámetros en ROS¶

  • ros2 param list
  • ros2 param get
  • ros2 param set
  • ros2 param dump
  • ros2 param load

Acciones en ROS (action)¶

Acciones en ROS (action)¶

  • ros2 node info
  • ros2 action list
  • ros2 action info
  • ros2 interface show
  • ros2 action send_goal

RQT Console¶

La consola de mensajes para estudiar en detalle lo que ocurre en ROS

ros2 run rqt_console rqt_console

ROS Launch¶

ros2 launch turtlesim multisim.launch.py

# turtlesim/launch/multisim.launch.py

from launch import LaunchDescription
import launch_ros.actions

def generate_launch_description():
    return LaunchDescription([
        launch_ros.actions.Node(
            namespace= "turtlesim1", package='turtlesim', executable='turtlesim_node', output='screen'),
        launch_ros.actions.Node(
            namespace= "turtlesim2", package='turtlesim', executable='turtlesim_node', output='screen'),
    ])

ROS Bag¶

  • ros2 bag record
  • ros2 bag info
  • ros2 bag play