¿Qué es ros?

ROS es un conjunto de utilidades y bibliotecas para implementar todo tipo de funcionalidades en robots. No es un lenguaje de programación.

Para una visión general de lo que es ROS, recomendaría esta explicación de Brian Gerkey (el desarrollador principal de Stage y ROS):
¿Qué es exactamente ROS? Middleware, Framework, Sistema operativo?

Esta respuesta se centra en los valores centrales de ROS para que comprenda por qué diseñan ROS de esta manera (los mecanismos mencionados en otras respuestas se desarrollan para respaldar estos valores centrales), por lo que primero arrojaría algo de luz sobre lo que ROS significa. El desarrollo en robótica es lento en las últimas décadas porque las personas distribuyeron sus esfuerzos a diferentes sistemas. Por ejemplo, la Universidad de Tokio puede desarrollar sus propios robots, pero estos robots no son compatibles con los robots de Stanford. (como la historia de la “torre de babel”) Para las personas normales como tú y yo, incluso no es posible obtener códigos fuente y proporcionar ayuda para el desarrollo de la robótica. En ese contexto, hacer grandes progresos en robótica es bastante difícil. Entonces salió ROS, con el objetivo de reunir el trabajo de las personas y luego desarrollar robots más avanzados sobre ellos.

Ahora puedo hablar sobre el valor central en ROS, el objetivo principal de ROS es apoyar la reutilización del código en la investigación y el desarrollo de la robótica. ROS es un marco distribuido de procesos (también conocidos como nodos ) que permite que los ejecutables se diseñen individualmente y se acoplen libremente en tiempo de ejecución .

ROS tiene muchas características excelentes, pero creo que solo hay que mencionar dos características:

1.Reutilización de código
ROS es de código abierto y proporciona un sólido sistema de gestión de paquetes. Puede construir fácilmente su propio sistema combinando paquetes lanzados en ROS. El ejemplo en el siguiente punto aclararía este punto.

2. Los ejecutables pueden diseñarse individualmente y conectarse fácilmente en tiempo de ejecución
Explicaré esta característica en un ejemplo. Intenta imaginar que eres un experto en navegación de robots, escribiste un programa A que puede dejar que el robot vaya a donde quiera sin problema. Sin embargo, debe usar los datos de la cámara para que el robot sepa cómo planificar su trayectoria de movimiento (digamos que el programa que puede procesar los datos de la cámara es el programa B). Si está utilizando ROS, puede ejecutar el programa de procesamiento de datos de la cámara de otras personas como el programa B, y el programa conectado A y el programa B en el entorno proporcionado por ROS. Y viceversa, otras personas pueden usar el programa de navegación de primera clase proporcionado por usted en lugar de escribir un programa de navegación de bajo rendimiento por sí mismos.

Los conceptos anteriores son las cosas centrales que quiero mencionar. Tengo mucho que decir acerca de ROS, ya que es muy potente y flexible, pero, como de costumbre, una mayor potencia y flexibilidad tienen el costo de una mayor complejidad. No quiero que esta respuesta sea confusa.

Si no está satisfecho, la Guía de inicio de ROS (ROS / Guía de inicio – Wiki de ROS) es un buen punto de entrada.

Otra pregunta relacionada sobre ROS Respuesta:
http://answers.ros.org/question/…

En resumen: ROS es un sistema de transmisión de mensajes que permite enviar estructuras de datos de un proceso a otro. ROS proporciona enlaces para diferentes idiomas, lo que le permite enviar, por ejemplo, una estructura de datos desde un proceso escrito en C ++ a un proceso escrito en Python.

Esto hace de ROS una gran herramienta para escribir controladores de hardware. Puede escribir un programa en C ++ que consulte un escáner láser, preprocese los datos y “publique” el flujo de datos en cualquier otro proceso, por ejemplo, código de control de alto nivel escrito en Python, que desee utilizarlo.

Hola

ROS es uno de los middleware más populares para la programación de robótica. ROS viene con interfaz para pasar mensajes | herramientas | gestión de paquetes | abstracción de hardware, etc.

Tiene una integración de varias bibliotecas de terceros, como Open-CV, OpenNI, PCL, etc.

Podemos usar el programa usando clientes ROS como roscpp y rospy.

He escrito dos libros sobre ROS y estoy dando los enlaces aquí.

Dominar ROS para la programación de robótica

Aprendiendo Robótica usando Python

Tomaré prestada la respuesta de Brian Gerkey:

  ROS = fontanería + herramientas + capacidades + ecosistema
  1. fontanería: ROS proporciona infraestructura de mensajería de publicación-suscripción diseñada para soportar la construcción rápida y fácil de sistemas informáticos distribuidos.
  2. herramientas: ROS proporciona un amplio conjunto de herramientas para configurar, iniciar, introspectar, depurar, visualizar, registrar, probar y detener sistemas informáticos distribuidos.
  3. capacidades: ROS proporciona una amplia colección de bibliotecas que implementan funcionalidades de robot útiles, con un enfoque en movilidad, manipulación y percepción.
  4. ecosistema: ROS es respaldado y mejorado por una gran comunidad, con un fuerte enfoque en la integración y la documentación. ros.org es una ventanilla única para encontrar y aprender sobre los miles de paquetes ROS que están disponibles a través de desarrolladores de todo el mundo.

En los primeros días, la fontanería, las herramientas y las capacidades estaban estrechamente unidas, lo que tiene ventajas y desventajas. Por un lado, al hacer suposiciones sólidas sobre cómo se usará un componente en particular, los desarrolladores pueden construir y probar de manera rápida y fácil sistemas integrados complejos. Por otro lado, a los usuarios se les da la opción de “todo o nada”: para usar un componente ROS interesante, prácticamente tenía que saltar para usar todos los ROS.

Cuatro años después, el sistema central ha madurado considerablemente, y estamos trabajando arduamente para refactorizar el código para separar la fontanería de las herramientas de las capacidades, de modo que cada una pueda usarse de forma aislada. En particular, nuestro objetivo es que las bibliotecas importantes que se desarrollaron dentro de ROS estén disponibles para usuarios que no son ROS de una manera de dependencia mínima (como ya ha sucedido con OMPL y PCL).

Sistema operativo robot
ROS es un marco de software destinado a permitirle escribir aplicaciones que operan hardware robótico (de ahí el sistema operativo Robot).

Como su nivel más fundamental, es una capa de abstracción que ofrece abstracción de hardware (por lo que no necesita conocer las agallas para controlar los componentes de hardware). Parecen controladores de software y bibliotecas. Funcionan porque el hardware tiene los ganchos que buscan los controladores.

Para hacerlo más útil, ROS luego ofrece un conjunto de funciones y aplicaciones de línea base y aportadas por el usuario contra esa abstracción. Estos están construidos dentro de un marco arquitectónico de software que le permite pasar el estado de la máquina y los mensajes entre nodos operativos.

Por ejemplo:
Estado = encendido, las ruedas están rodando, los ojos están encendidos.
Aplicación = Ruede las ruedas hasta que los ojos vean algo
Flujo de mensajes =
Ruedas: Estoy rodando … Estoy rodando … Estoy rodando …
Ojos: No veo nada … No veo nada … No veo nada … OH, hay algo
Ruedas: me estoy deteniendo
Estado = encendido, las ruedas están detenidas, los ojos están encendidos.

Hay varias placas de hardware estándar que cumplen con ROS, lo que significa que siguen las reglas y proporcionan los ganchos adecuados para que la capa de abstracción funcione.

Es de código abierto, por lo que si está tan inclinado podría construir su propia placa que cumpla con las especificaciones, o podría ampliar las especificaciones para adaptarlas a la placa robótica que hizo o expandir la arquitectura para mejorar los servicios que proporciona.

Aunque el artículo de Wikipedia no lo dice, estoy bastante seguro de que los robots LEGO Mindstorms también cumplen con ROS. No creo que los chicos de LEGO hagan un gran negocio con esto (porque ganan mucho dinero vendiendo controladores y son fáciles de ensamblar nodos operativos), pero sí creo que aprovechan el entorno ROS (o al menos cumplen con los requisitos copia de la misma).

Todo lo que la gente escribió arriba es correcto.

Si usted es un desarrollador de .Net, aquí hay una alineación rápida para la terminología ROS que encontré útil:

  • Nodo = Un proceso;
  • Servicio = Una interfaz de método (estilo ASMX) para una comunicación síncrona entre nodos;
  • Tema = Un controlador de eventos para una comunicación asincrónica entre múltiples nodos;
  • Mensaje = Un tipo de datos de estructura que se pasa al tema;
  • Mensaje de servicio = Un mensaje de solicitud y respuesta que se pasa al servicio;
  • Maestro = Una orquestación (estilo de tabla de mapeo);
  • Servidor de parámetros = Un diccionario global (estilo montón) para compartir datos entre nodos;
  • Paquete = Un proyecto. Unidad organizativa para nodos, configuración y más;
  • Atascado = Una solución. Unidad de organización para paquetes, configuración y más;
  • Bolsa = Un registrador para mensajes que se pasan sobre un tema específico o múltiples;

Fuente: ROS para ventiladores NET Descripción general de la arquitectura de alto nivel

¿Qué es ros?
ROS (Robot Operating System) es un sistema con licencia BSD para controlar componentes robóticos desde una PC. Un sistema ROS se compone de varios nodos independientes, cada uno de los cuales se comunica con los otros nodos mediante un modelo de mensajes de publicación / suscripción. Por ejemplo, el controlador de un sensor particular podría implementarse como un nodo, que publica los datos del sensor en una secuencia de mensajes. Estos mensajes podrían ser consumidos por cualquier número de otros nodos, incluidos los filtros, los registradores y también los sistemas de nivel superior, como la orientación, la búsqueda de rutas, etc.
¿Por qué ROS?
¡Tenga en cuenta que los nodos en ROS no tienen que estar en el mismo sistema (varias computadoras) o incluso en la misma arquitectura! Podrías tener un Arduino publicando mensajes, una computadora portátil suscrita a ellos y un teléfono Android manejando motores. Esto hace que ROS sea realmente flexible y adaptable a las necesidades del usuario. ROS también es de código abierto, mantenido por muchas personas.
Conceptos generales
Veamos el sistema ROS desde una vista de muy alto nivel. No tiene que preocuparse de cómo funciona ninguno de los siguientes, lo veremos más adelante.
ROS comienza con el ROS Master. El Master permite que todas las demás piezas de software ROS (Nodos) se encuentren y se comuniquen entre sí. De esa manera, no tenemos que decir específicamente “Enviar los datos de este sensor a esa computadora en 127.0.0.1. Simplemente podemos decirle al Nodo 1 que envíe mensajes al Nodo 2.

Figura 1
¿Cómo hacen esto los nodos? Al publicar y suscribirse a Temas.
Digamos que tenemos una cámara en nuestro robot. Queremos poder ver las imágenes de la cámara, tanto en el robot como en otra computadora portátil.
En nuestro ejemplo, tenemos un Nodo de cámara que se encarga de la comunicación con la cámara, un Nodo de procesamiento de imágenes en el robot que procesa datos de imágenes y un Nodo de visualización de imágenes que muestra imágenes en una pantalla. Para empezar, todos los nodos se han registrado con el maestro. Piense en el Maestro como una tabla de búsqueda donde todos los nodos van a buscar exactamente dónde enviar los mensajes.

Figura 2
Al registrarse con el ROS Master, el Nodo de la cámara indica que publicará un tema llamado / image_data (por ejemplo). Los otros dos nodos registran que están suscritos al tema / image_data.
Por lo tanto, una vez que el nodo de la cámara recibe algunos datos de la cámara, envía el mensaje / image_data directamente a los otros dos nodos. (A través de lo que es esencialmente TCP / IP)

figura 3
Ahora puede estar pensando, ¿qué pasa si quiero que el Nodo de procesamiento de imágenes solicite datos del Nodo de la cámara en un momento específico? Para hacer esto, ROS implementa Servicios.
Un nodo puede registrar un servicio específico con el ROS Master, tal como registra sus mensajes. En el siguiente ejemplo, el Nodo de procesamiento de imágenes primero solicita / image_data, el Nodo de cámara recopila datos de la Cámara y luego envía la respuesta.

Fuente: http://robohub.org/ros-101-intro

Robot Operating System (ROS) es una colección de marcos de software para el desarrollo de software de robots (consulte también middleware de Robotics) que proporciona una funcionalidad similar a la del sistema operativo en un clúster heterogéneo. ROS proporciona servicios estándar del sistema operativo, como abstracción de hardware, control de dispositivos de bajo nivel, implementación de funcionalidades de uso común, transmisión de mensajes entre procesos y administración de paquetes. Los conjuntos de procesos basados ​​en ROS se representan en una arquitectura gráfica donde el procesamiento se lleva a cabo en nodos que pueden recibir, publicar y multiplexar sensores, control, estado, planificación, actuador y otros mensajes. A pesar de la importancia de la reactividad y la baja latencia en el control del robot, ROS, en sí mismo, no es un sistema operativo en tiempo real, aunque es posible integrar ROS con código en tiempo real.

ROS actualmente solo se ejecuta en plataformas basadas en Unix. El software para ROS se prueba principalmente en los sistemas Ubuntu y Mac OS X, aunque la comunidad ROS ha contribuido con el soporte para Fedora, Gentoo, Arch Linux y otras plataformas Linux.

ROS (sistema operativo del robot)
Aquí un pdf explicando mejor:
http://pub1.willowgarage.com/~ko

Es un sistema operativo