如何使用 Staubli TX60/TX90/TX2-60/TX2-90 的 ROS 包
在本指南中,我们将带你逐步了解如何使用 Staubli TX60、TX90、TX2-60 和 TX2-90 的 ROS 包进行机器人应用开发。这些包提供了必要的工具和功能,用于通过机器人操作系统(ROS)与 Staubli 机器人进行交互。
注意:这些机器人的 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 \
# rosdep 键所引用的常用 ROS 工具和库
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 could not resolve some keys; proceeding because core dependencies are already installed."
# 构建工作空间(允许 staubli_rx160_moveit_plugins 失败,但继续执行)
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 工作空间
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
# 使用 xacro 为所有 Staubli 实验性机器人生成 URDF。
# 假定 ROS 和 catkin 工作空间已 source,例如:
# 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(仅顶层 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 "All Staubli experimental URDFs generated successfully."在工作空间根目录(Dockerfile 所在位置)下,运行:
build_staubli_docker.sh
docker build -t staubli-noetic .要进入 ROS1 shell:
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/"该命令会为所有支持的 Staubli 机器人生成 URDF 文件,并将它们复制到主机上的当前目录。
如果你想手动为特定机器人生成 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 机器人。

Check out similar posts by category:
Robotics, Experimental
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow