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

In diesem Leitfaden führen wir dich 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 du ROS2 verwenden möchtest, ist dieser Beitrag nicht für dich.

Dockerfile

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

Dockerfile
# Verwende das offizielle ROS 1 Noetic-Image
FROM ros:noetic

RUN apt-get update && apt-get install -y \
    git \
    python3-catkin-tools \
    python3-rosdep \
    # Allgemeine ROS-Tools und -Bibliotheken, auf die rosdep-Schlüssel verweisen
    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/*

# rosdep initialisieren (ROS 1)
RUN rosdep update

# Catkin-Workspace erstellen
RUN mkdir -p /catkin_ws/src
WORKDIR /catkin_ws

# Haupt-Stäubli-Repository (enthält staubli_resources) in den Workspace klonen
RUN git clone https://github.com/ros-industrial/staubli.git src/staubli

# staubli_experimental-Repository (ROS 1-Support-Pakete) klonen
RUN git clone https://github.com/ros-industrial/staubli_experimental.git src/staubli_experimental

# Optional Abhängigkeiten mit rosdep installieren (nicht fatal, wenn einige Schlüssel fehlen)
RUN rosdep install --from-paths src --ignore-src -y || echo "rosdep konnte einige Schlüssel nicht auflösen; fahre fort, da Kernabhängigkeiten bereits installiert sind."

# Workspace bauen (staubli_rx160_moveit_plugins darf fehlschlagen, aber fortsetzen)
RUN . /opt/ros/noetic/setup.sh && \
    catkin build --continue-on-failure || echo "catkin build wurde mit einigen Paketfehlern abgeschlossen (z.B. staubli_rx160_moveit_plugins), aber Kern-Support und -Ressourcen wurden gebaut."

# Workspace sourcen
ENV source="/catkin_ws/devel/setup.bash"

# Hilfsskripte in das Image kopieren
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 erstelle 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

# URDFs für alle Stäubli-experimentellen Roboter mit xacro generieren.
# Setzt voraus, dass ROS und der Catkin-Workspace bereits gesourced sind, z.B.:
#   source /opt/ros/noetic/setup.bash
#   source /catkin_ws/devel/setup.bash

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

echo "Schreibe URDFs nach: ${out_dir}"

# staubli_tx60_gazebo (nur Top-Level-xacros, Makros sind intern)
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 "Alle Stäubli-experimentellen URDFs erfolgreich generiert."

Führe nun vom Root dieses Workspaces (wo das Dockerfile liegt) aus:

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 deinem Host aus, im Workspace-Root (wo das Dockerfile liegt), führe 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 dein aktuelles Verzeichnis auf dem Host.

Wenn du manuell URDFs für einen spezifischen Roboter generieren möchtest, kannst du 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 deinem Host erlaube lokalen X-Clients und exponiere dein Display an den Container (Linux):

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

Starte dann einen Container mit X-Forwarding und starte 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 deinem Host mit dem geladenen TX90-Roboter öffnen.

Gazebo TX90.avif


Ähnliche Beiträge nach Kategorie: Robotics, Experimental