ubuntu16.04kinetic + realsenseD435i相机 + UR3的手眼标定

  • Post author:
  • Post category:其他



一、前期准备

首先,在完成该篇博客涉及到的工作之前,参考了以下博主的链接。在此,向他们辛勤的付出 表示深深的感谢~~~


realsenseD435i相机标定的链接   https://blog.csdn.net/weixin_40628128/article/details/95945945  这条链接强烈推荐~~~~

手眼标定的相关链接

https://blog.csdn.net/weixin_40799950/article/details/83657626


https://blog.csdn.net/zhang970187013/article/details/81098175


https://blog.csdn.net/sinat_23853639/article/details/80276848


http://www.pianshen.com/article/3722406638/


https://zhuanlan.zhihu.com/p/33441113


https://zhuanlan.zhihu.com/p/33777424


其次,在进行手眼标定前需要安装easy_handeye

aruco_ros

vision_visp等便于实现手眼标定的功能包。具体的安装步骤见如上链接提供的方法。

成功安装这些依赖项之后,根据easy_handeye/docs/example_launch/ur5_kinect_calibration.launch 提供的文件编写自己启动标定程序时用到的 launch文件。博主这里面使用的文件命名:ur3_realsense_calibration.launch。该文件内容如下:

<launch>
    <arg name="namespace_prefix" default="ur3_realsense_handeyecalibration" />

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

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

    <!-- start the realsense -->
    <!--include file="$(find realsense2_camera)/launch/rs_camera.launch" /> -->
        <!--arg name="depth_registration" value="true" /> -->
    <!-- </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="0.15"/>
        <param name="marker_id"          value="582"/>
        <param name="reference_frame"    value="camera_color_frame"/>
        <param name="camera_frame"       value="camera_color_frame"/>
        <param name="marker_frame"       value="camera_marker" />
    </node>

    <!-- start the robot -->
   <!-- <include file="$(find ur_modern_driver)/launch/ur3_bringup.launch">
        <arg name="limited" value="true" />
        <arg name="robot_ip" value="192.168.1.196" />
    </include> -->
   <!-- <include file="$(find ur3_moveit_config)/launch/ur3_moveit_planning_execution.launch">
        <arg name="limited" value="true" />
    </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="false" />

        <arg name="tracking_base_frame" value="camera_color_frame" />
        <arg name="tracking_marker_frame" value="camera_marker" />
        <arg name="robot_base_frame" value="base_link" />
        <arg name="robot_effector_frame" value=" wrist_3_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>

在这文件里面为了避免出现一些不必要的问题,把启动相机的程序、启动机器人的程序屏蔽掉,实验时单独运行。

这里面标定板的ID是582,其可以在 aruco里面下载,标定板的尺寸单位是米。涉及到相机参数的映射关系时,需要启动相机节点,运行 rostopic list查找相机发布的话题,对应原文件夹下面的ur5_kinect_calibration.launch文件进行修改即可。

将修改好的launch文件放到与ur5_kinect_calibration.launch 同一文件夹下。


二、标定过程

1、启动UR3机器人: roslaunch ur_modern_driver ur3_bringup.launch robot_ip:=192.168.1.196

通过 move it控制机械臂动作   方式1:roslaunch ur3_moveit_config ur3_moveit_planning_execution.launch

roslaunch ur3_moveit_config moveit_rviz.launch config:=true

方式2:roslaunch ur3_moveit_config ur3_moveit_planning_execution.launch sim:=true

2、启动 realsenseD435i相机 :roslaunch realsense2_camera rs_camera.launch

3、启动标定程序:roslaunch ur3_realsense_calibration.launch

在这里需要注意的是在启动这个launch文件时,需要打开rqt_easy_handeye菜单栏选择Plugins—visualization—image view,选择/aruco_tracker/result,使其显示标定板被识别的图像,这样在后续的采集过程中才能成功。

采集步骤为:1–2–3–4–5–2345(重复直至全部采集完)–7–8(保存结果)一般是采集17次机器人的不同位置,也有采集8次的。后来我改成采集17次的了。采集17次之后的结果如下图所示:

4、将标定的结果实时显示出来:

方式1:查看home隐藏文件夹.ros/easy_handeye下标定结果文件yaml。将变换矩阵按照以下格式写 static_transform_publisher.launch文件改写一个实时(100hz)发布位置转换关系的launch文件,放在easy_handeye/easy_handeye/launch(和之前的ur3_realsense_calibration.launch在一个包里),这里的args 分别对应x y z qx qy qz qw frame_id child_frame_id  period_in_ms。

启动static_transform_publisher.launch文件 roslaunch  static_transform_publisher.launch

<launch>  
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="0.7810954111863362 0.4362160638790268 0.16301827937001387 -0.20452635132067903 -0.7688849381709477 0.5396310162123635 0.275287649216088 base_link camera_link 100" />
</launch>

方式2:利用easy_handeye文件夹下面的publish.launch文件。将static_transform_publisher添加在该launch文件的末尾处,如下:

</group>
    <node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args=" 0.7810954111863362 0.4362160638790268 0.16301827937001387 -0.20452635132067903 -0.7688849381709477 0.5396310162123635 0.275287649216088 base_link camera_link 100" />  

启动 roslaunch easy_handeye  publish.launch eye_on_hand:=false namespace_prefix:=ur3_realsense_handeyecalibration即可将获得的手眼标定结果成功的发布出去。



到现在为止,机器人手眼标定的工作已全部结束,欢迎各位小伙伴们留言评论,大家共同进步~~~~



版权声明:本文为txy12029047原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。