当前位置: 首页 > news >正文

机器人零位标定修正流程介绍

如果想看运动学标定可以看看 机器人运动学参数标定, 一次性把运动学参数和零位标定等一起标定求解.

1. 零位标定

零位标定是机器人运动学标定中的一个重要步骤,其目的是校正机器人关节的初始位置误差。以下是需要进行零位标定的主要原因:

  • 制造误差

    • 在机器人制造过程中,关节传感器(如编码器)和机械零件的安装可能存在微小的偏差。
    • 这些偏差会导致关节的零位(初始位置)与理论值不一致,从而影响运动学计算的准确性。
  • 装配误差

    • 机器人在组装过程中,关节和连杆之间的对齐可能存在误差。
    • 这些误差会导致正运动学和逆运动学计算的结果与实际位置不符。
  • 传感器误差

    • 编码器或其他位置传感器可能存在零点漂移或校准误差。
    • 零位标定可以校正这些传感器的初始偏差。
  • 提高运动精度

    • 零位偏差会累积到机器人运动的末端位置,导致末端执行器无法准确到达目标位置。
    • 通过零位标定,可以显著提高机器人末端的定位精度。
  • 确保一致性

    • 在多次启动或不同环境下,零位可能会发生轻微变化。
    • 零位标定可以确保机器人在不同时间和环境下的运动一致性。
  • 运动学模型的准确性

    • 机器人控制依赖于精确的运动学模型(正运动学和逆运动学)。
    • 零位标定是运动学模型校正的重要部分,确保理论模型与实际机器人一致。
  • 避免累积误差

    • 零位偏差会导致关节角度的计算误差,这些误差在多关节运动中会累积,影响整体运动精度。
    • 零位标定可以有效减少这种累积误差。

2. 零位标定思路

针尖基准点
假设有一个针尖基准点,令机器人末端对准针尖基准点,则实际末端位置可以表示为:

p → r e a l = p → f k + J ⋅ ϕ → \overrightarrow{p}^{real} = \overrightarrow{p}^{fk} + J \cdot \overrightarrow{\phi} p real=p fk+Jϕ

其中:

  • p → r e a l \overrightarrow{p}^{real} p real 是实际末端位置。
  • p → f k \overrightarrow{p}^{fk} p fk 是通过正运动学计算得到的理论末端位置。
  • J J J 是雅可比矩阵,表示关节角度对末端位置的偏导数。
  • ϕ → \overrightarrow{\phi} ϕ 是零位偏差向量。

通过改变机器人姿态,记录两组不同的末端位置和关节角度,得到以下关系:

p → 1 f k + J 1 ⋅ ϕ → = p → 2 f k + J 2 ⋅ ϕ → \overrightarrow{p}^{fk}_1 + J_1 \cdot \overrightarrow{\phi} = \overrightarrow{p}^{fk}_2 + J_2 \cdot \overrightarrow{\phi} p 1fk+J1ϕ =p 2fk+J2ϕ

目标是求解零位偏差 ϕ → \overrightarrow{\phi} ϕ ,使上述等式成立。


3. 零位偏差计算方法及算法流程

3.1 数据采集

  • 选取多个测量点(例如 n n n 个)。
  • 记录每个测量点的关节角度和实际末端位置。
    TCP

3.2 误差模型

对于每个测量点,误差可以表示为:

Δ p → i = p → i r e a l − p → i f k = J i ⋅ ϕ → \Delta \overrightarrow{p}_i = \overrightarrow{p}^{real}_i - \overrightarrow{p}^{fk}_i = J_i \cdot \overrightarrow{\phi} Δp i=p irealp ifk=Jiϕ

将所有测量点的误差组合成矩阵形式:

Y = B ⋅ ϕ → Y = B \cdot \overrightarrow{\phi} Y=Bϕ

其中:

  • Y Y Y 是误差向量, Y = [ Δ p → 1 , Δ p → 2 , … , Δ p → n ] T Y = [\Delta \overrightarrow{p}_1, \Delta \overrightarrow{p}_2, \dots, \Delta \overrightarrow{p}_n]^T Y=[Δp 1,Δp 2,,Δp n]T
  • B B B 是雅可比矩阵的组合, B = [ J 1 , J 2 , … , J n ] T B = [J_1, J_2, \dots, J_n]^T B=[J1,J2,,Jn]T

3.3 最小二乘法求解

通过最小化误差的平方和,求解零位偏差 ϕ → \overrightarrow{\phi} ϕ

ϕ → = ( B T ⋅ B ) − 1 ⋅ B T ⋅ Y \overrightarrow{\phi} = (B^T \cdot B)^{-1} \cdot B^T \cdot Y ϕ =(BTB)1BTY


4. Python 实现代码

以下是一个简单的 Python 实现:

import numpy as np
np.set_printoptions(5, suppress=True)# 示例数据:雅可比矩阵 B 和误差向量 Y
B = np.array([[1, 2], [3, 4], [5, 6]])  # 雅可比矩阵 (3x2)
Y = np.array([1, 2, 3])                 # 误差向量 (3x1)# 计算零位偏差 φ
BT = B.T                                # B 的转置
phi = np.linalg.inv(BT @ B) @ BT @ Y    # 最小二乘法公式print("零位偏差 φ:", phi)
零位偏差 φ: [0.  0.5]

5. 注意事项

  1. 矩阵维度匹配:确保矩阵 B B B 的行数与误差向量 Y Y Y 的长度一致。
  2. 矩阵可逆性:矩阵 ( B T ⋅ B ) (B^T \cdot B) (BTB) 必须是可逆的。如果不可逆,可以使用伪逆方法:
   phi = np.linalg.pinv(B) @ Y
  1. 数据精度:测量数据应尽量精确,以减少误差。

通过上述公式和代码,可以使用最小二乘法计算零位偏差,完成机器人零位标定。

6. 问题

6.1 为什么需要20个点?

在机器人零位标定中,选择多个测量点(例如 20 个点)是为了提高标定的精度和鲁棒性。以下是原因:

  • 减少测量误差的影响

    • 单个点的测量可能存在误差(例如传感器噪声、环境干扰等)。
    • 使用多个点可以通过最小二乘法将误差分散,从而得到更准确的零位偏差。
  • 提高解的稳定性

    • 如果测量点过少,矩阵 B T ⋅ B B^T \cdot B BTB 可能是奇异的(不可逆),导致无法求解。
    • 增加测量点数量可以确保矩阵 B T ⋅ B B^T \cdot B BTB 的条件数更好,从而提高解的稳定性。
  • 覆盖更多的姿态空间

    • 通过选择不同的姿态(关节角度组合),可以覆盖更大的工作空间。
    • 这有助于捕捉零位偏差在不同姿态下的影响,避免局部解。
  • 减少过拟合风险

    • 如果测量点过少,可能会导致模型过拟合,无法准确反映实际的零位偏差。
    • 增加点数可以让模型更具泛化能力。
  • 满足最小二乘法的要求

    • 最小二乘法需要测量点的数量大于未知参数的数量(即 n > m n > m n>m,其中 n n n 是测量点数, m m m 是零位偏差的维度)。
    • 选择 20 个点通常是为了确保足够的数据冗余。

总结来说,选择 20 个点是为了在数据冗余、解的稳定性和精度之间取得平衡,同时确保标定结果的可靠性。

相关文章:

机器人零位标定修正流程介绍

如果想看运动学标定可以看看 机器人运动学参数标定, 一次性把运动学参数和零位标定等一起标定求解. 1. 零位标定 零位标定是机器人运动学标定中的一个重要步骤,其目的是校正机器人关节的初始位置误差。以下是需要进行零位标定的主要原因: 制造误差 在机…...

应用层通信报文设计

/* --------------------------------------------------------------- | 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte | --------------------------------------------------------------- | 状态 1byte | 保留字段 4byte | 数据长…...

一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Excel格式文件是办公使用和处理最多的文件格式之一,相比CSV文件,Excel是有样式的。Pandas2提…...

技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案

iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代AloT高端应用芯片,采用8nmLP制程,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构,主频高达2.4GHz。是一款可用于互联网设备和其它数字多媒体的高性能产品。 在…...

ubuntu 20.04 安装源码编译 ros humble过程

公司要兼容ros1还需要ros2 这个时候不得不使用ubuntu20.04 安装 humble 但实际上在20.04上安装humble是需要在源码编译的。 根据这个帖子 https://blog.csdn.net/m0_62353836/article/details/129730981 重写一份,以应对无法下载的问题 系统配置 #检查是否为UTF-8编码,是则跳…...

Ubuntu18.04.06安装window虚拟机,安装VirtualBox

VirtualBox官网没有支持Ubuntu18的版本,最低是ubuntu20; 但是现在用的系统是UBuntu18.04.06,又不能升级,查阅了很多办法,最终终于安装VirtualBox可用版本; 1,在Ubuntu18自带的软件应用市场,搜VirtualBox;…...

Matlab 四分之一车体被动悬架、pid、模糊控制和模糊pid控制

1、内容简介 Matlab 198-四分之一车体被动悬架、pid、模糊控制和模糊pid控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Linux-----驱动

一、内核驱动与启动流程 1. Linux内核驱动 Nor Flash: 可线性访问,有专门的数据及地址总线(与内存访问方式相同)。 Nand Flash: 不可线性访问,访问需要控制逻辑(软件)。 2. Linux启动流程 ARM架构: IRAM…...

用HTML和CSS绘制佩奇:我不是佩奇

在这篇博客中,我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力,仅用样式就能创造出复杂的图形,而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…...

Qwen2.5-7B-Instruct FastApi 部署调用教程

1 环境准备 基础环境最低要求说明: 环境名称版本信息1Ubuntu22.04.4 LTSCudaV12.1.105Python3.12.4NVIDIA CorporationRTX 3090 首先 pip 换源加速下载并安装依赖包 # 升级pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set g…...

潇洒浪: Dify 上传自定义文件去除内容校验 File validation failed for file: re.json

Dify上传文件 添加其他文件类型如 my.myselfsuffix 上传成功 执行报错 File validation failed for file: re.json 解决办法 Notepad 搜索dify源码 注释掉,重启容器 或者直接在容器中修改重启...

【力扣hot100题】(088)最长有效括号

这题目真是越做越难了。 但其实只是思路很难想到,一旦会了方法就很好做。 但问题就在方法太难想了…… 思路还是只要遍历一遍数组,维护动态规划数组记录截止至目前位置选取该元素的情况下有效括号的最大值。 光是知道这个还不够,看了答案…...

XML、JSON 和 Protocol Buffers (protobuf) 对比

目录 1. XML (eXtensible Markup Language) 1)xml的特点: 2)xml的适用场景: 2. JSON (JavaScript Object Notation) 1)JSOM的特点: 2)JSON的适用场景: 3. Protocol Buffers (…...

C++ 入门四:类与对象 —— 面向对象编程的核心基石

一、类的定义 1. 类的基本形式 class 类名 { public: // 公有成员(类内外均可访问)数据类型 数据成员; // 公有数据成员数据类型 成员函数(参数列表); // 公有成员函数声明 protected: // 保护成员(类内和派生类可访问&…...

DeepSeek:穿透行业知识壁垒的搜索引擎攻防战

DeepSeek:穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组(人机协同创作) 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示,百度搜索结果前10页中,61.7%的内容存在"伪专业化"现象——看似…...

SQL 查询中涉及的表及其作用说明

SQL 查询中涉及的表及其作用说明: 涉及的数据库表 表名别名/用途关联关系dbo.s_orderSO(主表)存储订单主信息(订单号、日期、客户等)dbo.s_orderdetailSoD(订单明细)通过 billid SO.billid 关…...

数组 array

1、数组定义 是一种用于存储多个相同类型数据的存储模型。 2、数组格式 (1)数据类型[ ] 变量名(比较常见这种格式) 例如: int [ ] arr0,定义了一个int类型的数组,数组名是arr0; &am…...

Git 查看提交历史

Git作为最流行的版本控制工具,其提交历史管理是开发者日常工作的核心部分。无论是回溯代码变更、定位问题根源,还是进行版本回退,掌握Git提交历史的操作技巧都至关重要。本文将全面解析Git提交历史相关命令,助你成为版本管理高手&…...

电脑提示“找不到mfc140u.dll“的完整解决方案:从原因分析到彻底修复

当你启动某个软件或游戏时,突然遭遇"无法启动程序,因为计算机中丢失mfc140u.dll"的错误提示,这确实令人沮丧。mfc140u.dll是Microsoft Foundation Classes(MFC)库的重要组成部分,属于Visual C Re…...

windows安卓子系统wsa隐藏应用列表的安装激活使用

Windows 11 安卓子系统应用部署全攻略 windows安卓子系统wsa隐藏应用列表的安装激活使用|过检测核心前端 在 Windows 11 系统中,安卓子系统为用户带来了在电脑上运行安卓应用的便利。经过一系列的操作,我们已经完成了 Windows 11 安卓子系统的底层和前端…...

深入探索 PyTorch:回归与分类模型的全方位解析

深入探索 PyTorch:回归与分类模型的全方位解析 在当今数据驱动的时代,机器学习与深度学习技术正广泛应用于各个领域,助力我们从海量数据中挖掘有价值的信息。而 PyTorch 作为一款备受青睐的深度学习框架,为开发者们提供了简洁且高…...

案例分析:东华新径,拉动式生产的智造之路

目录 文章目录 目录南京东华智能转向系统有限公司是一家什么公司?背景知识:新能源汽车生产制造流程简介东华遇见了什么问题?东华希望如何解决?解决思路:从 “推动式生产” 到 “拉动式生产”,从 “冗余式思…...

【android bluetooth 框架分析 01】【关键线程 5】【bt_main_thread介绍】

1. 概述 system/stack/btu/btu_task.cc bt_main_thread 是 Android Bluetooth 协议栈中的核心线程,负责处理蓝牙协议栈中的大部分关键任务和事件。它相当于蓝牙协议栈的"大脑",协调各种蓝牙功能的运行。 2. 重要性 bt_main_thread 的重要性…...

城市应急安防系统EasyCVR视频融合平台:如何实现多源视频资源高效汇聚与应急指挥协同

一、方案背景 1)项目背景 在当今数字化时代,随着信息技术的飞速发展,视频监控和应急指挥系统在公共安全、城市应急等领域的重要性日益凸显。尤其是在关键场所,高效的视频资源整合与传输能力对于应对突发公共事件、实现快速精准的…...

自动化测试常用函数

自动化测试常用函数 前言1. 元素的定位1.1 cssSelector1.2 xpath1.2.1 获取 HTML 页面所有的节点1.2.2 获取 HTML 页面指定的节点1.2.3 获取一个节点中的直接子节点1.2.4 获取一个节点的父节点1.2.5 实现节点属性的匹配1.2.6 使用指定索引的方式获取对应的节点内容 2. 操作测试…...

OpengGL教程(七)---摄像机

本章参考官方教程:摄像机 本系列历史文 OpengGL教程(一)—OpenGL环境的配置(GLFW3,GLAD) OpengGL教程(二)—渲染一个简单的窗体 OpengGL教程(三)—使用VAO和VBO方式绘制三角形 OpengGL教程(四)—使用EBO方式绘制矩形 OpengGL教程(五)—纹理的应用 OpengGL教程(六)—…...

springboot禁用静态资源

使用 application.properties 在 application.properties 中添加如下配置: spring.web.resources.add-mappingsfalse使用 application.yml 在 application.yml 中添加如下配置: spring:web:resources:add-mappings: false配置解释 spring.web.resou…...

猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新

前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的…...

‌ViewModel和AndroidViewModel的主要区别

‌ViewModel和AndroidViewModel的主要区别在于它们的继承关系、构造函数以及使用场景。‌ ‌继承关系与构造函数‌: ‌ViewModel‌:ViewModel是一个抽象类,位于androidx.lifecycle包中。它是所有ViewModel类的基类,构造函数较为…...

myeclise导入项目并运行

1、把项目复制到myeclise工作目录 2、导入项目:将项目导入到myeclise工作目录 3、配置jre 4、把项目放到tomcat 5、运行项目 配置数据库后运行...

XSS 防御转义规则笔记

一、转义规则概述 核心目标:防止用户输入被浏览器解析为可执行代码,确保输入始终被视为数据而非代码。 关键策略:根据数据嵌入的上下文环境(HTML、JavaScript、CSS 等),对特殊字符进行转义或编码。 二、不…...

【2025年认证杯数学中国数学建模网络挑战赛】C题 完整论文 全三问模型+求解+代码

目录 【2025年认证杯数学建模挑战赛】C题数据预处理与全三问求解一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 三、数据预处理及分析四、问题一五、问题二5.1 基于互相关函数的反应延时识别5.2 反应过程延时结果分析5.3 基于BP神经网络的不合格产物预测5.4…...

iOS应用开发指南

开发一款iOS应用是一个系统化的过程,涵盖从环境搭建、界面设计、编码实现到测试发布的各个环节。以下是一份面向初学者的iOS移动应用开发指南,帮助你从零开始构建自己的App。 一、准备工作:开发环境与工具 必备设备 Mac电脑:iO…...

小刚说C语言刷题——第21讲 一维数组

在日常生活中,我们经常输入一组数据。例如输入一个班30名学生的语文成绩,或者输入一组商品的价格。这个时候,我们如何输入一组类型相同的数据呢?这里我们就要用到数组。 1.数组的概念 所谓数组就是一组相同类型数据的集合。数组中…...

苍穹外卖2

根据id查询员工 调用顺序:Controller—>Service—>ServiceImpl—>Mapper—>xml 1.controller层一个tab秒了(ai生成) 由于result泛型中希望返回一个employee对象,所以定义一个employee来接受Service的getbyid方法,在…...

C语言之双层for循环

一、第一小题引入 循环次数用 外层循环内层循环 这一题即是: 3412(次) 外循环一次 内循环一趟(可以形象理解为 时针和 分针) 运行结果如下: 一、第二小题引入 请阅读下列代码: 执行程序.程序执行的循环次数为多少? 答案:20次 这一题 外层循环 从5开始到i结束 中间的i是…...

第8课:多智能体系统评估与迭代

多智能体系统评估与迭代:从指标设计到持续优化的全流程指南 一、引言:当智能体协作出现“磨合期”:评估与迭代为何是必经之路? 在多智能体系统(MAS)的实际运行中,即使架构设计合理,也可能面临“协作效率下降”“资源浪费”等问题: 任务完成率突然从95%降至70%,却找…...

HTTP:三.HTTP报文

报文流 http报文是以一种类似的流的方式来发送数据的,所以报文流讲述了http报文的一些客观状态,相关术语:流入、流出形容事务处理。http报文任何时候是从上游向下游流入的!其中进过的节点既可能是上游,有可能是下游,如果从某个节点流出,那么相对于此节点流入的那个节点…...

.NET MAUI教程1-入门并发布apk包安装到真机

由于本人水平有限,如有写得不对的地方往指出,由于是使用公司的电脑,电脑的操作系统是英文的,没有权限修改,所以本文截图中的vs是英文版的 以发布android为例进行讲解 测试环境: window 11 vs2022 步骤如…...

你所拨打的电话是空号?手机状态查询API

一、引言 在当今数字化营销时代,电话销售仍然是许多企业获取客户的重要手段之一。然而,电销过程中常常遇到空号、风险号和沉默号等问题,这不仅降低了营销效率,还增加了企业的运营成本。例如,频繁拨打空号浪费了大量时…...

C++顺序栈的实现

顺序栈详细介绍 定义与特点 顺序栈(Sequential Stack)是一种基于数组实现的栈结构,利用数组的连续内存空间存储元素,遵循后进先出(LIFO)原则。其核心特点包括: 固定或动态容量:初始…...

element-ui 中的 select 组件如何 remote-method 函数中传参

在 select 组件中我们使用其 change 事件可以传参&#xff0c;请查看&#xff1a;el-select 中change 事件传参问题。 在我们使用 select 组件的远程搜索时&#xff0c;我们如何给 remote-method 这个方法添加自定义参数呢&#xff1f; 代码实现如下&#xff1a; <el-sel…...

浅谈解释型语言的运用

不得不说&#xff0c;程序不需要编译&#xff0c;程序在运行时才翻译成机器语言&#xff0c;每执行一次&#xff0c;都要翻译一次&#xff0c;因此效率比较低。在运行程序时才翻译&#xff0c;专门有一个解释器去进行翻译&#xff0c;每个语句都是执行的时候才翻译&#xff0c;…...

云手机哪个平台最好用?云手机性能、服务、技术等多维度测评分析

在云手机市场日渐繁荣的当下&#xff0c;面对琳琅满目的云手机平台&#xff0c;用户往往难以抉择云手机哪个平台最好。下面我们就从从性能、价格等多维度分析&#xff0c;云手机平台哪家强&#xff0c;队国内好用的云手机平台进行排行盘点。 好用的云手机平台排行盘点 第一&…...

idea版的cursor:Windsurf Wave 7

在企业环境中&#xff0c;Visual Studio Code和JetBrains系列是最常用的开发工具&#xff0c;覆盖了全球绝大多数开发者。这两类IDE各有优势&#xff0c;但JetBrains系列凭借其针对特定语言和企业场景的深度优化&#xff0c;使得用户很难轻易更换工具。 虽然Windsurf编辑器是基…...

【IDEA】创建 SpringBoot 项目连接 MySQL

前言 IntelliJ IDEA 作为一款专业的 Java 开发工具&#xff0c;在创建和管理 Spring Boot 项目方面具有显著优势。它深度集成了 Spring Boot 的开发流程&#xff0c;从项目初始化到最终部署都提供了高效的支持。IDEA 内置的 Spring Initializr 工具让项目创建变得极其简单&…...

使用 IntelliJ IDEA 进行远程调试

1. 前言 今天线上出现了个 Bug &#xff0c;而且比较坑的是涉及到k8s环境相关的东西不能线下调试。传统方式是在代码中各种的日志 log 埋点然后重新部署进行调试&#xff0c;再根据 log 中的信息进行分析。如果你的 log 埋点不合理&#xff0c;就要不停的修改代码、不停的打包…...

Linux操作系统--进程状态

目录 1.运行、阻塞、挂起 1.1运行 1.2阻塞 1.3挂起(了解一下即可&#xff0c;基本不会出现这种情况) 2.进程状态 2.1进程状态查看 2.2 Z-僵尸进程 2.3孤儿进程 1.运行、阻塞、挂起 1.1运行 运行状态&#xff1a; 进程正在占用CPU执行指令。此时进程对系统资源&#xff…...

【端到端】端到端自动驾驶依赖Occupancy进行运动规划?还是可以具有生成局部地图来规划?

端到端自动驾驶系统的架构设计&#xff0c;目前主流做法实际上已经出现两种路径&#xff0c;我们来拆解一下&#xff1a; &#x1f698; 一、Occupancy 是否用于运动规划&#xff1f; 一种趋势是使用 Occupancy 表示作为 中间表征&#xff0c;用于&#xff1a; 运动规划&…...

HarmonyOS-ArkUIV2装饰器-@Param:组件外部输入

上文我们了解了@Local装饰器 ,讲明了Local装饰器不允许外部传入值对其进行初始化。详见: HarmonyOS-ArkUI V2装饰器@Local装饰器:组件内部状态-CSDN博客。 但总有场景是需要外部组件传值过来,然后本组件接收这个值这种场景的。而且很多情况下,一个状态变量的作用范围会是…...