基于ROS的机械臂手眼标定-Aruco使用与相机标定
折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。
程序都是Copy的开源代码,所以也开源出来:
开源地址:https://gitee.com/ohhuo/handeye-calib
作为手眼标定中的重要一环,相机中标定板位姿关系获取直接影响标定精度,我们使用aruco这个开源程序来实现坐标的获取。
本教程一共包含五个部分:
- 手眼标定-基础使用
- 手眼标定-JAKA机械臂
- 手眼标定-AUBO机械臂
- 手眼标定-Aruco使用与相机标定
- 手眼标定-注意事项
如果上述程序使用过程中遇到问题,可以参考:
- 手眼标定-常见问题排查
如果你对手眼标定原理感兴趣,可以参考以下文章:
- 机器人手眼标定原理介绍(含详细推导过程)使用Tsai-Lenz算法
- 手眼标定算法TSAI_LENZ,眼在手外python代码实现
- 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)
原理介绍
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.运行结果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLzkkaNFTWE90MJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0ADO2ITM1ETMwEjMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
5.位姿订阅
程序运行之后如果检测到标定板的markerId为我们设置的id则会输出标定板在相机中的位姿数据,通过/aruco_signal/pose 话题输出,话题类型为PoseStamped。
可以使用下面的命令订阅输出话题数据。
打开终端
rostopic echo /aruco_signal/pose
6.关于识别误差的校验方法
我们可以利用标记不动,移动机械臂的方法进行检测(假设机械臂是精准的)。由于机械臂与相机末端是固结的,所以当我们让机械臂的末端在空间中移动10mm,那相机在空间中也会移动10mm,同样相机中标记物的位置也应当移动10mm,我们可以通过示教器移动机械臂的方式,观察位姿数据的变化来测量精度。
如果有不明白和有错误的地方可以留言,下期更新使用JAKA机械臂来实现自动标定。