• 本期新增资源:后台输入标定板即可获取标定板链接

大家好,我是小智,上一回给大家分享了如何通过机械臂位姿和相机中标定板的位姿通过手眼标定程序计算出末端与相机之间的位姿关系。

看完上一回不少同学肯定有这么一个疑问,机械臂的位姿示教器里有,相机中标定板的位姿到底从哪里获得呢?这一讲我们就跟大家来讲一讲

原理介绍

作为手眼标定中的重要一环,相机中标定板位姿关系获取直接影响标定精度,我们使用aruco这个开源程序来实现坐标的获取。

aruco采用2D图像计算深度信息,需要提前在程序中输入标记物的宽度,根据识别标记物在图像中的像素数量与实际宽度的比值即可计算出深度等信息。

整个程序的数据流是这样的:

 

使用指南

  • 使用Aruco之前要确保你已经在linux系统上安装了ROS系统。目前在kineticmelodic版本上测试通过。

  • 标定板获取,关注机智人后台回复标定板即可获取

1.安装

aruco安装

Kinetic:

sudo apt-get install ros-kinetic-aruco*

Melodic:

sudo apt-get install ros-melodic-aruco*

其他版本

sudo apt-get install ros-版本名称-aruco*
usb-cam安装
  • 目前暂不支持网络相机,后面将考虑纳入该相机驱动。

Kinetic:

sudo apt-get install ros-kinetic-usb-cam

Melodic:

sudo apt-get install ros-kinetic-usb-cam

其他版本

sudo apt-get install ros-kinetic-usb-cam

2.修改参数

可以直接使用本仓库中handeye-calib所提供的aruco_start_usb_cam.launch或者aruco_start_realsense_sdk.launch 分别使用realsense和usb相机的驱动来运行,这个视你的相机而定。

需要修改的参数如下:

  • camera_info_url 相机标定文件所在位置

  • video_device:设备位置

  • image_width:图片宽度

  • image_height:图片高度

  • markerId:标定板编号,就是你所用的标定板的id,可以通过后台回复标定板进行生成并打印

  • markerSize:标定板的宽度 单位m

    <arg name="camera_info_url"  default="file:///home/dev/.ros/camera_info/ost.yaml"/>
    <arg name="video_device"     default="/dev/video2"/>
    <arg name="image_width"      default="1280"/>
    <arg name="image_height"     default="720"/>
    
    <arg name="markerId"        default="0"/>
    <arg name="markerSize"      default="0.151"/>   

3.开始运行

source devel/setup.bash
roslaunch handeye-calib aruco_start_usb_cam.launch

4.运行结果

5.位姿订阅

程序运行之后如果检测到标定板的markerId为我们设置的id则会输出标定板在相机中的位姿数据,通过/aruco_signal/pose 话题输出,话题类型为PoseStamped。可以使用下面的命令订阅输出话题数据。

sudo apt-get install ros-kinetic-usb-cam

 

6.关于识别误差的校验方法

我们可以利用标记不动,移动机械臂的方法进行检测(假设机械臂是精准的)。由于机械臂与相机末端是固结的,所以当我们让机械臂的末端在空间中移动10mm,那相机在空间中也会移动10mm,同样相机中标记物的位置也应当移动10mm,我们可以通过示教器移动机械臂的方式,观察位姿数据的变化来测量精度。

如果运行出错,可以后台联系小智,免费提供技术支持。下期更新结合JAKA机械臂来实现自动标定。欢迎大家关注!

扫码关注机智人,让你做出最智能的机器人