返回Learn

机器人中的协调框架和转型:一个明确的指南

了解机器人世界,机器人基础,工具和摄像头框架的坐标框架和同质变化,并提供转换示例.

[←学习]

机器人系统中的几乎每一个导致手臂朝错误的方向移动的错误都是坐标框架错误.

为什么协调框架是重要的

每个传感器,每一个机器人链接,以及环境中的每个对象都有自己的坐标系统,它有自己的"前进","上",和"右".当你的相机在相机框架中检测到一个位置 (0.1, -0.05, 0.3) 的对象时,机器人不能直接对此采取行动.它需要对象在机器人框架中的位置来控制臂.

转换位置和方向是坐标转换的任务.误导是机器人系统中最常见的难去调试错误的唯一来源.

同性变化

T0是4×4矩阵,同时编码旋转和转换:

T = [[R, t], [0, 0, 0, 1]]

在此,T2是一个3×3旋转矩阵 (直角, det(R) =1) 和T3是一个3×1转换向量.

标记T4意味着"T6"或相等式的"B框架中的转换,将B框架中的坐标转换为A框架中的坐标".

转换代表

转换是3DOF数量,但可以用多种方式表达它.选择错误的数量会导致错误.

  • 旋转矩阵 (3×3): 几何最正确的表示.直角性限制 (9值为3DOF) 使它过于参数化.当需要编写许多转换时使用矩阵乘法是数值稳定的.
  • ** 艾勒角 (滚动,音速,):** 直观: "绕z轴旋转45°".但在某些配置上,两个轴对齐,你会失去一定程度的自由. ** 在硬件上连续运行的代码中不要使用艾勒角.**仅用于人类可读的记录.
  • 四分之一 (qx, qy, qz, qw): 4个值 (单位限制为3DOF).没有门.紧. 顺利插曲 (SLERP). 机器人软件的标准. ** 在你的代码中使用这个. ** 注意双盖:q和 -q代表相同的旋转.
  • **6D旋转 (R的两个列):**最适合神经网络输出 连续表示,无间断.通过Gram-Schmidt重建完整R.用于现代机器人学习政策.

常见的机器人框架

典型的操纵设置至少包括四个坐标框架:

  • 世界框架: 固定的全球参考. 通常定义在机器人安装点或在桌面上的校准目标.所有其他框架最终都与此相对.
  • **机器人基架:**机器人的架中心的起源.机器人的前进动力学与这个框架相比计算.
  • 终端效果器/工具框架: 源自抓的尖端 ("工具中心点"或TCP).当指定卡特西亚目标时,您命令此.
  • 摄像头:** 起源于摄像头的光学中心.Z轴沿着摄像头的光学轴 (进入场景) 点.对象检测最初表达在这个中.

转换链

为了将在相机框架中检测到的物体姿势转换为世界框架,链接转换:

T_world_obj = T_world_robot × T_robot_ee × T_ee_camera × T_camera_obj

读一读:首先把对象转化为摄像头框架 (身份它已经存在),然后变成终端效应器框架,然后变成机器人基架,然后变成世界框架.

每个转换都是4×4矩阵;链接只是矩阵乘法.在ROS2中,T9库自动管理所有这些转换,并允许您通过单次调用查找任何框架到框架转换.

手眼校准

为了使用上述变换链,您需要相机相对于机器人的终端效应器的姿势.

过程:将机器人移动到许多不同的联合配置 (至少1520) 时,在场景中可见一个校准目标 (ArUco标记或棋牌牌).在每个配置中,记录机器人的FK计算终端效应器姿势和摄像头对目标的观察.这给出了方程系统AX = XB,其中X是未知的T11. 标准的解决器 (OpenCV的T12) 在几秒钟内解决了这个问题.

每当: 摄像头被物理移动或撞击,安装了新的摄像头,或者你观察到系统的抓取偏移错误.

实际的Python工具

  • **scipy.space.transform.rotation:**转换转换矩阵,四角,尤勒角和轴角之间.
  • **ROS2 tf2 (Python rclpy):**实时转换树管理. 使用T13发布转换和T14查找它们.
  • pytransform3d: 纯Python库适用于所有SE(3) 操作,可用于调试错误的视觉化.
  • 子:子的矩阵乘法是4×4同质变化的子.

更多机器人资源和教程请参阅 [RCSV资源部分]T17).