ROS 2 桥

为了让 ROS 2 用户轻松使用 RDK,RDK 的 API 被包装到 flexiv_ros2 存储库中的 ROS 包中。支持关节扭矩和位置控制等关键功能,并与 ros2_control 框架和 MoveIt! 2 也已实现。

兼容性

支持的操作系统

支持的 ROS 2 发行版

Ubuntu 22.04

Humble Hawksbill

Ubuntu 24.04

Jazzy Jalisco

概述

flexiv_ros2 包含以下软件包:

软件包

描述

flexiv_bringup

控制器和演示的启动和运行时配置。

flexiv_controllers

自定义控制器的实现。

flexiv_gripper

用于 Flexiv 夹爪控制的动作服务器的实现。

flexiv_hardware

Flexiv 机器人和 ros2_control 框架之间的硬件接口。

flexiv_moveit_config

Flexiv 机器人的 MoveIt 配置。

flexiv_msgs

RDK 中使用的消息的定义。

flexiv_test_nodes

演示节点和示例。

备注

flexiv_description 不包含在 flexiv_ros2 存储库中,而是作为独立包包含在 flexiv_description 存储库中。它包含用于生成 URDF 的 xacro 文件以及用于可视化的网格文件。此外,它还包含启动文件,无需访问真实的机器人即可可视化机器人。

更多详细信息可以在 软件包 部分找到。

环境设置

备注

以下说明适用于 ROS 2 Humble。对于 ROS 2 Jazzy,请参阅 flexiv_ros2 存储库的 jazzy 分支中的 README 文件。

  1. 通过 Debian 软件包安装 ROS 2 Humble via Debian Packages (ros-humble-desktop)

  2. 安装附加软件包:

    sudo apt install -y \
    python3-colcon-common-extensions \
    python3-rosdep2 \
    libeigen3-dev \
    wget \
    ros-humble-control-toolbox \
    ros-humble-hardware-interface \
    ros-humble-joint-state-publisher \
    ros-humble-joint-state-publisher-gui \
    ros-humble-moveit \
    ros-humble-realtime-tools \
    ros-humble-robot-state-publisher \
    ros-humble-ros2-control \
    ros-humble-ros2-controllers \
    ros-humble-rviz2 \
    ros-humble-test-msgs \
    ros-humble-tinyxml2-vendor \
    ros-humble-xacro
    
  3. 创建 ROS 2 工作区并克隆 flexiv_ros2:

    mkdir -p ~/flexiv_ros2_ws/src
    cd ~/flexiv_ros2_ws/src
    git clone https://github.com/flexivrobotics/flexiv_ros2.git -b humble
    
  4. 安装依赖项:

    cd ~/flexiv_ros2_ws
    vcs import src < src/flexiv_ros2/flexiv.humble.repos --recursive --skip-existing
    touch src/flexiv_rdk/COLCON_IGNORE
    rosdep update
    rosdep install --from-paths src --ignore-src --rosdistro humble -r -y
    
  5. 选择用于安装 flexiv_rdk 库及其所有依赖项的目录。例如,在主目录下新建一个名为 rdk_install 的文件夹:~/rdk_install。编译安装到安装目录:

    cd ~/flexiv_ros2_ws/src/flexiv_rdk/thirdparty
    bash build_and_install_dependencies.sh ~/rdk_install
    
  6. 配置并安装 flexiv_rdk:

    cd ~/flexiv_ros2_ws/src/flexiv_rdk
    rm -rf build && mkdir build && cd build
    cmake .. -DCMAKE_INSTALL_PREFIX=~/rdk_install
    make install
    
  7. 构建并source 工作空间:

    cd ~/flexiv_ros2_ws
    source /opt/ros/humble/setup.bash
    colcon build --symlink-install --cmake-args -DCMAKE_PREFIX_PATH=~/rdk_install
    source install/setup.bash
    

重要

每当打开新终端时,必须在运行任何 ROS 2 命令之前获取 ROS 2 Humble 环境和 flexiv_ros2 工作区:

source /opt/ros/humble/setup.bash
source ~/flexiv_ros2_ws/install/setup.bash

软件包

下面是所有可用软件包的详细描述,其结构基于 ros2_control_demos

flexiv_bringup

该软件包包含启动文件:主驱动程序启动器、MoveIt 启动文件和演示示例。运行主启动器:

ros2 launch flexiv_bringup flexiv.launch.py robot_sn:=[robot_sn] robot_type:=Enlight-L

备注

启动文件所需的参数是:
  • robot_sn:机器人的序列号。删除所有空格,例如:Enlight-L-123456

要显示所有可用参数,请运行 ros2 launch flexiv_bringup flexiv.launch.py --show-args

它将与机器人服务器建立连接,加载默认的 flexiv_arm_controller,并在 RViZ 中可视化机器人。该控制器使用 position_command_interface,并将机器人置于关节位置模式。

备注

ROS 2 关节位置和速度接口的默认 Flexiv RDK 控制模式是 RT_JOINT_POSITION

rdk_control_mode 设置为 joint_impedance,用户可以通过Flexiv内置高性能关节阻抗控制器在ROS 2中运行关节位置控制(RDK控制模式:RT_JOINT_IMPEDANCE):

ros2 launch flexiv_bringup flexiv.launch.py robot_sn:=[robot_sn] rdk_control_mode:=joint_impedance

如果您没有连接真正的机器人,您可以使用模拟硬件进行测试:

ros2 launch flexiv_bringup flexiv.launch.py robot_sn:=Enlight-L-123456 use_fake_hardware:=true

它将使用 mock_components 模拟硬件接口,而不是真实机器人的 flexiv_hardware

flexiv_controllers

该软件包包含自定义 ros2_control 控制器和广播器:

  • flexiv_robot_states_broadcaster:广播器将 Flexiv 机器人状态 信息(包括关节空间和笛卡尔空间机器人状态)发布到 /${robot_sn}/flexiv_robot_states 主题。

  • gpio_controller:控制器控制 Flexiv 机器人控制器的 GPIO。

flexiv_gripper

该软件包包含夹爪动作服务器,用于与连接到机器人的夹爪进行交互。

使用以下启动文件启动 flexiv_gripper_node,默认夹爪是 Flexiv Grav (Flexiv-GN01):

ros2 launch flexiv_gripper flexiv_gripper.launch.py robot_sn:=[robot_sn] gripper_name:=Flexiv-GN01

或者,如果夹爪是 Flexiv Grav,则使用机器人驱动器启动夹爪控制:

ros2 launch flexiv_bringup flexiv.launch.py robot_sn:=[robot_sn] load_gripper:=true

在新终端中,发送夹爪操作 move 目标以打开或关闭夹爪:

# Closing the gripper
ros2 action send_goal /flexiv_gripper_node/move flexiv_msgs/action/Move "{width: 0.01, velocity: 0.1, max_force: 20}"
# Opening the gripper
ros2 action send_goal /flexiv_gripper_node/move flexiv_msgs/action/Move "{width: 0.09, velocity: 0.1, max_force: 20}"

grasp 动作使夹爪能够通过直接力控制进行抓取,但需要安装的夹爪支持直接力控制。向夹爪发送 grasp 命令:

ros2 action send_goal /flexiv_gripper_node/grasp flexiv_msgs/action/Grasp "{force: 0}"

要停止夹爪,请发送 stop 服务调用:

ros2 service call /flexiv_gripper_node/stop std_srvs/srv/Trigger {}

flexiv_hardware

该软件包包含 ros2_control 所需的 flexiv_hardware 插件。该插件通过 robot_description 主题传递到控制器管理器,并为每个关节提供:

  • 位置状态接口:测量的关节位置。

  • 速度状态接口:测量的关节速度。

  • 力矩状态接口:测量的关节扭矩。

  • 位置命令接口:期望的关节位置。

  • 速度命令接口:期望的关节速度。

  • 力矩命令接口:期望的关节扭矩。

flexiv_moveit_config

该软件包包含 Flexiv 机器人的 MoveIt 2 配置,可用于真实机器人或模拟硬件的运动规划和执行。配置中包含的机器人包括一台 Enlight-L 机器人的单臂设置、两台 Enlight-L 机器人的双臂设置以及 MICO 机器人。

flexiv_msgs

该包包含机器人的测量或估计信息的消息。

flexiv_test_nodes

该包包含 演示 中示例的演示节点。该包改编自 ros2_control_test_nodes

MoveIt

使用真实的机器人运行 MoveIt 示例:

ros2 launch flexiv_bringup flexiv_moveit.launch.py robot_sn:=[robot_sn]

您应该能够使用 RViZ 中的 MotionPlanning 插件来规划和执行机器人的运动。

使用模拟硬件运行 MoveIt:

ros2 launch flexiv_bringup flexiv_moveit.launch.py robot_sn:=Enlight-L-123456 use_fake_hardware:=true

演示

本节提供 flexiv_test_nodes 包中可执行节点的示例。

关节位置控制

首先使用 flexiv_arm_controller 启动机器人:

ros2 launch flexiv_bringup flexiv.launch.py robot_sn:=[robot_sn] robot_controller:=flexiv_arm_controller

然后在新终端中运行测试程序以向控制器发送关节位置命令:

ros2 launch flexiv_bringup test_joint_trajectory_controller.launch.py

几秒钟后,机器人关节将移动到 flexiv_bringup/config/joint_trajectory_position_publisher.yaml 中定义的位置目标