Cómo usar los paquetes ROS de Stäubli TX60/TX90/TX2-60/TX2-90

En esta guía, le guiaremos por los pasos para usar los paquetes ROS de Stäubli TX60, TX90, TX2-60 y TX2-90 para aplicaciones robóticas. Estos paquetes proporcionan herramientas y funcionalidades esenciales para interactuar con robots Stäubli mediante el Robot Operating System (ROS).

NOTA: El soporte de ROS para estos robots es muy experimental y puede no cubrir todas las funciones o ser estable. Úselo bajo su propia responsabilidad.

Los repositorios relevantes son staubli_experimental y staubli (este último es solo para paquetes de soporte).

Actualmente, la rama principal de este repositorio solo soporta ROS1 Noetic. Si desea usar ROS2, esta publicación no es para usted.

Dockerfile

Primero, creamos el Dockerfile para configurar el entorno. Cree un archivo llamado Dockerfile con el siguiente contenido:

Dockerfile
# Usar la imagen oficial de ROS 1 Noetic
FROM ros:noetic

RUN apt-get update && apt-get install -y \
    git \
    python3-catkin-tools \
    python3-rosdep \
    # Herramientas y bibliotecas comunes de ROS a las que hacen referencia las claves de rosdep
    ros-noetic-roslaunch \
    ros-noetic-catkin \
    ros-noetic-xacro \
    ros-noetic-rviz \
    ros-noetic-joint-state-publisher-gui \
    ros-noetic-moveit \
    ros-noetic-ros-control \
    ros-noetic-ros-controllers \
    ros-noetic-gazebo-ros \
    ros-noetic-gazebo-ros-control \
    && rm -rf /var/lib/apt/lists/*

# Inicializar rosdep (ROS 1)
RUN rosdep update

# Crear un espacio de trabajo catkin
RUN mkdir -p /catkin_ws/src
WORKDIR /catkin_ws

# Clonar el repositorio principal de Staubli (contiene staubli_resources) en el espacio de trabajo
RUN git clone https://github.com/ros-industrial/staubli.git src/staubli

# Clonar el repositorio staubli_experimental (paquetes de soporte para ROS 1)
RUN git clone https://github.com/ros-industrial/staubli_experimental.git src/staubli_experimental

# Instalar dependencias opcionalmente usando rosdep (no fatal si faltan algunas claves)
RUN rosdep install --from-paths src --ignore-src -y || echo "rosdep could not resolve some keys; proceeding because core dependencies are already installed."

# Construir el espacio de trabajo (permitir que staubli_rx160_moveit_plugins falle, pero continuar)
RUN . /opt/ros/noetic/setup.sh && \
    catkin build --continue-on-failure || echo "catkin build completed with some package failures (e.g. staubli_rx160_moveit_plugins), but core support and resources built."

# Cargar el espacio de trabajo
ENV source="/catkin_ws/devel/setup.bash"

# Copiar scripts auxiliares a la imagen
COPY generate_all_urdfs.sh /usr/local/bin/generate_all_urdfs.sh
RUN chmod +x /usr/local/bin/generate_all_urdfs.sh

CMD ["bash"]

Además, cree generate_all_urdfs.sh con el siguiente contenido para generar archivos URDF para todos los robots soportados:

generate_all_urdfs.sh
#!/usr/bin/env bash
set -euo pipefail

# Generar URDFs para todos los robots experimentales de Staubli usando xacro.
# Asume que ROS y el espacio de trabajo catkin ya están cargados, por ejemplo:
#   source /opt/ros/noetic/setup.bash
#   source /catkin_ws/devel/setup.bash

out_dir="${1:-/tmp/staubli_urdfs}"
mkdir -p "${out_dir}"

echo "Writing URDFs to: ${out_dir}"

# staubli_tx60_gazebo (solo xacros de nivel superior, las macros son internas)
xacro "$(rospack find staubli_tx60_gazebo)/urdf/tx60.xacro"  > "${out_dir}/tx60_gazebo.urdf"
xacro "$(rospack find staubli_tx60_gazebo)/urdf/tx60l.xacro" > "${out_dir}/tx60l_gazebo.urdf"

# staubli_tx60_support
xacro "$(rospack find staubli_tx60_support)/urdf/tx60.xacro"  > "${out_dir}/tx60_support.urdf"
xacro "$(rospack find staubli_tx60_support)/urdf/tx60l.xacro" > "${out_dir}/tx60l_support.urdf"

# staubli_tx2_60_support
xacro "$(rospack find staubli_tx2_60_support)/urdf/tx2_60.xacro"  > "${out_dir}/tx2_60.urdf"
xacro "$(rospack find staubli_tx2_60_support)/urdf/tx2_60l.xacro" > "${out_dir}/tx2_60l.urdf"

# staubli_tx2_90_support
xacro "$(rospack find staubli_tx2_90_support)/urdf/tx2_90.xacro"  > "${out_dir}/tx2_90.urdf"
xacro "$(rospack find staubli_tx2_90_support)/urdf/tx2_90l.xacro" > "${out_dir}/tx2_90l.urdf"
xacro "$(rospack find staubli_tx2_90_support)/urdf/tx2_90xl.xacro" > "${out_dir}/tx2_90xl.urdf"

# staubli_tx90_support
xacro "$(rospack find staubli_tx90_support)/urdf/tx90.xacro"  > "${out_dir}/tx90_support.urdf"
xacro "$(rospack find staubli_tx90_support)/urdf/tx90l.xacro" > "${out_dir}/tx90l_support.urdf"
xacro "$(rospack find staubli_tx90_support)/urdf/tx90xl.xacro" > "${out_dir}/tx90xl_support.urdf"

# staubli_rx160_gazebo
xacro "$(rospack find staubli_rx160_gazebo)/urdf/rx160.xacro"  > "${out_dir}/rx160_gazebo.urdf"
xacro "$(rospack find staubli_rx160_gazebo)/urdf/rx160l.xacro" > "${out_dir}/rx160l_gazebo.urdf"

echo "All Staubli experimental URDFs generated successfully."

Desde la raíz de este espacio de trabajo (donde se encuentra el Dockerfile), ahora ejecute:

build_staubli_docker.sh
docker build -t staubli-noetic .

Para acceder a una shell de ROS1:

run_staubli_shell.sh
docker run --rm -it staubli-noetic bash -lc "source /opt/ros/noetic/setup.bash && source /catkin_ws/devel/setup.bash && bash"

Generación de URDF

Desde su host, en la raíz del espacio de trabajo (donde se encuentra el Dockerfile), ejecute:

generate_all_urdfs_docker.sh
docker run --rm \
    -v "$PWD":/out \
    staubli-noetic bash -lc "\
        source /opt/ros/noetic/setup.bash && \
        source /catkin_ws/devel/setup.bash && \
        generate_all_urdfs.sh /tmp/staubli_urdfs && \
        cp /tmp/staubli_urdfs/*.urdf /out/"

Este comando generará los archivos URDF para todos los robots Stäubli soportados y los copiará a su directorio actual en el host.

Si desea generar manualmente URDFs para un robot específico, puede ejecutar un comando como este (ejemplo para TX90) en el contenedor:

generate-tx60-urdf.sh
xacro $(rospack find staubli_tx60_gazebo)/urdf/tx60.xacro > /tmp/tx60_gazebo.urdf

Ejecución de Gazebo

En su host, permita clientes X locales y exponga su pantalla al contenedor (Linux):

setup-x-forwarding.sh
xhost +local:root

Luego inicie un contenedor con reenvío X y lance la demo de Gazebo TX90 (el archivo de lanzamiento correcto es tx90_gazebo.launch):

gazebo-tx90.sh
docker run --rm \
    -e DISPLAY=$DISPLAY \
    -e QT_X11_NO_MITSHM=1 \
    -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
    staubli-noetic bash -lc "\
        source /opt/ros/noetic/setup.bash && \
        source /catkin_ws/devel/setup.bash && \
        roslaunch staubli_tx90_gazebo tx90_gazebo.launch"

Esto debería abrir Gazebo en su host con el robot TX90 cargado.

Gazebo TX90.avif


Echa un vistazo a artículos similares por categoría: Robotics, Experimental