演示视频:Moveit+Gazebo:搭建双臂仿真平台(方案二)_哔哩哔哩_bilibili
实现效果如上图所示,有两个rviz界面分别展示两条臂的运动,gazebo中同步rviz中的运动。
先说一下方案二的大致思路:在两个命名空间下启动两个move group节点分别控制左臂和右臂,然后启动gazebo并添加需要的控制器,最后编写中间节点实现moveit和gazebo的通信。
不能通过之前单臂moveit+gazebo的方法(见往期博文)实现moveit+gazebo的联合仿真,因为在两个命名空间下,moveit和gazebo的通信受到影响,需要手动建立moveit到gazebo的通信。
方案二具有自身的优点:能够并行的控制两个机械臂,解决了方案一中两个机械臂的规划总是同时开始同时结束的问题。
方案二也具有问题,两个机械臂的move group节点是互相不知道对方的存在的,这可能导致碰撞的问题。
下面开始介绍方案二的探索实现过程。
首先正常启动机械臂 moveit_config包中的demo.launch
通过命令rqt_graph
查看节点图
打开demo.launch文件,在图中所示的地方添加<group>标签,主要目的是添加命名空间namespace,使得可以启动多个move group节点。
再次启动demo.launch文件,命令roslaunch right_arm_moveit_config demo.launch
再次查看节点图,可以看到,demo.launch 中启动的所有节点都在right_arm命名空间下正常运行。这就说明同时启动左臂和右臂的move group是可行的。
那么对于左臂我们也进行上述操作,同时启动左臂和右臂的demo.launch后,查看节点图。
这里可以看到,除了/tf话题,其他节点和话题都在各自的命名空间下正常运行,互相没有影响,对于/tf话题,这里我的解决方法是左臂和右臂的URDF或XACRO中各自link和joint不能相同,相同就会使move group不能分辨,可以在编写urdf或xacro时在每个臂的link和joint前都加上right_arm或left_arm的前缀,在rviz中进行规划,可以看到两臂都能正常规划,二者没有互相影响,可以实现并行的控制。
这里给出左臂和右臂的urdf文件,除此之外还需要安装franka-description包,安装该包的操作以及用moveit setup assistant的操作这里不再赘述,有很多教程都方便查找,当然最推荐的是moveit的官方教程。
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- | This document was autogenerated by xacro from left_arm.urdf.xacro | -->
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
<!-- =================================================================================== -->
<robot name="left_arm">
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link0">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link0.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
<mass value="0.629769"/>
<inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link0_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link0_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link0"/>
<child link="left_arm_link0_sc"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link1">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link1.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
<mass value="4.970684"/>
<inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link1_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link1_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link1"/>
<child link="left_arm_link1_sc"/>
</joint>
<joint name="left_arm_joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="left_arm_link0"/>
<child link="left_arm_link1"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link2">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link2.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.003141 -0.02872 0.003495"/>
<mass value="0.646926"/>
<inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link2_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link2_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link2"/>
<child link="left_arm_link2_sc"/>
</joint>
<joint name="left_arm_joint2" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="left_arm_link1"/>
<child link="left_arm_link2"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link3">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link3.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="2.7518e-02 3.9252e-02 -6.6502e-02"/>
<mass value="3.228604"/>
<inertia ixx="0.037242" ixy="-0.004761" ixz="-0.011396" iyy="0.036155" iyz="-0.012805" izz="0.01083"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link3_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link3_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link3"/>
<child link="left_arm_link3_sc"/>
</joint>
<joint name="left_arm_joint3" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 -0.316 0"/>
<parent link="left_arm_link2"/>
<child link="left_arm_link3"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link4">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link4.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-5.317e-02 1.04419e-01 2.7454e-02"/>
<mass value="3.587895"/>
<inertia ixx="0.025853" ixy="0.007796" ixz="-0.001332" iyy="0.019552" iyz="0.008641" izz="0.028323"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link4_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link4_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link4"/>
<child link="left_arm_link4_sc"/>
</joint>
<joint name="left_arm_joint4" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.0825 0 0"/>
<parent link="left_arm_link3"/>
<child link="left_arm_link4"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-3.0718" upper="-0.0698" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link5">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link5.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-1.1953e-02 4.1065e-02 -3.8437e-02"/>
<mass value="1.225946"/>
<inertia ixx="0.035549" ixy="-0.002117" ixz="-0.004037" iyy="0.029474" iyz="0.000229" izz="0.008627"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link5_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link5_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link5"/>
<child link="left_arm_link5_sc"/>
</joint>
<joint name="left_arm_joint5" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="-0.0825 0.384 0"/>
<parent link="left_arm_link4"/>
<child link="left_arm_link5"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link6">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link6.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="6.0149e-02 -1.4117e-02 -1.0517e-02"/>
<mass value="1.666555"/>
<inertia ixx="0.001964" ixy="0.000109" ixz="-0.001158" iyy="0.004354" iyz="0.000341" izz="0.005433"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link6_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link6_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="left_arm_link6"/>
<child link="left_arm_link6_sc"/>
</joint>
<joint name="left_arm_joint6" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="left_arm_link5"/>
<child link="left_arm_link6"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-0.0175" upper="3.7525" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="left_arm_link7">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link7.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="1.0517e-02 -4.252e-03 6.1597e-02"/>
<mass value="0.735522"/>
<inertia ixx="0.012516" ixy="-0.000428" ixz="-0.001196" iyy="0.010027" iyz="-0.000741" izz="0.004815"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="left_arm_link7_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="left_arm_link7_sc_joint" type="fixed">
<origin rpy="0 0 0.7853981633974483"/>
<parent link="left_arm_link7"/>
<child link="left_arm_link7_sc"/>
</joint>
<joint name="left_arm_joint7" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.088 0 0"/>
<parent link="left_arm_link6"/>
<child link="left_arm_link7"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<link name="left_arm_link8"/>
<joint name="left_arm_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="left_arm_link7"/>
<child link="left_arm_link8"/>
</joint>
<!-- Gazebo requires a joint to a link called "world" for statically mounted robots -->
<link name="world"/>
<joint name="world_joint" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0"/>
<parent link="world"/>
<child link="left_arm_link0"/>
</joint>
<gazebo reference="left_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint2">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint2_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint3">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint3_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint4">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint4_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint6">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint6_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint7">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint7_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint1">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint1_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint2">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint2_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint3">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint3_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint4">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint4_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint5">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint5_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint6">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint6_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint7">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint7_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint1">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint1_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint2">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint2_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint3">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint3_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint4">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint4_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint5">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint5_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint6">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint6_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="left_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="left_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_arm_joint7">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint7_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<transmission name="left_arm_franka_state">
<type>franka_hw/FrankaStateInterface</type>
<joint name="left_arm_joint1">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint2">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint3">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint4">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint5">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint6">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint7">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<actuator name="left_arm_motor1">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_motor2">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_motor3">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_motor4">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_motor5">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_motor6">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_motor7">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
</transmission>
<transmission name="left_arm_franka_model">
<type>franka_hw/FrankaModelInterface</type>
<joint name="left_arm_joint1">
<role>root</role>
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</joint>
<joint name="left_arm_joint8">
<role>tip</role>
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</joint>
<actuator name="left_arm_joint1_motor_root">
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</actuator>
<actuator name="left_arm_joint8_motor_tip">
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo>
<plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
<controlPeriod>0.001</controlPeriod>
<robotSimType>franka_gazebo/FrankaHWSim</robotSimType>
</plugin>
<self_collide>true</self_collide>
</gazebo>
</robot>
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- | This document was autogenerated by xacro from right_arm.urdf.xacro | -->
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
<!-- =================================================================================== -->
<robot name="right_arm">
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link0">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link0.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
<mass value="0.629769"/>
<inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link0_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link0_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link0"/>
<child link="right_arm_link0_sc"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link1">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link1.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
<mass value="4.970684"/>
<inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link1_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link1_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link1"/>
<child link="right_arm_link1_sc"/>
</joint>
<joint name="right_arm_joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="right_arm_link0"/>
<child link="right_arm_link1"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link2">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link2.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.003141 -0.02872 0.003495"/>
<mass value="0.646926"/>
<inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link2_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link2_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link2"/>
<child link="right_arm_link2_sc"/>
</joint>
<joint name="right_arm_joint2" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="right_arm_link1"/>
<child link="right_arm_link2"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link3">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link3.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="2.7518e-02 3.9252e-02 -6.6502e-02"/>
<mass value="3.228604"/>
<inertia ixx="0.037242" ixy="-0.004761" ixz="-0.011396" iyy="0.036155" iyz="-0.012805" izz="0.01083"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link3_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link3_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link3"/>
<child link="right_arm_link3_sc"/>
</joint>
<joint name="right_arm_joint3" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 -0.316 0"/>
<parent link="right_arm_link2"/>
<child link="right_arm_link3"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link4">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link4.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-5.317e-02 1.04419e-01 2.7454e-02"/>
<mass value="3.587895"/>
<inertia ixx="0.025853" ixy="0.007796" ixz="-0.001332" iyy="0.019552" iyz="0.008641" izz="0.028323"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link4_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link4_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link4"/>
<child link="right_arm_link4_sc"/>
</joint>
<joint name="right_arm_joint4" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.0825 0 0"/>
<parent link="right_arm_link3"/>
<child link="right_arm_link4"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-3.0718" upper="-0.0698" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link5">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link5.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-1.1953e-02 4.1065e-02 -3.8437e-02"/>
<mass value="1.225946"/>
<inertia ixx="0.035549" ixy="-0.002117" ixz="-0.004037" iyy="0.029474" iyz="0.000229" izz="0.008627"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link5_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link5_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link5"/>
<child link="right_arm_link5_sc"/>
</joint>
<joint name="right_arm_joint5" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="-0.0825 0.384 0"/>
<parent link="right_arm_link4"/>
<child link="right_arm_link5"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link6">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link6.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="6.0149e-02 -1.4117e-02 -1.0517e-02"/>
<mass value="1.666555"/>
<inertia ixx="0.001964" ixy="0.000109" ixz="-0.001158" iyy="0.004354" iyz="0.000341" izz="0.005433"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link6_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link6_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="right_arm_link6"/>
<child link="right_arm_link6_sc"/>
</joint>
<joint name="right_arm_joint6" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="right_arm_link5"/>
<child link="right_arm_link6"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-0.0175" upper="3.7525" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="right_arm_link7">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link7.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="1.0517e-02 -4.252e-03 6.1597e-02"/>
<mass value="0.735522"/>
<inertia ixx="0.012516" ixy="-0.000428" ixz="-0.001196" iyy="0.010027" iyz="-0.000741" izz="0.004815"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="right_arm_link7_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="right_arm_link7_sc_joint" type="fixed">
<origin rpy="0 0 0.7853981633974483"/>
<parent link="right_arm_link7"/>
<child link="right_arm_link7_sc"/>
</joint>
<joint name="right_arm_joint7" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.088 0 0"/>
<parent link="right_arm_link6"/>
<child link="right_arm_link7"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<link name="right_arm_link8"/>
<joint name="right_arm_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="right_arm_link7"/>
<child link="right_arm_link8"/>
</joint>
<!-- Gazebo requires a joint to a link called "world" for statically mounted robots -->
<link name="world"/>
<joint name="world_joint" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0"/>
<parent link="world"/>
<child link="right_arm_link0"/>
</joint>
<gazebo reference="right_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint2">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint2_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint3">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint3_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint4">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint4_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint6">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint6_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint7">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint7_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint1">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint1_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint2">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint2_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint3">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint3_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint4">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint4_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint5">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint5_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint6">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint6_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint7">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint7_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint1">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint1_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint2">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint2_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint3">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint3_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint4">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint4_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint5">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint5_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint6">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint6_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="right_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="right_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="right_arm_joint7">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint7_motor">
<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
</actuator>
</transmission>
<transmission name="right_arm_franka_state">
<type>franka_hw/FrankaStateInterface</type>
<joint name="right_arm_joint1">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint2">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint3">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint4">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint5">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint6">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint7">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</joint>
<actuator name="right_arm_motor1">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_motor2">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_motor3">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_motor4">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_motor5">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_motor6">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_motor7">
<hardwareInterface>franka_hw/FrankaStateInterface</hardwareInterface>
</actuator>
</transmission>
<transmission name="right_arm_franka_model">
<type>franka_hw/FrankaModelInterface</type>
<joint name="right_arm_joint1">
<role>root</role>
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</joint>
<joint name="right_arm_joint8">
<role>tip</role>
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</joint>
<actuator name="right_arm_joint1_motor_root">
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</actuator>
<actuator name="right_arm_joint8_motor_tip">
<hardwareInterface>franka_hw/FrankaModelInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo>
<plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
<controlPeriod>0.001</controlPeriod>
<robotSimType>franka_gazebo/FrankaHWSim</robotSimType>
</plugin>
<self_collide>true</self_collide>
</gazebo>
</robot>
下一步我们来解决gazebo,先给出launch文件,这个launch文件的主要作用就是启动gazebo,加载机器人的模型,加载控制器。
<?xml version="1.0"?>
<launch>
<!-- Launch empty Gazebo world -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true" />
<arg name="gui" value="true" />
<arg name="paused" value="false" />
<arg name="debug" value="false" />
</include>
<param name="robot_description" command="$(find xacro)/xacro '$(find panda_dual_arms)/robot_description/dual_panda_without_hand.urdf'" />
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -param robot_description -model panda_dual_arms" />
<rosparam file="$(find panda_dual_arms)/config/dual_arms_gazebo_controller.yaml" command="load" />
<node name="controller_spawner" pkg="controller_manager" type="spawner" args="joint_state_controller right_arm_trajectory_controller left_arm_trajectory_controller" respawn="false" output="screen" />
<!-- Robot state publisher -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher">
<param name="publish_frequency" type="double" value="50.0" />
<param name="tf_prefix" type="string" value="" />
</node>
</launch>
注意这里加载的机器人模型是在一个文件中编写了双臂(包括一个简单的工作台),而之前moveit setup assitant生成的moveit config包,我们用了两个文件编写两个机械臂的urdf。
下面给出这里需要的文件。
<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- | This document was autogenerated by xacro from dual_panda_without_hand.urdf.xacro | -->
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
<!-- =================================================================================== -->
<robot name="panda_multiple_arms">
<link name="world"/>
<!-- box shaped table as base for the 2 Pandas -->
<link name="base">
<visual>
<origin rpy="0 0 0" xyz="0 0 0.5"/>
<geometry>
<box size="1 2 1"/>
</geometry>
<material name="White">
<color rgba="1.0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0.5"/>
<geometry>
<box size="1 2 1"/>
</geometry>
</collision>
<inertial>
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
<mass value="10.0"/>
<inertia ixx="0.001" ixy="0.0" ixz="0.001" iyy="0.0" iyz="0.0" izz="0.001"/>
</inertial>
</link>
<joint name="base_to_world" type="fixed">
<parent link="world"/>
<child link="base"/>
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
</joint>
<joint name="d_right_arm_joint_base" type="fixed">
<parent link="base"/>
<child link="d_right_arm_link0"/>
<origin rpy="0 0 0" xyz="0 -0.5 1"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link0">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link0.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
<mass value="0.629769"/>
<inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link0_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link0_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link0"/>
<child link="d_right_arm_link0_sc"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link1">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link1.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
<mass value="4.970684"/>
<inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link1_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link1_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link1"/>
<child link="d_right_arm_link1_sc"/>
</joint>
<joint name="d_right_arm_joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="d_right_arm_link0"/>
<child link="d_right_arm_link1"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link2">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link2.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.003141 -0.02872 0.003495"/>
<mass value="0.646926"/>
<inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link2_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link2_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link2"/>
<child link="d_right_arm_link2_sc"/>
</joint>
<joint name="d_right_arm_joint2" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_right_arm_link1"/>
<child link="d_right_arm_link2"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link3">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link3.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="2.7518e-02 3.9252e-02 -6.6502e-02"/>
<mass value="3.228604"/>
<inertia ixx="0.037242" ixy="-0.004761" ixz="-0.011396" iyy="0.036155" iyz="-0.012805" izz="0.01083"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link3_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link3_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link3"/>
<child link="d_right_arm_link3_sc"/>
</joint>
<joint name="d_right_arm_joint3" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 -0.316 0"/>
<parent link="d_right_arm_link2"/>
<child link="d_right_arm_link3"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link4">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link4.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-5.317e-02 1.04419e-01 2.7454e-02"/>
<mass value="3.587895"/>
<inertia ixx="0.025853" ixy="0.007796" ixz="-0.001332" iyy="0.019552" iyz="0.008641" izz="0.028323"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link4_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link4_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link4"/>
<child link="d_right_arm_link4_sc"/>
</joint>
<joint name="d_right_arm_joint4" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.0825 0 0"/>
<parent link="d_right_arm_link3"/>
<child link="d_right_arm_link4"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-3.0718" upper="-0.0698" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link5">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/mes<?xml version="1.0" ?>
<!-- =================================================================================== -->
<!-- | This document was autogenerated by xacro from dual_panda_without_hand.urdf.xacro | -->
<!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | -->
<!-- =================================================================================== -->
<robot name="panda_multiple_arms">
<link name="world"/>
<!-- box shaped table as base for the 2 Pandas -->
<link name="base">
<visual>
<origin rpy="0 0 0" xyz="0 0 0.5"/>
<geometry>
<box size="1 2 1"/>
</geometry>
<material name="White">
<color rgba="1.0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="0 0 0.5"/>
<geometry>
<box size="1 2 1"/>
</geometry>
</collision>
<inertial>
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
<mass value="10.0"/>
<inertia ixx="0.001" ixy="0.0" ixz="0.001" iyy="0.0" iyz="0.0" izz="0.001"/>
</inertial>
</link>
<joint name="base_to_world" type="fixed">
<parent link="world"/>
<child link="base"/>
<origin rpy="0.0 0.0 0.0" xyz="0.0 0.0 0.0"/>
</joint>
<joint name="d_right_arm_joint_base" type="fixed">
<parent link="base"/>
<child link="d_right_arm_link0"/>
<origin rpy="0 0 0" xyz="0 -0.5 1"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link0">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link0.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
<mass value="0.629769"/>
<inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link0_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link0_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link0"/>
<child link="d_right_arm_link0_sc"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link1">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link1.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
<mass value="4.970684"/>
<inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link1_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link1_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link1"/>
<child link="d_right_arm_link1_sc"/>
</joint>
<joint name="d_right_arm_joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="d_right_arm_link0"/>
<child link="d_right_arm_link1"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link2">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link2.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.003141 -0.02872 0.003495"/>
<mass value="0.646926"/>
<inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link2_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link2_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link2"/>
<child link="d_right_arm_link2_sc"/>
</joint>
<joint name="d_right_arm_joint2" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_right_arm_link1"/>
<child link="d_right_arm_link2"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link3">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link3.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="2.7518e-02 3.9252e-02 -6.6502e-02"/>
<mass value="3.228604"/>
<inertia ixx="0.037242" ixy="-0.004761" ixz="-0.011396" iyy="0.036155" iyz="-0.012805" izz="0.01083"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link3_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link3_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link3"/>
<child link="d_right_arm_link3_sc"/>
</joint>
<joint name="d_right_arm_joint3" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 -0.316 0"/>
<parent link="d_right_arm_link2"/>
<child link="d_right_arm_link3"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link4">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link4.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-5.317e-02 1.04419e-01 2.7454e-02"/>
<mass value="3.587895"/>
<inertia ixx="0.025853" ixy="0.007796" ixz="-0.001332" iyy="0.019552" iyz="0.008641" izz="0.028323"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link4_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link4_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link4"/>
<child link="d_right_arm_link4_sc"/>
</joint>
<joint name="d_right_arm_joint4" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.0825 0 0"/>
<parent link="d_right_arm_link3"/>
<child link="d_right_arm_link4"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-3.0718" upper="-0.0698" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link5">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link5.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-1.1953e-02 4.1065e-02 -3.8437e-02"/>
<mass value="1.225946"/>
<inertia ixx="0.035549" ixy="-0.002117" ixz="-0.004037" iyy="0.029474" iyz="0.000229" izz="0.008627"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link5_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link5_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link5"/>
<child link="d_right_arm_link5_sc"/>
</joint>
<joint name="d_right_arm_joint5" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="-0.0825 0.384 0"/>
<parent link="d_right_arm_link4"/>
<child link="d_right_arm_link5"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link6">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link6.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="6.0149e-02 -1.4117e-02 -1.0517e-02"/>
<mass value="1.666555"/>
<inertia ixx="0.001964" ixy="0.000109" ixz="-0.001158" iyy="0.004354" iyz="0.000341" izz="0.005433"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link6_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link6_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link6"/>
<child link="d_right_arm_link6_sc"/>
</joint>
<joint name="d_right_arm_joint6" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_right_arm_link5"/>
<child link="d_right_arm_link6"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-0.0175" upper="3.7525" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link7">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link7.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="1.0517e-02 -4.252e-03 6.1597e-02"/>
<mass value="0.735522"/>
<inertia ixx="0.012516" ixy="-0.000428" ixz="-0.001196" iyy="0.010027" iyz="-0.000741" izz="0.004815"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link7_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link7_sc_joint" type="fixed">
<origin rpy="0 0 0.7853981633974483"/>
<parent link="d_right_arm_link7"/>
<child link="d_right_arm_link7_sc"/>
</joint>
<joint name="d_right_arm_joint7" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.088 0 0"/>
<parent link="d_right_arm_link6"/>
<child link="d_right_arm_link7"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<link name="d_right_arm_link8"/>
<joint name="d_right_arm_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="d_right_arm_link7"/>
<child link="d_right_arm_link8"/>
</joint>
<joint name="d_left_arm_joint_base" type="fixed">
<parent link="base"/>
<child link="d_left_arm_link0"/>
<origin rpy="0 0 0" xyz="0 0.5 1"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link0">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link0.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
<mass value="0.629769"/>
<inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link0_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link0_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link0"/>
<child link="d_left_arm_link0_sc"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link1">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link1.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
<mass value="4.970684"/>
<inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link1_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link1_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link1"/>
<child link="d_left_arm_link1_sc"/>
</joint>
<joint name="d_left_arm_joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="d_left_arm_link0"/>
<child link="d_left_arm_link1"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link2">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link2.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.003141 -0.02872 0.003495"/>
<mass value="0.646926"/>
<inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link2_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link2_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link2"/>
<child link="d_left_arm_link2_sc"/>
</joint>
<joint name="d_left_arm_joint2" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_left_arm_link1"/>
<child link="d_left_arm_link2"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link3">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link3.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="2.7518e-02 3.9252e-02 -6.6502e-02"/>
<mass value="3.228604"/>
<inertia ixx="0.037242" ixy="-0.004761" ixz="-0.011396" iyy="0.036155" iyz="-0.012805" izz="0.01083"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link3_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link3_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link3"/>
<child link="d_left_arm_link3_sc"/>
</joint>
<joint name="d_left_arm_joint3" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 -0.316 0"/>
<parent link="d_left_arm_link2"/>
<child link="d_left_arm_link3"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link4">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link4.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-5.317e-02 1.04419e-01 2.7454e-02"/>
<mass value="3.587895"/>
<inertia ixx="0.025853" ixy="0.007796" ixz="-0.001332" iyy="0.019552" iyz="0.008641" izz="0.028323"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link4_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link4_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link4"/>
<child link="d_left_arm_link4_sc"/>
</joint>
<joint name="d_left_arm_joint4" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.0825 0 0"/>
<parent link="d_left_arm_link3"/>
<child link="d_left_arm_link4"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-3.0718" upper="-0.0698" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link5">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link5.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-1.1953e-02 4.1065e-02 -3.8437e-02"/>
<mass value="1.225946"/>
<inertia ixx="0.035549" ixy="-0.002117" ixz="-0.004037" iyy="0.029474" iyz="0.000229" izz="0.008627"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link5_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link5_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link5"/>
<child link="d_left_arm_link5_sc"/>
</joint>
<joint name="d_left_arm_joint5" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="-0.0825 0.384 0"/>
<parent link="d_left_arm_link4"/>
<child link="d_left_arm_link5"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link6">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link6.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="6.0149e-02 -1.4117e-02 -1.0517e-02"/>
<mass value="1.666555"/>
<inertia ixx="0.001964" ixy="0.000109" ixz="-0.001158" iyy="0.004354" iyz="0.000341" izz="0.005433"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link6_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link6_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link6"/>
<child link="d_left_arm_link6_sc"/>
</joint>
<joint name="d_left_arm_joint6" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_left_arm_link5"/>
<child link="d_left_arm_link6"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-0.0175" upper="3.7525" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link7">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link7.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="1.0517e-02 -4.252e-03 6.1597e-02"/>
<mass value="0.735522"/>
<inertia ixx="0.012516" ixy="-0.000428" ixz="-0.001196" iyy="0.010027" iyz="-0.000741" izz="0.004815"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link7_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link7_sc_joint" type="fixed">
<origin rpy="0 0 0.7853981633974483"/>
<parent link="d_left_arm_link7"/>
<child link="d_left_arm_link7_sc"/>
</joint>
<joint name="d_left_arm_joint7" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.088 0 0"/>
<parent link="d_left_arm_link6"/>
<child link="d_left_arm_link7"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<link name="d_left_arm_link8"/>
<joint name="d_left_arm_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="d_left_arm_link7"/>
<child link="d_left_arm_link8"/>
</joint>
<gazebo reference="d_right_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint2">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint2_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint3">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint3_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint4">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint4_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint6">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint6_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint7">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint7_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint2">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint2_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint3">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint3_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint4">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint4_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint6">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint6_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint7">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint7_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<!-- load ros_control plugin -->
<gazebo>
<plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control"/>
</gazebo>
</robot>
hes/collision/link5.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-1.1953e-02 4.1065e-02 -3.8437e-02"/>
<mass value="1.225946"/>
<inertia ixx="0.035549" ixy="-0.002117" ixz="-0.004037" iyy="0.029474" iyz="0.000229" izz="0.008627"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link5_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link5_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link5"/>
<child link="d_right_arm_link5_sc"/>
</joint>
<joint name="d_right_arm_joint5" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="-0.0825 0.384 0"/>
<parent link="d_right_arm_link4"/>
<child link="d_right_arm_link5"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link6">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link6.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="6.0149e-02 -1.4117e-02 -1.0517e-02"/>
<mass value="1.666555"/>
<inertia ixx="0.001964" ixy="0.000109" ixz="-0.001158" iyy="0.004354" iyz="0.000341" izz="0.005433"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link6_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link6_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_right_arm_link6"/>
<child link="d_right_arm_link6_sc"/>
</joint>
<joint name="d_right_arm_joint6" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_right_arm_link5"/>
<child link="d_right_arm_link6"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-0.0175" upper="3.7525" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_right_arm_link7">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link7.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="1.0517e-02 -4.252e-03 6.1597e-02"/>
<mass value="0.735522"/>
<inertia ixx="0.012516" ixy="-0.000428" ixz="-0.001196" iyy="0.010027" iyz="-0.000741" izz="0.004815"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_right_arm_link7_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_right_arm_link7_sc_joint" type="fixed">
<origin rpy="0 0 0.7853981633974483"/>
<parent link="d_right_arm_link7"/>
<child link="d_right_arm_link7_sc"/>
</joint>
<joint name="d_right_arm_joint7" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.088 0 0"/>
<parent link="d_right_arm_link6"/>
<child link="d_right_arm_link7"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<link name="d_right_arm_link8"/>
<joint name="d_right_arm_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="d_right_arm_link7"/>
<child link="d_right_arm_link8"/>
</joint>
<joint name="d_left_arm_joint_base" type="fixed">
<parent link="base"/>
<child link="d_left_arm_link0"/>
<origin rpy="0 0 0" xyz="0 0.5 1"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link0">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link0.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link0.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.041018 -0.00014 0.049974"/>
<mass value="0.629769"/>
<inertia ixx="0.00315" ixy="8.2904e-07" ixz="0.00015" iyy="0.00388" iyz="8.2299e-06" izz="0.004285"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link0_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link0_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link0"/>
<child link="d_left_arm_link0_sc"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link1">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link1.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link1.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="0.003875 0.002081 -0.04762"/>
<mass value="4.970684"/>
<inertia ixx="0.70337" ixy="-0.000139" ixz="0.006772" iyy="0.70661" iyz="0.019169" izz="0.009117"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link1_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link1_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link1"/>
<child link="d_left_arm_link1_sc"/>
</joint>
<joint name="d_left_arm_joint1" type="revolute">
<origin rpy="0 0 0" xyz="0 0 0.333"/>
<parent link="d_left_arm_link0"/>
<child link="d_left_arm_link1"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link2">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link2.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link2.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-0.003141 -0.02872 0.003495"/>
<mass value="0.646926"/>
<inertia ixx="0.007962" ixy="-0.003925" ixz="0.010254" iyy="0.02811" iyz="0.000704" izz="0.025995"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link2_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link2_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link2"/>
<child link="d_left_arm_link2_sc"/>
</joint>
<joint name="d_left_arm_joint2" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_left_arm_link1"/>
<child link="d_left_arm_link2"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-1.7628" upper="1.7628" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-1.7628" soft_upper_limit="1.7628"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link3">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link3.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link3.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="2.7518e-02 3.9252e-02 -6.6502e-02"/>
<mass value="3.228604"/>
<inertia ixx="0.037242" ixy="-0.004761" ixz="-0.011396" iyy="0.036155" iyz="-0.012805" izz="0.01083"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link3_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link3_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link3"/>
<child link="d_left_arm_link3_sc"/>
</joint>
<joint name="d_left_arm_joint3" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 -0.316 0"/>
<parent link="d_left_arm_link2"/>
<child link="d_left_arm_link3"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-2.8973" upper="2.8973" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link4">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link4.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link4.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-5.317e-02 1.04419e-01 2.7454e-02"/>
<mass value="3.587895"/>
<inertia ixx="0.025853" ixy="0.007796" ixz="-0.001332" iyy="0.019552" iyz="0.008641" izz="0.028323"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link4_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link4_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link4"/>
<child link="d_left_arm_link4_sc"/>
</joint>
<joint name="d_left_arm_joint4" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.0825 0 0"/>
<parent link="d_left_arm_link3"/>
<child link="d_left_arm_link4"/>
<axis xyz="0 0 1"/>
<limit effort="87.0" lower="-3.0718" upper="-0.0698" velocity="2.175"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-3.0718" soft_upper_limit="-0.0698"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link5">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link5.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link5.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="-1.1953e-02 4.1065e-02 -3.8437e-02"/>
<mass value="1.225946"/>
<inertia ixx="0.035549" ixy="-0.002117" ixz="-0.004037" iyy="0.029474" iyz="0.000229" izz="0.008627"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link5_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link5_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link5"/>
<child link="d_left_arm_link5_sc"/>
</joint>
<joint name="d_left_arm_joint5" type="revolute">
<origin rpy="-1.5707963267948966 0 0" xyz="-0.0825 0.384 0"/>
<parent link="d_left_arm_link4"/>
<child link="d_left_arm_link5"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link6">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link6.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link6.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="6.0149e-02 -1.4117e-02 -1.0517e-02"/>
<mass value="1.666555"/>
<inertia ixx="0.001964" ixy="0.000109" ixz="-0.001158" iyy="0.004354" iyz="0.000341" izz="0.005433"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link6_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link6_sc_joint" type="fixed">
<origin rpy="0 0 0"/>
<parent link="d_left_arm_link6"/>
<child link="d_left_arm_link6_sc"/>
</joint>
<joint name="d_left_arm_joint6" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0 0 0"/>
<parent link="d_left_arm_link5"/>
<child link="d_left_arm_link6"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-0.0175" upper="3.7525" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-0.0175" soft_upper_limit="3.7525"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<!-- sub-link defining detailed meshes for collision with environment -->
<link name="d_left_arm_link7">
<visual>
<geometry>
<mesh filename="package://franka_description/meshes/visual/link7.dae"/>
</geometry>
</visual>
<collision>
<geometry>
<mesh filename="package://franka_description/meshes/collision/link7.stl"/>
</geometry>
</collision>
<inertial>
<origin rpy="0 0 0" xyz="1.0517e-02 -4.252e-03 6.1597e-02"/>
<mass value="0.735522"/>
<inertia ixx="0.012516" ixy="-0.000428" ixz="-0.001196" iyy="0.010027" iyz="-0.000741" izz="0.004815"/>
</inertial>
</link>
<!-- sub-link defining coarse geometries of real robot's internal self-collision -->
<link name="d_left_arm_link7_sc">
</link>
<!-- fixed joint between both sub-links -->
<joint name="d_left_arm_link7_sc_joint" type="fixed">
<origin rpy="0 0 0.7853981633974483"/>
<parent link="d_left_arm_link7"/>
<child link="d_left_arm_link7_sc"/>
</joint>
<joint name="d_left_arm_joint7" type="revolute">
<origin rpy="1.5707963267948966 0 0" xyz="0.088 0 0"/>
<parent link="d_left_arm_link6"/>
<child link="d_left_arm_link7"/>
<axis xyz="0 0 1"/>
<limit effort="12.0" lower="-2.8973" upper="2.8973" velocity="2.61"/>
<safety_controller k_position="100.0" k_velocity="40.0" soft_lower_limit="-2.8973" soft_upper_limit="2.8973"/>
<dynamics D="1" K="7000" damping="0.003" friction="0.0" mu_coulomb="0" mu_viscous="16"/>
</joint>
<link name="d_left_arm_link8"/>
<joint name="d_left_arm_joint8" type="fixed">
<origin rpy="0 0 0" xyz="0 0 0.107"/>
<parent link="d_left_arm_link7"/>
<child link="d_left_arm_link8"/>
</joint>
<gazebo reference="d_right_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint2">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint2_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint3">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint3_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint4">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint4_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint6">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint6_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_right_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_right_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_right_arm_joint7">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_right_arm_joint7_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint1">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint1_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint1_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint2">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint2_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint2">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint2_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint3">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint3_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint3">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint3_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint4">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint4_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint4">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint4_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint5">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint5_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint5">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint5_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint6">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint6_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint6">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint6_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<gazebo reference="d_left_arm_joint7">
<!-- Needed for ODE to output external wrenches on joints -->
<provideFeedback>true</provideFeedback>
</gazebo>
<transmission name="d_left_arm_joint7_transmission">
<type>transmission_interface/SimpleTransmission</type>
<joint name="d_left_arm_joint7">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="d_left_arm_joint7_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</actuator>
</transmission>
<!-- load ros_control plugin -->
<gazebo>
<plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control"/>
</gazebo>
</robot>
再给出加载机械臂控制器的yaml文件
right_arm_trajectory_controller.yaml:
right_arm_trajectory_controller:
type: "position_controllers/JointTrajectoryController"
joints:
- right_arm_joint1
- right_arm_joint2
- right_arm_joint3
- right_arm_joint4
- right_arm_joint5
- right_arm_joint6
- right_arm_joint7
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
right_arm_joint1: {trajectory: 0.1, goal: 0.1}
right_arm_joint2: {trajectory: 0.1, goal: 0.1}
right_arm_joint3: {trajectory: 0.1, goal: 0.1}
right_arm_joint4: {trajectory: 0.1, goal: 0.1}
right_arm_joint5: {trajectory: 0.1, goal: 0.1}
right_arm_joint6: {trajectory: 0.1, goal: 0.1}
right_arm_joint7: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 10
right_hand_controller:
type: "effort_controllers/JointTrajectoryController"
joints:
- right_arm_finger_joint1
gains:
right_arm_finger_joint1: {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}
left_arm_trajectory_controller.yaml
left_arm_trajectory_controller:
type: "position_controllers/JointTrajectoryController"
joints:
- left_arm_joint1
- left_arm_joint2
- left_arm_joint3
- left_arm_joint4
- left_arm_joint5
- left_arm_joint6
- left_arm_joint7
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
left_arm_joint1: {trajectory: 0.1, goal: 0.1}
left_arm_joint2: {trajectory: 0.1, goal: 0.1}
left_arm_joint3: {trajectory: 0.1, goal: 0.1}
left_arm_joint4: {trajectory: 0.1, goal: 0.1}
left_arm_joint5: {trajectory: 0.1, goal: 0.1}
left_arm_joint6: {trajectory: 0.1, goal: 0.1}
left_arm_joint7: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 10
left_hand_controller:
type: "effort_controllers/JointTrajectoryController"
joints:
- left_arm_finger_joint1
gains:
left_arm_finger_joint1: {p: 50.0, d: 1.0, i: 0.01, i_clamp: 1.0}
启动launch文件效果如下所示:
这里报错是因为没有添加pid参数,忽略即可,没有影响。
通过命令rostopic list
,可以看到,控制器添加成功后,可以通过图上所示的话题。
控制器的作用就是为moveit提供一个/follow_joint_trajectory的接口,使得moveit可以通过action控制机械臂,但在两个命名空间下,move group就无法识别到接口,使得我们需要自己完成从moveit到gazebo的通信。
最后一步就是实现moveit到gazebo的通信,首先任意启动一个臂的demo.launch,另开一个终端通过命令rostopic list
, 可以看到如下图所示的topic,再通过命令rostopic echo /left_arm/execute_trajectory/goal
监听此话题
当我们在rviz界面中进行机械臂的规划时(也就是 点击execute时)可以看到监听的终端展示的机械臂关节轨迹信息,将这些信息收集并通过gazebo加载控制器的acction接口同步发送,即可建立moveit到gazebo的通信。
通过命令rqt
,详细查看这两个topic的信息,可以看到,下图中框出的部分是相同类型的,因此,我们就可以通过手动编写节点,获取到move group中规划得到的轨迹信息,再通过action向gazebo中的控制新发送goal,使得moveit和gazebo之间建立通信。
具体代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from trajectory_msgs.msg import *
from control_msgs.msg import *
from moveit_msgs.msg import *
import rospy
import actionlib
JOINT_NAMES = ['d_left_arm_joint1', 'd_left_arm_joint2', 'd_left_arm_joint3',
'd_left_arm_joint4', 'd_left_arm_joint5', 'd_left_arm_joint6','d_left_arm_joint7']
def callback(goal):
print(goal.goal.trajectory.joint_trajectory)
#agoal就是我们向发送的关节运动数据,实例化为FollowJointTrajectoryGoal()类
agoal = FollowJointTrajectoryGoal()
#goal当中的trajectory就是我们要操作的,其余的Header之类的不用管
agoal.trajectory = JointTrajectory()
agoal.trajectory = goal.goal.trajectory.joint_trajectory
#agoal.trajectory底下一共还有两个成员,分别是joint_names和points,先给joint_names赋值
agoal.trajectory.joint_names = JOINT_NAMES
mediator_client.send_goal(agoal)
def mediator():
global mediator_client
#初始化ros节点
rospy.init_node("left_mediator")
#实例化一个action的类,命名为client,与上述client对应,话题为right_arm_trajectory_controller/follow_joint_trajectory,消息类型为FollowJointTrajectoryAction
mediator_client = actionlib.SimpleActionClient('left_arm_trajectory_controller/follow_joint_trajectory', FollowJointTrajectoryAction)
print("----------Waiting for server-------------")
#等待server
mediator_client.wait_for_server()
print("----------Connect to server--------------")
mediator_subscriber = rospy.Subscriber("left_arm/execute_trajectory/goal",ExecuteTrajectoryActionGoal,callback)
rospy.spin()
if __name__ == "__main__":
mediator()