这篇文章主要介绍了如何在gazebo中对ur5进行仿真和controller的使用,包括controller_manager的使用和控制器command的主题数据发布。

  • ur 机器人的下载编译可以参考官方的帮助文档,下载源码,然后catkin_make,然后source devel/setup.bash载入资源文件。

  • gazebo中启动 ur5 模型,终端输入:

1
roslaunch ur_gazebo ur5.launch limited:=true
  • ur5 模型的参数服务器中包含两个控制器, position_controllers/JointTrajectoryControllerposition_controllers/JointGroupPositionController这里先用位置控制模式JointGroupPositionController,就是单独控制关节轴,这样我们可以直观看到关节轴响应了下发的位置指令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
shoulder_pan_joint: { trajectory: 0.1, goal: 0.1 }
shoulder_lift_joint: { trajectory: 0.1, goal: 0.1 }
elbow_joint: { trajectory: 0.1, goal: 0.1 }
wrist_1_joint: { trajectory: 0.1, goal: 0.1 }
wrist_2_joint: { trajectory: 0.1, goal: 0.1 }
wrist_3_joint: { trajectory: 0.1, goal: 0.1 }
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 10
joint_group_position_controller:
type: position_controllers/JointGroupPositionController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
  • ur5 的launch文件中,默认启动的控制器是关节轨迹控制,所以这里涉及到如何切换控制器的操作,详细内容可以参考controller_manager这篇文章。一下给出实际的操作。

  • 首先查看已载入的控制器:可以看到 ur 内部载入了两个控制器,就是在参数文件中显示的两个,arm_controllerjoint_group_position_controller

rosrun controller_manager controller_manager list

1
2
3
arm_controller - hardware_interface::PositionJointInterface ( stopped )
joint_state_controller - hardware_interface::JointStateInterface ( running )
joint_group_position_controller - hardware_interface::PositionJointInterface ( running )
  • 暂停arm_controller,执行成功后会显示成功执行信息:

rosrun controller_manager controller_manager stop arm_controller

1
Stopped ['arm_controller'] successfully
  • 启动joint_group_position_controller,同样也有执行成功与否的信息输出:

rosrun controller_manager controller_manager start joint_group_position_controller

1
Started ['joint_group_position_controller'] successfully
  • controller_manager的详细指令如下:
1
$ rosrun controller_manager controller_manager <command> <controller_name>

以下command可用:

load: 加载控制器 (construct and initialize)
unload: 卸载控制器 (destruct)
start: 启动控制器
stop: 结束控制器
spawn: 加载并启动控制器
kill: 停止并卸载控制器
  • 开始输入关节位置控制指令

  • 这里可以先查看一下关节位置指令的数据结构

  • 输入:

rostopic list

  • 可以看到有控制器的一个主题:

/joint_group_position_controller/command

  • 查看主题信息:该topictypestd_msgs/Float64MultiArray。因此我们pub这个topic时就需要发送这个数据结构。

rostopic info /joint_group_position_controller/command

1
2
3
4
5
6
7
Type: std_msgs/Float64MultiArray

Publishers: None

Subscribers:
* /rostopic_120258_1572071888740 (http://localhost:42655/)
* /gazebo (http://localhost:35425/)
  • 发布主题。因为这里Float64MultiArray是一个数组,如果是单个数据类型,那在数据结构后面直接跟具体的数据即可。如果是数组,那需要以python list的方式发送。这里-r 50表示这个topic的发布速率是50hz。然后就可以在gazebo中看到机器人五轴转了一个角度。

rostopic pub -r 50 /joint_group_position_controller/command std_msgs/Float64MultiArray '{data: [0,0,0,0,10,30]}'

  • 同时可以打开另一个终端,看到发布的topic的详细信息

rostopic echo /joint_group_position_controller/command

1
2
3
4
5
6
---
layout:
dim: []
data_offset: 0
data: [0.0, 0.0, 0.0, 0.0, 10.0, 30.0]
---