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.pswp.cn/web/38060.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38060.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38060.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hadoop分布式云筆記系統-計算機畢業設計源碼15725

摘 要 隨著信息技術的飛速發展&#xff0c;人們對于數據的存儲、管理和共享需求日益增長。傳統的集中式存儲系統在處理大規模數據時面臨著性能瓶頸和擴展性問題。而 Hadoop 作為一種分布式計算框架&#xff0c;為解決這些問題提供了有效的解決方案。 本研究旨在設計并實現一種…

c++裝飾器模式 和 多重繼承區別

在C中&#xff0c;裝飾器模式和多重繼承都可以用來在不修改現有對象結構的情況下增加額外的功能。但是&#xff0c;它們之間有一些關鍵的區別&#xff1a; 1.裝飾器模式通常用于向對象添加額外的職責&#xff0c;而不會影響其他用戶&#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;企業面臨的網絡安全威脅…

HarmonyOS NEXT Beta 版開發者及先鋒用戶招募(第一期)報名答題題庫(持續更新中,僅供學習分享使用)

判斷題 All True. 單選題 關于容器組件Row和Column&#xff0c;下面說法錯誤的是&#xff1a; A A. justifyContent用于設置子組件在交叉軸方向上的對齊格式。 B. Row容器主軸為水平方向&#xff0c;Column容器主軸為垂直方向。 C. justifyContent用于設置子組件在主軸方向上的…

瞎談指令集和寄存器讀寫來驅動硬件

文章目錄 前言一、到底什么是指令集&#xff1f;二、為什么現代CPU需要指令集&#xff1f;三、開發完指令集究竟有什么缺點&#xff1f;四、寄存器讀寫怎么驗證&#xff1f;總結 前言 其實很早以前就想對這個話題展開來聊聊&#xff0c;但是對體系結構的理解也僅僅限于《量化體…

應急響應:應急響應流程,常見應急事件及處置思路

「作者簡介」&#xff1a;冬奧會網絡安全中國代表隊&#xff0c;CSDN Top100&#xff0c;就職奇安信多年&#xff0c;以實戰工作為基礎著作 《網絡安全自學教程》&#xff0c;適合基礎薄弱的同學系統化的學習網絡安全&#xff0c;用最短的時間掌握最核心的技術。 這一章節我們需…

交通氣象站:保障道路暢通的守護者

隨著現代社會的飛速發展&#xff0c;交通網絡日益密集&#xff0c;人們的出行越來越依賴于公路、鐵路和航空等交通方式。然而&#xff0c;多變的天氣條件常常給交通安全帶來隱患&#xff0c;如大霧、雨雪、強風等惡劣天氣不僅影響行車視線&#xff0c;還可能造成路面濕滑、結冰…

在我們實際使用中,線程池的大小配置多少合適?

線程池的大小配置是一個需要根據具體應用場景和資源情況來決定的問題。沒有一個固定的數字適用于所有情況&#xff0c;但是可以遵循一些通用的原則和方法來確定合適的線程池大小&#xff0c;我們來看一下通用原則和方法都有哪幾個維度。 通用原則和方法 1. CPU密集型任務&…

第十四屆藍橋杯省賽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;歡迎大家在評論區交流討…