aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二
前言
一、手眼标定是什么?
二、标定软件安装
1.aruco_ros安装
2.vision_visp安装
3.easy_handeye安装
4.realsense驱动安装
5.安装realsense ROS软件包
三、配置
1.launch文件修改
2.打印二维码
四、手眼标定
1.启动launch文件
2.标定步骤
3.发布tf关系

前言

前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_hand和eye_to_hand,我们这里是将相机固定在机械臂末端随机械臂移动而移动,故属于eye_on_hand,接下来我们将进行手眼标定的演示。

一、手眼标定是什么?

手眼标定是将标定机械臂与相机的位置关系的一种方法,eye_on_hand通常标定相机与机械臂末端的位置关系,而eye_to_hand通常标定相机与机械臂基坐标之间的位置关系,可以理解为相机相对谁固定就标定它们两者之间位置关系。标定得到位置关系后可以将在相机坐标系下识别到的物体转换至机械臂坐标系下,便于机械臂的操作。

二、标定软件安装

1.aruco_ros安装

$ git clone -b kinetic-devel https://github.com/pal-robotics/aruco_ros ~/aubo_ws/src
$ cd ~/aubo_ws
$ catkin_make -j2 -DCATKIN_WHITELIST_PACKAGES="aruco_ros"

2.vision_visp安装

$ sudo apt-get install ros-kinetic-visp

3.easy_handeye安装

$ git clone https://github.com/IFL-CAMP/easy_handeye ~/aubo_ws/src
$ cd ~/aubo_ws
$ catkin_make -j2 -DCATKIN_WHITELIST_PACKAGES="easy_handeye"

4.realsense驱动安装

sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
$ sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u
$ sudo apt-get install librealsense2-* librealsense2

5.安装realsense ROS软件包

$ sudo apt-get install ros-kinetic-realsense2-*

三、配置

1.launch文件修改

easy_handeye在docs/example_launch文件夹中有一个ur5,kinect的样例,这里我们拷贝一份到工作包easy_handeye/launch文件夹下重命名为auboi5_realsense_calibration.launch。文件内容如下:

<?xml version="1.0"?>
<launch>
    <arg name="namespace_prefix" default="auboi5_realsense_handeyecalibration" />

    <arg name="robot_ip" doc="The IP address of the UR5 robot" default=”192.168.12.102” />

    <arg name="marker_size" doc="Size of the ArUco marker used, in meters" default="0.08"/>
    <arg name="marker_id" doc="The ID of the ArUco marker used" default="100"/>

    <!--start realsense-->
    <include file="$(find realsense2_camera)/launch/rs_camera.launch">
        <arg name=”filters” value=”pointcloud”/>
    </include>

    <!-- start ArUco -->
    <node name="aruco_tracker" pkg="aruco_ros" type="single">
        <remap from="/camera_info" to="/camera/color/camera_info" />
        <remap from="/image" to="/camera/color/image_raw" />
        <param name="image_is_rectified" value="true"/>
        <param name="marker_size"        value="$(arg marker_size)"/>
        <param name="marker_id"          value="$(arg marker_id)"/>
        <param name="reference_frame"    value="camera_link"/>
        <param name="camera_frame"       value="camera_color_optical_frame"/>
        <param name="marker_frame"       value="camera_marker" />
    </node>

    <!-- start the robot -->
    <include file="$(find aubo_i5_moveit_config)/launch/moveit_planning_execution.launch">
        <arg name="sim" value="false" />
        <arg name="robot_ip" value="192.168.12.102" />
    </include>

    <!-- start easy_handeye -->
    <include file="$(find easy_handeye)/launch/calibrate.launch" >
        <arg name="namespace_prefix" value="$(arg namespace_prefix)" />
        <arg name="eye_on_hand" value="true" />

        <arg name="tracking_base_frame" value="camera_link" />
        <arg name="tracking_marker_frame" value="camera_marker" />
        <arg name="robot_base_frame" value="base_link" />
        <arg name="robot_effector_frame" value="wrist3_Link" />

        <arg name="freehand_robot_movement" value="false" />
        <arg name="robot_velocity_scaling" value="0.5" />
        <arg name="robot_acceleration_scaling" value="0.2" />
    </include>
</launch>

2.打印二维码

Aruco跟踪程序的可识别二维码可以在ARUCO下载打印,这里使用的编号100,尺寸80mm的二维码。二维码需要固定在机器人工作空间内的平面上。

四、手眼标定

1.启动launch文件

$ cd ~/aubo_ws/
$ source devel/setup.bash
$ roslaunch easy_handeye auboi5_realsense_calibration.launch

启动后出现如下三个界面,不包括aubo启动的rviz界面。



在第二个界面中将image_view打开并订阅/aruco_tracker/result主题,以便观察跟踪程序有没有跟踪到二维码。

2.标定步骤

为了方便记录,将上一步的三幅图标记为图一、图二、图三。
打开图一,将机器人的速度、加速度设置为0.1。
将机械臂操作至合适的位置(二维码标签在图像的中间位置)
设置完后打开图三,如果显示0/17就正常,如果不是就按check starting pose。

  • 点击next pose,再点击plan,出现绿色就当前位姿可以达到,最后点击execute。出现红色表示当前点不可用,继续点击next pose,重复操作;
  • 机械臂执行完成后返回图二界面,查看image_view中是否跟踪到标签,如果跟踪到标签则点击take sample,如果没有跟踪到则跳过。重复(1)(2)操作,直到17个点全部采集完;
  • 返回图二界面,点击compute,得到一组7个解的变换矩阵(四元数表示)。
  • 返回图二界面,点击save,保存得到的结果。结果保存在~/.ros/easy_handeye的.yaml文件中。

    3.发布tf关系

    $ cd ~/.ros/easy_handeye
    $ cp auboi5_realsense_handeyecalibration_eye_on_hand.yaml easy_handeye_eye_on_hand.yaml #拷贝一份作为默认加载文件
    $ cd ~/aubo_ws/
    $ source deve/setup.bash
    $ roslaunch easy_handeye publish.launch eye_on_hand:=true
    

上面是直接通过easy_handeye提供的launch文件发布tf关系,在实际使用中我们可以直接在机械臂启动文件中加入static_transform_publisher。

<node pkg="tf" type="static_transform_publisher" name="camera_broadcaster" args="0.01703139872968774 0.06367679269212607 0.022449576060965877 -0.49984429725973745 -0.5026434417758587 -0.4962838460679254 0.5012061382990693 wrist3_Link camera_link 100" />

这里我是拷贝了一份aubo机械臂启动文件的launch文件,然后在最后加入的该节点,避免后续使用机械臂时出错。
至此,机械臂与相机的手眼标定就结束了,接下来进行物体识别操作。

#

2020-12-16更新
鉴于最近很多博友表示easy_hand使用过程中会出现错误,可能是由于源码有升级导致的部分问题,本人将之前使用没有问题的源码上传了一份在百度云,请各位博友自行前往下载。
链接: https://pan.baidu.com/s/1O2_N-RvhqCqGIPs3iL3wQA 提取码: 4p77