基于ROS的机械臂手眼标定-Aruco使用与相机标定

你好,我是小智。

折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。

程序都是Copy的开源代码,所以也开源出来:

开源地址


github: ​​https://github.com/aiotrobot/handeye-calib​​​ gitee: ​​https://gitee.com/ohhuo/handeye-calib​​​


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

机械臂位姿 手眼标定程序 相机中标定板位姿 末端与相机位姿关系

本教程一共包含五个部分:

如果上述程序使用过程中遇到问题,可以参考:

如果你对手眼标定原理感兴趣,可以参考以下文章:

原理介绍

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

使用指南


  • 使用Aruco之前要确保你已经在linux系统上安装了ROS系统。目前在​​kinetic​​和​​melodic​​版本上测试通过。
  • 在线生成标定板:https://chev.me/arucogen/

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-melodic-usb-cam

其他版本

sudo apt-get install ros-melodic-版本名称-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,可以通过​​在线生成标定板:https://chev.me/arucogen/​​进行生成并打印
  • 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.运行结果

基于ROS的机械臂手眼标定-Aruco使用与相机标定_手眼标定

基于ROS的机械臂手眼标定-Aruco使用与相机标定_aruco_02

5.位姿订阅

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

可以使用下面的命令订阅输出话题数据。

打开终端
rostopic echo /aruco_signal/pose

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

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

如果有不明白和有错误的地方可以留言,下期更新使用JAKA机械臂来实现自动标定。

作者介绍:

我是小智,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚

初中学习编程,高中开始学习机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)

目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小智,一起交流技术,学习机器人

基于ROS的机械臂手眼标定-Aruco使用与相机标定_jaka_03