Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

robot_pointcloud

Rover de 4 ruedas directrices con dos cámaras de profundidad en las esquinas delanteras, y visualización en RViz de las dos nubes de puntos referidas al mismo base_link del rover.

  • Intel RealSense D435 (sin IMU), esquina delantera izquierda → nube a color en /camera/camera/depth/color/points
  • Intel RealSense D415, esquina delantera derecha → nube a color en /d415/d415/depth/color/points

ROS 2 Jazzy · Ubuntu 24.04.

Árbol de TF

base_footprint                 (proyección en el suelo, raíz)
  └── base_link                (chasis del rover, 0.44 m sobre el suelo)
        ├── camera_link                        RealSense D435 (joint fijo del URDF)
        │     └── camera_depth_optical_frame   → /camera/camera/depth/color/points
        ├── d415_link                          RealSense D415 (joint fijo del URDF)
        │     └── d415_depth_optical_frame     → /d415/d415/depth/color/points
        └── fl/fr/rl/rr_steering_link → *_wheel_link

El rover se describe en urdf/rover.urdf.xacro (mallas STL en urdf/assets/), que publica su modelo y su TF en /robot_description con robot_state_publisher. Las ruedas y la dirección son joints móviles, así que un joint_state_publisher los publica a cero (rover parado, ruedas rectas).

Uso

# Las dos cámaras + modelo del rover + RViz
ros2 launch robot_pointcloud robot_pointcloud.launch.py

# Sin la D415 derecha (por ejemplo, si no está conectada)
ros2 launch robot_pointcloud robot_pointcloud.launch.py d415:=false

# Sin la D435 izquierda
ros2 launch robot_pointcloud robot_pointcloud.launch.py d435:=false

# Sin RViz (solo drivers + TF)
ros2 launch robot_pointcloud robot_pointcloud.launch.py rviz:=false

Argumentos del launch

Argumento Default Descripción
d435 true Arrancar la D435 (esquina delantera izquierda).
d415 true Arrancar la D415 (esquina delantera derecha).
rviz true Abrir RViz con el rover y las dos nubes precargados.
align_depth false Alinear profundidad al color (caro en CPU; la nube a color no lo necesita).
rs_depth_profile 640x480x15 Perfil de profundidad de la D435 (WxHxFPS).
rs_color_profile 640x480x15 Perfil de color de la D435 (WxHxFPS).
d415_depth_profile 640x480x15 Perfil de profundidad de la D415 (WxHxFPS).
d415_color_profile 640x480x15 Perfil de color de la D415 (WxHxFPS).
rs_device_type d435 Modelo que debe abrir el driver izquierdo (regex).
d415_device_type d415 Modelo que debe abrir el driver derecho (regex).
rs_serial_no (vacío) Serial de la D435 (vacío = cualquiera del modelo).
d415_serial_no (vacío) Serial de la D415 (vacío = cualquiera del modelo).

Cómo se montan las cámaras

En el URDF, no en el launch. Los links de las cámaras se llaman igual que el frame raíz que publica cada driver (camera_link, d415_link), así que el robot_state_publisher del rover ya les da padre: no hay static_transform_publisher en ningún sitio. Para re-apuntarlas, edita solo estas propiedades en urdf/rover.urdf.xacro:

Propiedad Valor Qué es
mount_x 0.27 Media anchura del chasis: ±X de las esquinas delanteras.
mount_y -0.62 Y de la cara delantera (adelante es −Y en base_link).
mount_z 0.08 Altura sobre base_link (≈0.52 m del suelo, libra ruedas).
cam_pitch 30° Cabeceo hacia abajo, para ver el camino cercano.
cam_splay 15° Cuánto abre cada cámara hacia su lado respecto del frente.

El eje óptico es el +X del frame *_link, y en base_link (que viene del CAD) adelante es −Y, por eso el yaw de referencia es −90°: cada cámara queda en yaw = −90° ∓ cam_splay (D435 −105°, D415 −75°).

El par es simétrico: mismo cam_splay para las dos, así que la escena queda espejada respecto del eje longitudinal del rover. Con 15° las dos se solapan bastante al frente (sin punto ciego delante) a costa de menos cobertura lateral; subir cam_splay abre el abanico y reduce el solape.

Las posiciones (mount_*) y el cabeceo salen de urdf/my_robot.urdf (el URDF de simulación del rover, con inercias, sensores de Gazebo, ros2_control, lidar/IMU/GPS). Ahí el par no era simétrico: 37.5° la #1 y 15° la #2.

Dos RealSense a la vez

Ambas usan el mismo driver (realsense2_camera), así que hay dos cosas que separarlas:

  1. Qué cámara abre cada nododevice_type, una regex sin distinguir mayúsculas contra el nombre del dispositivo (Intel RealSense D435). Por eso los defaults son d435 y d415. Si algún día montas dos cámaras del mismo modelo, esto ya no basta: mira los seriales con rs-enumerate-devices -s y pásalos en rs_serial_no / d415_serial_no.
  2. Que no se pisen topics ni frames → la derecha corre con camera_name/camera_namespace = d415. El driver prefija los frames con ese nombre, de ahí d415_link y d415_depth_optical_frame, y los topics quedan bajo /d415/d415/.... La izquierda conserva el nombre por defecto (camera).

Notas

  • Necesita las dos cámaras conectadas por USB (o d435:=false / d415:=false si falta alguna).
  • Ancho de banda USB: repártelas en controladores USB distintos (lsusb -t) y, si ves tirones, baja los perfiles (*_depth_profile / *_color_profile) antes que cualquier otra cosa.
  • urdf/my_robot.urdf y urdf/venture_robot.urdf son los URDF de simulación del rover y no los usa este paquete; quedan como referencia de la geometría y de las poses de montaje.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages