ur5+Azure kinect dk 手眼标定

ok,问题挺多,之前以为手眼标定成功了就一直没管,后面发现标的真是稀碎呀..

误差太大了,这几天重新开始找方法标定了,如下:

1. 前提条件

默认安装了ur_robot_driver和azure-kinect-Sensor-SDK,即在开始手眼标定前,你可以通过moveit来驱动机械臂以及打开相机。

2. 配置手眼标定包

原理啥的就不讲了,主要就是一个相机坐标系与机械臂基坐标系之间的转换关系。

2.1 配置easy_handeye包

cd ~/catkin_ws/src  # replace with path to your workspace
git clone https://github.com/IFL-CAMP/easy_handeye
cd ..  # now we are inside ~/catkin_ws
rosdep install -iyr --from-paths src
catkin_make

2.2 配置easy_aruco包

简要说明一下,这个包和aruco_ros差不多,都是用来识别二维码的,但是不同在于aruco_ros包用来识别aruco码,而easy_aruco包用来识别ChArUco码。

git clone https://github.com/marcoesposito1988/easy_aruco
cd ..
rosdep install -yir --from-paths src
catkin_make
source devel/setup.bash

这样就将库安装完成了,下面简要区别一下aruco以及charuco。

Online ArUco markers generator

这个网站可以定义aruco码,如图所示:

ur5+Azure kinect dk 手眼标定_第1张图片

charuco码如图所示:

 ur5+Azure kinect dk 手眼标定_第2张图片

 二者区别在于,charuco码更加精确以及更加容易捕捉,且在charuco出现弯折时也易被检测出来。我们这里就是用的charuco码进行标定的。

charuco码通过以下方式获得(前提是已经安装了easy_aruco包):

rosrun easy_aruco create_charuco_board.py --dictionary  DICT_6X6_250 --squares_x 7 --squares_y 9 --square_size 24 --marker_size 16 --output_path ~/charuco_board.pdf

通过改写DICT、方格长宽数值、尺寸大小获取自己需要的charuco码。

2.3 配置roslaunch azure_kinect_ros_driver driver.launch
ROS_Driver 包

# 下载Azure_Kinect_ROS_Driver源码
cd catkin_ws/src
git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver.git
# 编译工作空间
cd  catkin_ws
catkin_make

进行测试:

roslaunch azure_kinect_ros_driver driver.launch
# 新终端,启动rviz.   add -> by topic ->image 即可查看图像。
rviz # 或 rqt_image_view 查看图像

这样即可将azure_kinect相机的图像信息在ROS环境下通过topic的方式发布出来,然后我们根据需求订阅。

2.4 配置vision_visp包

cd ~/catkin_ws/src
git clone -b melodic-devel https://github.com/lagadic/vision_visp.git
cd ..
catkin_make --pkg visp_hand2eye_calibration

ok,手眼标定前提所需要的包已经配置完成,接下来就是通过手眼标定完成坐标系转换。

3. 编写手眼标定launch文件

3.1 launch文件编写

代码如下,可供参考:

主要参考了easy_handeye/docs/example_launch中的ur5_k4a_calibration.launch文件

创建myk4a_calibration.launch文件,复制代码


    

    
    
    

    
    

    

    
    
    
    
    

    
    
        
            
        

        
        
            
        

        
        
            
            
        

        
        
            
            

            
        

        
        
            
            
        

        
            
            
                
            

            
                
                
                

                
                
                
            
        

    

    
    
        
        
        
        
        
        
        
        
    



       
    

    
    
        
            
            
        
        
            
            
        
        
            
        
    
    
        
    
    

    
    
        
        

        
        
        
        

        
        
        
    


参数说明:
marker_size:标定码大小,单位为m
marker_id:标定码编号
/camera_info:订阅摄像头话题,根据具体情况自行修改
/image:订阅图像信息,根据具体情况自行修改
camera_frame:摄像头坐标系,此处选择的深度相机坐标系
marker_frame:标定板坐标系,aruco_marker_frame即可
eye_on_hand:眼在手外false,眼在手上true
tracking_base_frame:与camera_frame一致
tracking_marker_frame:与marker_frame一致
robot_base_frame:机械臂base坐标系,根据具体情况自行修改
robot_effector_frame:机械臂末端坐标系,根据具体情况自行修改

3.2 标定步骤

roslaunch easy_handeye my_k4a_calibration.launch 

运行,开启三个界面:

1.rviz界面,主要显示tf关系

ur5+Azure kinect dk 手眼标定_第3张图片

2.采样界面,通过takesample完成采样点采样

ur5+Azure kinect dk 手眼标定_第4张图片 

3. 位姿选取点界面,随机选取位姿并使机械臂移动至给出位姿点处

ur5+Azure kinect dk 手眼标定_第5张图片

 

但是,由于实验结果误差较大发现是因为标定时随机采取点的运动幅度过小导致,所以不采用该界面进行机械臂位姿移动,本文采用手工进行移动。

4.没有出现rgb彩色画面。解决方法

rqt

ur5+Azure kinect dk 手眼标定_第6张图片

 右上方选择/easy_aruco_node/debug_image的话题进行订阅,即可观察到rgb图像,且能检测识别出charuco码的位置。

随后在识别出charuco的情况下在采样界面中点击Take Sample进行采样,如图所示:

ur5+Azure kinect dk 手眼标定_第7张图片

 最终选取到合适多的点,即可进行compute,得到最终相机坐标系与机械臂基坐标系之间的转换关系。

点击save按钮,坐标转换信息就被保存至~/.ros/easy_handeye处,可通过命令进行查看。

gedit ~/.ros/easy_handeye/ur5_k4a_handeyecalibration_eye_on_base.yaml

最终,通过命令将tf关系发布出去。

roslaunch easy_handeye publish.launch eye_on_hand:=false

ok,标定结束,祝各位科研顺利,也祝我顺利毕业。

你可能感兴趣的:(ur5目标抓取,计算机视觉,azure,ubuntu)