franka_ros2包

注解

franka_ros2 在 Windows 上不受支持。

franka_ros2存储库 包含 libfranka 的 ROS 2 集成。

警告

franka_ros2 目前是 beta 软件版本,所以在使用时要小心,并在 GitHub 上报告错误。

先决条件

sudo apt install -y libpoco-dev libeigen3-dev
git clone https://github.com/frankaemika/libfranka.git --recursive
cd libfranka
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF  ..
cmake --build . -j$(nproc)
cpack -G DEB
sudo dpkg -i libfranka-*.deb

可选的 .bashrc 设置

  • 要获得彩色警告和错误消息,你可以将 export RCUTILS_COLORIZED_OUTPUT=1 放入 .bashrc 文件(隐藏文件,按 ctrl + h 可显示)
  • 如果你的系统语言未设置为美式英语,则应输入 export LC_NUMERIC=en_US.UTF-8.bashrc 以避免 RViz 出现问题。

设置

  1. 安装要求:

    sudo apt install -y \
    ros-foxy-control-msgs \
    ros-foxy-xacro \
    ros-foxy-angles \
    ros-foxy-ros2-control \
    ros-foxy-realtime-tools \
    ros-foxy-control-toolbox \
    ros-foxy-moveit \
    ros-foxy-ros2-controllers \
    ros-foxy-joint-state-publisher \
    ros-foxy-joint-state-publisher-gui \
    ros-foxy-ament-cmake-clang-format \
    python3-colcon-common-extensions
    
  2. 建立一个 ROS 2 工作空间:

    mkdir -p ~/franka_ros2_ws/src
    
  3. 克隆存储库并构建包:

    source /opt/ros/foxy/setup.bash
    cd ~/franka_ros2_ws
    git clone https://github.com/frankaemika/franka_ros2.git src/franka_ros2
    colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
    source install/setup.sh
    

Moveit

要查看是否一切正常,你可以尝试在机器人上运行 MoveIt 示例:

ros2 launch franka_moveit_config moveit.launch.py robot_ip:=<fci-ip>

然后激活 MotionPlanning RViz 中的显示。

如果你没有机器人,你仍然可以通过在虚拟硬件上运行来测试你的设置:

ros2 launch franka_moveit_config moveit.launch.py robot_ip:=dont-care use_fake_hardware:=true

等待直到你可以在终端内看到来自 MoveIt 的绿色消息 You can start planning now! 。然后取消框选 PlanningScene 并再次框选打开。之后框选打开 MotionPlanning

示例控制器

这个 repo 附带了一些位于 franka_example_controllers 包中的示例控制器。

默认情况下,使用夹爪执行以下launch文件。如果你没有连接夹爪,则可以在launch文件中使用 load_gripper:=false.

移动到开始点

该控制器将机器人移动到其初始配置。

ros2 launch franka_bringup move_to_start_example_controller.launch.py robot_ip:=<fci-ip>

重力补偿

这是我们拥有的最简单的控制器,也是编写你自己的控制器的一个很好的起点。它将零作为扭矩命令发送到所有关节,这意味着机器人只补偿自己的重量。

ros2 launch franka_bringup gravity_compensation_example_controller.launch.py robot_ip:=<fci-ip>

关节阻抗示例

该示例以非常柔性的周期性移动方式移动关节 4 和 5。你可以尝试在运行时移动关节。

ros2 launch franka_bringup joint_impedance_example_controller.launch.py robot_ip:=<fci-ip>

包说明

本节包含对每个包的作用的更详细描述。一般来说,包结构试图遵守 此处 提出的结构。

franka_bringup包

该软件包包含示例的launch文件以及基本的 franka.launch.py launch文件,可用于在没有任何控制器的情况下启动机器人。

当你启动机器人时:

ros2 launch franka_bringup franka.launch.py robot_ip:=<fci-ip> use_rviz:=true

除了 joint_state_broadcaster 之外,没有任何控制器在运行。然而,与机器人的连接仍然被建立,并且当前机器人位姿可在 RViz 中可视化。在这种模式下,当用户按下stop按钮时,机器人可以被示教。但是,一旦使用了 effort_command_interface 的控制器被启动,机器人将使用来自libfranka 的扭矩接口。例如,可以启动 gravity_compensation_example_controller 通过运行:

ros2 control load_controller --set-state start  gravity_compensation_example_controller

这相当于运行在 Gravity Compensation 中提到的 Gravity Compensationgravity_compensation_example_controller.launch.py launch文件 。

当控制器通过使用以下命令被停止时:

ros2 control set_controller_state gravity_compensation_example_controller stop

机器人将停止扭矩控制并仅通过 FCI 发送其当前状态。

你现在可以选择再次启动同一个控制器通过:

ros2 control set_controller_state gravity_compensation_example_controller start

或加载并启动不同的一个:

ros2 control load_controller --set-state start joint_impedance_example_controller

注解

当机器人因错误停止时,ros2_control_node 节点即死亡。这也将关闭所有其他节点。要从中恢复,你必须先切换用户停止按钮(灰色),然后才能重新启动launch文件。

franka_description包

该软件包包含用于可视化机器人的 xacro 文件和meshes。此外,它包含一个launch文件,可以在不访问真实机器人的情况下可视化机器人模型:

ros2 launch franka_description visualize_franka.launch.py load_gripper:=<true|false>

franka_example_controllers包

这个包包含一些控制器,可以看作是如何在 ROS 2 中编写控制器的示例。目前,控制器只能访问测量的关节位置和关节速度。基于此信息,控制器可以发送扭矩命令。目前无法使用关节位置接口等其他接口。

重要

与 franka_ros 相比,目前无法直接访问质量矩阵、科里奥利扭矩或雅可比等属性。

franka_gripper包

此软件包包含 franka_gripper_node 用于与 Franka Hand 交互。

franka_gripper_node 提供以下操作:

  • homing - 将夹爪归零并根据已安装的手指更新最大宽度。
  • move - 以定义的速度移动到目标宽度。
  • grasp - 尝试在以给定速度闭合的同时以所需的力在所需的宽度抓取。

如果夹爪手指之间的距离 dwidth - epsilon.inner < d < width + epsilon.outer 之间, 则操作成功。 * gripper_action -一个MoveIt的特殊抓取action通讯。

此外,还有一项 stop service可以中止抓取action并停止抓取。

使用以下launch文件启动夹爪:

ros2 launch franka_gripper gripper.launch.py robot_ip:=<fci-ip>

在另一个标签中,你现在可以执行归零并发送抓取命令。

ros2 action send_goal /panda_gripper/homing franka_msgs/action/Homing {}
ros2 action send_goal -f /panda_gripper/grasp franka_msgs/action/Grasp "{width: 0.00, speed: 0.03, force: 50}"

默认情况下,内部和外部 epsilon 为 0.005 米。你还可以显式设置 epsilon:

ros2 action send_goal -f /panda_gripper/grasp franka_msgs/action/Grasp "{width: 0.00, speed: 0.03, force: 50, epsilon: {inner: 0.01, outer: 0.01}}"

要停止抓取,你可以使用 stop service。

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

franka_hardware包

该软件包包含 ros2_control 所需的``franka_hardware`` 插件。该插件从机器人的 URDF 加载,并通过机器人描述传递给控制器​​管理器。它为每个关节提供:

  • 一个包含测量的关节位置的 position state interface
  • 一个包含测量的关节速度的 velocity state interface
  • 一个包含测得的连杆侧关节扭矩(包括重力)的 effort state interface
  • 一个包含所需的无重力关节扭矩的 effort command interface

机器人的 IP 通过来自 URDF 的参数读取。

franka_moveit_config包

此软件包包含 MoveIt2 的配置。有一个名为 panda_manipulator 的新移动组 ,其尖端位于夹持器的手指之间,并且其 Z 轴旋转了 45 度,因此 X 轴现在朝前,使其更易于使用。移动组 panda_arm 仍可用于向后兼容。新的应用程序应该使用新的 panda_manipulator 移动组替换。

_images/move-groups.png

Visualization of the old and the new move group

franka_msgs包

这个包包含不同夹爪action的定义。

重要

与 franka_ros 相比,不再有 FrankaState 类型消息,因为目前无法从硬件类进行通信。

关节扭矩轨迹控制器

这个包包含一个修改过的joint_trajectory_controller,其可以使用 franka_hardware::FrankaHardwareInterface 扭矩接口. 它基于此 Pull request 并向后移植到 Foxy。它提供了 MoveIt 所需的 FollowJointTrajectory

franka_ros 和 franka_ros2 的区别

本节概述了 franka_rosfranka_ros2 之间的基本变化。

franka_gripper包

  • 所有topics和actions之前都以 franka_gripper 作为前缀。此前缀已重命名为 panda_gripper ,以便在未来启用所有前缀都基于 arm_id 的工作流程,从而轻松启用多臂设置
  • stop action现在是一个service action,因为它不可抢占。
  • 所有actions(除了 gripper_action)都以当前夹爪宽度作为反馈。

franka_gazebo包

目前,我们不提供 Gazebo 与 franka_ros2 集成。但是,我们提供了 franka_ros包

franka_visualization包

这个包已经不存在了。但是, franka_description包 提供了一个launch文件来可视化机器人模型,而无需连接到机器人

franka_control包

这个包已经不存在了。与机器人的连接由 franka_hardware包 包中的硬件插件提供。它提供的actions和services目前未出现在 franka_ros2

编写控制器

franka_ros 相比我们目前提供了简化版的控制器接口:

  • 关节位置
  • 关节速度
  • 测量扭矩

原因是硬件接口目前只支持double数据类型,无法暴露于例如 franka::RobotState

你可以将自己的控制器基于列出的 franka_example_controllers包 其中之一。要计算机器人的运动学和动力学,你可以在 KDL 等库中使用机器人的关节状态和 URDF(其中还有一个可用的 ROS 2 包)。

已知的问题

  • 当使用 fake_hardware 和MoveIt时,需要一些时间直到默认位置被应用。