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

2023-05-16

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

你好,我是小智。

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

开源地址

github: https://github.com/aiotrobot/handeye-calib
gitee: 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系统。目前在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+(比赛奖金)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 常见开源物联网平台

    下面是我用过的 JetLink 重庆 ThingsPanel 国内 ThingsBoard 国外
  • 串口工具 和 终端工具的区别 -个人猜测

    总体来说 xff0c 都是人机交互的工具 xff0c 和图形控制软件并列 可以叫命令行工具 xff1f 串口工具 显示 输入分屏 xff1a 接收和发送分开 xff0c 输入输出相互独立 输入是文本框 xff0c 点击发送时才发送 记录lo
  • RT-Thread 添加设备初始化的方式-- INIT_BOARD_EXPORT(fn)

    代码用的是rtthread simulator v0 1 0 最开始不知道rt thread在哪里给硬件初始化 xff0c 或者在哪里添加新硬件的初始化函数 例如要添加GPIO的初始化 xff0c 和操作 1 关键的就是INIT BOARD
  • Visual Studio c#生成exe可执行文件

    生成exe可执行文件方式 1 调试完毕 xff0c 确认程序无误后 xff1a 生成 生成解决方案 2 程序所在文件夹 文件名Inverter Ver0102 2019 09 20 debug Inverter bin x64 Debug
  • 在emwin中,调用GUI_Delay()函数,程序卡死,黑屏

    没有OS TimeMS 43 1 可以在systick里或者定时器里 定时 43 1
  • STM32 堆栈大小的设置及分析

    一 通过map文件了解堆栈分配 STM32 MDK5 避免堆栈溢出 环境 xff1a STM32F103C8T6 MDK5 在最近的一个项目的开发中 xff0c 每当调用到一个函数 xff0c 程序就直接跑飞 debug跟进去看不出什么逻辑
  • C# VS2017中Windows窗体更改图标

    一 图片准备 1 需要 ICO格式的文件 2 矢量图下载可在阿里巴巴的矢量图库中下载 xff08 https www iconfont cn xff09 3 下载PNF文件的图片后需转成 ICO格式 xff08 https www uupo
  • 关于RS485的DMA发送,以及EN使能脚的自动切换

    一 电路设计 1 低成本非隔离 xff1a 3 3v系统同样 xff0c 将5V改为3 3即可 同时采用TX连接三极管 xff0c 实现三极管驱动RS485芯片的EN使能脚 xff0c 从而省下一个IO口控制 隔离只需要将两个信号线用光耦隔
  • 百度2014校园招聘笔试题(武汉站 9.28)

    一 简答题 xff08 本题共30分 xff09 动态链接库与静态链接库分别有什么优缺点 xff1f xff08 10分 xff09 轮训任务调度和抢占式任务调度有什么区别 xff1f xff08 10分 xff09 请列出数据库中常用的锁
  • c语言栈溢出的原因及解决办法_STM32编程:是时候深入理解栈了

    导读 从这篇文章开始 xff0c 将会不定期更新关于嵌入式C语言编程相关的个人认为比较重要的知识点 xff0c 或者踩过的坑 为什么要深入理解栈 xff1f 做C语言开发如果栈设置不合理或者使用不对 xff0c 栈就会溢出 xff0c 溢出
  • 时钟芯片DS1302异常

    异常现象 xff1a DS1302时间不走时 xff0c 秒位是一个大于60的错误数字 分析原因 xff1a DS1302受到干扰 xff0c 软件仿真发现DS1302的秒寄存器最高位被置为1 xff08 为时钟停止位 xff09 解决方法
  • STM32 下载调试口(JTAG+SWD)禁用及作为普通IO口

    1 RCC APB2PeriphClockCmd RCC APB2Periph AFIO ENABLE 开启AFIO时钟 2 GPIO PinRemapConfig GPIO Remap SWJ JTAGDisable ENABLE 改变指
  • 波特率的解析及转换为字节传输速率

    波特率115200 xff1d 115200 位 秒 以最普通的串口 xff08 起始位 43 8位数据 43 停止位 xff09 为例 xff1a 除以 10 xff0c 得到的是每秒字节数 xff1a 波特率115200 xff1d 1
  • 如何判断CAN总线空闲以及帧间隙,计算传输速率

    一 如何判断总线忙还是空闲呢 进入 正常模式之前 xff0c bxCAN 必须始终在 CAN 总线上实现 同步 为了进行同步 xff0c bxCAN 将等待 CAN 总线空闲 xff08 即 xff0c 已监测到CANRX 上的 11 个隐
  • STM32 DMA传输出错的防错机制

    一 DMA 中断 对于每个 DMA 数据流 xff0c 可在发生以下事件时产生中断 xff1a 达到半传输 xff08 每次传输都会触发 xff0c 属于正常触发 xff09 传输完成 传输错误 FIFO 错误 xff08 上溢 下溢或 F
  • IAR的View视图菜单中Watch、 Live Watch、 Quick Watch、 Auto、 Locals、 Statics这几个子菜单的含义和区别

    一 简述IAR的View视图菜单 View这个菜单的意思就是打开 xff08 已关闭的 xff09 视图窗口 xff0c 比如我们的工作空间窗口不见了 xff0c 就可以通过该菜单打开 不瞒大家 xff0c 以前我初学软件的时候 xff0c
  • DWA论文翻译

    摘要 本文介绍了一种能够令机器人进行自主避障的动态窗口法 xff08 dynamic window approach xff0c DWA xff09 该方法是从机器人的运动动力学直接推导出的 xff0c 因此特别适合在高速运动的机器人 与以
  • DWA仿真测试

    1 前言 由于之前已经对相关论文进行了翻译 xff0c 因此这里就不再对DWA的原理进行赘述 本文主要目的是根据相关的程序进一步强化对论文中所体现思想的理解 2 示例1 以下是使用python写的一个例子 xff0c 其中比较核心的是把搜索
  • TEB论文翻译

    摘要 传统的 elastic band 方法在规避障碍物的同时 xff0c 会根据距离最短的原则修正全局路径规划算法生成的路径 不过 elastic band 方法没有考虑到机器人的任何运动学约束 本文提出了一种称为 Time elasti
  • 求字符串中的最长回文子串

    方法一 xff08 暴力法 xff09 xff1a include lt stdio h gt include lt string h gt bool Palindrome const char str int start int end

随机推荐

  • 状态估计4(无迹卡尔曼滤波)

    1 简述 2 无迹卡尔曼滤波的思想 3 无迹卡尔曼滤波的核心公式 4 两个例子 34 34 34 Unscented kalman filter UKF localization sample author Atsushi Sakai 64
  • 积分曲线的绘制问题

    概述 事情突然 xff0c 我师姐让我帮她用maltab绘制一个函数的积分曲线 xff0c 如 xff0c 只是感觉满有意思的 xff0c 记录于此 xff01 1 示例 1 1 程序 coding utf 8 34 34 34 Creat
  • 并发与多线程3 (访问局部变量)

    1 例子 1 1 程序 include lt iostream gt include lt thread gt using namespace std struct func public func int amp i i i void o
  • 符号运算求解方程组

    概述 最近帮同事求解一个问题 xff0c 实在不想自己动手推导了 xff0c 就用python的符号运算自动计算了 xff0c 蛮有意思的 1 例子 1 1 程序 34 34 34 Created on Wed Jun 30 14 26 3
  • qtcreator+ClangFormat格式化代码

    1 前言 希望能够格式化代码 xff0c 令代码更加的整齐漂亮 2 设置 1 工具 选项 2 然后选择Beautifier General xff0c Tool选择ClangFormat 图1 General 3 点击ClangFormat
  • 状态估计1(贝叶斯滤波)

    在 概率机器人 中是这么定义 定位 xff0c 确定相对于给定地图环境的机器人位姿 xff0c 也经常被称为位置估计 不过现在这个定义明显被扩展了 xff0c 比如我们也希望知道在没有地图先验的情况下机器人的位置 xff0c 典型的如VIO
  • VINS-Mono论文翻译

    摘要 由一个相机和一个低成本惯性测量单元 IMU 组成的单目视觉惯性系统 VINS xff0c 构成了用于估计六自由度状态的最小传感器单元 xff08 大小 xff0c 重量和功耗 xff09 本文提出了VINS Mono xff1a 一个
  • GVINS论文翻译

    摘要 众所周知 xff0c 视觉惯性里程计 VIO 会出现漂移 xff0c 尤其是在长时间运行的条件下 本文提出了一种基于非线性优化的系统 GVINS xff0c 它将 GNSS 原始测量 视觉和惯性信息紧耦合以进行实时和无漂移的状态估计
  • 使用Mapviz和天地图API绘制gvins算法的轨迹

    1 前言 最近在研究gvins算法 xff0c 由于使用rviz没有办法说明问题 xff0c 也没有办法直观的向老板汇报 xff1b 所以必须找到一个能够在地图上直接显示轨迹的工具 xff0c 经调研选择了Mapviz这个工具 2 安装和配
  • FAST-LIVO论文翻译

    摘要 多传感器融合被证明是一种能够在SLAM任务中取得准确和鲁棒位姿估计的有效解决方案 xff0c 因而在机器人应用中具有无限可能 本文提出了FAST LIVO方法 xff0c 一种快速的雷达 惯性 视觉里程计 xff0c 其中包含了两个紧
  • 工作后,如何免费查论文

    工作后 xff0c 如何免费查论文 毕业后不能像在学校一样享受下载免费论文的待遇了 免费论文 毕业论文 各专业论文在哪里可以下载 xff1f 如果你的学校图书馆有数据库 xff0c 那当然是优先选择 xff0c 很多学校购买了期刊的数据 x
  • LVI-SAM论文翻译

    摘要 我们提出了一个通过smoothing and mapping的紧耦合的雷达视觉惯性里程计框架 xff0c LVI SAM xff0c 能够实时状态估计和建图 xff0c 且具有很高的精度和鲁棒性 LVI SAM基于因子图构建 xff0
  • LIO-SAM论文翻译

    摘要 我们提出了一个通过smoothing and mapping实现的紧耦合激光惯性里程计框架 xff0c LIO SAM xff0c 能够取得高精度 实时的移动机器人的轨迹估计和地图构建 LIO SAM基于因子图构建 xff0c 把多个
  • R3live论文翻译

    摘要 在本文中 xff0c 我们提出了一个新颖的激光惯性视觉传感器融合框架 xff0c 也就是R3live xff1b 它利用了激光雷达 惯性和视觉传感器的测量值 xff0c 可以得到鲁棒和高精度的状态估计 R3live包含了两个子系统 x
  • FAST-LIO2论文翻译

    摘要 本文提出了FAST LIO2 xff1a 一个快速 xff0c 鲁棒和多功能的雷达惯性里程计框架 基于高效的紧耦合的迭代卡尔曼滤波 xff0c FAST LIO2有两个关键的创新点 xff0c 可实现快速 鲁棒和准确的激光导航 xff
  • FAST-LIO论文翻译

    摘要 本文提出了一个计算效率较高和鲁棒的激光 惯性里程计框架 我们使用基于紧耦合的迭代扩展卡尔曼滤波器将LiDAR特征点与IMU数据融合在一起 xff0c 以便在发生退化的快速运动 xff0c 嘈杂或杂乱环境中实现稳健的导航 为了在存在大量
  • Faster-lio论文翻译

    摘要 本文提出了一种基于增量体素的激光惯性里程计 xff08 LIO xff09 方法 xff0c 用于快速跟踪旋转和固态激光雷达 为了实现快速的跟踪速度 xff0c 我们既没有使用复杂的基于树的结构来划分空间点云 xff0c 也没有使用严
  • Cartographer论文翻译(回环)

    摘要 便携式激光测距仪 xff08 也被称为激光雷达 xff09 和同步定位与建图 xff08 SLAM xff09 技术是获取竣工平面图的有效方法 实时生成和可视化平面图有助于操作员评估捕获数据的质量和覆盖范围 构建一个便携式捕获平台需要
  • Ubuntu 还原回默认源

    虽然国内源的速度快很多 xff0c 但是有些软件国内源没有 xff0c 或者版本较旧 xff0c 没有的情况还好 xff0c 会有意识的找原来的源 xff0c 但是如果是版本较旧的 xff0c 安装了以后会导致你陷在版本的坑 xff0c 爬
  • 基于ROS的机械臂手眼标定-Aruco使用与相机标定

    基于ROS的机械臂手眼标定 Aruco使用与相机标定 你好 xff0c 我是小智 折腾了一段时间的机械臂的手眼标定 xff0c 相关资料挺多的 xff0c 但使用起来都比较复杂 xff0c 新手一般比较难搞懂 于是想做一个比较简单易懂易用的