Simulación y visión de ROS2

22 Modelo URDF

22 Modelo URDF (URDF Modeling)

22.1 Descripción general de URDF

El URDF en ROS 2 es un documento de descripción del modelo de robot escrito en XML para definir los enlaces (link), articulaciones (joint), formas geométricas, inercia másica, sistemas de coordenadas e información sobre los modelos de colisión y visualización del robot. Es la base para las coordenadas TF del robot en ROS 2, la simulación con Gazebo/Ignition, la visualización con RViz, la planificación de movimiento, etc. En resumen, el URDF es el archivo de modelo estándar que utiliza ROS 2 para "mostrar al sistema cómo es el robot y cómo se conectan sus componentes".

22.1.1 Qué es URDF

URDF (Unified Robot Description Format) es un archivo de descripción de robot en formato XML que define la geometría, las articulaciones, la inercia, etc. del robot.

Plain Text Estructura del archivo URDF:

robot.urdf

Elementos raíz

link, definición de enlace

Visual, visualización

Collision, colisión

Inertial, inercia

  • # Definición de articulación Enlace padre Enlace hijo

Transformación

22.2 Composición del robot

Al modelar robots, primero debemos familiarizarnos con su composición general y los parámetros clave. En general, los robots consisten principalmente en cuatro componentes: estructura de hardware, sistema de accionamiento, sistema de sensores y sistema de control. Los tipos de robots comunes en el mercado, ya sean robots móviles o brazos robóticos, pueden desmantelarse y analizarse según estos cuatro módulos constitutivos, sentando las bases para el modelado posterior.

La estructura de hardware son dispositivos sólidamente visibles como chasis, carcasa, motores eléctricos, etc.;

El sistema de accionamiento son dispositivos que pueden accionar el equipo para un uso normal, como controladores eléctricos, sistemas de gestión de energía, etc.;

Los sistemas de sensores incluyen codificadores en motores eléctricos, IMU integradas, cámaras instaladas, radares, etc., permitiendo a los robots percibir su propio estado y el entorno externo;

El sistema de control es el principal vehículo en nuestro proceso de desarrollo, típicamente plataformas de cálculo como Raspberry Pi, computadoras, etc., y los sistemas operativos y aplicaciones internas.

El proceso de modelado del robot es, de forma similar, el proceso de describir cada parte del robot en términos del lenguaje de modelado y combinarlo.

22.3 Sintaxis URDF

22.3.1 Descripción del link

Las etiquetas link se usan para describir la apariencia y propiedades físicas de una parte del cuerpo del robot, incluyendo tamaño, color, forma, propiedades físicas como masa, matriz de inercia, parámetros de colisión, etc.

Por ejemplo, este enlace de brazo mecánico se describe de la siguiente manera:

El nombre en la etiqueta link es el nombre del enlace, y podemos personalizarlo para usarlo en el futuro cuando se conecte el link.

La sección dentro del link describe la apariencia del robot, como:

Este es el archivo stl, que parece el robot real.

Esto representa la desviación de las coordenadas con respecto a la posición inicial, con un desplazamiento horizontal de x, y, z, y rotación de roll, pitch, yaw, todas siendo 0 si no se requiere desviación.

La segunda parte, que describe los parámetros de colisión, parece ser igual a la anterior, con una diferencia mayor.

Parte del enfoque está en describir cómo se ven los robots, que es el efecto visual;

En parte, describe el estado de movimiento robótico, como por ejemplo cómo se considera colisión el contacto del robot con el exterior.

En este modelo robótico, la parte azul está descrita, y en el proceso de control físico, esta apariencia compleja exige más al calcular la detección de colisiones, y para simplificar el cálculo, hemos simplificado el modelo utilizado para la detección de colisiones a la forma cilíndrica de la caja verde, que es la forma descrita en él. Lo mismo ocurre con la desviación del sistema de coordenadas, que puede describir la desviación del corazón rígido.

En el caso de los robots móviles, el link también se puede usar para describir el cuerpo del coche, las ruedas, etc.

22.3.2 Descripción de la articulación joint

Solo cuando los enlaces en el modelo robótico están finalmente conectados a través de las articulaciones pueden generar movimiento relativo.

Hay seis tipos de movimiento de articulaciones en el URDF.

continuous, que describe el movimiento rotacional, puede rotar indefinidamente alrededor de un eje, como por ejemplo una rueda en un coche, que es de este tipo.

La diferencia entre revolute, que también es una articulación de giro, y el tipo continuous, es que no puede rotar indefinidamente, sino que tiene limitaciones de ángulo, como por ejemplo dos enlaces en un brazo mecánico, que pertenecen a este tipo de movimiento.

prismatic, que es una articulación deslizante, puede suavizarse a lo largo de un eje particular y tiene el límite de su ubicación, como ocurre con una potencia de línea general.

Fixed, articulación fija, es la única articulación que no permite el movimiento, aunque todavía se utiliza con más frecuencia, como por ejemplo la cámara, que está instalada en los robots y su posición relativa no cambia, y la conexión utilizada en este momento es Fixed.

Floating son articulaciones flotantes, y la sexta Planar son articulaciones planas, que se usan relativamente poco.

En el modelo URDF, cada link usa una descripción del contenido xml, como el nombre de la articulación, qué tipo de ejercicio.

Etiqueta parent: describe el enlace padre;

Etiqueta child: descripción de un sublink, que se mueve relativo al enlace padre;

origin: la relación entre los dos sistemas de coordenadas, el vector rojo en la imagen, puede entenderse como cómo deberían instalarse juntos los dos sistemas de coordenadas;

axis significa el vector unitario del eje de la articulación, como z igual a 1, que significa que el movimiento rotacional se realiza en la dirección correcta alrededor del eje z;

limit representa algunas de las limitaciones del movimiento, como ubicación mínima, ubicación máxima y velocidad máxima.

22.4 Modelo robótico completo

Eventualmente, todas las etiquetas link y joint completan la descripción y combinación de cada parte del robot, todas en una etiqueta robot, formando un modelo robótico completo.

Por lo tanto, cuando ves un modelo URDF particular, miras los detalles de cada pieza de código, y buscas el link y el joint, y miras de qué está hecho el robot, y conoces la imagen completa, y miras los detalles.

22.5 Importación del brazo mecánico SO-ARM

22.5.1 Clonando repositorios:

bash
cd ~/workspaces/src
git clone https://github.com/brukg/SO-100-arm.git

22.5.2 Proyectos de compilación

bash
# Install dependencies
cd ..
rosdep install --from-paths src --ignore-src -r -y
# Build the package
colcon build --packages-select so_100_arm

22.5.3 Ver brazo mecánico en Gazebo

bash
# Refresh environment variables
source install/setup.bash
ros2 launch so_100_arm rviz.launch.py

22.6 Próximos pasos

Simulación con Gazebo - Aprender simulación física

2.24 Vista previa de cámara - Aprender configuración de cámara

23 Simulación con Gazebo

23 Simulación con Gazebo

23.1 Descripción general de Gazebo

Gazebo es una plataforma de simulación robótica comúnmente utilizada donde se pueden construir entornos virtuales para simular el movimiento robótico, datos de sensores e interacciones físicas en el mundo real (por ejemplo, gravedad, colisión, fricción, etc.). Soporta la importación de modelos robóticos (URDF/SDF) y puede simular una variedad de sensores, como cámaras, radares láser e IMU, y por lo tanto se utiliza con frecuencia en el desarrollo, depuración y prueba de algoritmos robóticos, especialmente en la ecología ROS/ROS2. A través de Gazebo, los desarrolladores pueden validar rápidamente funciones tales como control, navegación y SLAM sin depender de hardware real, reduciendo significativamente los costos y riesgos de desarrollo.

23.1.1 ¿Qué es Gazebo?

Plain Text Estructura de simulación Gazebo:

Gazebo Server

Motor de física (ODE/Bullet) (OGRE) plugin

Interfaz ROS 2

cmd_vel odom scan

23.2 Operaciones de instalación

Instalar gazebo mediante apt

bash
sudo apt install ros-${ROS_DISTRO}-ros-gz

Iniciar gazebo con el siguiente comando

bash
# ros2 launch ros_gz_sim gz_sim.launch.py

El modelo es el siguiente:

23.3 Próximos pasos

1.24 Vista previa de cámara - Aprender configuración de cámara

2.25 Calibración de cámara - Aprender calibración de cámara

24 Vista previa de cámara

24 Vista previa de cámara

24.1 Compilar paquete funcional

bash
cd /opt/seeed/development_guide/12_llm_offline/seeed_ws
colcon build
source install/setup.bash

24.2 Iniciar cámara

Inicie la cámara.

bash
ros2 run camera camera_usb

Ver nodos y tópicos

24.3 Vista previa de imagen

Vea la imagen de la cámara usando rqt: rqt → Plugins → Visualization → Image View

bash
rqt

24.4 Códigos clave

bash
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import cv2

class CameraNode(Node):
  def __init__(self):
  super().__init__('camera_usb')
  self.publisher = self.create_publisher(Image, 'image_raw', 10)
  self.bridge = CvBridge()

  self.cap = cv2.VideoCapture(0)
  if not self.cap.isOpened():
  self.get_logger().error('Unable to open camera')
  return

  self.timer = self.create_timer(0.05, self.timer_callback)

  def timer_callback(self):
  ret, frame = self.cap.read()
  if ret:
  image_msg = self.bridge.cv2_to_imgmsg(frame, encoding="bgr8")
  self.publisher.publish(image_msg)
  else:
  self.get_logger().warn('Failed to capture image')

def main(args=None):
  rclpy.init(args=args)
  node = CameraNode()
  rclpy.spin(node)

  node.cap.release()
  rclpy.shutdown()

if __name__ == '__main__':
  main()

24.5 Próximos pasos

1.25 Calibración de cámara - Aprender calibración de cámara

  1. 26 Visión AR - Aprender visión AR

25 Calibración de cámara

Calibración de cámara

25.1 Resumen de la calibración de cámara

25.1.1 Qué es la calibración de cámara

La calibración de la cámara es el proceso de determinar los núcleos internos (longitud focal, punto principal, factor de aberración) y externos (posición, actitud) de la cámara.

Las cámaras son dispositivos que utilizan imágenes con lentes, y se introducen aberraciones geométricas debido a las propiedades físicas de las lentes. La calibración consiste en describir y compensar estas anomalías mediante modelos matemáticos.

Plain Text Detalles de los parámetros de la cámara:

Intrinsics - Propiedades ópticas inherentes a las cámaras:

  • longitud focal
  • longitud focal del objetivo en unidades de píxeles, determina el tamaño del campo de visión
  • punto principal
  • intersección del eje con el plano de la imagen, generalmente cerca del centro de la imagen Distortion coefficients (coeficientes de distorsión)
  • Distorsión radial (k1, k2, k3) - distorsión de barril/cojín (p1, p2)

Extrinsics - Posición de la cámara en las coordenadas del mundo: Rotation Matrix (matriz de rotación)

  • Descripción de la rotación de las coordenadas de la cámara con respecto a las coordenadas del mundo
  • Vector de traslación (translation vector: 3x1)
  • Descripción del desplazamiento de las coordenadas de la cámara desde el punto de origen hasta las coordenadas del mundo

Núcleos internos de la cámara (Camera Matrix): [fx 0 cx] K = [0 fy cy] (3x3 matrix) [0 0 1]

25.1.2 Por qué calibrar

PropósitoAnotacionesRequisitos de precisión
Distancia visualConvertir distancia de píxeles a distancia realAlta precisión
Reconstrucción 3DInformación 3D restaurada con precisión, Structure from MotionAlta precisión
Colaboración de cámarasFusión de imágenes multicámara, cámara panorámicaPrecisión media-alta
Navegación robóticaPercepción precisa del entorno, odometría visual.Alta precisión
Detección de objetosCorregir el borde del objeto y aumentar la precisión de detecciónPrecisión media
AR/VREl contenido virtual se alinea con precisión con el mundo real.Alta precisión

25.1.3 Tipos de distorsión de cámara

Plain Text Tipos de distorsión:

  1. Distorsión radial (Radial Distortion)

Distorsión de barril (Barrel Distortion)

Distorsión de cojín (Pincushion Distortion)

  1. Distorsión tangencial (Tangential Distortion) El plano de la imagen no es completamente paralelo al plano del objetivo, lo que resulta en

25.1.4 Fundamentos de la calibración

La calibración de cámara se basa en un modelo de cámara estenopeica, que resuelve los parámetros de la cámara mediante la relación conocida entre las coordenadas del mundo (un ángulo en la placa de calibración) y las coordenadas de la imagen (posiciones de píxeles detectadas).

Plain Text Proceso de calibración:

coordenadas del mundo (3D) → externos → coordenadas de la cámara (3D) → internos → proyección 2D [X,Y,Z,1] [x,y,z] K [u,v,1]

Error de reproyección: Indicador de calidad de calibración, calcula las brechas de error en los puntos de reproyección Cuanto menor sea el valor, mejor la calibración.

25.2 Instalación de herramientas de calibración

Instalar paquete de cámara

bash
sudo apt install ros-humble-camera-calibration

25.3 Descargar tablero de cuadrícula

Descargar tablero de ajedrez desde la siguiente dirección

Tablero de ajedrez e imprímelo.

25.4 Ejecutar marcado de cámara

bash
# For 8x6 checkerboard with 25mm squares
ros2 run camera_calibration cameracalibrator --size 8x6 --square 0.025 \
  --ros-args --remap image:=/camera/color/image_raw --remap camera:=/camera/color

Nota: --size 8x6 se refiere al número de ángulos internos (8x6 = 48 ángulos, correspondientes a cuadrículas 9x7) --square 0.025 significa tamaño cuadrado en milímetros (25 mm) La cámara móvil captura imágenes desde diferentes ángulos

Recopila imágenes desde diferentes ángulos, calcula automáticamente los parámetros de la cámara y mantiene los datos de etiquetado en consejos de herramientas.

25.5 Próximos pasos

Una vez completado el estudio de calibración de cámara:

  1. 26 Visión AR - Aprender visión AR y marcadores ARUco