python机器人编程——用pytorch实现六轴机械臂的正向和逆向数值解算,及python算法解析

目录

  • 一、前言
  • 二、实现原理
    • 2.1正向建模
    • 2.2张量化
    • 2.3绘制3D动画及操作UI
  • 三、结论
  • 四、python源码
  • PS.扩展阅读
    • ps1.六自由度机器人相关文章资源
    • ps2.四轴机器相关文章资源
    • ps3.移动小车相关文章资源

一、前言

前面对六轴(或多轴)机械臂进行了一些研究,特别是利用几何进行简化,实现逆解,来完成比较简单的搬用任务。然而,如果需要比较精确的操作任务,可能需要更加复杂的机械臂解算。其中比较复杂的是数值解算,这种解算往往涉及到比较复杂的机器人运动等原理知识,比较难以上手。但是,python的生态挺全面,已经有很多牛人实现了数值解法,但是去看他们的代码,还是觉得费劲。此外,随着深度神经网络的兴起,很多是用建立深度学习神经网络,去利用机械臂输入输出的大数据,训练机械臂的控制模型,这个上手也比较慢。现在,我们提供一个相对简单的方法,来实现N轴机械臂的数值逆解,我们使用了一个优秀的人工智能库pytorch,只要在建立正向模型的基础上,几行代码就可以实现机械臂的数值逆解,可以供初学者学习之用。

在这里插入图片描述
在这里插入图片描述

二、实现原理

2.1正向建模

数值解算本质就是解非线性方程组。前提是我们需要把这个方程组給先建立起来。这里需要用到一些DH建模的知识。此部分已经在博文《N轴机械臂的MDH正向建模,及python算法》做了非常细致的讲解,本文不再赘述。
在这里插入图片描述
通过运算,我们可以把下图的机械臂建立一个模型,
在这里插入图片描述
所谓正向模型即f(t1,t2,t3,t4,t5,t6),就是输入6个电机的旋转角度,可以得出末端的位姿,这里可以用位姿矩阵表示,也可以用四元素等其它表示。我们根据机械臂实际的尺寸,推导出的正向模型,非常复杂,如下:
在这里插入图片描述
这个明显是有一堆sin,cos组合的非线性矩阵。如果人去推导,估计得推导10年。

2.2张量化

金典得非线性方程组解法,可以用迭代法,牛顿,雅可比等。对于数学知识有限的初学者,我们没有那么多时间。我们使用了简单粗暴的玩法,那就是交给pytorch的反向传播,来让它帮我们寻找正确的6个角求解调整方向,并逐步逼近“真相”。

# 优化器optimizer = torch.optim.Adam([t1,t2,t3,t4,t5,t6], lr=lr)# 进行优化for epoch in range(interval):    optimizer.zero_grad()loss = loss_function(t1,t2,t3,t4,t5,t6)loss.backward()optimizer.step()if epoch%100==0:print(f'Epoch {epoch}, Loss {loss.item()}')if loss.item()<maxerror:print("minloss:",loss.item())break

如上所述,只要几行代码就可以进行解算了。
经过运行,解算出的结果还是可以的,如果小幅的运动,误差会非常小。

minloss: 0.0009870927315205336
dx,dy,dz error: Matrix([[-0.0145334085096351], [-0.00555758762822034], [-0.0203845457565990]

在这里插入图片描述
如上图,第一个状态时正解的,第二个状态时逆解后计算出的末端6个状态,相差不是很大。
这里我们的lossfunciton是用了六个自由度的方差。
pytorch中我们要把未知数都转化成张量,并且可以梯度,才能优化求解。

t1 = torch.tensor([j1],requires_grad=True, dtype=torch.float32,device=device)t2 = torch.tensor([j2],requires_grad=True, dtype=torch.float32,device=device)t3= torch.tensor([j3],requires_grad=True, dtype=torch.float32,device=device)t4 = torch.tensor([j4],requires_grad=True, dtype=torch.float32,device=device)t5 = torch.tensor([j5],requires_grad=True, dtype=torch.float32,device=device)t6 = torch.tensor([j6],requires_grad=True, dtype=torch.float32,device=device)

2.3绘制3D动画及操作UI

为了直观感受机械臂的状态,和调试,我们还是增加了3D的手臂动态绘制功能,和滑动条状态显示功能:
在这里插入图片描述

三、结论

本篇利用了一个人工智能库工具pytorch的强大的梯度下降寻优机制,对复杂的N轴机械臂解算进行了求解,这种方法不需要太高深的数学知识,适合初学者学习使用。此种办法也有缺点,那就是计算较慢,这块需要后续优化,比如使用更先进的CPU和GPU,比如先估计一个比较靠谱的初值,比如简化一下模型等,我们后面再继续探讨。

四、python源码

配套资源已经上传:源码链接

[------------本篇完--------------------------]

PS.扩展阅读

————————————————————————————————————————

对于python机器人编程感兴趣的小伙伴,可以进入如下链接阅读相关咨询

ps1.六自由度机器人相关文章资源

(1) 对六自由度机械臂的运动控制及python实现(附源码)
在这里插入图片描述

(2) N轴机械臂的MDH正向建模,及python算法
在这里插入图片描述

ps2.四轴机器相关文章资源

(1) 文章:python机器人编程——用python实现一个写字机器人
在这里插入图片描述

在这里插入图片描述

(2)python机器人实战——0到1创建一个自动是色块机器人项目-CSDN直播

(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(4)实现了语音输入+大模型指令解析+机器视觉+机械臂流程打通
在这里插入图片描述
在这里插入图片描述

ps3.移动小车相关文章资源

(1)python做了一个极简的栅格地图行走机器人,到底能干啥?[第五弹]——解锁蒙特卡洛定位功能-CSDN博客
(2) 对应python资源:源码地址
在这里插入图片描述
在这里插入图片描述

(3)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(上篇)_agv编程-CSDN博客
(4)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)_agv路线规划原则python-CSDN博客
对应python及仿真环境资源:源码链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

hadoop分布式云笔记系统-计算机毕业设计源码15725

摘 要 随着信息技术的飞速发展&#xff0c;人们对于数据的存储、管理和共享需求日益增长。传统的集中式存储系统在处理大规模数据时面临着性能瓶颈和扩展性问题。而 Hadoop 作为一种分布式计算框架&#xff0c;为解决这些问题提供了有效的解决方案。 本研究旨在设计并实现一种…

【数据结构与算法】堆排序算法原理与实现:基于堆实现的高效排序算法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 堆排序的简介 堆排序的特点 二、堆的概念 三、堆排序算法的原理 四、堆…

15kg级弹簧刀高速巡飞无人机技术详解

弹簧刀高速巡飞无人机&#xff0c;作为一种先进的战术导弹系统&#xff0c;融合了无人机与导弹的双重特性&#xff0c;成为了现代战争中不可或缺的侦察与打击利器。该无人机以其小巧的外形设计、优异的性能表现和广泛的适用领域&#xff0c;受到了全球军事领域的广泛关注。弹簧…

【吊打面试官系列-MyBatis面试题】Mybatis 是如何进行分页的?分页插件的原理是什么?

大家好&#xff0c;我是锋哥。今天分享关于 【Mybatis 是如何进行分页的&#xff1f;分页插件的原理是什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Mybatis 是如何进行分页的&#xff1f;分页插件的原理是什么&#xff1f; Mybatis 使用 RowBounds 对象…

怎么测试远程服务器能否连通

远程服务器连接测试的方法很多&#xff0c;下面简单介绍下其中两种方法。 ping命令 按WINR快截键&#xff0c;打开“运行”对话框&#xff0c;输入cmd&#xff0c;回车&#xff0c;打开命令提示符。 输入ping IP地址或ping 域名即可&#xff0c;如ping360服务器通不通&#xf…

32 lambda表达式

c11 c98例子 在c98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以适用std::sort方法 #include <algorithm>#include <functional>int main(){int array[] {4,1,8,5,3,7,0,9,2,6};// 默认按照小于比较&#xff0c;排出来结果是升序 std…

Django + Vue 实现图片上传功能的全流程配置与详细操作指南

文章目录 前言图片上传步骤1. urls 配置2. settings 配置3. models 配置4. 安装Pillow 前言 在现代Web应用中&#xff0c;图片上传是一个常见且重要的功能。Django作为强大的Python Web框架&#xff0c;结合Vue.js这样的现代前端框架&#xff0c;能够高效地实现这一功能。本文将…

【Arduino】小飞鱼通达二开实验ESP32使用红外寻迹传感器 (图文)

在智能小车项目中都会有一个功能就是自动巡线&#xff0c;今天小飞鱼通达来实验的就是这个红外寻迹传感器。 红外寻迹传感器的原理就是有一个小灯发出红外光&#xff0c;光线照到物体后进行反射&#xff0c;有一个接收器进行接收&#xff0c;当在一定距离内会导通电路&#xf…

网安加·百家讲坛 | 肖文棣:铸盾护企——面对勒索病毒产业链的企业防护之道

作者简介&#xff1a;肖文棣&#xff0c;OWASP中国广东分会负责人、网安加社区特聘专家&#xff0c;现任某外企安全架构师&#xff0c;负责应用安全设计、管理和评审等工作。 引言 随着信息技术的飞速发展&#xff0c;网络安全问题愈发凸显&#xff0c;企业面临的网络安全威胁…

瞎谈指令集和寄存器读写来驱动硬件

文章目录 前言一、到底什么是指令集&#xff1f;二、为什么现代CPU需要指令集&#xff1f;三、开发完指令集究竟有什么缺点&#xff1f;四、寄存器读写怎么验证&#xff1f;总结 前言 其实很早以前就想对这个话题展开来聊聊&#xff0c;但是对体系结构的理解也仅仅限于《量化体…

应急响应:应急响应流程,常见应急事件及处置思路

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

交通气象站:保障道路畅通的守护者

随着现代社会的飞速发展&#xff0c;交通网络日益密集&#xff0c;人们的出行越来越依赖于公路、铁路和航空等交通方式。然而&#xff0c;多变的天气条件常常给交通安全带来隐患&#xff0c;如大雾、雨雪、强风等恶劣天气不仅影响行车视线&#xff0c;还可能造成路面湿滑、结冰…

第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)

解题思路 这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列&#xff0c;我们可以使用深度优先搜索&#xff08;DFS&#xff09;的方法&#xff0c;尝试所有可能的降落顺序。 首先&#xff0c;我们需要理解题目中的条件。每架…

【MotionCap】pycharm 远程在wsl2 ubuntu20.04中root的miniconda3环境

pycharm wsl2 链接到pycharmsbin 都能看到内容,/root 下内容赋予了zhangbin 所有,pycharm还是看不到/root 下内容。sudo 安装了miniconda3 引发了这些问题 由于是在 root 用户安装的miniconda3 所以安装路径在/root/miniconda3 里 这导致了环境也是root用户的,会触发告警 WA…

冲击试样缺口拉刀V2U2U3U5

拉刀性能介绍 冲击试样缺口拉刀采用进口高速工具钢W18Cr4V材质&#xff0c;特殊工艺精密加工制造&#xff0c;硬度高&#xff0c;耐磨性好&#xff0c;使用寿命长&#xff0c;每把拉刀可加工试样达20&#xff0c;000多个。拉刀共54个齿&#xff08;深度5mm缺口拉刀为74个齿&am…

抖音本地生活服务商条件太高怎么办?低门槛方法来了!

随着本地生活赛道的潜力不断显现&#xff0c;本地生活服务商的数量也在与日俱增。而在所有开通本地生活服务板块的互联网平台中&#xff0c;日活跃用户数约8亿的抖音往往是众多创业者优先考虑的对象&#xff0c;以抖音本地生活服务商如何申请为代表的相关问题也因此常出现在多个…

排序算法(1)之插入排序----直接插入排序和希尔排序

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序之插入排序----直接插入排序和希尔排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

页面加载503 Service Temporarily Unavailable异常

最近发现网页刷新经常503&#xff0c;加载卡主&#xff0c;刷新页面就正常了。 研究之后发现是页面需要的js文件等加载失败了。 再研究之后发现是nginx配置的问题。 我之前为了解决一个漏洞检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 把nginx的连接设置了很多限制&#…

PHP传奇游戏推广信息发布站程序源码带会员发布

这是一个游戏导航网站程序。可以做任何一款游戏的推广发布&#xff0c;会员注册发布&#xff0c;后台审核通过&#xff0c;前台就可以展示&#xff0c;非常不错的游戏发布平台

一个项目学习Vue3---响应式基础

观察下面一段代码&#xff0c;学习响应式基础的全部内容 <template><div><div>将下面的msg属性放到上面来:{{ msg }}</div><button click"count">{{ count }}</button><button click"object.count.value">{{ o…