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

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

你好,我是小智。

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

开源地址

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

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

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

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

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

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

原理介绍

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

使用指南

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

  • 在线生成标定板: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.运行结果

在这里插入图片描述
在这里插入图片描述

5.位姿订阅

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

打开终端
rostopic echo /aruco_signal/pose
6.关于识别误差的校验方法

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

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

作者介绍:

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

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

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

ROS单目手眼标定程序: 1. 安装ros-indigo-opencv3软件包,这个软件包提供了OpenCV的3.0版和各种OpenCV的工具。 2. 确认相机是否能够被ROS识别,并且能够成功的运行和捕捉图像。如果能够正常运行,可以使用usb_cam软件包来进行设置。 $ sudo apt-get install ros-indigo-usb-cam $ rosrun usb_cam usb_cam_node 3. 计算相机的内参矩阵,并从相机标定板上收集特定数量的棋盘格图片,这个步骤需要使用OpenCV。可以使用以下命令进行相机内参矩阵的计算: $ roscore $ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam 4. 使用手眼标定工具包,计算手眼关系。该工具包依赖于OpenCV的手眼标定算法,可以在openCV的contrib模块中找到。可以使用以下命令安装工具包: $ sudo apt-get install ros-indigo-moveit-ros-robot-interaction ros-indigo-moveit-ros-perception ros-indigo-moveit-ros-planning-interface $ sudo apt-get install ros-indigo-ros-control ros-indigo-ros-controllers $ cd catkin_ws/src/ $ git clone https://github.com/ethz-asl/kalibr.git $ cd kalibr $ git checkout $YOUR_TAG (这里需要输入kalibr的版本号) $ cd ~ && mkdir -p HandEyeCalibration_ws/src && cd HandEyeCalibration_ws/src $ cp -r ~/catkin_ws/src/kalibr/HandEyeCalibration . $ cp -r ~/catkin_ws/src/kalibr/example . $ cd ~/HandEyeCalibration_ws && catkin_make 5. 运行手眼标定程序。确保相机和机器人都启动,并且他们可以正常运行。在命令行中运行: $ cd ~/HandEyeCalibration_ws $ source devel/setup.bash $ roslaunch example kinect_vrep_handeye_calibration.launch 6. 将结果存储在ROS包中。 这里就一一进行说明,可能比较晦涩难懂,但是大致原理就是这样: 首先,需要安装ROS软件,并且准备好相机可以被ROS识别,并能够正常的捕捉图像。然后,使用OpenCV计算相机内参矩阵,并从相机标定板上收集特定数量的棋盘格图片。接下来,使用手眼标定工具包,计算手眼关系,并将结果存储在ROS包中。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值