Diferencia entre revisiones de «ROS»
(→Messages) |
|||
Línea 17: | Línea 17: | ||
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'' === | === ''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'' === | === ''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'' <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. | ||
Línea 32: | Línea 29: | ||
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: | ||
− | |||
float64 x | float64 x | ||
Línea 38: | Línea 34: | ||
float64 z | float64 z | ||
− | Muchos mensajes de uso común ya están definidos como parte del [http://wiki.ros.org/common_msgs?distro=melodic 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. | + | Muchos mensajes de uso común ya están definidos como parte del [http://wiki.ros.org/common_msgs?distro=melodic 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 [http://docs.ros.org/api/geometry_msgs/html/msg/Point.html <code>geometry_msgs/Point</code>] |
Revisión del 10:40 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.
Contenido
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.
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