Skip to content

Latest commit

 

History

History
318 lines (217 loc) · 18.6 KB

Ev3ROS.md

File metadata and controls

318 lines (217 loc) · 18.6 KB

Robotica-movil-Lab2-EV3-ROS

Juan Sebastian Daleman

Juan David Chica Garcia

Luis Alejandro Duran Espitia

Santiago Olaya Castaño

Tabla de Contenidos

Conexión Lego EV3 con ROS

Preparación de entorno e intalacion de librerias y paquetes

Creacion del workspace

Para esto crearemos un directrotio que sera nuestro workspace y tendra nuestros archivos de intalación

cd ~
mkdir ev3dev_ros
cd ev3dev_ros
mkdir src
cd src
catkin_create_pkg ev3dev_ros

Instalacion de libreria de python

Para la instalacion de la libreria en python descargaremos los archivos necesarios y haremos la instalcion con los siguientes comandos

cd ~
mkdir librerias
cd ~/librerias/
git clone https://github.com/ev3dev/ev3dev-lang-python.git
cd ~/librerias/ev3dev-lang-python
sudo python3 setup.py install

Creación de SD booteable con ev3dev

Para poder conectar el lego EV3 con ROS primero se necesita tener una memoria SD de minimo 2 GB de alamacenamiento y una antena USB wifi para el robot EV3. Para elegir una SD compatible y un adaptador wifi se recomienda leer las siguientes paginas:

  • Seleccion de SD

  • Antenas wifi compatibles leJos.

  • Antena wifi compatibles con ev3dev

    Para acceder a la programación del robot EV3 por una API diferente a la de lego usamos un booteo de una distribución de Linux Debian desarrollada para el robot conocido como ev3dev este fue desarrollado para el uso de diferentes lenguajes de programación con el robot ev3 como python, micropython, java, C++, C y etc. (Para conocer todos los lenguajes disponibles ver lenguajes de programación).

    Nota: Acabe aclarar que este es un booteo por una unidad de almacenamiento diferente por lo cual no se afecta o modifica el firmware original que posee el bloque ev3.

    Para crear la SD booteable se siguieron los pasos de la pagina de ev3dev SD booteable. Una vez con la antena colocada en el robot y la SD se prende este y se espera que se inicialice el sistema.

Actualización apt

Dado que la imagen del ev3dev puede tener algunos problemas con el apt este se puede actualizar para que coincida con la versión actualizada. Para esto solo debemos el contenido del archivo y pegarlo en el archivo del sistema ev3dev para acceder al archivo se usa el siguiente comando

sudo nano /etc/apt/sources.list

Conexión al PC via wifi

Para esta conexión se puede hacer por dos vias la primera es configurar manualmente la red wifi a la cual se conectara o configurandola por medio del pc por conexión bluethoot o USB. Una vez configurada nos podremos conectar al robot atravez de esta en el PC usando una conexión SSH.Para esto lanzaremos una terminal y mandaremos el siguente comando

ssh robot@<Dirección IP del robot>

Nota: La dirrección IP asignada al robot se puede ver en la parte superior a la izquierda del robot y el password es "maker" se puede usar tambien el comado ssh [email protected] pero al habero otros robots conectados o por configuración DNS de la red wifi puede generar algún error.

Pruebas de motores

Si desea probar el funcionamiento de motores por el terminal puede conectar los motores en los puestos B y C del robot y corra el siguente comando el cual movera las dos ruedas con una velocidad de 50 grados/s sin frenado premero la del motor conectado al puerto C y luego la del motor conectado al puerto C.

  • Prueba movimiento de cada motor
python3 -c "from ev3dev2.motor import LargeMotor, OUTPUT_B, OUTPUT_C; LargeMotor(OUTPUT_B).on_for_seconds(speed=50, seconds=2); LargeMotor(OUTPUT_C).on_for_seconds(speed=50, seconds=2)"
Prueba_movimiento_de_cada_motor.mp4
  • Prueba con frenado
python3 -c "from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C, SpeedPercent, MoveTank; tank_drive = MoveTank(OUTPUT_B, OUTPUT_C); tank_drive.on_for_seconds(left_speed=50, right_speed=50, seconds=5, brake=True)"
Prueba_con_frenado.mp4
  • Giro del robot
python3 -c "from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C, SpeedPercent, MoveTank; tank_drive = MoveTank(OUTPUT_B, OUTPUT_C); tank_drive.on_for_seconds(left_speed=50, right_speed=45, seconds=5, brake=True)"
Giro_del_robot.mp4
  • Frenado suave
python3 -c "from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C, SpeedPercent, MoveTank; tank_drive = MoveTank(OUTPUT_B, OUTPUT_C); tank_drive.on_for_seconds(left_speed=50, right_speed=45, seconds=5); tank_drive.off(brake=True)"

Scripts de prueba con python

En la terminal del robot vamos a crear los directorios de trabajo para nuestros scripts de python con los siguentes comandos

cd ~
mkdir pruebas
cd pruebas/
mkdir python
cd python/
mkdir Mov
cd Mov

ahora en crearemos el scritp inicial el cual lo que hara es que cambiara los leds de color y movera en los dos motores con velocidad del 75% por 5 rotaciones

pythonHello.py

copiaremos el archivo en el directorio del robot

scp pythonHello.py robot@<Dirección IP del robot>:/home/robot/pruebas/python/Mov/

Para correr el script en la terminar del robot le daremos los permisos necesarios al archivo y lo correremos

cd ~/pruebas/python/Mov/
chmod +x pythonHello.py
python3 pythonHello.py
PythonHello.mp4

Otro script que se puede usar para hacer pruebas es el siguiente para una trayectoria de un cuadrado Cuadrado.py o se puede tambien probar el del poryecto de ev3dev PS4Explor3r para control remoto con un control de PS4 PS4Explor3r

  • Cuadrado.py
Cuadrado.mp4

En esta prueba cabe resaltar varias cosas en esta prueba la primera es que como se ve en el video al momento de girar sucede una guiñada ya que el movimiento tiene un control PID interno el cual corrige el movimiento cuando se pasa de la rotación objetivo. Asimismo podemos ver que el movimiento de girar posee un grado de error que si se revisa la documentación de la libreria se puede encontara que es de 2 si no se declara los errores de giros se van acumulando a un grado tal que no se hace un cuadrado en algunas ocaciones sino una especie de rombo o en otros una figura abierta.

  • PS4Explor3r
PS4Explor3r.mp4

Comunicación mqtt

Para poder integrar el robot lego ev3 con ros se buscaron varias formas para comunicarse con ros entre las cualses se encontro la comunicación mqtt la cual sigue una estructura similar a ros donde los elementos que se comunican se conectan a un broker mqtt el cual maneja los mensajes recibios, se manejas topicos en los cuales se pueden publicar mensajes y se puden suscribir para hacer la recepción de mensajes en donde se tiene tiene una escucha permanente para recibir los mensajes dependiendo del QoS del mesnaje se puede tener QoS 0 en donde el mensaje se entrega una unica vez sin mensaje de respuesta de entraga ni almacenamiento sino es entregado se pierde, QoS 1 se asegura la recepción del mensaje se envia el mensaje tantas veces como sea necesario hasta que el receptor confirme la recepción y el QoS 2 se asegura que el mensje siempres sea recibido esperando el emisor un mensaje de confirmación de procesamiento del mensaje para eliminarlo. Las ventajas de esta comunicación es que es de mesajes pequeños con los cuales no se requiere mucho recurso de computo para procesarse, versatilidad en los mensajes y comunicación permitiendo estar conectado a diferentes topicos al tiempo y manejando canales para cada mensaje y que los mensajes controlados tengan varios datos para controlar equipos.

En esta comunicación los equipos que se conectan son conocidos como clientes del broker MQTT para crear este cliente en el PC se uso modulo MQTT PC y para el ev3 se creo el de modulo MQTT EV3 en donde se crean todos los elementos para la creación del cliente y las sucripción y publicación a los topicos necesarios para que se intercomunique por medio del broker, para la recepción de los mesajes en cada caso se crean delegados que según el mesaje jason recibido lo procesaran para generar acciónes en la interfaz o en el robot. Para el control del robot se creo un modulo en python robot_control.py en el cual se tiene la clase del robot y los metodos que este puede realizar y ev3_MQTT.py crea el cliente que estara en ejecución en el robot y el delegado correspondiente. Para el caso del PC se creo el paquete en ROS ev3dev_ros el cual crea el nodo que puede comunicarse con otros nodos en ROS y funciona de puente entre ROS y el broker MQTT. Es de esta forma que la estructura de la comunicación para integrar ros es la siguiente.

Comunicaciónes

Implementación de la comunicación

Creación de broker y modificación de archivos

Lo primero sera crear el broker MQTT para esto usaremos hivemq que nos permite crear un broker gratuito con un trafico maximo de 10 GB que al ser nuestros mensajes tan puqeños y bajo trafico sera más que suficiente y se pueden conectar hasta 100 sesiones al tiempo. Una vez creado iremos a la siguiente pestaña de resumen.

image

De esta sacaremos los datos de Cluster URL y Port los cuales replazaremos de los archivos de modulo MQTT EV3 y GIU_Control para poder conectarnos a nuestro propio broker. Luego iremos a la pestaña Access Management para crear el usurio con contraseña para la seguridad en este caso el usurio y contraseña seran LegoEV301 el cual es el nombre del robot. El nombre dado al robot consiste de dos parte "LegoEV3" + Lego_ID que es un número de identificación que se da en los archivos anteriormente modificados para tener una identificación del robot por si deseamos conectar más robots en la red y manejarlos.

image

Leugo iremos a la pestaña web client en donde ingrsaremos las anteriores credenciales y conectaremos el cliente. Despues nos suscribiremos a todos los topicos para ver todo el trafico esta pestaña es util para verificar el trafico que se esta teniendo y hacer pruebas de mensajes.

image

Carga de archivos al robot

En la terminal de la conexión con el robot crearemos un directorio para los archivos de la conexión y que ejecutaremos mas adelante para controlarlo

cd ~/pruebas/python/
mkdir MQTT
cd ~/pruebas/python/MQTT

luego copiaremos como se ha mostrado anteriormente todos los archivos del robot. Para que funcione correctamente el cliente MQTT usa la libreria de python paho para instalarla en el robot es necesario primero tener el archivo apt del robot actualizado como se mostro en la parte de cración de booteo.

Para instalar la liberia es necesario tener el pip de python en el robot para etso se usan los siguientes comandos

sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python-pip
pip3 --version
pip --version

para intalar la libreria se usa el siguiente comando

sudo pip3 install paho-mqtt
sudo pip install paho-mqtt

Compilación del paquete

los archivos en la carpeta de scripts los copiaremos en el paquete creado de ev3dev_ros de tal forma que quede la siguiente organización de los archivos.

image

Ahora modiifcaremos el archivo CMakeLists.txt agregando al final de este el siguiente codigo y guardamos los coambios

catkin_install_python(PROGRAMS
    scripts/GIU_Control.py
    scripts/mqtt_remote_method_calls.py
    DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )

ya con todos los archivos necesarios y la modificacion compilaremos el paquete

cd ~/ev3dev_ros/
catkin_make
source devel/setup.bash

Ejecucion

Para la ejecución abriremos kitty y lanzaremos cuatro terminales (prar abrir las cuadro abriremos el program y opriremos tres veces ctrl + shift + enter).

  • Primera terminal En esta haremos la conexión shh con el robot para iniciar la ejecución del cliente MQTT para el control de este recordar que la contraseña es "maker"

    ssh [email protected]
    maker
    cd ~/pruebas/python/MQTT
    python3 ev3_MQTT.py
    
  • Segunda terminal En esta iniciaremos el nodo Master de ROS

    roscore
    
  • Tercera terminal En esta inicaremos el nodo de turtlesim

    rosrun turtlesim turtlesim_node
    
  • Cuarta terminal En esta inicaremos nuestro nodo de ros con la GUI

    rosrun ev3dev_ros GIU_Control.py
    

Obteniendo lo mostrado a continuación Terminales

Ya con esto se desplegara la interfaz donde el usuario puede hacer que el robot gire de un lado o a otro además poder ir a adelante o atras, subir o bajar el brazo o solicitar la orientación actual del robot y verla reflejada en la orientación de la tortuga.

GIU

  • Prueba de control del brazo del robot
Control_subir_bajar_brazo.mp4
  • Prueba de controlar orientación del robot
Control_girar.mp4
  • Prueba de controlar desplazamiento
Control_adelante_atras.mp4

Conclusiones de la implementación

  • El usar mensajes por MQTT permite generar un control en el robot facilmente escalable para el manejo de diferentes sensores y de diferentes formas de los motores.
  • La integración con ROS por medio de la comunicación MQTT permite que el robot no sature su procesador interno pemitiendo tener una respuesta rapida a muchos de sus elementos.
  • Dado que la comunicación MQTT no depende de ROS se podria llegar a implementar un nodo parecido de funcionamiento con ROS2.
  • Con el manejo del robot EV3 con esta integracion con ROS se abre la posiblidad de integrarle otros sensores o procesamiento de información para realizar acciones muy grande usando el procesamiento de una computadora como nodo Master de ROS.

Otros links de interes