下载必要代码和编译
cd catkin_ws/src
$ git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git
# clone fork of the description to use the calibration feature # -b表示下载分支
$ git clone -b calibration_devel https://github.com/fmauch/universal_robot.git
# install dependencies
$ sudo apt update -qq # -qq 不输出信息,错误除外
$ rosdep update
cd ..
$ rosdep install --from-path src --ignore-src -y #-y 表示[yes/no]的问题选择yes
# build the workspace
$ catkin_make
# activate the workspace (ie: source it)
$ source devel/setup.bash
连接过程和注意事项
按照官方给的教程先安装好External Control 插件。下一步进行IP通讯设置。
- 设置External Control 插件IP,设置为192.168.1.101,端口为50002,IP名随意
在这里插入图片描述
设置后,长的样子
- 设置机器人静态IP为:192.168.1.102和子网掩码:255.255.255.0
- 设置自己电脑静态IP:192.168.1.101
注:设置的IP必须在一个网段。
- UR机械臂IP:192.168.1.101
- UR控制柜IP:192.168.1.102
- 自己电脑IP: 192.168.1.101
- 看到自己电脑右上角的有线网连接上了,通过ping 192.168.1.102,可以看到已经连接到机器人了
5.启动命令,可以在Rviz中看到机械臂实体的样子
第一步是按照官网进行标定,否则会报错。
启动命令
5. 通讯
roslaunch ur_robot_driver ur3e_bringup.launch robot_ip:=192.168.1.102 kinematics_config:=${HOME}/my_robot_calibration.yaml
其中最后标定依照官方标定进行标定
6. 在机器人示教面板上启动程序
7. 规划
roslaunch ur3_e_moveit_config ur3_e_moveit_planning_execution.launch limited:=true
8. 显示
roslaunch ur3_e_moveit_config moveit_rviz.launch config:=true
9. 控制-基于面板的拖动关节控制程序,先安装包
rosrun rqt_joint_trajectory_controller rqt_joint_trajectory_controller
遇到问题及解决办法
- 机械臂启动上电时出现,示教板出现机器人与joint通讯失败,试了几下,是因为机械臂和控制柜连接线松动原因。
- 驱动和包使用地址和UR其他系列不一样;
https://github.com/UniversalRobots/Universal_Robots_ROS_Driver
- 在driver编译时有问题,更改将src/ur_hardware_interface.cpp中的内容。原链接如下
https://github.com/iron-ox/ur_modern_driver/commit/883070d0b6c0c32b78bb1ca7155b8f3a1ead416c
- 和实体机械连接是出现action问题
[ WARN] [1615022668.464013680]: Waiting for /joint_trajectory_action to come up
[ WARN] [1615022674.464729845]: Waiting for /joint_trajectory_action to come up
[ERROR] [1615022680.465466755]: Action client not connected: /joint_trajectory_action
这部分困扰了我很久,网上也一直没有查到解决方法,经研究其问题是配置moveit时的控制器文件controllers.yaml中找不到名字空间对应的控制器。从官网下载后显示为如下:
controller_list:
- name: ""
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
在运行driver驱动机械臂后,查看toplic如下,没有**"/follow_joint_trajectory"**的话题,难怪失败.
txt@txt-CN15S:~/Desktop$ rostopic list
/joint_group_vel_controller/command
/joint_states
/pos_joint_traj_controller/command
/pos_joint_traj_controller/follow_joint_trajectory/cancel
/pos_joint_traj_controller/follow_joint_trajectory/feedback
/pos_joint_traj_controller/follow_joint_trajectory/goal
/pos_joint_traj_controller/follow_joint_trajectory/result
/pos_joint_traj_controller/follow_joint_trajectory/status
/pos_joint_traj_controller/state
/rosout
/rosout_agg
/scaled_pos_joint_traj_controller/command
/scaled_pos_joint_traj_controller/follow_joint_trajectory/cancel
/scaled_pos_joint_traj_controller/follow_joint_trajectory/feedback
/scaled_pos_joint_traj_controller/follow_joint_trajectory/goal
/scaled_pos_joint_traj_controller/follow_joint_trajectory/result
/scaled_pos_joint_traj_controller/follow_joint_trajectory/status
/scaled_pos_joint_traj_controller/state
/speed_scaling_factor
/tf
/tf_static
/ur_hardware_interface/io_states
/ur_hardware_interface/robot_mode
/ur_hardware_interface/robot_program_running
/ur_hardware_interface/safety_mode
/ur_hardware_interface/script_command
/ur_hardware_interface/set_mode/cancel
/ur_hardware_interface/set_mode/feedback
/ur_hardware_interface/set_mode/goal
/ur_hardware_interface/set_mode/result
/ur_hardware_interface/set_mode/status
/ur_hardware_interface/tool_data
/wrench
解决方法: 将名字改为已有的控制器scaled_pos_joint_traj_controller,如下所示
controller_list:
- name: scaled_pos_joint_traj_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
- 建立仿真模型不能和gazebo联动
- 这是由于在没有将moveit仿真控制器发送到gazebo控制器的原因.
- 如我自己的moveit config 和gazebo包里控制器为:
moveit 控制器
controller_list:
- name: ur3_e_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
- name: robotiq_controller
action_ns: follow_joint_trajectory
default: True
type: FollowJointTrajectory
joints:
- gripper_finger1_joint
gazebo控制器
arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
-
gripper:
type: position_controllers/JointTrajectoryController
joints:
- gripper_finger1_joint
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
gripper_finger1_joint: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate: 25
action_monitor_rate: 10
- 注意名字ur3_e_controller和arm_controller对应, robotiq_controller和gripper对应.
- 解决方法为映射关系,在launch文件中添加如下代码
<!-- Remap follow_joint_trajectory -->
<remap if="$(arg sim)" from="/ur3_e_controller/follow_joint_trajectory" to="/arm_controller/follow_joint_trajectory"/>
<remap if="$(arg sim)" from="/robotiq_controller/follow_joint_trajectory" to="/gripper/follow_joint_trajectory"/>