窗体顶端
-
概述
Franka 控制接口 (FCI)
FRANKA ROS笔记
笔记
franka_ros在 Windows 上不受支持。
在继续本章之前,请安装或编译 franka_ros。
封装的示意图franka_ros。
元包franka_ros集成libfranka到 ROS 和 ROS 控件中。这里我们介绍它的包,并简要介绍如何编写控制器。
本节中传递给启动文件的所有参数都带有默认值,因此如果使用默认网络地址和 ROS 命名空间,则可以省略这些参数。确保使用source工作区中的设置脚本调用该命令:
source /path/to/catkin_ws/devel/setup.sh
franka_description
该包包含我们的机器人和末端执行器在运动学、关节限制、视觉表面和碰撞空间方面的描述。碰撞空间是视觉描述的简化版本,用于提高碰撞检查的性能。根据 URDF XML 文档,这些描述基于 URDF 格式。
如果您想模拟 FR3 机器人,您可以将参数传递gazebo给 XACRO 文件。franka_description 包含 所有 Franka Robotics 机器人模型的文件。
xacro $(rospack find franka_description)/robots/fr3/fr3.urdf.xacro gazebo:=true
FER(Panda) 同样适用:
xacro $(rospack find franka_description)/robots/panda/panda.urdf.xacro gazebo:=true
碰撞体积
URDF定义了两种类型的碰撞类型:
-
精细:这些碰撞体积由凸网格构成,这些凸网格是每个链接的视觉网格 (.dae) 的近似版本,并且经过了大幅简化。精细体积应用于在Gazebo中模拟机器人碰撞
-
粗略:这些碰撞体积只是胶囊(带有两个半球形端盖的圆柱体),附在每个连杆上,并充气一定的安全距离。这些体积计算起来更高效,并在机器人内部用于自我碰撞避免。当您使用MoveIt等规划运动时,请使用这些几何体。
|
为了区分这两种类型的碰撞模型,在 URDF 中插入了带有后缀*_sc(表示自碰撞)的人工链接:
panda_link0
│ │ panda_link0_sc
└─ panda_link1
│ │ panda_link1_sc
└─ panda_link2
│ │ panda_link2_sc
└─ panda_link3
─ panda_link3_sc
└─ panda_link4
│ │ panda_link4_sc
└─ panda_link5
─ panda_link5_sc
└─ panda_link6
─ panda_link6_sc
└─ panda_link7
─ panda_link7_sc
└─ panda_link8
─ panda_link8_sc
└─ panda_hand
│ │ panda_leftfinger
│ ─ panda_rightfinger
│ │熊猫手
└─ panda_hand_tcp
您可以通过 XACRO 参数控制将哪个碰撞模型加载到 URDF 中gazebo:
-
xacro ... panda.urdf.xacro gazebo:=false:这将使用精细和粗糙碰撞模型。如果您完全省略参数,这也是默认设置。当您想要使用 MoveIt 时,请使用此选项
-
xacro ... panda.urdf.xacro gazebo:=true:这将仅使用精细碰撞模型。当您想要可模拟的 URDF(例如 Gazebo)时,请使用此选项。当使用粗略碰撞模型时,机器人当然会与下一个链接的胶囊不断发生碰撞。
Franka.gripper
此包实现了franka_gripper_node从 ROS 连接夹钳的功能。节点发布夹钳的状态并提供以下操作服务器:
-
franka_gripper::MoveAction(width, speed)width:移动到具有定义的 目标speed。
-
franka_gripper::GraspAction(width, epsilon_inner, epsilon_outer, speed, force):尝试width用期望的 抓住期望的 ,force同时用给定的 靠近speed。如果距离d夹爪之间的距离为: width−ϵinner<d<width+ϵouter。
-
franka_gripper::HomingAction():将夹持器归位,并根据安装的手指更新最大宽度。
-
franka_gripper::StopAction():中止正在运行的操作。这可用于在抓取后停止施加力量。
-
control_msgs::GripperCommandAction(width, max_effort):MoveIt! 识别的标准夹持器动作。如果参数max_effort大于零,夹持器将尝试抓取所需的物体width。另一方面,如果max_effort为零(max_effort<1−4),夹持器将移动到所需的位置width。
笔记
max_effort仅在抓取物体时使用该参数,否则抓取器将忽略该width参数而关闭。
您可以使用以下franka_gripper_node方式启动:
roslaunch franka_gripper franka_gripper.launch robot_ip:=<fci-ip>
暗示
从franka_ros0.6.0 开始,指定load_gripper:=truefor 也将启动 a 。roslaunch franka_control franka_control.launchfranka_gripper_node
Franka·HW
此包包含基于 API 的 ROS 控制框架的机器人硬件抽象libfranka。此包中实现了硬件类,franka_hw::FrankaHW为控制器提供了以下接口:
界面 |
功能 |
---|---|
hardware_interface::JointStateInterface |
读取联合状态。 |
hardware_interface::VelocityJointInterface |
控制关节速度并读取关节状态。 |
hardware_interface::PositionJointInterface |
命令关节位置并读取关节状态。 |
hardware_interface::EffortJointInterface |
控制关节级扭矩并读取关节状态。 |
franka_hw::FrankaStateInterface |
读取完整的机器人状态。 |
franka_hw::FrankaPoseCartesianInterface |
命令笛卡尔摆出姿势并读取完整的机器人状态。 |
franka_hw::FrankaVelocityCartesianInterface |
控制笛卡尔速度并读取完整的机器人状态。 |
franka_hw::FrankaModelInterface |
读取机器人的动态和运动学模型。 |
要使用 ROS 控制接口,您必须通过名称检索资源句柄:
界面 |
资源句柄名称 |
---|---|
hardware_interface::JointStateInterface |
“<arm_id>_joint1” 至 “<arm_id>_joint7” |
hardware_interface::VelocityJointInterface |
“<arm_id>_joint1” 至 “<arm_id>_joint7” |
hardware_interface::PositionJointInterface |
“<arm_id>_joint1” 至 “<arm_id>_joint7” |
hardware_interface::EffortJointInterface |
“<arm_id>_joint1” 至 “<arm_id>_joint7” |
franka_hw::FrankaStateInterface |
“<arm_id>_robot” |
franka_hw::FrankaPoseCartesianInterface |
“<arm_id>_robot” |
franka_hw::FrankaVelocityCartesianInterface |
“<arm_id>_robot” |
franka_hw::FrankaModelInterface |
“<arm_id>_robot” |
暗示
默认情况下,<arm_id> 设置为“panda”。
该类franka_hw::FrankaHW还实现控制器的启动,停止和切换。
该类FrankaHW还用作 的基类FrankaCombinableHW,这是一个硬件类,可以与其他类组合,以从单个控制器控制多个机器人。基于FrankaCombinableHW ROS 控制框架https://github.com/ros-controls/ros_control的任意数量的 Panda 机器人(数量由参数配置)的组合在 中实现。和FrankaCombinedHW之间的主要区别在于后者仅支持扭矩控制。FrankaHWFrankaCombinedHW
重要的
该类FrankaCombinableHW从 0.7.0 版本开始可用,并且仅允许扭矩/力度控制。
ROS 参数服务器用于在运行时确定在组合类中加载哪些机器人。有关如何FrankaCombinedHW在相应硬件节点中配置的示例,请参阅franka_control。
笔记
的方法FrankaHW是控制单个机器人的最佳方法。因此,我们建议仅在控制多个机器人时使用FrankaCombinableHW/FrankaCombinedHW类。
FrankaCombinableHW/类提供的接口FrankaCombinedHW如下:
界面 |
功能 |
---|---|
hardware_interface::EffortJointInterface |
控制关节级扭矩并读取关节状态。 |
hardware_interface::JointStateInterface |
读取联合状态。 |
franka_hw::FrankaStateInterface |
读取完整的机器人状态。 |
franka_hw::FrankaModelInterface |
读取机器人的动态和运动学模型。 |
唯一可接受的命令接口声明是 ,EffortJointInterface它可以与任何一组只读接口(FrankaModelInterface、JointStateInterface、 FrankaStateInterface)组合使用。所有接口提供的资源句柄都按名称声明,并遵循与FrankaHW中描述的相同命名约定。 的每个实例 FrankaCombinableHW都提供完整的服务和操作接口集(参见franka_control)。
笔记
该类FrankaCombinedHW在控制节点命名空间中提供了一个额外的动作服务器来恢复所有机器人。如果任何机器人发生反射或错误,则所有机器人的控制循环都会停止,直到它们被恢复。
重要的
FrankaHW使用 ROS joint_limits_interface 来强制执行位置、速度和力度安全限制。使用的接口如下:
-
关节限制接口::PositionJointSoftLimitsInterface
-
关节限制接口::速度关节软限制接口
-
关节限制接口::EffortJointSoftLimitsInterface
接近限制将导致命令的(未经通知的)修改。
franka_control
ROS 节点franka_control_node和franka_combined_control_node是用于 ROS 控制的硬件节点,使用 中的相应硬件类franka_hw。它们提供各种 ROS 服务,以libfranka在 ROS 生态系统中公开完整的 API。提供以下服务:
-
franka_msgs::SetJointImpedance指定内部控制器的关节刚度(阻尼自动从刚度得出)。
-
franka_msgs::SetCartesianImpedance指定内部控制器的笛卡尔刚度(阻尼自动从刚度得出)。
-
franka_msgs::SetEEFrame指定从 <arm_id>_EE(末端执行器)到 <arm_id>_NE(名义末端执行器)框架的转换。从法兰到末端执行器框架的转换分为两个转换:<arm_id>_EE 到 <arm_id&