ur_modern_driver翻译README.md

# ur_modern_driverhtml

这是UR机器人系列UR3/UR5/UR10机械臂的新驱动。这个驱动替换了原来的旧驱动,解决掉一些旧驱动没法解决的问题,同时提升了使用性以及和ros_control的兼容性。git

## 提高性能github

* 当机械臂正在执行运动时,能够有但只能有一个脚本同时做用机械臂,这意味着在驱动链接上时,示教器也能移动机械臂。
* 新驱动覆盖了原先驱动的全部功能:
  * action接口"/follow_joint_trajectory"与MoveIt无缝契合
  * 在"/joint_states"话题上发布机器人关节状态
  * 在"/wrench"话题上发布TCP力以及力矩
  * 在"/ur_driver/io_states"话题上发布IO状态
  * 使用rosservice call能够设置outputs和payload(注意:我不肯定设置的payload是否能实际上起做用)
 
* 除此以外,新驱动订阅了两个新话题:
  * /ur_driver/URScript :消息类型为"std_msgs/String",直接转发给机器人。注意:这个话题上的输入没有作任何控制,因此使用时自担风险!被用来直接向机器人发送MoveL/MoveJ指令。
  * /joint_speed :消息类型为"trajectory_msgs/JointTrajectory"。解析第一个JointTrajectoryPoint并将指定的关节速度和加速度发送给机器人。该接口用于进行视觉伺服和其余须要速度控制而非机器人位置控制的控制。记住须要给6个关节都设置值,忽略字段joint_names,按正确的顺序设置值。
 
* 添加了对ros_control的支持
  * 因为ros_control但愿始终控制机器人,所以在启动时经过参数设置ros_control的兼容性。
  * 当ros_control处于活动状态时,驱动程序不会打开action_lib接口,也不会发布joint_states或wrench msgs。这是由ros_control处理的
  * 目前有两个控制器可用,它们均可以控制机器人的关节位置,可用于执行轨迹。
    * 基于速度的控制器,使用speedj命令向机器人发送关节速度命令;
    * 基于位置的控制器,使用servoj命令向机器人发送关节位置命令;
    * 到目前为止我只使用了基于速度的控制器,但哪个最佳取决于应用。
  * 当ros_control持续控制机器人时,在控制器运行时使用示教器将致使**机器人**上的控制器崩溃,由于它显然没法处理来自两个控制源有冲突的控制输入。所以,在经过示教器移动机器人**以前**,请务必中止正在运行的控制器。
    * 经过命令$ rosservice call /controller_manager/list_controllers {} 调用controller_manager能够找到已加载和运行的控制器的列表。
    * 想要中止运行位置轨迹控制器能够经过调用$ rosservice call /universal_robot/controller_manager/switch_controller 'start_controllers:-' 'stop_controllers:- 'pos_based_pos_traj_controller 'strictness:1'(记住你可使用/table键补全)
    
## 安装性能

**注意:驱动程序经过以太网与机器人通讯并创建可靠的连续通讯,但没法从虚拟机可靠地控制UR**
* 只须要将驱动程序包复制到工做空间文件夹中,而后用'catkin_make'编译就行。
* 注意这个包依赖于ur_msgs,hardware_interface和controller_manager测试

## 用法url

* 该驱动程序旨在替代'ur_driver'包。它不会覆盖您当前的驱动程序,所以您可使用并测试此程序包,而不会有破坏当前设置的风险。
* 若是你想在当前配置下测试该驱动,只须要使用这个程序包中修改了的launch文件就行,而不是ur_bringup文件夹中的launch文件。
* 若是你想用这个包链接硬件,你只须要运行下面的launch文件:
  * $ roslaunch ur_modern_driver ur××_bringup.launch robot_ip:=ROBOT_IP_ADDRESShtm

* 若是想运行MoveIt规划并执行机械臂的运动,只须要在启动上面的文件后执行下面的命令就行:
  * $ roslaunch ur××_moveit_config ur5_moveit_planning_executing.launch
  * $ roslaunch ur××_moveit_config moveit_rviz.launch config:=true
---
若是你要用ros_control控制机械臂,就启动ur××_ros_control.launch文件。
**注意:**若是使用ros_control方法,就须要ur_driver包里的两个包,把它们复制到工做空间的/src文件夹下面:
  * ur××_moveit_config
  * ur_description
 
* 该驱动器目前支持两个位置轨迹控制器; 基于位置和基于速度。它们都是经过launch文件加载的,但它们同时只有一个能够运行。默认状况下,启动基于速度的控制器。 您能够经过调用适当的service来切换控制器:
```
rosservice call /universal_robot/controller_manager/switch_controller
start_controllers:
- 'vel_based_pos_traj_controller'
stop_controllers:
- 'pos_based_pos_traj_controller'
strictness: 1"
```接口

在启动一个新控制器**以前**确保已中止了正在运行的控制器,不然将启动失败。ip

基于位置的控制器*应该*更接近所需的路径,而基于速度的反应更快(轨迹执行在50-70毫秒内开始,而位置在150-180毫秒范围内。非ros_control驱动以及旧驱动也在170毫秒范围内,正如我在闪电话题@ROSCon2013中提到的那样。虚拟机

**注意:**到目前为止,PID值没有获得最佳调整。
若是要将ros_control和MoveIt一块儿使用,先确保将指望的控制器添加到```controllers.yaml````文件中,该文件在ur××_moveit_config/config文件夹中,添加内容以下:
```
controller_list:
 - name: /vel_based_pos_traj_controller #or /pos_based_pos_traj_controller
   action_ns: follow_joint_trajectory
   type: FollowJointTrajectory
   default: true
   joints:
      - shoulder_pan_joint
      - shoulder_lift_joint
      - elbow_joint
      - wrist_1_joint
      - wrist_2_joint
      - wrist_3_joint
```

# 使用tool0_controller
UR系列的每一个机器人都是单独校准的,所以在URDF模型中的末端执行器和控制器自己的末端执行器之间存在有个小偏差(大约为毫米)。
该驱动在base_link和end_effector中间进行广播tf,默认的frame名为:*base* 和 *tool0_controller*。
要在URDF里添加*tool0_controller*,须要一个链接到*base*的名称的link,例如:
```
<!-- Connect tool0_controller to base using floating joint -->
<link name="tool0_controller"/>
<joint name="base-tool0_controller_floating_joint" type="floating">
  <origin xyz="0 0 0" rpy="0 0 0"/>
  <parent link=base"/>
  <child link="tool0_controller"/>
</joint>
```
至此,*base*和*tool0_controller*之间的实际转换将不会由*robot_state_publisher*发布,但将经过*/tf*今后驱动程序中获取。
注意:须要将*robot_state_publisher*的版本更新,才能处理浮点型关节值,see: https://github.com/ros/robot_state_publisher/pull/32

## 兼容性
兼容于全部最新固件的机器人和控制箱。

#Credits 若是使用本驱动请引用如下报告: @techreport{andersen2015optimizing,   title = {Optimizing the Universal Robots ROS driver.},   institution = {Technical University of Denmark, Department of Electrical Engineering},   author = {Andersen, Thomas Timm},   year = {2015},   url = {http://orbit.dtu.dk/en/publications/optimizing-the-universal-robots-ros-driver(20dde139-7e87-4552-8658-dbf2cdaab24b).html}   } 该报告可从下面url下载:http://orbit.dtu.dk/en/publications/optimizing-the-universal-robots-ros-driver(20dde139-7e87-4552-8658-dbf2cdaab24b).html