Modelado y simulación — Práctica 3

Modelado y simulación
de robot

Modelo de robot móvil con brazo manipulador, escena de simulación en Gazebo, visualización en RViz y análisis de datos capturados con rosbag.

Contenido

La tarea

La práctica consiste en modelar e incluir el robot en el ecosistems ros2 para desppues teleoperarlo para ejecutar una secuencia de tres acciones. La manipulación se realiza con el plugin MoveIt y la navegación de la base con teleop_twist_keyboard publicando comandos de velocidad en /cmd_vel.

1
Recoger cubo verde

Posicionado frente al robot. El brazo se telecopera con MoveIt hasta asir el cubo y depositarlo en el compartimento del robot.

2
Recoger cubo azul → apilar sobre cubo rojo

El cubo azul se encuentra a la izquierda. Con el brazo se recoge y se coloca sobre el cubo rojo situado a la derecha del robot.

3
Avanzar 10 m en línea recta

Mediante teleop_twist_keyboard se publica velocidad lineal positiva en X hasta completar 10 metros de trayectoria rectilínea.

Captura de datos con rosbag

ros2 bag record /cmd_vel /imu /joint_states \
     -o practica3_amanza17
    

El rosbag captura los tres topics durante toda la ejecución de la secuencia.


Rosbag

p3_amanza17.zip
4.3 MB · Topics: /cmd_vel · /imu · /joint_states

Capturas RViz

Captura de RViz mostrando el robot con los TFs visibles, la interfaz de joint_state_publisher_gui activa y al menos tres articulaciones desplazadas respecto a su posición de reposo.

Captura RViz 1
RViz 1Captura del robot en RViz con el robot model cargado y alguna articulacion desfasada.
Captura RViz 2
RViz 2Captura del arbol de TFs en RViz sin el robot model cargado y alguna articulacion desfasada.
Captura RViz 3
RViz 3Captura del arbol de TFs en RViz sin el robot model cargado y alguna articulacion desfasada. Incluye nombres de las TFs.
Captura RViz 4
RViz 4Captura del arbol de TFs en RViz sin el robot model cargado y alguna articulacion desfasada. Incluye nombres de las TFs con zoom.
Captura RViz 5
RViz 5Captura del robot en RViz con el robot model cargado y todas las articulaciones centradas.
Captura RViz 6
RViz 6Captura del arbol de TFs en RViz sin el robot model cargado y todas las articulaciones centradas.
Captura RViz 7
RViz 7Captura del arbol de TFs en RViz sin el robot model cargado y todas las articulaciones centradas. Otra perspectiva.

Galería Gazebo

Capturas tomadas en Gazebo durante la ejecución de la práctica.

Gazebo: escena inicial con cubos
Cogiendo cubo verdeEl robot sujeta el cubo verde.
Gazebo: cubo verde sujetado por el robot
Cubo verde sobre el depositoEl robot sujeta el cubo verde sobre el compartimento.
Gazebo: cubo verde colocado en el robot
Cubo azul antes de bajar hacia el rojoEl cubo azul está sobre la posición de hold.
Gazebo: aproximación al cubo rojo
Aproximación al cubo rojoPunto de contacto del cubo azul y el rojo.
Gazebo: cubo azul sobre cubo rojo
Cubo azul sobre el rojoEl cubo azul aparece colocado sobre el cubo rojo, completando la fase de apilado.
Gazebo: desplazamiento hacia el cubo rojo
Pick del cubo azulCubo azul en el aire agarrado por el gripper
Gazebo: maniobra con cubo azul
Vista cenital de aproximaciónVista durante el teleop hacia el cubo rojo con el cubo azul en el aire.
Gazebo: cubo rojo en el extremo del brazo
Ajuste antes del apiladoEl brazo queda alineado con la zona del cubo rojo antes de soltar el cubo azul.
Gazebo: cubo azul encima del cubo rojo
Apilado desde vista lateralEl cubo azul aparece apoyado sobre el cubo rojo desde una perspectiva lateral.

Visor URDF 3D

Por fallos de orientación/carga en las meshes dg, da, ig e ia, no se muestran en el visor. Se mantienen como enlaces fijos dentro de la jerarquía del URDF.

+
Cargando urdf/modelo.urdf

Árbol de transformadas

El árbol TF representa las relaciones geométricas entre cada frame del robot. Se genera con:

ros2 run tf2_tools view_frames
      

Abrir PDF del árbol TF


Gráficas

01 — Posición de ruedas vs tiempo
Seleccionar gráfica local Gráfica de posición de ruedas vs tiempo

Análisis

La gráfica muestra el ángulo acumulado (en radianes) de cada rueda del robot a lo largo del tiempo. Durante las fases de manipulación con el brazo, las ruedas permanecen bastante estáticas (quitando algún ligero ajuste). Al iniciarse la fase de desplazamiento rectilíneo de 10 m, se observa un incremento lineal y simétrico en ambas ruedas, indicando movimiento hacia adelante sin giro. Cualquier asimetría transitoria refleja correcciones durante la teleoperación. Aunque se ha tomado la información de las 6 ruedas, las 3 de la derecha se mueven igual entre sí, y lo mismo pasa con las 3 de la izquierda, por eso se presentan dos lineas únicamente.

02 — Aceleración vs tiempo (IMU)
Seleccionar gráfica local Gráfica de aceleración vs tiempo de la IMU

Análisis

Los datos de la IMU reflejan la aceleración lineal del chasis. En reposo se aprecia la componente gravitatoria en Z (~9.81 m/s²). Los picos transitorios en X corresponden a los arranques y paradas de la base durante la teleoperación. Los movimientos del brazo introducen vibraciones de alta frecuencia de baja amplitud, visibles como ruido sobre la señal base. La fase de avance rectilíneo muestra una aceleración positiva inicial seguida de valor cercano a cero en régimen estacionario.

03 — Gasto (esfuerzo de joints) vs tiempo
Seleccionar gráfica local Gráfica de gasto vs tiempo

Análisis

El campo effort de /joint_states representa el par (torque) aplicado en cada articulación. Durante la recogida del cubo verde se detectan picos de esfuerzo en los joints distales del brazo al soportar el peso del objeto. Al apilar el cubo azul sobre el rojo, el esfuerzo aumenta en los joints proximales que deben compensar el momento de inercia del brazo extendido. Durante el avance de 10 m, el esfuerzo en los joints del brazo se deberia mantener aproximadamente constante, aunque nos damos cuenta de que no es asi, sino a reves, hay un pico de esfuerzo, esto, seguramente sea por el arranque a velocidad alte (subí la velocidad del teleop) y seguramente haya hecho que el brazo tambalee y por eso genere tanto gasto.


Comandos de lanzamiento

Lanzar simulación

ros2 ros2 launch rover_description partea.launch.py
    

Lanzar moveit

ros2 ros2 launch rover_moveit_description move_group.launch.py
    

Lanzar simulación

ros2 ros2 launch rover_description controllers.launch.py
    

Control de la base

ros2 ros2 run teleop_twist_keyboard teleop_twist_keyboard 
    

Extraer datos de la rosbag

ros2 ros2 launch tools plot.launch.py 
  

Graficar csvs

ros2 python3 plot.py