赞
踩
请安装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.
该软件包包含基于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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。