Diferencia entre revisiones de «ROS»

De Cerlab Wiki
Saltar a: navegación, buscar
(Topics, Publishers & Subscribers)
 
(No se muestra una edición intermedia del mismo usuario)
Línea 18: Línea 18:
 
Familiarizarse con el ecosistema ROS puede ser una tarea abrumadora para un principiante. ROS es en realidad varias cosas a la vez, y lo que busca es facilitar el desarrollo, empaquetado, distribución y despliegue de aplicaciones, basadas en los principios de Open Source y desarrollo colaborativo.
 
Familiarizarse con el ecosistema ROS puede ser una tarea abrumadora para un principiante. ROS es en realidad varias cosas a la vez, y lo que busca es facilitar el desarrollo, empaquetado, distribución y despliegue de aplicaciones, basadas en los principios de Open Source y desarrollo colaborativo.
  
=== ''Nodes'' ===
+
=== ''[http://wiki.ros.org/Nodes Nodes]'' ===
  
 
Los nodos son la ''unidad de procesamiento básica'' de ROS. Los nodos encapsulan los diferentes procesos que corren en un sistema robótico, por lo general cada nodo debería encargarse de una única tarea. Por ejemplo, en el [[MecanumRob]] hay un nodo que se encarga de manejar los motores, otro que calcula la posición aproximada por odometría a partir del modelo y la velocidad de las ruedas, otros dos que leen los sensores láser (uno por sensor), otro que se encarga de la evasión de obstáculos y finalmente un nodo que implementa un algoritmo de [https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping SLAM].
 
Los nodos son la ''unidad de procesamiento básica'' de ROS. Los nodos encapsulan los diferentes procesos que corren en un sistema robótico, por lo general cada nodo debería encargarse de una única tarea. Por ejemplo, en el [[MecanumRob]] hay un nodo que se encarga de manejar los motores, otro que calcula la posición aproximada por odometría a partir del modelo y la velocidad de las ruedas, otros dos que leen los sensores láser (uno por sensor), otro que se encarga de la evasión de obstáculos y finalmente un nodo que implementa un algoritmo de [https://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping SLAM].
  
=== ''Topics, Publishers & Subscribers'' ===
+
=== ''[http://wiki.ros.org/Topics Topics], [http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28python%29 Publishers & Subscribers]'' ===
  
 
Como se podrá suponer, los nodos necesitan comunicarse entre sí para realizar sus tareas. ROS resuelve el problema de la comunicación entre nodos mediante un sistema de publicaciones y suscripciones a ''topics''. Cada ''topic'' es  un canal de información, donde los nodos pueden escribir o publicar datos, o bien suscribirse para obtener la información que otros nodos publican. Por ejemplo, el ''topic'' <code>/laser_front</code> en el [[MecanumRob]] contiene la información de las lecturas del sensor Hokuyo que está al frente del robot. El nodo que maneja este sensor es el que publica los mensajes, y los nodos suscritos son el nodo SLAM y el nodo de evasión de obstáculos.
 
Como se podrá suponer, los nodos necesitan comunicarse entre sí para realizar sus tareas. ROS resuelve el problema de la comunicación entre nodos mediante un sistema de publicaciones y suscripciones a ''topics''. Cada ''topic'' es  un canal de información, donde los nodos pueden escribir o publicar datos, o bien suscribirse para obtener la información que otros nodos publican. Por ejemplo, el ''topic'' <code>/laser_front</code> en el [[MecanumRob]] contiene la información de las lecturas del sensor Hokuyo que está al frente del robot. El nodo que maneja este sensor es el que publica los mensajes, y los nodos suscritos son el nodo SLAM y el nodo de evasión de obstáculos.
  
=== ''Messages'' ===
+
Es necesario aclarar que la comunicación por medio de ''topics'' no necesariamente es confiable. Cada suscripción tiene una cola de mensajes recibidos (de tamaño definido por el usuario). Si un mensaje llega y la cola está llena, se desecha el mensaje al final de la cola (el más antiguo). Además, siempre es posible perder mensajes por ejemplo si la comunicación se hace a través de Wi-Fi.
 +
 
 +
=== ''[http://wiki.ros.org/msg Messages]'' ===
  
 
Los mensajes son el equivalente a los tipos de datos en ROS. Cada ''topic'' debe definir su nombre y el tipo de mensajes que se van a publicar. Los mensajes se definen por medio de archivos .msg, en estos se indica línea por línea el tipo y nombre de cada variable en el mensaje. Por ejemplo, una definición de mensaje para un punto puede ser:
 
Los mensajes son el equivalente a los tipos de datos en ROS. Cada ''topic'' debe definir su nombre y el tipo de mensajes que se van a publicar. Los mensajes se definen por medio de archivos .msg, en estos se indica línea por línea el tipo y nombre de cada variable en el mensaje. Por ejemplo, una definición de mensaje para un punto puede ser:

Revisión actual del 12:00 9 jul 2018

ROS (Robot Operating System) es un framework para el desarrollo de aplicaciones robóticas. En particular, provee una serie de utilidades de software y abstracciones que facilitan la comunicación entre procesos y la computación distribuida.

Instalación

Para instalar ROS se recomienda seguir las instrucciones de instalación oficiales disponibles en la wiki de ROS. Se debe contar con un sistema operativo soportado e instalar la versión apropiada de ROS. En general se recomienda usar Ubuntu (o Debian), pues las distribuciones LTS (Long Term Support) de ROS siguen a las distribuciones LTS de Ubuntu.

Cada distribución de ROS instala una serie de paquetes de software básicos y también provee un repositorio con todos los paquetes disponibles para esa distribución y arquitectura. Los paquetes de ROS se pueden instalar mediante apt como cualquier otro paquete en una distribución Linux. Los mismos tienen la forma:

$ sudo apt-get install ros-<distro>-<paquete>

Por ejemplo, para usar el sensor laser Hokuyo URG-04LX-UG01 podríamos instalar el paquete urg_node que incluye un nodo para manejar y publicar los datos del sensor. Para ROS Kinetic debemos escribir desde la terminal:

$ sudo apt-get install ros-kinetic-urg-node

Conceptos Básicos

Familiarizarse con el ecosistema ROS puede ser una tarea abrumadora para un principiante. ROS es en realidad varias cosas a la vez, y lo que busca es facilitar el desarrollo, empaquetado, distribución y despliegue de aplicaciones, basadas en los principios de Open Source y desarrollo colaborativo.

Nodes

Los nodos son la unidad de procesamiento básica de ROS. Los nodos encapsulan los diferentes procesos que corren en un sistema robótico, por lo general cada nodo debería encargarse de una única tarea. Por ejemplo, en el MecanumRob hay un nodo que se encarga de manejar los motores, otro que calcula la posición aproximada por odometría a partir del modelo y la velocidad de las ruedas, otros dos que leen los sensores láser (uno por sensor), otro que se encarga de la evasión de obstáculos y finalmente un nodo que implementa un algoritmo de SLAM.

Topics, Publishers & Subscribers

Como se podrá suponer, los nodos necesitan comunicarse entre sí para realizar sus tareas. ROS resuelve el problema de la comunicación entre nodos mediante un sistema de publicaciones y suscripciones a topics. Cada topic es un canal de información, donde los nodos pueden escribir o publicar datos, o bien suscribirse para obtener la información que otros nodos publican. Por ejemplo, el topic /laser_front en el MecanumRob contiene la información de las lecturas del sensor Hokuyo que está al frente del robot. El nodo que maneja este sensor es el que publica los mensajes, y los nodos suscritos son el nodo SLAM y el nodo de evasión de obstáculos.

Es necesario aclarar que la comunicación por medio de topics no necesariamente es confiable. Cada suscripción tiene una cola de mensajes recibidos (de tamaño definido por el usuario). Si un mensaje llega y la cola está llena, se desecha el mensaje al final de la cola (el más antiguo). Además, siempre es posible perder mensajes por ejemplo si la comunicación se hace a través de Wi-Fi.

Messages

Los mensajes son el equivalente a los tipos de datos en ROS. Cada topic debe definir su nombre y el tipo de mensajes que se van a publicar. Los mensajes se definen por medio de archivos .msg, en estos se indica línea por línea el tipo y nombre de cada variable en el mensaje. Por ejemplo, una definición de mensaje para un punto puede ser:

float64 x
float64 y
float64 z

Muchos mensajes de uso común ya están definidos como parte del estándar ROS, se debe tratar al máximo de usar los mensajes estándar y definir nuevos mensajes sólo cuando sea estrictamente necesario. De hecho, la definición anterior del mensaje punto es la misma de geometry_msgs/Point