开源七轴myArm协作机械臂正逆运动学技术讲解

引言:

在本文中,我们将深入探讨机器人学的两个核心概念:正运动学和逆运动学。这两个概念是理解和控制机械臂运动的基础。通过一个具体的7轴机械臂实例,我们将详细介绍如何计算机械臂的正运动学和逆运动学。我们首先会解释正运动学和逆运动学的基本概念和数学原理,然后我们将展示如何应用这些原理来计算7轴机械臂的运动。我们的目标是让读者对机械臂的运动控制有一个深入的理解,并了解如何在实践中应用这些知识。

myArm 300

我们先来简要介绍我们待会会使用到的机械臂myArm 300.

myArm 300 Pi是一块全新的7自由度的中心对称构型协作机械臂,myArm搭载着7个高精度的伺服电机,使得最大工作半径300mm,末端最大负载成都能够达到200g,重复定位精度最高达到了±0.5mm。

myArm 300 Pi的控制主板采用了树莓派4B 4G,这是一种广受欢迎的微型计算机,因其强大的性能和灵活的编程环境而备受赞誉。这意味着用户可以使用多种编程语言来控制myArm 300 Pi,包括Python、C++、Java等,极大地提高了使用者的便利性和灵活性,它还支持ROS1/ROS2 在ROS操作系统中提供了许多功能,例如路径规划,避障,三维感知等。

基本概念

我们要想控制机械臂,就得有一套关于机械臂运动控制的算法。正逆运动学是其中的重要组成部分。在介绍正逆运动学之前,我们想先介绍DH模型,这个模型使得正逆运动学的计算变得更加直接和简单。

DH模型

DH参数模型是机器人学中一种常用的描述机器人运动学的方法。它通过一组参数来描述机器人的关节连杆,从而方便地计算机器人末端执行器地位置和姿态。

当使用DH模型用来描述机械臂时,我们将机械臂分解为一系列链接和关节,每个链接和关节都与一个坐标系相关联。我们选择一个基准坐标系,通常是机械臂的基座(底座)坐标系,然后,为每个链接和关节定义一个坐标系,我们定义两个坐标系:前一个链接的坐标系和当前链接的坐标系。这两个坐标系之间的变换由四个参数描述:

连杆长度(a):它表示相邻链接之间的距离,沿着前一个链接的法线测量。它通常指的是链接的长度或者链接轴线的长度。

连杆的旋转角度(α):它表示相邻链接之间的旋转角度,围绕前一个链接的法线旋转。它通常指的是链接轴线之间的旋转。

关节的长度(d):它表示链接的长度或者关节的长度,沿着当前链接的法线测量。它通常指的是关节轴线的长度。

关节的旋转角度(θ):它表示关节的旋转角度,围绕当前链接的法线旋转。它通常指的是关节的角度或者关节的转动。

通过组合这些参数,可以构建一个四维的变换矩阵,这个变换矩阵可以表示机械臂末端执行器的位置和姿态。

以myArm为例子,下图是myArm 300 的DH模型图以及SDH参数表。当我们有了一个机械臂的DH模型图我们具体能干些什么呢:

正向运动学:通过给定关节角度,可以使用DH模型图计算机械臂末端执行器的位置和姿态,从而进行路径规划和运动控制

逆向运动学:反过来,也可以用DH模型图来解决逆向运动学问题,即给定目位置和姿态,计算出关节角度的变化,从而实现平滑的运动轨迹。

路径规划:给定一个开始位置和一个结束位置,可以使用DH模型来规划机械臂的运动路径。这可能涉及到解决一系列的逆运动学问题。

除此之外还有很多,比如说碰撞检测和臂章,动画和可视化机械臂,仿真机械臂等等。

正运动学

正运动学是用来描述机械臂从基座到末端执行器的位置和方向的计算方法。给定每个关节的角度,我们可以计算出机械臂末端的位置和方向。这是一个基于几何和三角学的过程。

下面举一个简单的例子,在一个平面坐标系当中,已知连杆的感觉长度为l1和l2,并且已知两个关节的转动角度分别为θ1和θ2,那么其末端执行器的位置(x,y)可以根据三角函数求出。

x=l1cos(θ1)+l2cos(θ1+θ2)

y=l1sin(θ1)+l2sin(θ1+θ2)

就可以求出x,y的坐标了。

在实际应用中,我们通常会直接在三维空间中直接进行计算,我们可以使用齐次坐标来进行转换,在齐次坐标中,一个二维点(x, y)可以表示为一个三维点(x, y, 1),一个三维点(x, y, z)可以表示为一个四维点(x, y, z, 1)。通过这种方式,我们可以使用相同的矩阵乘法操作来描述平移和旋转。

例如,一个二维的平移变换可以表示为以下形式的3x3矩阵:

[[1, 0, dx],
 [0, 1, dy],
 [0, 0, 1]]

其中,dx和dy表示在x轴和y轴方向上的平移距离。同样,一个二维的旋转变换可以表示为以下形式的3x3矩阵:

[[cos(theta), -sin(theta), 0],
 [sin(theta), cos(theta), 0],
 [0, 0, 1]]

其中,theta表示旋转角度,也就是DH参数中的θ。

通过将所有关节的变换矩阵相乘,我们就可以得到从机器人基座到末端执行器的总变换。这就是正运动学的基本计算过程。这个过程可以用以下的数学形式来表示:

T = A1 * A2 * A3 * ... * An

其中 T 是总变换矩阵,Ai 是第 i 个关节的变换矩阵,n 是关节的数量。注意,矩阵乘法不满足交换律,所以乘法的顺序很重要。最终得到的T总变化矩阵算出来的结果就是机械臂末端相对于基座的坐标。提前了解DH模型,对理解后面的矩阵变换很有帮助。

逆运动学

逆向运动学是指根据机械臂末端执行器的位置和姿态,计算机械臂各个关节的角度。刚好跟正运动学反过来,是求取各个关节的角度。逆运动学的计算通常要比正运动学复杂得多,这是一个从效果反推原因的过程,通常需要解决非线性方程组,而且解可能不唯一,或者根本不存在。我们还是举例说明,以2自由度的平面机械臂来做一个了解。我们已知(x,y)的值,要求出θ1和θ2的角度。

首先我们可以x,y到原点的位置的距离d,这可以勾股定理得到(sqrt代表平方根)

d = sqrt(x^2 + y^2)

 然后,我们可以使用余弦定理来求解第二个关节的角度θ2。余弦定理可以描述三个边长已知的三角形中,任何一个角的余弦值。在这里,我们可以将d,L1和L2看作是三个边长,然后求解θ2:

cos(theta2) = (L1^2 + L2^2 - d^2) / (2 * L1 * L2)

因为θ2可能有两个解(顺时针和逆时针),所以我们需要根据实际情况来选择合适的解。

最后,我们可以使用正弦定理或余弦定理来求解第一个关节的角度θ1。正弦定理可以描述三个边长和对应的角的正弦值之间的关系。在这里,我们可以将d,L1和θ1看作是三个已知的值,然后求解θ1:

theta1 = atan2(y, x) - atan2(L2 * sin(theta2), L1 + L2 * cos(theta2))

求解完之后就可以得知各个关节的角度了,这是在二维的空间中的求解方法,在三维空间中的计算方法也是一样的道理,在计算的时候得考虑机械臂关节的限制,以及其他的因素来决定最终的角度。

7轴机械臂实例

接下会用到python对myArm进行编程,用到的是pymycobot库。

正运动学关节控制

正运动学算法通常有一个确定的结果,正运动学的目标是根据给定的关节角度,计算机械臂执行器的位置和姿态,只存在唯一的结果。下面是使用角度控制的代码:

from pymycobot import Myarm
import time# create myarm object
ma = Myarm('/dev/ttyAMA0',115200)
ma.send_angles([degree_list],speed)# send_angles function
def send_angles(self, degrees, speed):
        """Send the degrees of all joints to robot arm.        Args:
            degrees: a list of degree values(List[float]).\n
                        for mycobot: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0].\n
                        for mypalletizer: [0.0, 0.0, 0.0, 0.0]
                        for mypalletizer 340: [0.0, 0.0, 0.0]
                        for myArm: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0].\n
            speed : (int) 1 ~ 100
        """
        # self.calibration_parameters(degrees=degrees, speed=speed)
        degrees = [self._angle2int(degree) for degree in degrees]
        return self._mesg(ProtocolCode.SEND_ANGLES, degrees, speed)

这就是最直观的正运动学算法的控制,关节角度控制机械臂运动。

逆运动学算法控制,坐标控制

前面也有提及到,你运动学算法相对来说复杂很多,可能存在多个解的情况,也可能存在无解的情况。逆运动学算法的控制是通过控制机械臂末端坐标的变化,让机械臂前往下一个坐标位置。我们用python编写控制坐标运动的代码:

from pymycobot import Myarm
import time# create myarm object
ma = Myarm('/dev/ttyAMA0',115200)
ma.send_coords([coordinates_list],speed,mode)
# mode: 0:linear motion,1:nonlinear motion def send_coords(self, coords, speed, mode=None):
        """Send all coords to robot arm.        Args:
            coords: a list of coords value(List[float]).
                        for mycobot :[x(mm), y, z, rx(angle), ry, rz]\n
                        for mypalletizer: [x, y, z, θ]
                        for mypalletizer 340: [x, y, z]
            speed : (int) 0 ~ 100
            mode : (int) 0 - angluar, 1 - linear (mypalletizer 340 does not require this parameter)
        """
        # self.calibration_parameters(coords=coords, speed=speed)
        coord_list = []
        for idx in range(3):
            coord_list.append(self._coord2int(coords[idx]))
        for angle in coords[3:]:
            coord_list.append(self._angle2int(angle))
        # print(coord_list)
        if mode is not None:
            return self._mesg(ProtocolCode.SEND_COORDS, coord_list, speed, mode)
        else:
            return self._mesg(ProtocolCode.SEND_COORDS, coord_list, speed)

7轴机械臂又被称之为冗余机器人,多的一个轴通常用于提供更多的灵活性和运动自由度,所以就出现了这么一个现象,机械臂的末端坐标值保持不变的时候,会有许多不同的姿态。

这就是开头说到的逆运动学的特点,同一个坐标下有许多不同的解。在坐标控制中还有一个关键的信息就是线性运动和非线性运动,主要是指机械臂末端的运动路径的类型。

  1. 线性运动:在这种模式下,机器人末端执行器在两个点之间直线移动。这就意味着,无论机器人的关节如何移动,末端执行器都会沿着直线路径从一点移动到另一点。这种类型的运动通常在需要精确位置控制的应用中使用,例如在装配线上的装配任务。
  2. 非线性运动:在这种模式下,机器人末端执行器的路径不是直线,而是一条曲线。这种类型的运动可以使机器人在复杂的环境中更灵活地移动,例如在需要避开障碍物或在特定的路径上移动的情况下。

总结

在我们探讨了正逆运动学的基本概念以及数学原理后,我们可以看到这两个概念在机械臂中的控制是特别重要的。然而,正运动学和逆运动学只是机械臂控制的一部分。在实际应用中,我们还需要考虑到动力学、控制理论、传感器反馈、以及实际硬件的限制。

随着技术的发展,机械臂将在很多领域发挥越来越大的作用,包括制造业、医疗保健、家庭服务、搜索和救援等。通过深入理解这些知识,我们可以更加的了解什么是机械臂,让它在各种应用中发挥更大的作用。

如果你喜欢这篇文章的话欢迎在下方留言或者点赞,你的支持是我们更新的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 微信小程序 uni-file-picker上传图片报错 chooseAndUploadFile

这个问题真的很搞, 原因是微信开发者工具更新了,导致图片上传问题。 解决方法: 将微信开发者工具的基础库改为2.33.0一下即可。 在微信开发者工具详情 - 本地设置中(记得点击‘推送’按钮):

【内功修炼】详解函数栈帧的创建和销毁

文章目录 1. 什么是函数栈帧2. 理解函数栈帧能解决什么问题呢?3. 函数栈帧的创建和销毁解析3.1 什么是栈?3.2 认识相关寄存器和汇编指令常见寄存器常用汇编指令 3.3 详解函数栈帧的创建和销毁3.3.1 函数的调用堆栈(main函数也是被其它函数调用…

python用cv2画图(line, rectangle, text等)

Python做图像图形研究的时候,通常需要画很多辅助几何形状(比如bounding box等)。基于opencv的几何图形绘制具有易用性,而且天然能和numpy数组交互。 本文总结了几种常用的cv2画几何图形的方法,当一个简易的手册使用&a…

Go 定时任务实现

定时任务简介 定时任务是指按照预定的时间间隔或特定时间点自动执行的计划任务或操作。这些任务通常用于自动化重复性的工作,以减轻人工操作的负担,提高效率。在计算机编程和应用程序开发中,定时任务是一种常见的编程模式,用于周…

大数据疫情分析及可视化系统 计算机竞赛

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据疫…

智慧社区大屏:连接社区生活的数字桥梁

随着科技的不断发展,智慧社区已经不再只是未来的概念,它已经在我们的眼前悄然崭露头角。智慧社区是一种基于数字技术的社区管理和生活方式,旨在提高社区的安全性、便利性和生活质量。而在这个数字化的社区中,智慧社区大屏起到了连…

Spire.Office for .NET 8.10.2 同步更新-Crk

Spire.Office for .NET是 E-iceblue 提供的企业级 Office .NET API 的组合。它包括Spire.Doc、Spire.XLS、Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewer、Spire.Barcode和Spire.Email。Spire.O…

一文深入搞懂ARM处理器架构

1、嵌入式处理器基础 典型的微处理器由控制单元、程序计数器(PC)、指令寄存器(IR)、数据通道、存储器等组成 。 指令执行过程一般分为: 取指: 从存储器中获得下一条执行的指令读入指令寄存器&#xff1…

对“Fork”做一个技术方面的简介

使用过 GitHub 的人大多知道它上面有个“Fork”的功能,用来将某个仓库克隆到你的账户之下,从而可以对其进行修改、衍生,也可以比较方便的将你的修改推回到原来的仓库(所谓的上游)。 随着 GitHub 的流行,我…

基于鹈鹕算法的无人机航迹规划-附代码

基于鹈鹕算法的无人机航迹规划 文章目录 基于鹈鹕算法的无人机航迹规划1.鹈鹕搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用鹈鹕算法来优化无人机航迹规划。 1.鹈鹕搜索算法 …

什么是微服务?与分布式又有什么区别?

什么是微服务,我们先从传统的单体结构进行了解,对两者进行对比。 单体结构 单体结构是一种传统的软件架构模式,它将应用程序划分为一组相互依赖的模块和组件。这些模块和组件通常都是构建在同一个平台上的,并且紧密耦合在一起。…

一款简简单单基于AIGC的文档翻译软件

一款文字/文件翻译的网站,支持多个领域的翻译,支持常见的语言翻译(韩/日/法/英/俄/德…),最大百分比的保持原文排版(及个别除外基本100%还原)。 新用户注册就有100页的免费额度,每月系统还会随机赠送翻译额度,说实话这比好多的企业要好的多了…

双十一电视盒子哪个牌子最好?老烧分享电视盒子品牌排行榜

在挑选电视盒子时很多人踩雷,我自己买过十来款电视盒子,存在不少问题,双十一这段时间身边买电视盒子的都会问我电视盒子哪个牌子最好,我今天来分享的是业内最专业的电视盒子品牌排行榜,双十一想买电视盒子可以从下面这…

人大金仓KingbaseES_V008R006C008B0014安装

人大金仓安装 一、安装前准备工作 1、硬件环境要求 KingbaseES支持通用X86_64、龙芯、飞腾、鲲鹏等国产CPU硬件体系架构。 2、软件环境要求 KingbaseES支持各种主流的Linux操作系统64位发行版本,包括CentOS、中标麒麟、银河麒麟、统信UOS、Deepin、凝思、中科方…

ConvNets 与 Vision Transformers:数学深入探讨

一、说明 我目睹了关于 Vision Transformer 的争论,讨论它们如何与 CNN 一样好或更好。我想知道我们是否也同样争论菠萝比西瓜好!或者马比海豚更好?其中许多讨论往往缺乏具体性,有时可能会歪曲上下文。 作为背景,在快速…

【owt】p2p client mfc 工程梳理

1年前构建的,已经搞不清楚了。所以梳理下,争取能用较新的webrtc版本做测试。最早肯定用这个测试跑通过 【owt】p2p Signaling Server 运行、与OWT-P2P-MFC 交互过程及信令分析官方的mfc客户端 估计是构造了多个不同的webrc版本的客户端

Spring:常见的面试题和答案

1、什么是 Spring 框架?Spring 框架有哪些主要模块? Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 Spring 帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。 Spring 框架…

Find My手机保护壳|苹果Find My与手机保护壳结合,智能防丢,全球定位

随着科技水平的快速发展,科技美容这一行业做为新型产业新生而出。时尚IT品牌随着市场的多元化发展。针对手机品牌和功能的增加而呈多样化,将手机保护壳按质地分有PC壳,皮革 ,硅胶,布料,硬塑,皮套…

OpenAI史诗级更新,最强大模型炸场,128K上下文、价格暴降2/3,定制专属GPT快到只需5分钟

今早,2023年最瞩目的人工智能大会举办! CSDN11月7日报道,今天凌晨2点,在OpenAI首届开发者大会上,OpenAI的首席执行官萨姆•阿尔特曼(Sam Altman)宣布了GPT-4、ChatGPT的年度最重磅更新。 OpenA…

设置Linux时间格式

一、事因 不知道什么时候我在输入ls -l 命令时候的显示变成了。 -rw-r--r-- 1 bossftp ftp 6796376499 915 05:31 rac_full_20230915.gz -rw-r--r-- 1 bossftp ftp 6804104515 104 05:25 rac_full_20231024.gz -rw-r--r-- 1 bossftp ftp 6804365525 105 05:29 rac_full_202…