ROS 2 桥
为了让 ROS 2 用户轻松使用 RDK,RDK 的 API 被包装到 flexiv_ros2 存储库中的 ROS 包中。支持关节扭矩和位置控制等关键功能,并与 ros2_control 框架和 MoveIt! 2 也已实现。
兼容性
支持的操作系统 |
支持的 ROS 2 发行版 |
|---|---|
Ubuntu 22.04 |
|
Ubuntu 24.04 |
概述
flexiv_ros2 包含以下软件包:
软件包 |
描述 |
|---|---|
|
控制器和演示的启动和运行时配置。 |
|
自定义控制器的实现。 |
|
用于 Flexiv 夹爪控制的动作服务器的实现。 |
|
Flexiv 机器人和 ros2_control 框架之间的硬件接口。 |
|
Flexiv 机器人的 MoveIt 配置。 |
|
RDK 中使用的消息的定义。 |
|
演示节点和示例。 |
备注
包 flexiv_description 不包含在 flexiv_ros2 存储库中,而是作为独立包包含在 flexiv_description 存储库中。它包含用于生成 URDF 的 xacro 文件以及用于可视化的网格文件。此外,它还包含启动文件,无需访问真实的机器人即可可视化机器人。
更多详细信息可以在 软件包 部分找到。
环境设置
备注
以下说明适用于 ROS 2 Humble。对于 ROS 2 Jazzy,请参阅 flexiv_ros2 存储库的 jazzy 分支中的 README 文件。
通过 Debian 软件包安装 ROS 2 Humble via Debian Packages (ros-humble-desktop)
安装附加软件包:
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
创建 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
安装依赖项:
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
选择用于安装
flexiv_rdk库及其所有依赖项的目录。例如,在主目录下新建一个名为rdk_install的文件夹:~/rdk_install。编译安装到安装目录:cd ~/flexiv_ros2_ws/src/flexiv_rdk/thirdparty bash build_and_install_dependencies.sh ~/rdk_install
配置并安装
flexiv_rdk:cd ~/flexiv_ros2_ws/src/flexiv_rdk rm -rf build && mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=~/rdk_install make install
构建并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 中定义的位置目标