Utiliser les packages ROS Stäubli TX60/TX90/TX2-60/TX2-90
Dans ce guide, nous allons vous présenter les étapes pour utiliser les packages ROS Stäubli TX60, TX90, TX2-60 et TX2-90 pour des applications robotiques. Ces packages fournissent des outils et fonctionnalités essentiels pour interagir avec les robots Stäubli via le Robot Operating System (ROS).
REMARQUE : Le support ROS pour ces robots est très expérimental et peut ne pas couvrir toutes les fonctionnalités ou être stable. À utiliser à vos propres risques.
Les dépôts pertinents sont staubli_experimental et staubli (ce dernier est uniquement pour les packages de support).
Actuellement, la branche principale de ce dépôt ne prend en charge que ROS1 Noetic. Si vous souhaitez utiliser ROS2, cet article n’est pas pour vous.
Dockerfile
Tout d’abord, nous créons le Dockerfile pour configurer l’environnement. Créez un fichier nommé Dockerfile avec le contenu suivant :
# Utiliser l'image officielle ROS 1 Noetic
FROM ros:noetic
RUN apt-get update && apt-get install -y \
git \
python3-catkin-tools \
python3-rosdep \
# Outils et bibliothèques ROS courants auxquels les clés rosdep font référence
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/*
# Initialiser rosdep (ROS 1)
RUN rosdep update
# Créer un espace de travail catkin
RUN mkdir -p /catkin_ws/src
WORKDIR /catkin_ws
# Cloner le dépôt principal Staubli (contient staubli_resources) dans l'espace de travail
RUN git clone https://github.com/ros-industrial/staubli.git src/staubli
# Cloner le dépôt staubli_experimental (packages de support ROS 1)
RUN git clone https://github.com/ros-industrial/staubli_experimental.git src/staubli_experimental
# Optionnellement installer les dépendances avec rosdep (non fatal si certaines clés manquent)
RUN rosdep install --from-paths src --ignore-src -y || echo "rosdep n'a pas pu résoudre certaines clés ; on continue car les dépendances principales sont déjà installées."
# Construire l'espace de travail (autoriser staubli_rx160_moveit_plugins à échouer, mais continuer)
RUN . /opt/ros/noetic/setup.sh && \
catkin build --continue-on-failure || echo "catkin build terminé avec quelques échecs de packages (ex. staubli_rx160_moveit_plugins), mais le support principal et les ressources ont été construits."
# Sourcer l'espace de travail
ENV source="/catkin_ws/devel/setup.bash"
# Copier les scripts utilitaires dans l'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"]De plus, créez generate_all_urdfs.sh avec le contenu suivant pour générer les fichiers URDF pour tous les robots pris en charge :
#!/usr/bin/env bash
set -euo pipefail
# Générer les URDFs pour tous les robots Staubli expérimentaux avec xacro.
# Suppose que ROS et l'espace de travail catkin sont déjà sourcés, par ex. :
# source /opt/ros/noetic/setup.bash
# source /catkin_ws/devel/setup.bash
out_dir="${1:-/tmp/staubli_urdfs}"
mkdir -p "${out_dir}"
echo "Écriture des URDFs dans : ${out_dir}"
# staubli_tx60_gazebo (uniquement les xacros de haut niveau, les macros sont internes)
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 "Tous les URDFs Staubli expérimentaux générés avec succès."À partir de la racine de cet espace de travail (où se trouve le Dockerfile), exécutez maintenant :
docker build -t staubli-noetic .Pour obtenir un shell ROS1 :
docker run --rm -it staubli-noetic bash -lc "source /opt/ros/noetic/setup.bash && source /catkin_ws/devel/setup.bash && bash"Génération URDF
Depuis votre hôte, dans la racine de l’espace de travail (où se trouve le Dockerfile), exécutez :
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/"Cette commande générera les fichiers URDF pour tous les robots Stäubli pris en charge et les copiera dans votre répertoire courant sur l’hôte.
Si vous souhaitez générer manuellement les URDFs pour un robot spécifique, vous pouvez exécuter une commande comme celle-ci (exemple pour TX90) dans le conteneur :
xacro $(rospack find staubli_tx60_gazebo)/urdf/tx60.xacro > /tmp/tx60_gazebo.urdfExécuter Gazebo
Sur votre hôte, autorisez les clients X locaux et exposez votre affichage au conteneur (Linux) :
xhost +local:rootDémarrez ensuite un conteneur avec transfert X et lancez la démo Gazebo TX90 (le fichier launch correct est tx90_gazebo.launch) :
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"Cela devrait ouvrir Gazebo sur votre hôte avec le robot TX90 chargé.
