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

怎么知道机械臂该怎么动

事情也很简单,就是比如说现在你有一个机械臂,最开始末端在A点,你想去B点,怎么计算出来机械臂的这些关节应该怎么转才能达到这个效果呢?

其实也挺简单的,首先我们拿最经典的六轴机器人举例子,先建立模型。

首先这六个关节都能转,所以说有六个运动参数 \(\theta_i\)

然后还有一些静态参数,描述每个关节到底朝哪个方向转,关节之间间距多少之类的,这个用绝对坐标不好描述,因为后一个关节的位置和朝向受到前一个的影响,所以我们对每一个关节都建一个坐标系 \(i\)。具体就是 \(z_i\) 轴落在 i 号关节的旋转轴/伸缩轴的轴线上,\(x_i\) 就落在 \(z_i\)\(z_{i+1}\) 的公垂线上,这样原点和 y 轴也能得到了。

接下来再去看有哪些静态参数,你看这个机械臂,一个关节本质上只有空间位置和朝向两个参量,但是我们递推的时候,考虑当前关节转动对下一个关节的影响,哪些会变哪些不会变?那就很显然了,我们给当前关节和下一个关节连一个矢量,这个长度不会变,方向只会随着轴转,而下一个关节的朝向(即旋转轴)和这个矢量的相对方向也不变,这些不变量就是固定参数了,把矢量分别投影到xoy和z上面能得到连杆长度a和连杆偏距d。再看朝向,再记录一个两个关节轴的夹角 alpha 就行了。

为什么要把这个矢量投影成俩呢?一个是好算,另一个是关节的空间位置位置其实并不是良定义的,因为有的情况下把关节看成一个点是失真的,比如一个万向轴,你要拆成xyz三个方向的关节,可能就会涉及到关节内部的情况了,这样不保证正确。关节最本质的东西只有那个旋转轴,而我们反过来用建立的坐标系(利用了相邻关节的位置关系,换句话说其实是轴的位置关系)来用坐标原点”公理化地“定义了关节的空间位置。这一点挺深刻的其实。

这个东西就是所谓的 Denavit–Hartenberg 参数法。

那运动也就很简单了,就是按照定义一步步来,先绕着 \(z_{i-1}\) 轴旋转 \(\theta _i\),再沿着 \(z_{i-1}\) 轴平移 \(d_i\) ,再沿着 \(x_i\) 轴平移 \(a_i\),再绕 \(x_i\) 轴旋转 \(\alpha _i\)。为了让平移齐次化,我们用齐次坐标表示,这样一次变换的矩阵就是:

\[^{i-1}T_i = \begin{bmatrix} \cos\theta_i & -\sin\theta_i\cos\alpha_i & \sin\theta_i\sin\alpha_i & a_i\cos\theta_i \\ \sin\theta_i & \cos\theta_i\cos\alpha_i & -\cos\theta_i\sin\alpha_i & a_i\sin\theta_i \\ 0 & \sin\alpha_i & \cos\alpha_i & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix} \]

总变换也就是 $$^0T_n = ^0T_1 \cdot ^1T_2 \cdot ^2T_3 \dots ^{n-1}T_n$$ 。

那么假如说我们期望运动到点 \(x\),要反过来求 \(\theta\) 怎么办呢?

一般的 DH 参数法反解逆运动利用了六轴机器人本身的一些性质:后三轴交于一点。这样可以根据末状态参量求腕心,再用分析方法硬去解各个参数。

不过这么解有两个局限性,一个是它利用了一般六轴机器人的良好结构,一旦我们设计的不是那么巧妙,这个方程的一般形式又不是齐次的(甚至不是分离参数的),很可能解不出来;另一方面是现在末端空间坐标和姿态是六个参数,刚好满秩,如果再多一些自由度,这种解析的方法要面临一个在高维解空间里取点的问题,如果这个空间的解系很难写,要选一个特解,这种分析法就有些困难了。

为了应对上述两个问题,我们对更一般的机械臂也可以通过一些数值方法处理逆运动。

为了强调未知数,我们把$$^0T_n$$ 直接记作 \(^0T_n(\theta)\),其中 \(\theta\) 是一个 \(n\) 维向量,表示各个关节角。我们就是要求 \(\theta\) 使得 \(^0T_n(\theta)\approx T_d\),即末状态。

现在我们手里有正运动学公式,在推出来的4*4齐次坐标矩阵里面能够提取出来一个包含了位置和姿态的六维向量,拿这个六维向量和期待的六维状态向量做差能够得到误差函数,后面就有很多种办法做了,有我们熟悉的梯度下降法,当然在这里用不上那一套,用数值雅可比法就可以了,也就是牛顿法在向量函数上的推广。

我们有没有稍微不数值一点的方法,或者更本质一点的方法分析一下一般机械臂该怎么动呢?

回顾一下整个机械臂的变换过程,显然这个变换是属于三维刚体位姿群 \(SE(3)\) 的,显然这是一个李群,我们可以去求他的李代数,在李群单位元处求正切空间。

对于每个转动关节,我们需要对应一个运动旋量 \((\omega,v)^T\),其中 \(v=-\omega\times q\)。也就是做了个简单的线速度角速度分解。

把运动旋量写成矩阵形式直接可以对应到李代数元素了,然后做指数映射可以化作指数积公式,后面再说。

http://www.zskr.cn/news/1386902.html

相关文章:

  • 低延迟可解释AI模型架构设计与边缘计算优化
  • 保姆级避坑指南:在Ubuntu 20.04上搞定VINS-Fusion环境与手机数据采集(含源码修改细节)
  • 从 for 循环到 yield:一文彻底吃透 Python 迭代器与生成器
  • Java反射机制(一):深入理解Class对象——从三种获取方式看JVM的类加载原理
  • 别再死记硬背了!UE5材质蓝图这5个核心节点,新手也能快速上手(附快捷键大全)
  • 别再傻傻分不清了!5分钟搞懂点乘和叉乘在游戏开发里的实际用法(Unity/C#)
  • 2026年全国瓷砖美缝剂主流品牌盘点与实测对比:屋顶防水材料、强力瓷砖背胶、强力瓷砖胶、新型防水材料、柔性瓷砖胶选择指南 - 优质品牌商家
  • 深入OpenPnP视觉校准:从‘模糊Mark点’到‘白平衡优化’的调试实录
  • 今日算法(组合问题)(回溯解法)
  • 告别警告和强制刷新!用UGUI LayoutGroup + Content Size Fitter实现完美聊天框自适应(Unity 2022 LTS)
  • 2026年射洪市主流装饰公司盘点:射洪装饰公司/射洪装饰/射洪家装/射洪精装修/射洪整装/射洪装修公司/射洪装修/选择指南 - 优质品牌商家
  • 告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点
  • 集成学习与可解释AI在无人机网络入侵检测中的实践
  • 无需sdk,使用curl命令直接测试taotoken的openai兼容api接口
  • 手把手教你用CTSpine1K和OAI-ZIB数据集,快速搭建医学影像分析环境(附代码)
  • whisper语音转文字配置
  • Unity Android SDK消失根因与五步闭环解决方案
  • Claude Code 之父:2026 年我一行代码都没写,编程已被 AI 解决
  • 别再傻傻分不清ARM架构和内核了!从V1到V9,一张图看懂Cortex-A/M/R怎么选
  • Unity Google Play爆款小游戏开发模板:Instant+IAA性能优化实战
  • Unity安卓打包实战指南:从环境配置到APK生成全链路排错
  • 基于XGBoost与特征工程的ISP对等连接自动化预测实践
  • 2026年信创兼容资产软件,国产化适配+集团资产统一管控
  • VRM模型Blender转Unity无损FBX导出全流程
  • Unity安卓构建实战指南:解决APK真机安装闪退与构建失败
  • 2026年5月四川水务工程服务商选择:聚焦综合实力与定制化能力 - 2026年企业推荐榜
  • 如何快速解决C盘爆红问题:Windows Cleaner免费系统优化工具完全指南
  • 2026年4月淘宝纸箱双排联动线厂商哪家强,纸箱高速印刷机/纸箱印刷联动线,淘宝纸箱双排联动线制造商推荐 - 品牌推荐师
  • 思源宋体完全指南:如何免费获得专业级中文字体体验?
  • 多层感知机在宇宙线能量重建中的应用:从物理特征到模型实践