Conceptos de ROS.
Robotica Industrial.
Juan Sebastián Reina Acosta; Valentina Vega Mahecha.
1. Realizar los siguientes ejercicios sobre ROS
a. Introducción a ROS
b. Programación básica de Tópicos en ROS
2. Escribir las conclusiones del desarrollo del desarrollo de estos tutoriales haciendo
énfasis en los siguientes temas:
a. Manejo de consolas de linux
El manejo de consolas en linux es muy importante y necesario al momento
de desarrollar cada uno de los programas que se propongan, es decir, al
realizar estos programas tenemos que ver varios procesos y ejecutar varias
acciones de manera simultánea, como a la hora de utilizar el simulador
turtlesim necesitábamos varias consolas con propósitos diversos como
ejecución y otra para monitoreo. Esto nos permite tener un control más eficaz
y simplificado de los nodos con los cuales estamos trabajando.
b. Que es colcon, cmake y para qué sirve
Colcon es una herramienta de línea de comandos para mejorar el flujo de
trabajo de construcción, prueba y uso de múltiples paquetes de software.
Automatiza el proceso, gestiona los pedidos y configura el entorno para
utilizar los paquetes. Básicamente Colcon nos permite compilar en ROS para
generar ejecutables, librerías e interfaces, mediante el comando colcon build.
Al ejecutar este colcon se nos genere un workspace. Una de ellas es build
donde se ejecuta colcon para compilar los paquetes en el fichero src, aquí
también se va a encontrar el caché y otros archivos intermedios. Mientras en
la carpeta SRC se guarda todo el código fuente, es donde se puede clonar,
crear o modificar el código de los paquetes que se desea compilar.
Cmake es el sistema de compilación de ROS para compilar paquetes de
software. Cualquier paquete compatible con CMake contiene uno o más
archivos [Link] que describen cómo compilar el código y dónde
instalarlo.
c. Mensajes
La base de funcionamiento de ROS radica en la comunicación entre los
nodos, esta comunicación se hace con diversas arquitecturas pero todas
publican mensajes sobre temas. Entonces un mensaje es una estructura de
datos simple, que comprende campos escritos. Este admite datos primitivos
estándar como enteros, float, boolean, entre otros, de igual manera admite
matrices de estos datos. Los mensajes pueden incluir estructuras y matrices
anidadas arbitrariamente como se trabaja en C.
d. Uso de RQT
RQT es una herramienta gráfica equivalente de ROS 2, que cuenta con una
serie de plugins donde se añaden diversos elementos. Esta provee una
interfaz más amigable para manipular elementos en ROS 2, con la rqt
console se pueden mostrar y filtrar los mensajes, y se ordenan por niveles de
gravedad. En el entorno práctico rqt es una herramienta muy útil que nos
permite ver de manera gráfica las interacciones entre los nodos, realizar
modificaciones a los mismos, monitorear el estado de los nodos y de los
parámetros de los mismos ya sea como tópicos o como servicios, donde
podemos modificar los valores de los servicios de manera más amigable que
si lo hiciéramos como una línea de código en la consola.
e. Cuál es la función de los tópicos
Los tópicos son una forma de comunicación (publisher-subscriber) en ROS,
es una arquitectura asíncrona de tipo productor-consumidor, es decir, el
productor envía un mensaje y no tiene que esperar realimentación del
consumidor para seguir haciendo sus tareas, similar a como trabaja el chat
grupal en Whatsapp. Adicionalmente nos permite conocer la calidad del
servicio, que son una serie de parámetros o características sobre el estado
de la comunicación.
Adicionalmente en esta comunicación puede haber varios productores y
varios consumidores que están enviando mensajes simultáneamente. En
robótica los tópicos resaltan sobre otras arquitecturas debido a su calidad del
servicio (sensores), esto le permite no tener en cuenta información que ya no
es útil por pérdidas en los datos; otra razón es que no es necesario esperar a
que otros nodos realicen una realimentación, sino que se hacen las
operaciones de forma periódica.
f. Qué diferencias encuentran entre el código de c++ y el de python
En cuanto a la diferencia entre Python y C++, la diferencia es bastante
notoria en el caso de Python, ya que su construcción es más rápida, porque
el lenguaje por sí mismo se encarga de muchas cosas y esto facilita mucho
la escritura de código. En el caso de C++ se requiere de mucho código para
hacer una pequeña demostración y se requiere ser más estricto con la
sintaxis del código. Pero, por otro lado, en C++ el código se ejecuta mucho
más rápido, y los errores que se presenten se pueden detectar durante la
compilación del código, por otro lado, Python corre más lento, por el hecho
de que este compila al tiempo que ejecuta, entonces lo errores no se pueden
encontrar hasta el final de la ejecución, lo cual puede generar problemas a la
hora de implementar estos códigos en alguna máquina.
g. Cuales fueron las dificultades encontradas
Al principio hubo unas pequeñas dificultades con la instalación del Foxy, lo
cual no permite ejecutar ningún comando de ROS2, ya que no había mucha
claridad en el github y en los videos no se mostraba esta parte. Al nunca
haber trabajado con este lenguaje los pequeños detalles se convierten en
problemas que no sabemos como solucionar.
Al pasar al segundo ejemplo de “Publisher-Subscriber”, los problemas se
hicieron aún mayores con las instalaciones de python3-colcon-common-
extensions y install python3-rosdep2. Ya que no había claridad en las
instrucciones y la consola mostraba un error frecuente “waiting for cache
lock: could not get lock”, y aunque no hubiera otras aplicaciones trabajando
en descargas ni nada parecido el error persistía, hasta que finalmente
mediante “sudo kill” se pudo cancelar estas operaciones que no se veían y
asi poder instalar los requerimientos iniciales.
Otra dificultad radicó en la parte final del ejemplo, ya que a la hora de
ejecutar el “[Link]”, según las indicaciones del documento no se admitía
el comando, pues se denegaron los permisos.
Finalmente algo que fue un poco complicado para nosotros fue volver a
modificar los archivos para que el simulador Turtlesim se conectara con el
Publisher-Subscriber, ya que al final teníamos en el workspace muchas
carpetas similares y las direcciones no coinciden con las del documento, lo
cual se presta para confusiones.
3. Bono. correcciones realizadas a los tutoriales tendrán bono.
Para los tutoriales recomendamos algunas correcciones ya que presentamos
problemas y confusiones con las instrucciones:
a. En la parte de “programming in python”, a la hora de crear los archivos, el
min_publisher.py aparece en la direccion ~/utadeo _ws/src/py_basic_examp
les/[Link], mientras que el resto de los archivos aparecen en la dirección
~/lms_ws/src/py_basic_examples/[Link]. Lo cual da lugar a confusiones
porque nunca se creó un workspace llamado “lms_ws”.
b. En la parte del testeo se dice que para ejecutar el Publisher-Subscriber es
necesario ejecutar el archivo [Link] que se encuentra en la carpeta
install. Pero se genera un error al hacerlo de esta manera, por los permisos,
por lo cual consideramos que sería buena idea dejar comentado que la forma
de solucionar este error es con . install/[Link].