¿Es obligatorio el ROS (sistema operativo del robot)?
10
¿Tenemos que construir ROS para la investigación / aplicación robótica? ¿Cuál es la principal ventaja? ¿Cuándo o en qué situaciones ROS es obligatorio?
Hubiera escrito una respuesta, pero estoy escribiendo en un teléfono. En general, ROS no es obligatorio. En mi opinión personal, depender de ROS es incluso malo. Independientemente del componente que tenga, haga una biblioteca portátil y luego escriba un módulo ROS con él. Cuando ROS muera o sus requisitos cambien, agradecería haberlo hecho.
Shahbaz,
Respuestas:
18
Estoy de vuelta en una computadora!
Como dije en este comentario , ROS generalmente no es obligatorio. ROS es una plataforma entre muchas, famosa principalmente debido a que Willow Garage regala robots gratuitos en algún momento a quien escribió la mayoría de los módulos ROS. Dicho esto, no es la mejor plataforma posible, y ciertamente no es nada demasiado especial. En particular, dicho concurso resultó en una gran cantidad de módulos de baja calidad solo para aumentar los números.
Con el tiempo, la calidad de los módulos ROS ha mejorado y también hay muchos de ellos. Usando ROS, por lo tanto, tiene la ventaja de reutilizar mucho de lo que ya está hecho. Puede leer aquí algunas razones por las que puede querer usar ROS.
Con eso en mente, también debes estar atento a los efectos secundarios.
Control distribuido
Con ROS, tiene muchos nodos que se comunican entre sí a través de la red. Esto a veces es bueno y fácil, pero generalmente resulta en un retraso muy variable en la recepción de mensajes. Como resultado, tendría que tener un gran retraso de control para asegurarse de que todos los mensajes lleguen, lo que significa que no puede reaccionar rápidamente a los eventos, lo que a su vez significa que debe mover su robot a velocidades más lentas para no perderse esos eventos.
Lo creas o no, la gente realmente controla el robot a través de ROS ( MoveIt! Es el nombre del conjunto de componentes relevante). Lento. Inseguro. ¡Pero fácil!
No en tiempo real
Incluso cuando no se distribuye, ROS no es una plataforma en tiempo real. Eso significa que tiene total discreción del kernel de Linux para programar sus tareas en cualquier momento que lo considere conveniente. Esto está bien para algunas aplicaciones, pero no está bien para otras. Por lo tanto, debe analizar sus propios requisitos. ¿Necesita tener una garantía de que su tarea finalizará dentro de un marco de tiempo conocido? Si es así, necesita un sistema en tiempo real.
Entorno de tiempo de ejecución alojado
Otro punto a considerar es que, si bien ROS es un protocolo general de comunicación, esencialmente solo es compatible con entornos alojados. Hospedado significa que el código se ejecuta en la parte superior de un kernel, en lugar de ser independiente, lo que significa que el código controla directamente el hardware (por ejemplo, en un microcontrolador).
Si su aplicación de robótica se ejecuta cerca del hardware y, por lo tanto, necesitaría un programa que se ejecute en un microcontrolador, ROS no lo ayudará.
Bloqueo de plataforma
Por último, pero no menos importante, desarrollar para ROS da como resultado un bloqueo de plataforma. Esto significa que si en el futuro, por una razón u otra, decide basar su trabajo en otra plataforma robótica, como OROCOS, YARP, etc., sería insoportable.
También estaría algo bloqueado para Linux. Linux es el mejor, sin duda, pero un día puede terminar teniendo que soportar otro sistema, como QNX, VxWorks, etc., y también tendrá problemas allí.
Si estás escribiendo para microcontroladores, entonces olvídate de ROS. Si está escribiendo módulos de alto nivel, le recomiendo escribir código portátil. Por ejemplo, supongamos que ha desarrollado un nuevo sensor y desea escribir un módulo que adquiera datos de este sensor, que está conectado a su computadora a través del bus CAN.
Lo que podría hacer en esta situación es escribir una biblioteca independiente, con funciones que puedan trabajar con su sensor y adquirir datos. Incluso podría pensar en generar un hilo en la biblioteca que adquiere y pone en cola datos periódicamente.
Una vez que tenga esta biblioteca auxiliar, puede escribir una CLI, GUI, módulo ROS, módulo OROCOS, módulo YARP, conectarse a Matlab o cualquier otra cosa que quiera usar para interactuar con su sensor.
Nota final: lo que he dicho aquí es generalmente aplicable a todas las plataformas de robótica y no solo a ROS.
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Mark Booth
2
"ROS" es un término relativo, el APM ejecuta un código personalizado completo específicamente diseñado para el control de quadrocopter donde un ROS personalizado podría ser deseable para evitar que se bloquee, por otro lado, el Navio + se ejecuta en un kernel de Linux y ejecuta un código que no sea el piloto automático, y aún se las arregla para no estrellarse. La mayoría de las ROS son realmente un conjunto de funciones sobre un sistema operativo existente en lugar de escribir un sistema operativo desde cero. Como con cualquier cosa, depende.
Él está hablando del RobotOperatingsystem, no RealtimeOperatingSystem ...
FooTheBar
2
Descargo de responsabilidad: esta respuesta es de alguna manera una reacción a la publicación de Shahbaz, por lo que tiene un sesgo pro-ROS.
No creo que ROS sea obligatorio, pero es un excelente punto de partida y vale la pena invertir tiempo. Comenzó en Willow Garage, pero esta compañía desapareció y ROS todavía está viva, utilizada y desarrollada. La mayor parte de ROS es de código abierto y también comercialmente utilizable, por lo que no hay forma de que ROS desaparezca si una empresa ya no está interesada en él. La calidad del código, por supuesto, difiere entre los módulos principales y las implementaciones de algoritmos de vanguardia que algunos estudiantes de doctorado publicaron con su artículo.
ROS está aumentando cada vez más la velocidad en entornos industriales (me sorprendería si hay una porción significativa de inicio de robótica en todo el mundo que no utiliza ROS). Algunos algoritmos serán mantenidos y desarrollados por el consorcio industrial ros y si observa a los miembros, es una buena apuesta que ROS se convierta en un estándar en la industria:
La forma distribuida de usar ROS ayuda mucho a crear y mantener nuevos paquetes, especialmente dentro de los equipos. Las definiciones de mensaje y acción ayudan mucho a definir interfaces para que el hardware y los algoritmos puedan intercambiarse rápidamente. También ayuda a integrar a los nuevos miembros del equipo, ya que un nuevo nodo derribará otros nodos si se bloquea (siempre y cuando no consuma toda la RAM ...), por lo que es bastante seguro integrar nodos que funcionan parcialmente en el sistema en ejecución. El efecto es limitado. La comunicación utiliza TCP, que es confiable y rápido (en una máquina local), por lo que el paso de mensajes es muy rápido (varios cientos de Hz para un bucle de control es posible).
No en tiempo real
Actualmente, ROS no es en tiempo real, ya que la gran mayoría de los algoritmos no necesitan tiempo real. La detección o la planificación no tienen restricciones en tiempo real en la mayoría de los casos (¿cuántas personas están construyendo automóviles de alta velocidad sin conductor?). Es suficiente si el bucle de control final se ejecuta en tiempo real y, en muchos casos, esto puede hacerse directamente en el motor (al que se envía la posición final, por ejemplo, a través de CAN). Sin embargo, el tiempo real es uno de los objetivos principales de ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ), por lo que incluso si necesita esto en el futuro para todo el sistema, ROS lo tiene cubierto .
Si realmente desea ejecutar cosas incrustadas, por supuesto, hay una conexión con arduino, para que pueda escribir mensajes ROS directamente en el arduino que luego se envían a través de una conexión en serie.
Actualmente, ejecutar ROS en Windows es bastante difícil, pero a medida que Windows se acerca a Linux (incluso comienza a tener algo parecido a un golpe), es solo cuestión de tiempo hasta que sea posible. (¿Pero quién quiere ejecutar un robot con Windows de todos modos?)
Interfaces de hardware y algoritmos:
Creo que este es realmente un punto fuerte para ROS. Muchos robots disponibles comercialmente ya vienen con una interfaz ROS o alguien ya ha invertido algo de tiempo para implementar la interfaz. La mayoría de los brazos comerciales se pueden usar en MoveIt. Gran parte del trabajo para hacer que una aplicación se ejecute con un brazo específico se puede reutilizar con otro hardware.
Comunidad:
Otro punto fuerte para ROS. Los nuevos algoritmos obtienen una interfaz ROS muy rápidamente y muchas personas tuvieron los mismos problemas que tú, por lo que encontrarás a alguien que te ayude.
Lo último que me gustaría ver es mirar hacia atrás dentro de 20 años, donde todo está construido alrededor de ROS, y darme cuenta de que, vaya, necesitamos robots para trabajar a una velocidad comparable a la humana, pero no podemos porque hace 20 años pensamos ¿Cuántas personas están construyendo autos de alta velocidad sin conductor ?
Shahbaz
2
Creo que tengo que ponerme del lado de @Shahbaz en este caso. No es que ROS no tenga su lugar, es que no debería usar ROS en lugar de buenas prácticas de codificación. El protocolo ROS que realice debe derivarse de una biblioteca de interfaz, no al revés.
Respuestas:
Estoy de vuelta en una computadora!
Como dije en este comentario , ROS generalmente no es obligatorio. ROS es una plataforma entre muchas, famosa principalmente debido a que Willow Garage regala robots gratuitos en algún momento a quien escribió la mayoría de los módulos ROS. Dicho esto, no es la mejor plataforma posible, y ciertamente no es nada demasiado especial. En particular, dicho concurso resultó en una gran cantidad de módulos de baja calidad solo para aumentar los números.
Con el tiempo, la calidad de los módulos ROS ha mejorado y también hay muchos de ellos. Usando ROS, por lo tanto, tiene la ventaja de reutilizar mucho de lo que ya está hecho. Puede leer aquí algunas razones por las que puede querer usar ROS.
Con eso en mente, también debes estar atento a los efectos secundarios.
Control distribuido
Con ROS, tiene muchos nodos que se comunican entre sí a través de la red. Esto a veces es bueno y fácil, pero generalmente resulta en un retraso muy variable en la recepción de mensajes. Como resultado, tendría que tener un gran retraso de control para asegurarse de que todos los mensajes lleguen, lo que significa que no puede reaccionar rápidamente a los eventos, lo que a su vez significa que debe mover su robot a velocidades más lentas para no perderse esos eventos.
Lo creas o no, la gente realmente controla el robot a través de ROS ( MoveIt! Es el nombre del conjunto de componentes relevante). Lento. Inseguro. ¡Pero fácil!
No en tiempo real
Incluso cuando no se distribuye, ROS no es una plataforma en tiempo real. Eso significa que tiene total discreción del kernel de Linux para programar sus tareas en cualquier momento que lo considere conveniente. Esto está bien para algunas aplicaciones, pero no está bien para otras. Por lo tanto, debe analizar sus propios requisitos. ¿Necesita tener una garantía de que su tarea finalizará dentro de un marco de tiempo conocido? Si es así, necesita un sistema en tiempo real.
Entorno de tiempo de ejecución alojado
Otro punto a considerar es que, si bien ROS es un protocolo general de comunicación, esencialmente solo es compatible con entornos alojados. Hospedado significa que el código se ejecuta en la parte superior de un kernel, en lugar de ser independiente, lo que significa que el código controla directamente el hardware (por ejemplo, en un microcontrolador).
Si su aplicación de robótica se ejecuta cerca del hardware y, por lo tanto, necesitaría un programa que se ejecute en un microcontrolador, ROS no lo ayudará.
Bloqueo de plataforma
Por último, pero no menos importante, desarrollar para ROS da como resultado un bloqueo de plataforma. Esto significa que si en el futuro, por una razón u otra, decide basar su trabajo en otra plataforma robótica, como OROCOS, YARP, etc., sería insoportable.
También estaría algo bloqueado para Linux. Linux es el mejor, sin duda, pero un día puede terminar teniendo que soportar otro sistema, como QNX, VxWorks, etc., y también tendrá problemas allí.
Si estás escribiendo para microcontroladores, entonces olvídate de ROS. Si está escribiendo módulos de alto nivel, le recomiendo escribir código portátil. Por ejemplo, supongamos que ha desarrollado un nuevo sensor y desea escribir un módulo que adquiera datos de este sensor, que está conectado a su computadora a través del bus CAN.
Lo que podría hacer en esta situación es escribir una biblioteca independiente, con funciones que puedan trabajar con su sensor y adquirir datos. Incluso podría pensar en generar un hilo en la biblioteca que adquiere y pone en cola datos periódicamente.
Una vez que tenga esta biblioteca auxiliar, puede escribir una CLI, GUI, módulo ROS, módulo OROCOS, módulo YARP, conectarse a Matlab o cualquier otra cosa que quiera usar para interactuar con su sensor.
Nota final: lo que he dicho aquí es generalmente aplicable a todas las plataformas de robótica y no solo a ROS.
fuente
"ROS" es un término relativo, el APM ejecuta un código personalizado completo específicamente diseñado para el control de quadrocopter donde un ROS personalizado podría ser deseable para evitar que se bloquee, por otro lado, el Navio + se ejecuta en un kernel de Linux y ejecuta un código que no sea el piloto automático, y aún se las arregla para no estrellarse. La mayoría de las ROS son realmente un conjunto de funciones sobre un sistema operativo existente en lugar de escribir un sistema operativo desde cero. Como con cualquier cosa, depende.
fuente
Descargo de responsabilidad: esta respuesta es de alguna manera una reacción a la publicación de Shahbaz, por lo que tiene un sesgo pro-ROS.
No creo que ROS sea obligatorio, pero es un excelente punto de partida y vale la pena invertir tiempo. Comenzó en Willow Garage, pero esta compañía desapareció y ROS todavía está viva, utilizada y desarrollada. La mayor parte de ROS es de código abierto y también comercialmente utilizable, por lo que no hay forma de que ROS desaparezca si una empresa ya no está interesada en él. La calidad del código, por supuesto, difiere entre los módulos principales y las implementaciones de algoritmos de vanguardia que algunos estudiantes de doctorado publicaron con su artículo.
ROS está aumentando cada vez más la velocidad en entornos industriales (me sorprendería si hay una porción significativa de inicio de robótica en todo el mundo que no utiliza ROS). Algunos algoritmos serán mantenidos y desarrollados por el consorcio industrial ros y si observa a los miembros, es una buena apuesta que ROS se convierta en un estándar en la industria:
http://rosindustrial.org/ric/current-members/
La forma distribuida de usar ROS ayuda mucho a crear y mantener nuevos paquetes, especialmente dentro de los equipos. Las definiciones de mensaje y acción ayudan mucho a definir interfaces para que el hardware y los algoritmos puedan intercambiarse rápidamente. También ayuda a integrar a los nuevos miembros del equipo, ya que un nuevo nodo derribará otros nodos si se bloquea (siempre y cuando no consuma toda la RAM ...), por lo que es bastante seguro integrar nodos que funcionan parcialmente en el sistema en ejecución. El efecto es limitado. La comunicación utiliza TCP, que es confiable y rápido (en una máquina local), por lo que el paso de mensajes es muy rápido (varios cientos de Hz para un bucle de control es posible).
No en tiempo real
Actualmente, ROS no es en tiempo real, ya que la gran mayoría de los algoritmos no necesitan tiempo real. La detección o la planificación no tienen restricciones en tiempo real en la mayoría de los casos (¿cuántas personas están construyendo automóviles de alta velocidad sin conductor?). Es suficiente si el bucle de control final se ejecuta en tiempo real y, en muchos casos, esto puede hacerse directamente en el motor (al que se envía la posición final, por ejemplo, a través de CAN). Sin embargo, el tiempo real es uno de los objetivos principales de ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ), por lo que incluso si necesita esto en el futuro para todo el sistema, ROS lo tiene cubierto .
Si realmente desea ejecutar cosas incrustadas, por supuesto, hay una conexión con arduino, para que pueda escribir mensajes ROS directamente en el arduino que luego se envían a través de una conexión en serie.
Actualmente, ejecutar ROS en Windows es bastante difícil, pero a medida que Windows se acerca a Linux (incluso comienza a tener algo parecido a un golpe), es solo cuestión de tiempo hasta que sea posible. (¿Pero quién quiere ejecutar un robot con Windows de todos modos?)
Interfaces de hardware y algoritmos:
Creo que este es realmente un punto fuerte para ROS. Muchos robots disponibles comercialmente ya vienen con una interfaz ROS o alguien ya ha invertido algo de tiempo para implementar la interfaz. La mayoría de los brazos comerciales se pueden usar en MoveIt. Gran parte del trabajo para hacer que una aplicación se ejecute con un brazo específico se puede reutilizar con otro hardware.
Comunidad:
Otro punto fuerte para ROS. Los nuevos algoritmos obtienen una interfaz ROS muy rápidamente y muchas personas tuvieron los mismos problemas que tú, por lo que encontrarás a alguien que te ayude.
http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf
fuente