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

目录

一、前言

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


二、实现原理

2.1正向建模

数值解算本质就是解非线性方程组。前提是我们需要把这个方程组給先建立起来。这里需要用到一些DH建模的知识。此部分已经在博文《N轴机械臂的MDH正向建模,及python算法》做了非常细致的讲解,本文不再赘述。

通过运算,我们可以把下图的机械臂建立一个模型,

所谓正向模型即f(t1,t2,t3,t4,t5,t6),就是输入6个电机的旋转角度,可以得出末端的位姿,这里可以用位姿矩阵表示,也可以用四元素等其它表示。我们根据机械臂实际的尺寸,推导出的正向模型,非常复杂,如下:

这个明显是有一堆sin,cos组合的非线性矩阵。如果人去推导,估计得推导10年。

2.2张量化

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

python 复制代码
# 优化器
    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

如上所述,只要几行代码就可以进行解算了。

经过运行,解算出的结果还是可以的,如果小幅的运动,误差会非常小。

python 复制代码
minloss: 0.0009870927315205336
dx,dy,dz error: Matrix([[-0.0145334085096351], [-0.00555758762822034], [-0.0203845457565990]

如上图,第一个状态时正解的,第二个状态时逆解后计算出的末端6个状态,相差不是很大。

这里我们的lossfunciton是用了六个自由度的方差。

pytorch中我们要把未知数都转化成张量,并且可以梯度,才能优化求解。

python 复制代码
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及仿真环境资源:源码链接


相关推荐
努力的家伙是不讨厌的41 分钟前
解析json导出csv或者直接入库
开发语言·python·json
云空1 小时前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
凤枭香2 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
测试杂货铺2 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森2 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Chef_Chen3 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空3 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
斯凯利.瑞恩4 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903134 小时前
【算法】(Python)动态规划
python·算法·动态规划