franka ros2
franka_ros2
在 Windows 上不受支持。
franka_ros2 repo包含libfranka的 ROS 2 集成 。
警告: franka_ros2 正在快速开发中。预计会出现重大变化。在 GitHub上报告错误。
先决条件
-
ROS 2 Humble 安装( ros-humble-desktop)或带有 DevContainer 的 VSCode IDE。
-
PREEMPT_RT 内核(可选,但强烈推荐)。
-
对于
cartesian_pose
、joint_position
和elbow_position
命令接口来说,实时内核是绝对必要的。 -
系统范围的libfranka 安装。libfranka 的最低支持版本是 0.13.2。这是一个最小示例:
-
sudo apt install -y libpoco-dev libeigen3-dev git clone https://github.com/frankaemika/libfranka.git --recursive cd libfranka git checkout 0.13.2 mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF .. cmake --build . -j$(nproc) cpack -G DEB sudo dpkg -i libfranka-*.deb
-
建立一个 ROS 2 工作空间:
mkdir -p ~/franka_ros2_ws/src
-
克隆存储库并构建包:
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
这相当于运行在 重力补偿 中提到的 launch 文件:
gravity_compensation_example_controller.launch.py
。当控制器通过使用以下命令被停止时:
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
- 尝试在以给定速度闭合的同时以所期望的力在所期望的宽度抓取。如果夹爪两指之间的距离d
处于width - 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
移动组替换。franka_msgs
这个包包含不同夹爪 action 的定义。
重要
与 franka_ros 相比,不再有 FrankaState 类型消息,因为目前无法从硬件类进行通信。
joint_effort_trajectory_controller
这个包包含一个修改过的 joint_trajectory_controller,它可以使用
franka_hardware::FrankaHardwareInterface
扭矩接口. 它基于此 Pull request 并向后移植到了Foxy。它提供了 MoveIt 所需的FollowJointTrajectory
。franka_ros 和 franka_ros2 的区别
本节概述了
franka_ros
和franka_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
相比我们目前提供了简化版的控制器接口:-
关节位置
-
关节速度
-
测量扭矩
原因是硬件接口目前只支持 doubl 数据类型,无法暴露于例如
franka::RobotState
。可以将自己的控制器基于列出的 franka_example_controllers 其中之一。要计算机器人的运动学和动力学,可以在 KDL 等库中使用机器人的关节状态和 URDF(其中还有一个可用的 ROS 2 包)。
已知的问题
-
当使用
fake_hardware
和 MoveIt 时,需要一些时间直到默认位置被应用。
-
-