本教程主要介绍机械臂与 Realsense D435 相机手眼标定的配置及方法。
系统:Ubuntu 20.0.4
◼ ROS:Noetic
◼ OpenCV 库:OpenCV 4.2.0
◼ Realsense D435:librealsense sdk(2.50.0)、realsense-ros 功能包(2.3.2)
◼ Marker 标记识别:Aruco 功能包
◼ 手眼标定:easy_handeye 功能包
◼ Moveit!
◼ 机械臂 ROS 功能包(根据不同型号机械臂提供配套的 ROS 包,使用方法基本相同)
一、概述
手眼标定分两种情况:
Eye-to-hand 眼在手外:标定的是相机坐标系相对于机器人基座坐标系的位姿。
Eye-in-hand 眼在手上:标定的是相机坐标系相对于机器人工具坐标系的位姿
本教程主要介绍 Realsense D435 相机安装在机械臂外部即眼在手外的标定方法。
二、下载标定需要的ros包
1、aruco_ros包
mkdir eye_out_hand/src && cd eye_out_hand/src
//下载noetic版本的
git clone https://github.com/pal-robotics/aruco_ros.git
2、easy_handeye包
git clone https://github.com/IFL-CAMP/easy_handeye.git
3、realsense-ros包
//下载ros1版本的
git clone https://github.com/IntelRealSense/realsense-ros.git
4、机械臂控制包
用自己对应的机械臂控制ros包就可以了。
三、打印 Marker 标签
标定需要使用到的 Marker 标签,可以在 aruco_ros 包中找到提供好的 marker 标签进
行打印,如图:
也可以到下面的网站下载maker标签并打印出来: Online ArUco markers generator
注意:打印时,要选择原始大小,否则要测量一下打印出来的真实大小。
四、修改ros包的配置
1、配置 aruco_ros 的 launch 文件
在 aruco_ros 功能包的 launch 目录下拷贝一份原有的 single.launch 文件,自己命一个名字,按下面的步骤修改里面的内容:
markerId:使用的 Marker 标签的 ID,这里在准备时打印的 Marker 标签 ID 为 582
markerSize:Marker 标签的实际大小,单位为 m,这里在准备时打印的 Marker 标签实际大小为 5 厘米即 0.05m
ref_frame:参考坐标系名称,这里选择 Realsense 的 camera_color_frame 作为参考坐标系
<remap from="/camera_info" to="/camera/color/camera_info" />:将/camera_info 重映射为对应 Realsense实际发布的相应的 Topic 即/camera/color/camera_info
<remap from="/image" to="/camera/color/image_raw" />:将/image 重映射为对应 Realsense 实际发布的相应的 Topic 即/camera/color/image_raw
camera_frame:相机坐标系,修改为实际的相机坐标系 camera_color_frame
2、配置 easy_handeye 标定的 launch 文件
在 easy_handeye 功能包的 launch 目录下新建一个eye_in_hand_calibrate.launch文件。在里面添加
<?xml version="1.0" ?>
<launch>
<!-- 生成标定文件的名称 -->
<arg name="namespace_prefix" default="rm_rs_d435" />
<!-- 机械臂 MoveIt!配置的 move_group 为 arm,所以修改为 arm -->
<arg name="move_group" default="arm" />
<!-- start easy_handeye -->
<include file="$(find easy_handeye)/launch/calibrate.launch" >
<arg name="namespace_prefix" value="$(arg namespace_prefix)" />
<arg name="move_group" value="$(arg move_group)" />
<!-- 这里使用眼在手上的方式进行标定,所以此处改成 true -->
<arg name="eye_on_hand" value="true" />
<!--tracking_base_frame 为 realsense 的相机坐标系-->
<arg name="tracking_base_frame" value="camera_color_frame" />
<!--tracking_marker_frame 对应 aruco_ros 包中 single_realsense.launch 中的 marker_frame 的值-->
<arg name="tracking_marker_frame" value="aruco_marker_frame" />
<!--robot_base_frame 为机器人基座坐标系-->
<arg name="robot_base_frame" value="base_link" />
<!--robot_effector_frame 为工具坐标系,如夹爪,吸盘等-->
<arg name="robot_effector_frame" value="Link6" />
<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>
五、开始标定
1、编译
cd ~/catkin_ws
catkin build
2、启动 Realsense 节点
cd ~/catkin_ws
source devel/setup.bash
roslaunch realsense2_camera rs_camera.launch
3、启动aruco_ros节点识别maker标签
cd ~/catkin_ws
source dev/setup.bash
roslaunch aruco_ros single.launch
你可以打开一个新的终端,执行以下命令启动 image_view 订阅/aruco_single/result 显示图像:
cd ~/catkin_ws
source dev/setup.bash
rosrun image_view image_view image:=/aruco_single/result
4、启动你的机械臂控制节点
根据你自己的机械臂控制功能包,运行就可以了。
5、启动 easy_handeye 手眼标定节点
cd ~/catkin_ws
source dev/setup.bash
roslaunch easy_handeye eye_in_hand_calibrate.launch
成功运行后,会同时打开三个界面:
标定步骤:
a、在图3 中,点击 Check starting pose,稍微等待,若检查成功,界面会出现:0/17,Ready to start,如下图所示(如果检测失败或者没有出现 0/17,则说明当前机械臂的姿态不合适,可能有规划不可达,需要关闭标定节点然后调节机械臂到一个合适姿态并将 aruco 二维码移动至相机视野中心处附近再重启启动标定节点继续标定):
b、在图3中依次点击 Next Pose,Plan,Execute,机械臂会移动至新的位置,若二维码完全的在相机视野范围内,且能检测成功,则进行下一步,若二维码不在相机视野范围内或部分在视野外,检测不到,则再次依次点击 Next Pose,Plan,Execute,直到二维码完全在相机视野范围内,且能检测成功,再进行下一步,如下图所示:
c、在图2 中点击 Take Sample,若 Samples 对话框中出现有效信息,说明第一个点标定成功
d、重复执行步骤 2 和步骤 3,直至 17 个点全部标定完毕
e、在图2 中点击 Compute,则 Result 对话框中会出现结果,点击Save,会将结果保存为一个 YAML 文件,路径为 ~/.ros/easy_handeye
标定完成!!!!!!