ROS noetic与UR3真实机械臂通信
Ubuntu版本:20.04
ROS版本:noetic
机械臂:优傲机器人ur3,控制器cb3,软件版本3.14
任务描述:机器人操作系统ros通过网线连接ur3,实现二者通信,使用ros下的moveit控制ur3运动
1 ROS端设置
1.1下载安装功能包
首先建立ros工作空间,并安装编译UR机器人功能包,具体步骤可以参考下面的博主教程:
ubuntu20.04安装ros-noetic,moveit,ur机器人驱动…指南!.
那个“float32 payload“ 需要改为“float32 mass“, 否则出现错误:
Universal_Robots_ROS_Driver/ur_robot_driver/src/hardware_interface.cpp:396:39: error: ‘ur_msgs::SetPayload::Request’ {aka ‘struct ur_msgs::SetPayloadRequest_<std::allocator<void> >’} has no member named ‘mass’ 396 | << " set_payload(" << req.mass << ", [" << req.center_of_gravity.x << ", " << req.center_of_gravity.y | ^~~~
ur的驱动有ur_driver、ur_modern_driver、ur_robot_driver,但是现在官方建议采用ur_robot_driver,该驱动在git上的地址为:https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git.
ur_robot_driver的下载及安装过程如下:
# enter catkin workspace
cd catkin_ws/src
# clone the driver
git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver
# install dependencies
rosdep install --from-paths src --ignore-src -y
# build the workspace.
catkin_make
# activate the workspace (ie: source it)
source devel/setup.bash
1.2 修改控制器参数
ur_robot_driver安装完成后,ur3_moveit_config的默认的控制器名字需与ur3_bringup.launch的controllers标签中的scaled_pos_traj_controller参数对应,默认为空,所以需要进行修改,参照下图修改控制器名字为:scaled_pos_traj_controller
此处可参考以下博主的说明:etson AGX Xavier避坑指南(四)
1.3 设置IP
设置ros所在的设备端IP,参照下图:
2 UR3机器人端设置
2.1 UR3示教器安装urcap
要在ros上使用ur_robot_driver控制真实的ur5运动,需要在ur5机器人上安装externalcontrol-1.0.urcap,它类似一个插件,接受ros端的消息再控制ur5运动。该urcap位于Universal_Robots_ROS_Driver/ur_robot_driver的resources文件夹内。要安装此URCap,要求PolyScope的版本不得低于3.7(本机3.14版本也能成功安装)。
1、externalcontrol-1.0.urcap拷贝到U盘中;
2、U盘插入示教器中;
3、在ployscope的设置机器人中,点开URCap,找到externalcontrol-1.0.urcap,选中,然后点击重启。
2.2 网络设置
UR3机器人的IP设置:需要与ROS设备端处于同一局域网。
2.3 其他配置
示教器主菜单–>为机器人编程–>安装设置中,确保EtherNet/IP和PROFINET设置为Disable。
接着设置External Control的参数,host’s ip是ros设备端设备的IP,端口号:50002(即和ur3_bringup.launch的script_sender_port标签中的参数一致,如下图所示)。
2.4 外部控制程序编写
新建一个空程序,点击“结构”,点击ExternalControl;点击右上角“文件”,点击“保存。当需要与ros连接时,需要运行该程序点击“加载程序”,选择刚才保存的程序。
3 调试
3.1 启动UR5
使用网线连接ur5和ros端设备,运行上述编写的ur程序。
3.2 启动ros端功能包
3.2.1 单关节控制
首先需要安装rqt_joint_trajectory_controller和industrial_robot_status_interface
sudo apt-get install ros-noetic-ros-control ros-noetic-ros-controllers
sudo apt-get install ros-melodic-industrial-robot-status-interface
测试是否安装成功:
rosrun rqt_joint_trajectory_controller rqt_joint_trajectory_controller
若出现No module named ‘pyqt5‘,解决办法如下:
pip install PyQt5 PyQt5-tools
3.2.2 Moveit!控制
- 进行机器人标定,并写入路径yaml文件。要注意标定文件路径是否正确,IP是否正确;此处IP为示教器上的IP
roslaunch ur_calibration calibration_correction.launch robot_ip:=192.168.1.60 target_filename:="$(rospack find ur_robot_driver)/calibration/my_robot_calibration.yaml"
- 启动机器人驱动程序,ip需要根据机器人ip调整–即示教器IP
roslaunch ur_robot_driver ur3_bringup.launch robot_ip:=192.168.1.60 [reverse_port:=REVERSE_PORT] kinematics_config:=$(rospack find ur_robot_driver)/calibration/my_robot_calibration.yaml
- 启动MoveIt!允许运动规划运行的节点
roslaunch ur3_moveit_config ur3_moveit_planning_execution.launch limited:=true
- 启动RViz
roslaunch ur3_moveit_config moveit_rviz.launch config:=true
在rviz中给ur5一个目标位姿,先plan看一下能否规划成功、是否碰撞,然后execute执行,观察真实ur5的运动。这个过程一定要注意安全,手放在急停上,时刻准备按下急停。
附上代码(UR10e):
roslaunch ur_calibration calibration_correction.launch robot_ip:=192.168.1.60 target_filename:="$(rospack find ur_robot_driver)/calibration/my_robot_calibration.yaml"
roslaunch ur_robot_driver ur10e_bringup.launch robot_ip:=192.168.1.60 [reverse_port:=REVERSE_PORT] kinematics_config:=$(rospack find ur_robot_driver)/calibration/my_robot_calibration.yaml
roslaunch ur10e_moveit_config moveit_planning_execution.launch limited:=true
roslaunch ur10e_moveit_config moveit_rviz.launch config:=true