ubuntu16.04kinetic + realsenseD435i相機 + UR3的手眼標定

 一、前期準備   

       首先,在完成該篇博客涉及到的工作之前,參考了以下博主的鏈接。在此,向他們辛勤的付出 表示深深的感謝~~~

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即可將獲得的手眼標定結果成功的發佈出去。

         到現在爲止,機器人手眼標定的工作已全部結束,歡迎各位小夥伴們留言評論,大家共同進步~~~~

 

 

                                    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章