Wie man Stäubli TX60/TX90/TX2-60/TX2-90 ROS-Pakete verwendet

In diesem Leitfaden führen wir Sie durch die Schritte zur Verwendung der Stäubli TX60-, TX90-, TX2-60- und TX2-90-ROS-Pakete für robotische Anwendungen. Diese Pakete bieten wesentliche Werkzeuge und Funktionen, um mit Stäubli-Robotern über das Robot Operating System (ROS) zu interfacen.

HINWEIS: Die ROS-Unterstützung für diese Roboter ist sehr experimentell und deckt möglicherweise nicht alle Funktionen ab oder ist nicht stabil. Verwendung auf eigene Gefahr.

Die relevanten Repositories sind staubli_experimental und staubli (letzteres ist nur für Support-Pakete).

Aktuell unterstützt der Hauptbranch dieses Repos nur ROS1 Noetic. Wenn Sie ROS2 verwenden möchten, ist dieser Beitrag nicht für Sie.

Dockerfile

Zuerst erstellen wir das Dockerfile, um die Umgebung einzurichten. Erstellen Sie eine Datei namens Dockerfile mit dem folgenden Inhalt:

Dockerfile
# Use the official ROS 1 Noetic image
FROM ros:noetic

RUN apt-get update && apt-get install -y \
    git \
    python3-catkin-tools \
    python3-rosdep \
    # Common ROS tools and libraries that rosdep keys refer to
    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/*

# Initialize rosdep (ROS 1)
RUN rosdep update

# Create a catkin workspace
RUN mkdir -p /catkin_ws/src
WORKDIR /catkin_ws

# Clone the main Staubli repository (contains staubli_resources) into the workspace
RUN git clone https://github.com/ros-industrial/staubli.git src/staubli

# Clone the staubli_experimental repository (ROS 1 support packages)
RUN git clone https://github.com/ros-industrial/staubli_experimental.git src/staubli_experimental

# Optionally install dependencies using rosdep (non-fatal if some keys are missing)
RUN rosdep install --from-paths src --ignore-src -y || echo "rosdep could not resolve some keys; proceeding because core dependencies are already installed."

# Build the workspace (allow staubli_rx160_moveit_plugins to fail, but continue)
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."

# Source the workspace
ENV source="/catkin_ws/devel/setup.bash"

# Copy helper scripts into the image
COPY generate_all_urdfs.sh /usr/local/bin/generate_all_urdfs.sh
RUN chmod +x /usr/local/bin/generate_all_urdfs.sh

CMD ["bash"]

Zusätzlich erstellen Sie generate_all_urdfs.sh mit dem folgenden Inhalt, um URDF-Dateien für alle unterstützten Roboter zu generieren:

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

# Generate URDFs for all Staubli experimental robots using xacro.
# Assumes ROS and the catkin workspace are already sourced, e.g.:
#   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 (only top-level xacros, macros are internal)
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."

From the root of this workspace (where the Dockerfile lives), now run:

build_staubli_docker.sh
docker build -t staubli-noetic .

Um in eine ROS1-Shell zu gelangen:

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"

URDF-Generierung

Von Ihrem Host aus, im Workspace-Root (wo das Dockerfile liegt), führen Sie aus:

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/"

Dieser Befehl generiert die URDF-Dateien für alle unterstützten Stäubli-Roboter und kopiert sie in Ihr aktuelles Verzeichnis auf dem Host.

Wenn Sie manuell URDFs für einen spezifischen Roboter generieren möchten, können Sie einen Befehl wie diesen ausführen (Beispiel für TX90) im Container:

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

Gazebo ausführen

Auf Ihrem Host erlauben Sie lokalen X-Clients und exponieren Sie Ihr Display an den Container (Linux):

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

Starten Sie dann einen Container mit X-Forwarding und starten Sie die TX90-Gazebo-Demo (korrekte Launch-Datei ist 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"

Dies sollte Gazebo auf Ihrem Host mit dem geladenen TX90-Roboter öffnen.

Gazebo TX90.avif


Check out similar posts by category: Robotics, Experimental