一,配置环境
硬件:
UR5工业机器人
Kinect V2
1.ROS安装
参考 https://blog.csdn.net/qq_32618327/article/details/89736314
2.ROS创建工作空间
#创建src文件,放置功能包源码:
mkdir -p ~/handeye/src
#进入src文件夹:
cd ~/handeye/src
#初始化文件夹:
catkin_init_workspace
#这样就在src文件中创建了一个 CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。
3.安装ur_robot_driver
sudo apt-get install ros-melodic-moveit # 安装MoveIt 此步可忽略
cd handeye #进入ros工作空间的文件夹
# 复制驱动
$ git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver
#
$ git clone -b calibration_devel https://github.com/fmauch/universal_robot.git src/fmauch_universal_robot
# 全部都在handeye/src目录下
#安装依赖
$ sudo apt update
$ rosdep update # 有的时候会访问超时
$ 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
4.仿真测试
#打开终端,启动
roslaunch ur_gazebo ur5.launch
#打开新终端
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
#再打开一个新终端
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
5.驱动真实的ur机器人
5.1 安装externalcontrol
参考:Universal_Robots_ROS_Driver/ur_robot_driver/doc/install_urcap_cb3.md
要在真正的机器人上使用ur_robot_driver,需要在ur机器人上安装externalcontrol-1.0.urcap,该文件位于Universal_Robots_ROS_Driver/ur_robot_driver的resources文件夹内。注意:要安装此URCap,要求PolyScope的版本不得低于3.7。
安装步骤:
用U盘将此文件拷贝至机器人示教器的programs文件夹。
在欢迎屏幕上,选择Setup Robot,然后选择URCaps进入URCaps安装屏幕。
单击底部的小加号以打开文件选择器。 在此处,可以看到存储在机器人程序文件夹或插入的USB驱动器中的所有urcap文件。 选择并打开externalcontrol-1.0.urcap文件,然后单击打开。 现在,您的URCaps视图应在活动的URCaps列表中显示External Control,点击右下角重启机器人。
重新启动后,选择为机器人编程,在安装设置部分中找到External Control 。 然后设置外部PC的IP地址,本文设置为192.168.1.101 。请注意,机器人和外部PC必须位于同一网络中,理想情况下,彼此之间应直接连接,以最大程度地减少网络干扰。 自定义端口现在应该保持不变。
要使用新的URCap,请创建一个新程序并将External Control程序节点插入到程序树中。
重新点击命令按钮,则会看到在安装中输入的设置。 检查它们是否正确,然后将程序保存,可以将程序命名为external_control.urp。 现在机器人可以与此驱动程序一起使用了。(注,图中 Host IP 应为前文设置的 192.168.1.101)
5.2 网络配置
设置机器人静态IP. 设置机器人 ——> 设置网络菜单:
IP地址: 192.168.1.2
子网掩码:255.255.255.0
如果机器人似乎没有正确获取网络配置,请尝试重启控制器。
测试网络连接:
ping 192.168.1.2 #IP_OF_THE_ROBOT
会看到如下输出:
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.518 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.259 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.282 ms
5.3 用ros驱动真实的ur5机器人
参考:Getting Started with a Universal Robot and ROS-Industrial
警告:请将手放在急停按钮旁边,以防发生意外。
网线连接机器人和电脑,启动机器人。
打开电脑终端,启动机器人驱动程序。
roslaunch ur_robot_driver ur5_bringup.launch limited:=true robot_ip:=192.168.1.2
# [reverse_port=REVERSE_PORT] "reverse_port" default="50001"
# limited:=true限制机器人关节运动范围 [-pi,pi],否则为 [-2pi, 2pi]
示教器,运行程序 —> 文件 —> 加载程序 —> 选择3.1 节保存的external_control.urp程序,打开—>运行。
可以看到终端显示:
[ INFO] : Robot mode is now POWER_ON
[ INFO] : Robot mode is now IDLE
[ INFO] : Robot mode is now RUNNING
[ INFO]: Robot requested program
[ INFO]: Sent program to robot
[ INFO]: Robot ready to receive control commands.
启动moveit和rviz,注意启动顺序不能变
5.4 补充内容
可能出现错误的地方:
https://blog.csdn.net/zxxxiazai/article/details/103568577?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161940749716780262561071%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161940749716780262561071&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-5-103568577.first_rank_v2_pc_rank_v29&utm_term=%E9%A9%B1%E5%8A%A8%E7%9C%9F%E5%AE%9E%E7%9A%84ur5%E6%9C%BA%E5%99%A8%E4%BA%BA
6.Kinect
6.1 安装iai——kinect2
参考网址:https://blog.csdn.net/u012424737/article/details/80609451
首先对libfreenect2 驱动配置,我是将libfreenect2 安装在home目录下,按照文章操作即可,知道在build文件夹下运行./bin/Protonect显示以下图像,便安装完驱动,下一步便是安装kinect v2的节点包,步骤如下:
2-1在ROS中配置Kinect的是通过 IAI Kinect2 包的安装实现的
cd ~/catkin_ws/src/ #进行ROS的工作目录下的源文件目录
git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .
cd ~/handeye
catkin_make
# 由于这里我是直接修改了bashrc,所以不用每次都source
# 通过运行验证是否成功,成功后显示如下图像:
roslaunch kinect2_bridge kinect2_bridge.launch
rosrun kinect2_viewer kinect2_viewer
7. ros-melodic-visp
sudo apt-get install ros-melodic-visp
8. vision_visp
cd ~/handeye/src
git clone -b kinetic-devel https://github.com/lagadic/vision_visp.git
catkin_make --pkg visp_hand2eye_calibration
针对编译会卡住的情况,把下面两个包删掉,因为这两个包编译时需要下载文件,但是文件现在不存在了,而且这两个是用于跟踪,不影响手眼标定。
9.aruco_ros
cd ~/handeye/src
git clone -b kinetic-devel https://github.com/pal-robotics/aruco_ros
catkin_make
10.easy_handeye
cd ~/handeye/src
git clone https://github.com/IFL-CAMP/easy_handeye
catkin_ws$ catkin_make
二,验证
注意由于不能直接编写大的完整的roslaunch启动文件(由于ur需要握手),所以我重新对其进行拆分
我的aruco_ros/aruco_ros/launch/single.launch文件如下,这里我修改了几个参数,582和0.067分别对应的ID号和标签尺寸,这是根据我选择并打印出来的标签实际决定的:
<?xml version="1.0"?>
<launch>
<arg name="markerId" default="582"/>
<arg name="markerSize" default="0.067"/> <!-- in m -->
<arg name="eye" default="left"/>
<arg name="marker_frame" default="aruco_marker_frame"/>
<arg name="ref_frame" default=""/> <!-- leave empty and the pose will be published wrt param parent_name -->
<arg name="corner_refinement" default="LINES" /> <!-- NONE, HARRIS, LINES, SUBPIX -->
<node pkg="aruco_ros" type="single" name="aruco_single">
<remap from="/camera_info" to="/kinect2/hd/camera_info" />
<remap from="/image" to="/kinect2/hd/image_color_rect" />
<param name="image_is_rectified" value="true"/>
<param name="marker_size" value="0.067"/>
<param name="marker_id" value="582"/>
<param name="reference_frame" value="kinect2_rgb_optical_frame"/>
<param name="camera_frame" value="kinect2_rgb_optical_frame"/>
<param name="marker_frame" value="camera_marker" />
</node>
<!--node pkg="aruco_ros" type="single" name="aruco_single">
<remap from="/camera_info" to="/stereo/$(arg eye)/camera_info" />
<remap from="/image" to="/stereo/$(arg eye)/image_rect_color" />
<param name="image_is_rectified" value="True"/>
<param name="marker_size" value="$(arg markerSize)"/>
<param name="marker_id" value="$(arg markerId)"/>
<param name="reference_frame" value="$(arg ref_frame)"/>
<param name="camera_frame" value="stereo_gazebo_$(arg eye)_camera_optical_frame"/>
<param name="marker_frame" value="$(arg marker_frame)" />
<param name="corner_refinement" value="$(arg corner_refinement)" />
</node-->
</launch>
注意:aruco标签在~/catkin_ws/src/aruco_ros/aruco_ros/etc有打印出的标签才可以被检测到,这里我直接打印的里面存在的标签号582
然后我先判断用kinect v2能否检测到aruco标签,如果显示坐标,便可以检测,注意修改image_View左边订阅的节点为 /aruco_single/result
下方为/aruco_single/result_mouse_left
运行程序:
roslaunch kinect2_bridge kinect2_bridge.launch
roslaunch aruco_ros single.launch
rqt_image_view
弹出下面三个窗口:
注意一定要在第一个图中打开image_view,显示采集到的标签图像
直到窗口顶部会出现选项目录plugins->Visualization->image_View;
图3中点击check_starting pose应该为0/17,连接成功后。
image_View下左边订阅的节点为 /aruco_single/result
下方为/aruco_single/result_mouse_left,显示如下:
可能出现的错误
错误1-缺少库transforms3d
解决方案
pip install transforms3d
错误2-cv2.CALIB_HAND_EYE_TSAI
解决方案
#1.首先安装opencv-contrib
python -m pip install opencv-contrib-python
#2.在cv2.CALIB_HAND_EYE_TSAI报错的文件中作如下修改
#将import cv2修改为
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2
sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages')
#ros使用的python库的位置与计算机的Python库位置不一样,所以import cv2是从ros的python库环境中导入,而我们的cv2是安装在计算机的python库中,所以需要先屏蔽掉默认的ros库导入,此时python的库已经切换到了计算机的python库。
错误3-Cannot calibrate from current position
这一个错误是由于未能调出image-view,无法采样,但是在rqt中我始终无法找到plugin菜单栏,报错Cannot calibrate from current position最后,不得已,我只能重新开启一个rqt(只需要运行rqt即可),选择空的rqt中的plugin栏目,选择image-view,topic选择**/aruco_track/result**,此时,只要相机视野中有坐标系,就可以进行采样操作了。
三,进行手眼标定
具体操作步骤,
1,为了安全流畅地操作,我们先在rviz的Motion Planning界面中将机械臂的速度和加速度都设为0.1。
2,图3中是否显示0/17,如果不是就按check starting pose
3,在图1中点击take sample,采样完后点击在图3界面点击next pose,再点击plan,最后点击excute后机械臂会运动到新的位置,再点击take sample,这样反复进行17次,便可以进行采集17点后,点击compute后,再点击save后,便可以在.ros隐藏文件下(在home目录下按ctrl+h便可以显示隐藏文件)看到easy_handeye的文件下的ur5_kinect_handeyecalibration_eye_on_base.yaml文件,文件内容如下:
eye_on_hand: false
robot_base_frame: base_link
tracking_base_frame: kinect2_rgb_optical_frame
transformation:
qw: 0.1434016682482555
qx: -0.16165056534351638
qy: 0.7128775670495471
qz: -0.6671661192426197
x: -0.4258619055680306
y: -0.03867852023257894
z: 0.68036831927051
参考文献链接
图片好多图省事直接使用链接原文
https://blog.csdn.net/qq_32618327/article/details/89736314
https://blog.csdn.net/harrycomeon/article/details/102600957
https://blog.csdn.net/harrycomeon/article/details/107521715