Franka Emika 机械臂在ROS下控制

请安装franka_ros

franka_ros元包将libfranka集成到ros和ros控制中。在这里,我们将介绍它的软件包,并简要介绍如何编写控制器。

本节中传递给启动文件的所有参数都带有默认值,因此如果使用默认网络地址和ROS名称空间,则可以忽略这些参数。确保已使用工作区中的安装脚本调用源命令:

source /path/to/catkin_ws/devel/setup.sh

franka描述

该软件包包含我们的机器人和末端执行器的运动学、关节限制、视觉表面和碰撞空间方面的描述。碰撞空间是视觉描述的简化版本,用于提高碰撞检查的性能。根据URDF XML文档,描述基于URDF格式。

如果想要模拟熊猫机器人,可以将gazebo参数传递给XACRO文件。然后,URDF将包含基于Franka-Emika熊猫机器人动态识别的估计惯性值,即连杆质量和惯性张量,并使用基于惩罚的优化检索可行参数。

xacro $(rospack find franka_description)/robots/panda_arm.urdf.xacro gazebo:=true

franka_夹持器

该软件包实现了franka_gripper_节点,用于连接来自ROS的夹具。该节点发布抓取器的状态,并提供以下操作:

移动动作(宽度,速度):以规定的速度移动到目标宽度。

抓取动作(宽度、内ε、外ε、速度、力):在以给定速度闭合的同时,尝试以所需的力抓取所需的宽度。如果夹爪指之间的距离d为:

width−ϵinner<d<width+ϵouter

  • franka_gripper::HomingAction(): homes the gripper and updates the maximum width given the mounted fingers.
  • franka_gripper::StopAction(): aborts a running action. This can be used to stop applying forces after grasping.
  • control_msgs::GripperCommandAction(width, max_effort): A standard gripper action recognized by MoveIt!.

You can launch the franka_gripper_node with:

roslaunch franka_gripper franka_gripper.launch robot_ip:=<fci-ip>

Starting with franka_ros 0.6.0, specifying load_gripper:=true for roslaunch franka_control franka_control.launch will start a franka_gripper_node as well.

franka_hw

该软件包包含基于libfranka API的ROS控制框架机器人的硬件抽象。硬件类franka_hw::FrankaHW在该软件包中实现,为控制器提供以下接口:

要使用 ROS 控制接口,您必须按名称检索资源库:

By default, <arm_id> is set to “panda”.

franka_control

 

ROS节点franka_control_节点和franka_combined_control_节点是用于ROS控制的硬件节点,它们使用来自franka_hw的相应硬件类。它们提供各种ROS服务,以在ROS生态系统中公开完整的libfranka API。提供以下服务:

franka_msgs::SetJointImpedance指定内部控制器的关节刚度(阻尼自动从刚度中导出)。

franka_msgs::SetCartesianImpedance指定内部控制器的笛卡尔刚度(阻尼自动从刚度中导出)。

franka_msgs::SetEEFrame指定从<arm_id>\u EE(末端效应器)到<arm_id>\u NE(标称末端效应器)帧的转换。从凸缘到末端效应器框架的转换分为两个转换:<arm\u id>\u EE到<arm\u id>\u NE框架和<arm\u id>\u NE到<arm\u id>\u link8框架。只能通过管理员界面设置从<arm\u id>\NE到<arm\u id>\u link8帧的转换。

franka_msgs::SetKFrame指定从<arm_id>\u K到<arm_id>\u EE frame的转换。

franka_msgs::SetForceTorqueCollisionBehavior为外部笛卡尔扳手设置阈值,以配置碰撞反射。

franka_msgs::SetFullCollisionBehavior为笛卡尔和关节级别的外力设置阈值,以配置碰撞反射。

franka_msgs::SetLoad设置外部负载以进行补偿(例如抓取的对象)。

std_srvs::触发器服务允许连接和断开硬件节点(可从0.8.0获得)。当没有活动(命令)控制器运行时,您可以断开硬件节点,将相应的机器人释放出来,用于非fci应用,例如基于桌面的操作。一旦你想恢复fci操作,你可以调用connect并再次启动基于ros_control的控制器

 

要从错误和反射中恢复,可以调用franka_msgs::ErrorRecoveryAction。这可以通过action客户端或简单地发布action goal主题来实现:

rostopic pub-1/franka_control/error_recovery/goal franka_msgs/ErrorRecoveryActionGoal“{}”

恢复后,franka_control_节点重新启动正在运行的控制器。这是可能的,因为当机器人反射被触发或发生错误时,节点不会死亡。所有这些功能都由franka_control_节点提供,可通过以下命令启动:

罗斯发射弗兰卡控制弗兰卡控制。启动机器人ip:=<fci ip>加载抓取器:=<true | false>

除了加载franka_control_节点外,启动文件还启动franka_control::FrankaStateController,用于读取和发布机器人状态,包括外部扳手、可配置变换和使用rivz可视化所需的关节状态。出于可视化目的,将启动robot_state_发布程序。

这个包还实现了franka_combined_control_节点,这是一个基于franka_hw::FrankaCombinedHW类的ros_控制硬件节点。加载的机器人集通过ROS参数服务器进行配置。这些参数必须位于硬件节点的名称空间中(参考franka_combined_control_node.yaml),如下所示:

机器人硬件:

robot_hardware:
  - panda_1
  - panda_2
  # (...)

panda_1:
  type: franka_hw/FrankaCombinableHW
  arm_id: panda_1
  joint_names:
    - panda_1_joint1
    - panda_1_joint2
    - panda_1_joint3
    - panda_1_joint4
    - panda_1_joint5
    - panda_1_joint6
    - panda_1_joint7
  # Configure the threshold angle for printing joint limit warnings.
  joint_limit_warning_threshold: 0.1 # [rad]
  # Activate rate limiter? [true|false]
  rate_limiting: true
  # Cutoff frequency of the low-pass filter. Set to >= 1000 to deactivate.
  cutoff_frequency: 1000
  # Internal controller for motion generators [joint_impedance|cartesian_impedance]
  internal_controller: joint_impedance
  # Configure the initial defaults for the collision behavior reflexes.
  collision_config:
    lower_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    upper_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    lower_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    upper_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    lower_force_thresholds_acceleration: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]
    upper_force_thresholds_acceleration: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]
    lower_force_thresholds_nominal: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]
    upper_force_thresholds_nominal: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]

panda_2:
  type: franka_hw/FrankaCombinableHW
  arm_id: panda_2
  joint_names:
    - panda_2_joint1
    - panda_2_joint2
    - panda_2_joint3
    - panda_2_joint4
    - panda_2_joint5
    - panda_2_joint6
    - panda_2_joint7
  # Configure the threshold angle for printing joint limit warnings.
  joint_limit_warning_threshold: 0.1 # [rad]
  # Activate rate limiter? [true|false]
  rate_limiting: true
  # Cutoff frequency of the low-pass filter. Set to >= 1000 to deactivate.
  cutoff_frequency: 1000
  # Internal controller for motion generators [joint_impedance|cartesian_impedance]
  internal_controller: joint_impedance
  # Configure the initial defaults for the collision behavior reflexes.
  collision_config:
    lower_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    upper_torque_thresholds_acceleration: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    lower_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    upper_torque_thresholds_nominal: [20.0, 20.0, 18.0, 18.0, 16.0, 14.0, 12.0]  # [Nm]
    lower_force_thresholds_acceleration: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]
    upper_force_thresholds_acceleration: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]
    lower_force_thresholds_nominal: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]
    upper_force_thresholds_nominal: [20.0, 20.0, 20.0, 25.0, 25.0, 25.0]  # [N, N, N, Nm, Nm, Nm]

Note:

确保选择唯一且一致的arm_id参数。ID必须与关节名称中的前缀匹配,并应符合加载到控制节点命名空间的机器人描述。

有关基于参数加载硬件类的更多信息,请参阅combined_robot_hw::CombinedRobotHW的官方文档https://github.com/ros-controls/ros_control.

第二个重要参数文件(参考franka_ros/franka_control/config/default_combined_controllers.yaml)配置了一组可以通过硬件节点启动的默认控制器。控制器必须与已发布的硬件匹配。提供的默认参数化(此处为两个机器人)如下所示:

panda_1_state_controller:
  type: franka_control/FrankaStateController
  arm_id: panda_1
  joint_names:
    - panda_1_joint1
    - panda_1_joint2
    - panda_1_joint3
    - panda_1_joint4
    - panda_1_joint5
    - panda_1_joint6
    - panda_1_joint7
  publish_rate: 30  # [Hz]

panda_2_state_controller:
  type: franka_control/FrankaStateController
  arm_id: panda_2
  joint_names:
    - panda_2_joint1
    - panda_2_joint2
    - panda_2_joint3
    - panda_2_joint4
    - panda_2_joint5
    - panda_2_joint6
    - panda_2_joint7
  publish_rate: 30  # [Hz]

我们提供了一个启动文件来运行franka_combined__control_节点,该节点带有用户指定的硬件和控制器配置文件,默认配置为两个机器人。通过以下方式启动:

roslaunch franka_control franka_combined_control.launch \
    robot_ips:=<your_robot_ips_as_a_map>                 # mandatory
    robot:=<path_to_your_robot_description> \
    args:=<xacro_args_passed_to_the_robot_description> \ # if needed
    robot_id:=<name_of_your_multi_robot_setup> \
    hw_config_file:=<path_to_your_hw_config_file>\       # includes the robot ips!
    controllers_file:=<path_to_your_default_controller_parameterization>\
    controllers_to_start:=<list_of_default_controllers_to_start>\
    joint_states_source_list:=<list_of_sources_to_fuse_a_complete_joint_states_topic>

该启动文件可以参数化以运行任意数量的机器人。 为此,只需以 franka_control/config/franka_combined_control_node.yaml 和 franka_ros/franka_control/config/default_combined_controllers.yaml 的样式编写您自己的配置文件。

重点

 确保将机器人的正确 IP 作为地图传递给 franka_combined_control.launch。 像这样:{<arm_id_1>/robot_ip: <my_ip_1>, <arm_id_2>/robot_ip: <my_ip_2>, ...}

 

 详细见原文 franka_ros — Franka Control Interface (FCI) documentation

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值