草庐IT

机器人机械臂运动学——逆运动学解算

HIT-LQM 2023-05-14 原文

1.情景概述

        假设最一般的情况,我们的机械臂有六个自由度,那么从初始状态想要变化到目标的状态,一般情况下我们至少需要进行六次的变换,而这六次变换的矩阵参数隐含在整体的变换矩阵中。

         根据之前的知识,左上角的3*3代表了三个单位向量的转置,这九个数6个限制条件:模长为一、两两垂直,决定了有三个自由度。右上角的3*1代表了平移变换,共三个自由度。而我们6次的变换都有12个三角函数关系式,对应着6个未知数和6个限制条件,我们的目标就是为了求解这六个未知数。

2.求解概念

2.1Reachable workspace

机械臂可以用一种以上的姿态到达的位置,左图的同心圆以及右图的圆(不包括边界)。

2.2Dexterous workspace

机械臂可以用任何的姿态到达的位置,右图的中心点。

2.3Subspace

机械臂在定义头尾的变换矩阵T所能到达的变动范围

 比如这个2自由度的机械臂,引入(x,y)坐标,那么他的T是固定的:

可以看到,如果(x,y)一定,那么实际上左边的角度也都是确定的;而且,所能到达的位置也是有限的,因为旋转矩阵的九个数字已经有五个数字是确定的,只有四个数字可以发生变化。

2.4多重解

很多时候,到达一个点有多种驱动的实现方式,举一个例子,PUMA(6 rotational joints)

 针对特定的工作点,前三轴会对应四种姿态,而每种姿态,具有两种的手腕转动姿态,因此共有八组解。不难发现这些角度有如下的关系:

 但是由于机械结构的限制,未必每组解都会成为可行解。

选择解的方式要考虑以下几点:

1.相对于目前状态最快实现

2.相对于目前状态最节能

3.可以躲避障碍物

3.求解方法 

3.1解析法

解析法分为代数法或几何法。目前来讲设计的大多数手臂都存在解析解,而且为了便于求解,通常将后三个轴交于一点。

3.2数值法

3.3求解过程

下面我们来看一个例子,分析其求解过程。

 我们已知的条件是(x,y,φ),目标是要求解(θ1,θ2,θ3),即:

已知:    ,来求解

 

几何法:空间几何拆解成平面几何

 量化计算结果如下所示:

 代数法:建立方程式

 首先根据两个矩阵建立方程式,通过观察首先求解θ2,然后通过大小判断是否有解,有几组解:

 其次将θ2带入方程式:

 再进行变数变换:

 随后求解θ1:

当我们的θ2选择不同的解,θ1也会跟着产生变化。

最后求解θ3:

 三角函数方程式的求解

 

有关机器人机械臂运动学——逆运动学解算的更多相关文章

  1. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  2. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  3. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  4. 机器学习——时间序列ARIMA模型(四):自相关函数ACF和偏自相关函数PACF用于判断ARIMA模型中p、q参数取值 - 2

    文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk​=Var(yt​)Cov(yt​,yt−k​)​其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞

  5. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  6. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  7. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  8. ruby - AWS 上远程机器上的进程计数 - 2

    我正在为在AmazonEC2实例上运行的应用程序设计一个AutoScaling系统。应用程序从SQS读取消息并对其进行处理。AutoScaling系统将监控两件事:SQS中的消息数量,所有EC2机器上运行的进程总数。例如,如果SQS中的消息数量超过3000,我希望系统自动缩放,创建一个新的EC2实例,在其上部署代码,当消息数量低于2000时,我希望系统终止EC2实例.我正在用Ruby和Capistrano做这件事。我的问题是:我无法找到一种方法来确定在所有EC2机器上运行的进程数并将该数字保存在变量中。你能帮帮我吗? 最佳答案 您可

  9. ruby - 如何让 Selenium/Ruby 机器人在执行操作之前等待? - 2

    我正在构建一个点击元素的Selenium/Ruby网络机器人。问题是,有时在机器人决定找不到元素之前没有足够的时间加载页面。让Selenium在执行操作之前等待的Ruby方法是什么?我更喜欢显式等待,但我也接受隐式等待。我尝试使用wait.until方法:require"selenium-webdriver"require"nokogiri"driver=Selenium::WebDriver.for:chromewait=Selenium::WebDriver::Wait.new(:timeout=>15)driver.navigate.to"http://google.com"dr

  10. ruby - 是否可以使用机器人打开浏览器,手动操作页面,然后继续使用机器人? - 2

    我正在使用Ruby、SeleniumWebDriver和Nokogiri从网页中检索数据。加载正确的HTML后,我打印某个类的内容。例如,require"selenium-webdriver"require"nokogiri"browser=Selenium::WebDriver.for:chromebrowser.get"https://jsfiddle.net"doc=Nokogiri::HTML.parse(browser.page_source)doc.css('.aiButton').map(&:text).join(',')到目前为止,我发现最困难的部分是正确加载正确的HT

随机推荐