Paquete de ROS para control y simulacion de robot ev3 con sistema ev3dev.
📖 Tabla de Contenidos
Este paquete consta de 5 paquetes los cuales son:
-
🎛️ controls: Este paquete tiene el nodo para hacer control del flujo de datos. Debem implementar controladores y elementos de control de los datos en este paquete.
-
✈️ ev3_launch_pkg: Este paquete es el que controla los archivos .launch generales con los cuales se lanzan los nodos de cada uno de los paquete y archivos .launch de cada uno simultaneamente. -
🎮 gui: Este paquete tiene la interfaz grafica de controles para el usuario tanto como aplicacion idependiente como plugin para RQT.
-
📨 mqtt: Este paquete tiene el nodo de protocolo MQTTel cual tiene tambien procesamiento de los mensajes que se reciben del broker MQTT y envio de mensajes.
-
🚗 ugv_description: Este tiene la descripcion del robot para su simulación y caracteristeicas de la escena de simulacion.
- Ubuntun 20.04: Se puede usar en una maquina virtual, una imagen de docker, como instalacion nativa o el WSL con Windows 11.
- ROS noetic: Se recomienda usar la intalacion completa.
- Gazebo 11.15.1
- RQT 0.5.3
- RVIZ 1.14.25
- Python 3.8.10
Note
Con la versión completa de ROS vienen preinstalados Gazebo, RQT y RVIZ. En linux por defecto viene una version de python
Intalaremos el pip de python para esto se usa el siguente commando
sudo apt update
sudo apt install python3-pip
pip --versionTip
Si deseas saltarte la instalacion de bibliotecas una por una y asegurarte de tener las versiones con las cuales se creo este paquete puedes usar el comando pip3 install -r requirements.txt del paquete para instalar todas las bibliotecas.
Para el correcto funcionamiento de todo el paquete se necesitan algunas bibliotecas como:
Esta bibliteca permite el uso de QT como framework desde python para la creacion de interfaces graficas con esta se creo la aplicacion y el plugin en RQT.
pip install PyQt5Esta biblioteca contine los elementos necesarios para crear la comunicación mqtt con el broker y generar todo el protocolo.
pip install paho-mqttNos aseguramos que esten instaladas las dependencias para que funcione el plugin creado en RQT.
sudo apt-get install ros-noetic-rqt-gui
sudo apt-get install ros-noetic-rqt-gui-pyNos aseguramos de tener todos los paquetes necesarios para la simulacion con ros.
sudo apt-get update
sudo apt-get install ros-noetic-ros-control ros-noetic-ros-controllers ros-noetic-gazebo-msgs
sudo apt-get install ros-noetic-gazebo-ros ros-noetic-gazebo-ros-control
sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-laser-geometry
sudo apt-get install ros-noetic-tf-conversions ros-noetic-tf2-geometry-msgs
sudo apt-get install ros-noetic-joint-state-controller ros-noetic-effort-controllers
sudo apt-get install ros-noetic-position-controllers ros-noetic-velocity-controllers
sudo apt-get install ros-noetic-robot-state-publisher ros-noetic-joint-state-publisher
sudo apt-get install ros-noetic-joint-state-publisher-guiEn cada uno de los archivos para su manejo dinamico con diferentes robots se tiene que el parametro robot_id para dar el número de identidicacion de cada robot con lo cual se crea su nombre para los topicos usados y los topicos mqtt siendo asi el nombre del robot LegoEv3XX donde XX es el número de identificación.
🚀 launch
En este se lanza el nodo de forward_kinematic el cual le da a la simulación de gazebo los parametros de velocidades del robot y el nodo de controller para recibir los mensajes de velocidades de ruedas del robot de la interfaz y mandarlas al nodo mqtt.
Este lanza todos los nodo de control.
📄 scripts
En este nodo se puede hacer control de los valores y parametros ingresados a la interfaz y procesasarlos antes de mandarlos al robot
| Subscribe | Publica |
|---|---|
| LegoEv3XX/drive_control | LegoEv3XX/wheels_vel |
| LegoEv3XX/drive_control/vel_control | LegoEv3XX/command |
| LegoEv3XX/command_control |
Usando la cinematica directa del robot permite encontrar el valor de sus valocidades lineal y angular apartir de la velocidad de las ruedas. /odom_kinematic se puede ver la pose del robot y velocidades mientras que en /cmd_vel_kinematic solo las velocidades.
| Subscribe | Publica |
|---|---|
| LegoEv3XX/wheels_vel | LegoEv3XX/odom_kinematic |
| LegoEv3XX/cmd_vel_kinematic |
Usando la cinematica inversa del robot permite encontrar el valor de la velocidad de cada rueda apartir de la velocidad lineal y angular que tiene.
| Subscribe | Publica |
|---|---|
| LegoEv3XX/cmd_vel | LegoEv3XX/wheels_vel_kinematic |
| LegoEv3XX/odom |
🚀 launch
Este paquete solo tiene archivos launch para lanzar de forma simultanea todos los nodos para el funcionamiento del paquete.Lanza todos los nodos incluyendo los de simulacion del robot adicionalmente aca se tiene la asignacion el aparametro robot_id.
Lanza los nodos necesarios para teleoperar el robot y asigna el parametro de robot_id.
🚀 launch
Lanza el nodo del plugin de rqt en una ventana solo en donde solo se ve la interfaz grafica creada.
Lanza el nodo como una aplicacion de PyQT independiende.
Lanza el nodo de rqt y carga la perspectiva con el plugin de rqt creado.
🛠️ resource
Es el archivo donde se tiene la perspectiva del plugin para no tener que cargarlo cuando se inicia rqt.
Es el archivo que carga el plugin a rqt para poder usarlo en el junto a detalles como el nombre de presentacion de este en la interfaz y el icono de este.
📄 scripts
Crea la ventna principal para el funcionamiento de la interfaz como aplicacion e importa todos los elementos de la GUI.
Carga el plugin para funcionar en la ventana de rqt
💾 src
En esta carpeta se tiene todos los elementos de la gui para su fucnionamiento.
- 🎮🔧 controls: Estan los archivos para el control de elementos como botones y teclas. Además de el conversor de unidades para pasar de rpm a rad/s. En estos estan los topicos para el control del robot tanto en
keys.pyybuttons.py.
| Subscribe | Publica |
|---|---|
| LegoEv3XX/gyro_sensor | LegoEv3XX/drive_control |
| LegoEv3XX/vel_control | |
| LegoEv3XX/command_control |
-
🪄🖌️🎨 styles: Esta el archivo que genera los estilos para los elementos de la intefaz como: frame, botones, entradas de texto, etiquetas de texto y layouts.
-
🎆🖼️🏙️ views: Estan los archivos que controlan los elementos que se veran como los frames y menus junto a la estructura de estos.
-
🖼️🖥️🔧 gui.py: Tiene las clases de creacion de ventana de visualizacion para la aplicacion independiente y widget para el plugin usado en rqt.
-
🔧🧩🛠️ rqt_plugin.py Tiene la clase para la definición grafica de los elementos graficos y logicos del plugin.
🚀 launch
Tiene el archivo lanzador para el nodo de mqtt.📄 scripts
Tiene el archivo para crear la conexión con el broker mqtt, la asignacion del delegado de mensajes entrantes que se usa junto a la tranforamacion de los mensajes recibidos por la interfaz a formato jason para su publicacion en el broker. Transformacion de unidades usadas en ros (rad/s) a las usadas por el robot (rpm) en los mensajes mandados.| Subscribe | Publica |
|---|---|
| LegoEv3XX/wheels_vel | LegoEv3XX/mqtt_message |
| LegoEv3XX/command | LegoEv3XX/gyro_sensor |
💾 src
Tiene la clase que se le delegan los mensajes entrantes las funciones de esta clase son los comandos recibidos de los mensajes mqtt y la lista de parametros que son los parametros de cada función.
Tiene los elementos del protocolo mqtt, la creacion de los topicos de suscripcion y publicación en el broker mqtt, comportamientos de conexión, publicacion y suscipción.
🚀 launch
En el archivo de lanzamiento se especifica el lanzamiento de gazebo, del modelo del robot a usar junto a su posición con respecto al marco global, la definicion del mundo usado, lanzamiento de nodo de estado del robot y de riviz con la configuración previamente guardada de este.🧵🕸️ meshes
En esta carpeta se tienen los archivos de las mallas usadas para los modelos visuales del chasis del robot y las ruedas. En la carpeta collada y wavefront estan los archivos en su formato correspondiente (.dae y .obj)🔍🧰 rviz
Se tiene el archivo con la configuración de rviz para no tener que configurarlo manualmente con TF y robot model y el frame de odom.🤖🩻🦴 urdf
En este archivo se define el nombre del robot para gazebo, se dan las propiedades fisicas para los eslabones del robot y se improta el plugin de gazebo para robots diferenciales definiendo fuente de odometria, topicos de odometria y comandos, tranformaciones de las ruedas, ruedas, diametros de ruedas, trocha del robot, torque y aceleración de las ruedas.
En este archivo se define la configuración del robot, definición visual, de colición e inercia de cada parte del robot, relación entre eslabones y tipos de uniones.
🌏🖼️🏙️ worlds
Se tiene el archivo de configuración del mundo del robot como condiciones de iluminación de la escena, modelo del mundo, motor de fisica y propiedades de este.En esta prueba se verifica el funcionamiento de la teleoperación del robot mediante la interfaz desarrollada como plugin de rqt.
roslaunch ev3_launch_pkg ev3_teleop.launchEn esta prueba se verifica el funcionamiento de la teleoperación del robot mediante la interfaz desarrollada como aplicación y el complemento (plugin) de rqt. Para ello, es necesario descomentar la siguiente línea del archivo ev3_teleop.launch del paquete ev3_launch_pkg:
<!-- include file="$(find gui)/launch/gui.launch"/-->Una vez guardado el archivo y recompilado el paquete, se debe ejecutar la siguiente línea de código:
roslaunch ev3_launch_pkg ev3_teleop.launchEn esta prueba se verifica el funcionamiento de la teleoperación del robot mediante la interfaz desarrollada como complemento (plugin) de rqt, junto con la simulación en RViz, donde se visualizan las características de los marcos de referencia de cada parte del robot, y la simulación en Gazebo, que permite observar el comportamiento del robot en un entorno virtual equivalente al mundo real.
roslaunch ev3_launch_pkg ev3_teleop_simulate.launch🧰🛠️ Problema visualizacion RVIZ
Si usas un ubuntu nativo o por maquina virtual rviz no deberia presentar problemas de visualización como si lo hace el wls en windows. Esto se debe a que no se esta usando OpenGL para renderizar o tenga un conflicto con los drivers del computador. Para solucionar esto sigue los siguientes pasos:- Verifica tener OpenGL habilitado en caso de no aparecer nada instala lo y reinicia la simulación.
glxinfo | grep "OpenGL"sudo apt update
sudo apt install mesa-utils
glxinfo | grep "OpenGL" #renderer string muestra la funte para renderizar debe aparecer tu tarjeta grafica- Si aun presentas el problema puede ser una incompatibilidad de drivers dentro del wls para esto prueba forzando el renderizado por cpu.
LIBGL_ALWAYS_SOFTWARE=1 rviz
- Con eso se abrira una nueva escena en rviz usando el boton "add" agregando "TF" y ""RobotModel" y en fixed frame "odom".
- Si con el paso anterior se resolvio el problema recomiendo que guardes la configuracion en el ~/.bashrc o ~/.zshrc
cd ~
nano ~/.bashrc # ~/.zshrc en caso de que uses Zsh#Al final del archivo guarda la configuracion
export LIBGL_ALWAYS_SOFTWARE=1#Aplica los cambios
source ~/.bashrc # O ~/.zshrc si usas Zsh