Как использовать 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 со следующим содержимым:
# Использование официального образа 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-файлов для всех поддерживаемых роботов:
#!/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), теперь запустите:
docker build -t staubli-noetic .Чтобы попасть в оболочку ROS1:
docker run --rm -it staubli-noetic bash -lc "source /opt/ros/noetic/setup.bash && source /catkin_ws/devel/setup.bash && bash"Генерация URDF
С вашего хоста, в корне рабочего пространства (где находится Dockerfile), запустите:
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) в контейнере:
xacro $(rospack find staubli_tx60_gazebo)/urdf/tx60.xacro > /tmp/tx60_gazebo.urdfЗапуск Gazebo
На вашем хосте разрешите локальным X-клиентам и предоставьте доступ к дисплею для контейнера (Linux):
xhost +local:rootЗатем запустите контейнер с X-форвардингом и запустите демо TX90 Gazebo (правильный launch-файл — 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"Это должно открыть Gazebo на вашем хосте с загруженным роботом TX90.
