Как использовать ROS-пакеты Stäubli TX60/TX90/TX2-60/TX2-90

В этом руководстве мы проведём вас через шаги по использованию ROS-пакетов Stäubli TX60, TX90, TX2-60 и TX2-90 для робототехнических приложений. Эти пакеты предоставляют необходимые инструменты и функциональные возможности для взаимодействия с роботами Stäubli с использованием Robot Operating System (ROS).

ПРИМЕЧАНИЕ: Поддержка ROS для этих роботов очень экспериментальная и может не охватывать все функции или быть стабильной. Используйте на свой риск.

Соответствующие репозитории — staubli_experimental и staubli (последний только для пакетов поддержки).

В настоящее время основная ветка этого репозитория поддерживает только ROS1 Noetic. Если вы хотите использовать ROS2, этот пост не для вас.

Dockerfile

Сначала мы создаём Dockerfile для настройки среды. Создайте файл с именем Dockerfile со следующим содержимым:

Dockerfile
# Использование официального образа ROS 1 Noetic
FROM ros:noetic

RUN apt-get update && apt-get install -y \
    git \
    python3-catkin-tools \
    python3-rosdep \
    # Общие инструменты и библиотеки ROS, на которые ссылаются ключи 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/*

# Инициализация rosdep (ROS 1)
RUN rosdep update

# Создание рабочего пространства catkin
RUN mkdir -p /catkin_ws/src
WORKDIR /catkin_ws

# Клонирование основного репозитория Staubli (содержит staubli_resources) в рабочее пространство
RUN git clone https://github.com/ros-industrial/staubli.git src/staubli

# Клонирование репозитория staubli_experimental (пакеты поддержки ROS 1)
RUN git clone https://github.com/ros-industrial/staubli_experimental.git src/staubli_experimental

# Опциональная установка зависимостей с использованием rosdep (не критично, если некоторые ключи отсутствуют)
RUN rosdep install --from-paths src --ignore-src -y || echo "rosdep не смог разрешить некоторые ключи; продолжаем, так как основные зависимости уже установлены."

# Сборка рабочего пространства (допускается сбой staubli_rx160_moveit_plugins, но продолжаем)
RUN . /opt/ros/noetic/setup.sh && \
    catkin build --continue-on-failure || echo "сборка catkin завершена с некоторыми сбоями пакетов (например, staubli_rx160_moveit_plugins), но основные пакеты поддержки и ресурсы собраны."

# Источник рабочего пространства
ENV source="/catkin_ws/devel/setup.bash"

# Копирование вспомогательных скриптов в образ
COPY generate_all_urdfs.sh /usr/local/bin/generate_all_urdfs.sh
RUN chmod +x /usr/local/bin/generate_all_urdfs.sh

CMD ["bash"]

Кроме того, создайте generate_all_urdfs.sh со следующим содержимым для генерации URDF-файлов для всех поддерживаемых роботов:

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

# Генерация URDF для всех экспериментальных роботов Staubli с использованием xacro.
# Предполагается, что ROS и рабочее пространство catkin уже источники, например:
#   source /opt/ros/noetic/setup.bash
#   source /catkin_ws/devel/setup.bash

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

echo "Запись URDF в: ${out_dir}"

# staubli_tx60_gazebo (только xacro верхнего уровня, макросы внутренние)
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 "Все экспериментальные URDF Staubli успешно сгенерированы."

Из корня этого рабочего пространства (где находится Dockerfile), теперь запустите:

build_staubli_docker.sh
docker build -t staubli-noetic .

Чтобы попасть в оболочку 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"

Генерация URDF

С вашего хоста, в корне рабочего пространства (где находится Dockerfile), запустите:

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

Эта команда сгенерирует URDF-файлы для всех поддерживаемых роботов Stäubli и скопирует их в ваш текущий каталог на хосте.

Если вы хотите вручную сгенерировать URDF для конкретного робота, вы можете выполнить команду подобную этой (пример для TX90) в контейнере:

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

Запуск Gazebo

На вашем хосте разрешите локальным X-клиентам и предоставьте доступ к дисплею для контейнера (Linux):

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

Затем запустите контейнер с X-форвардингом и запустите демо TX90 Gazebo (правильный launch-файл — 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"

Это должно открыть Gazebo на вашем хосте с загруженным роботом TX90.

Gazebo TX90.avif


Check out similar posts by category: Robotics, Experimental