DH(Denavit–Hartenberg)矩陣

DH 矩陣(Denavit-Hartenberg 矩陣)是 1955 年由 Denavit 和 Hartenberg 提出的一種機器人運動學建模方法,用于描述機器人連桿和關節之間的關系。該方法通過在機器人每個連桿上建立坐標系,并用 4×4 的齊次變換矩陣(DH 矩陣)描述相鄰連桿的空間關系,從而推導出末端執行器相對于基坐標系的位姿,建立機器人的運動學方程 。

DH 方法包括傳統 DH(Classic DH)和改進 DH(Modified DH),主要區別在于坐標系建立位置和參數變換順序 。每個連桿用 4 個參數(如關節角 θθθ、連桿長度 aaa、連桿偏移 ddd、連桿扭角 ααα)描述,轉動關節的關節變量為 θθθ,移動關節的關節變量為 ddd 。通過依次相乘各關節的 DH 矩陣,可得到機器人末端在基坐標系中的位姿,適用于機器人正運動學解算和 3D 模型運算 。
請添加圖片描述
視頻鏈接
在本人復刻Dummy機械臂的時候,重溫DH矩陣,并做如下記錄:

DH 方法也被用于五軸機床等復雜系統的運動學建模和幾何誤差補償 。下面給出一份系統性、逐條拆解的 DH(Denavit–Hartenberg)矩陣教程。


1. 為什么要用 DH?

  • 機器人/機床通常由 nnn 個連桿 +n+ n+n 個關節 串聯而成。

  • 我們需要把 關節變量 qqq(轉動關節的 θθθ 或移動關節的 ddd)映射到 末端位姿 T(q)T(q)T(q),用于正運動學、仿真、控制、標定。

  • DH 提供一種最少參數、無歧義的建系規范,使所有運動學方程都可以用 4×4 齊次變換矩陣連乘得到:

    T0n(q)=T01(q1)T12(q2)?T(n?1)n(qn)T_{0n}(q) = T_{01}(q_1)\,T_{12}(q_2)\cdots T_{(n-1)n}(q_n)T0n?(q)=T01?(q1?)T12?(q2?)?T(n?1)n?(qn?)


2. 兩種約定:Classic vs. Modified

對比項Classic DH (1955)Modified DH (MDH, 1986)
坐標系位置連桿 遠端(關節 i+1i+1i+1 處)連桿 近端(關節 iii 處)
變換順序先沿 ziz_izi? 旋轉/平移,再沿 xix_ixi? 平移/旋轉( 依次ziz_izi? 旋轉->ziz_izi? 平移,再沿 xix_ixi? 平移->xix_ixi? 旋轉)先沿 xi?1x_{i-1}xi?1? 平移/旋轉,再沿 ziz_izi? 旋轉/平移( 依次xi?1x_{i-1}xi?1? 旋轉->xi?1x_{i-1}xi?1? 平移,再沿 ziz_izi? 旋轉->ziz_izi? 平移)
工業軟件RoboticsToolbox(MATLAB)、KUKAKRC、ABBRAPIDRobotics Toolbox (MATLAB)、\\KUKA KRC、ABB RAPIDRoboticsToolbox(MATLAB)KUKAKRCABBRAPIDROSMoveIt、OpenRAVE、URDF、SolidWorksROS MoveIt、OpenRAVE、\\URDF、SolidWorksROSMoveItOpenRAVEURDFSolidWorks

在這里插入圖片描述

參考 https://www.bilibili.com/video/BV1Ue4y1R7QJ/?spm_id_from=333.337.search-card.all.click&vd_source=6c355cf343a2ceefccfcf5bb64aee668

同一套參數,兩種約定算出的矩陣不同,千萬別混用


3. 四個參數幾何意義(以 MDH 為例)

Modified DH(MDH) 里,四個參數必須嚴格對應“前一連桿”和“當前關節”:

參數下標幾何意義變量
連桿扭角 ααααi?1α???αi?1?xi?1x???xi?1? 軸,從 zi?1z???zi?1? 旋轉到 ziz?zi? 的角度常數
連桿長度 aaaai?1a???ai?1?沿 xi?1x???xi?1? 軸,從 zi?1z???zi?1? 移動到 ziz?zi? 的距離常數
關節角 θθθθiθ?θi?ziz?zi? 軸,從 xi?1x???xi?1? 旋轉到 xix?xi? 的角度轉動關節變量
連桿偏距 ddddid?di?沿 ziz?zi? 軸,從 xi?1x???xi?1? 移動到 xix?xi? 的距離移動關節變量

4. 變換矩陣公式(MDH)

變換順序

  1. 先繞 xi?1x_{i-1}xi?1? 軸旋轉 αi?1α_{i-1}αi?1? 再平移 ai?1a_{i-1}ai?1?
  2. 再繞 ziz_izi? 軸旋轉 θiθ_iθi? 再平移 did_idi?

4×4 齊次矩陣 Ti?1,iT_{i-1,i}Ti?1,i? 應該是:

Ti?1,i(qi)=Rot(x,αi?1)Trans(x,ai?1)Rot(z,θi)Trans(z,di)T_{i-1,i}(q_i) = \mathrm{Rot}(x,\alpha_{i-1})\,\mathrm{Trans}(x,a_{i-1})\, \mathrm{Rot}(z,\theta_i)\,\mathrm{Trans}(z,d_i)Ti?1,i?(qi?)=Rot(x,αi?1?)Trans(x,ai?1?)Rot(z,θi?)Trans(z,di?)

展開后:
Ti?1,i=[cos?θi?sin?θi0ai?1sin?θicos?αi?1cos?θicos?αi?1?sin?αi?1?disin?αi?1sin?θisin?αi?1cos?θisin?αi?1cos?αi?1dicos?αi?10001]T_{i-1,i} = \begin{bmatrix} \cos\theta_i & -\sin\theta_i & 0 & a_{i-1} \\ \sin\theta_i\cos\alpha_{i-1} & \cos\theta_i\cos\alpha_{i-1} & -\sin\alpha_{i-1} & -d_i\sin\alpha_{i-1} \\ \sin\theta_i\sin\alpha_{i-1} & \cos\theta_i\sin\alpha_{i-1} & \cos\alpha_{i-1} & d_i\cos\alpha_{i-1} \\ 0 & 0 & 0 & 1 \end{bmatrix}Ti?1,i?=?cosθi?sinθi?cosαi?1?sinθi?sinαi?1?0??sinθi?cosθi?cosαi?1?cosθi?sinαi?1?0?0?sinαi?1?cosαi?1?0?ai?1??di?sinαi?1?di?cosαi?1?1??

  • αααaaa 的下標是 i?1i-1i?1(因為它們屬于“前一連桿”的幾何屬性)
  • θθθddd 的下標是 iii(關節變量屬于“當前關節”)

5. 建立坐標系(MDH 流程)

步驟做什么對哪個標號關鍵要點
0編號關節 i=1…ni=1…ni=1n基座系為 000,末端系為 nnn
1ziz?zi?i=0…ni=0…ni=0nziz?zi? 與關節 iii 的軸線重合,方向自定
2xi?1x???xi?1?i=1…ni=1…ni=1nxi?1x???xi?1?zi?1z???zi?1?ziz?zi? 的公垂線,方向從 zi?1z???zi?1? 指向 ziz?zi?
3Oi?1O???Oi?1?i=1…ni=1…ni=1nOi?1O???Oi?1? 位于 zi?1z???zi?1?xi?1x???xi?1? 的交點
4yi?1y???yi?1?i=1…ni=1…ni=1nyi?1=zi?1×xi?1y??? = z??? × x???yi?1?=zi?1?×xi?1?,右手定則
5重復 1?41-41?4直到 i=ni=ni=n末端系 nnn 的原點放在工具中心
6444 個參數i=1…ni=1…ni=1nαi?1、ai?1、θi、diα???、a???、θ?、d?αi?1?ai?1?θi?di?,按定義測量

6. 完整示例:2 自由度平面 RR 機械臂

  • 關節 1、2 平行于 zzz 軸,連桿長度 L1L1L1L2L2L2
  • 所有 αi=0,di=0,a1=L1,a2=L2α_i = 0,d_i = 0,a_1 = L1,a_2 = L2αi?=0di?=0a1?=L1a2?=L2
iiiθiθ_iθi?did_idi?aia_iai?αiα_iαi?
111θ1θ?θ1?000L1L1L1000
222θ2θ?θ2?000L2L2L2000

計算末端位姿:
T02=T01(θ1)T12(θ2)=[c12?s120L1c1+L2c12s12c120L1s1+L2s1200100001]T_{02} = T_{01}(\theta_1)\,T_{12}(\theta_2) = \begin{bmatrix} c_{12} & -s_{12} & 0 & L_1c_1 + L_2c_{12} \\ s_{12} & c_{12} & 0 & L_1s_1 + L_2s_{12} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}T02?=T01?(θ1?)T12?(θ2?)=?c12?s12?00??s12?c12?00?0010?L1?c1?+L2?c12?L1?s1?+L2?s12?01??

其中 c1=cosθ1,s1=sinθ1,c12=cos(θ1+θ2)…c? = cosθ?, s? = sinθ?, c?? = cos(θ?+θ?)…c1?=cosθ1?,s1?=sinθ1?,c12?=cos(θ1?+θ2?)


7. 常見陷阱

  • 坐標系畫錯:Classic/Modified 的 xix_ixi?ziz_izi? 定義不同,容易混。
  • 移動關節變量:在 MDH 中,移動關節變量是 did_idi?,不是 θiθ_iθi?
  • 參數符號:有的教材把 aia_iai? 寫成 rir_iri?,把 αiα_iαi? 寫成 φiφ_iφi?
  • 零位對齊:機器人出廠零位 ≠DH≠ DH=DH 零位,需加 offsetoffsetoffset
  • URDF ? DH 轉換:ROS 的 URDF 用 MDH,但標簽的 rpy/xyzrpy/xyzrpy/xyz 順序是 xyzxyzxyz 而非 xαzθxα zθzθ,需要二次解析。

8. Python 代碼(以 MDH 為例)

import numpy as npdef dh_matrix(theta, d, a, alpha):"""返回 4×4 DH 變換矩陣(MDH 約定)"""ct, st, ca, sa = np.cos(theta), np.sin(theta), np.cos(alpha), np.sin(alpha)return np.array([[ct, -st*ca,  st*sa, a*ct],[st,  ct*ca, -ct*sa, a*st],[0,   sa,     ca,    d   ],[0,   0,      0,     1   ]])# 2R 機械臂參數
L1, L2 = 1.0, 0.5
q1, q2 = np.deg2rad(30), np.deg2rad(45)T01 = dh_matrix(q1, 0, L1, 0)
T12 = dh_matrix(q2, 0, L2, 0)
T02 = T01 @ T12print("End-effector position:", T02[:3, 3])

9. 進階話題

  • 標定:用激光跟蹤儀或視覺測量實際 DHDHDH 參數誤差,建立誤差模型 ΔTΔTΔT
  • 微分運動學:對 DHDHDH 矩陣求偏導得到雅可比 J(q)J(q)J(q)
  • 樹形/閉環結構:標準 DHDHDH 僅適用于串聯鏈,需引入虛擬關節或 URDFURDFURDF<joint type="floating">

一句話總結:
DH矩陣=機械桿件的“身份證”+坐標系“說明書”,只要遵循同一套約定,就能把任何串聯機構轉換成一串4×4矩陣的乘積。DH 矩陣 = 機械桿件的“身份證” + 坐標系“說明書”,只要遵循同一套約定,就能把任何串聯機構轉換成一串 4×4 矩陣的乘積。DH矩陣=機械桿件的身份證+坐標系說明書,只要遵循同一套約定,就能把任何串聯機構轉換成一串4×4矩陣的乘積。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/914539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/914539.shtml
英文地址,請注明出處:http://en.pswp.cn/news/914539.shtml

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

相關文章

Vim的magic模式

在 Vim 中&#xff0c;magic 模式用于控制正則表達式中特殊字符的解析方式。它決定了哪些字符需要轉義才能發揮特殊作用&#xff0c;從而影響搜索和替換命令的寫法。以下是詳細介紹&#xff1a; 一、三種 magic 模式 Vim 提供三種 magic 模式&#xff0c;通過在正則表達式前添加…

Git 使用技巧與原理(一)—— 基礎操作

1、起步 1.1 版本控制 版本控制是一種記錄一個或若干文件內容變化&#xff0c;以便將來查閱特定版本修訂情況的系統。 版本控制系統&#xff08;VCS&#xff0c;Version Control System&#xff09;通常可以分為三類&#xff1a; 本地版本控制系統&#xff1a;大多都是采用某…

軟件測試之自動化測試

目錄 1.什么是自動化測試 2.web?動化測試 2.1驅動 WebDriverManager 3. Selenium 3.1selenium驅動瀏覽器的?作原理 4.常用函數 4.1元素的定位 4.1.1cssSelector選擇器 4.2.2xpath 4.2操作測試對象 4.3窗? 4.4等待 4.5瀏覽器導航 4.6彈窗 4.7文件上傳 4.8設置…

sqlserver遷移日志文件和數據文件

sqlserver安裝后沒有指定日志存儲路徑或者還原庫指定的日志存儲位置不理想想要更改&#xff0c;都可以按照這種方式來更換&#xff1b;1.前提準備&#xff1a;數據庫的備份bak文件2.查看自己當前數據庫的日志文件和數據文件存儲路徑是否理想選中當前數據庫&#xff0c;右鍵屬性…

MFC UI表格制作從專家到入門

文章目錄CListCtrl常見問題增強版CGridCtrl&#xff08;第三方&#xff09;第三方庫ReoGridCListCtrl 默認情況下&#xff0c;CListCtrl不支持直接編輯單元格&#xff0c;需通過消息處理實現。 1.添加控件到資源視圖 在對話框資源編輯器中拖入List Control控件&#xff0c;設…

數字后端APR innovus sroute到底是如何選取寬度來鋪power rail的?

吾愛IC社區新一期IC訓練營將于7月初開班&#xff08;07.06號晚上第一次直播課&#xff09;&#xff01;社區所有IC后端訓練營課程均為直播課&#xff01;全網唯一一家敢開后端直播課的&#xff08;口碑不好招生一定存在困難&#xff0c;自然就無法開直播課&#xff09;&#xf…

LVS集群技術

LVS&#xff08;Linux Virtual Server&#xff09;是一種基于Linux內核的高性能、高可用性服務器集群技術&#xff0c;它通過負載均衡將客戶端請求分發到多臺后端真實服務器&#xff0c;實現 scalability 和 fault tolerance。LVS工作在傳輸層&#xff08;OSI Layer 4&#xff…

git項目,有idea文件夾,怎么去掉

要從Git項目中排除.idea文件夾&#xff08;IntelliJ IDEA的配置文件目錄&#xff09;&#xff0c;可以通過以下步驟操作&#xff1a; 1. 添加.gitignore規則 在項目根目錄創建或編輯.gitignore文件&#xff0c;添加以下內容&#xff1a; .idea/2. 從Git緩存中刪除已跟蹤的.idea…

springboot+swagger2文檔從swagger-bootstrap-ui更換為knife4j及文檔接口參數不顯示問題

背景 已有springboot項目,且使用的是swagger2+swagger-bootstrap-ui的版本 1.pom依賴如下 <!-- Swagger接口管理工具 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9…

mysql數據庫表只能查詢,對于插入、更新、刪除操作一直卡住,直到報錯Lost connection to MySQL server during query

診斷步驟1. 查看阻塞進程SELECT * FROM performance_schema.metadata_locks WHERE LOCK_STATUS PENDING;SELECT * FROM sys.schema_table_lock_waits;2. 查看當前活動事務SELECT * FROM information_schema.INNODB_TRX;3. 查看進程列表SHOW PROCESSLIST;通過SELECT * FROM in…

Redis BigKey 深度解析:從原理到實戰解決方案

引言&#xff1a;什么是 BigKey&#xff1f;在 Redis 的使用場景中&#xff0c;BigKey&#xff08;大鍵&#xff09;是指那些數據量異常龐大的鍵值&#xff0c;通常表現為&#xff1a;String 類型&#xff1a;值大小超過 10KBHash/Set 等&#xff1a;元素數量超過 5000List/ZSe…

Qt 實現新手引導

Qt實現新手引導 對于一個新安裝的軟件或者一個新的功能&#xff0c;提供一個新手引導步驟&#xff0c;能夠讓用戶快速熟悉。這是最終效果&#xff0c;每一個按鈕都會有一個簡單引導&#xff0c;通過點擊上一步、下一步來切換不同的指導。當前引導的功能&#xff0c;會有一個高光…

Maven+Spring

一、Maven 相關- 本地倉庫設置&#xff1a;- 在 IDE&#xff08;如 IntelliJ IDEA&#xff09;中可以設置 Maven 的本地倉庫路徑&#xff0c;本地倉庫用于存儲從遠程倉庫下載的依賴庫&#xff0c;方便項目重復使用。- 倉庫關系&#xff1a;- 項目&#xff1a;開發中的項目&…

Android Handler 消息機制

常用場景&#xff1a; 子線程發送Message 主線程處理Message 子線程發送消息 public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {Message msg Message.obtain();msg.what what;return sendMessageDelayed(msg, delayMillis);}public final boole…

day9 串口通信

1串口通信串口通信是嵌入式系統和電子設備中最常用的 異步串行通信 方式&#xff0c;核心是通過 TX&#xff08;發送&#xff09; 和 R&#xff08;接收&#xff09; 兩根線實現全雙工數據傳輸。2通信協議分類2.1同步/異步通信同步和異步是串行通信中兩種根本不同的數據傳輸方式…

面向對象的設計模式

一、設計模式簡介1、什么是設計模式針對反復出現的問題所總結歸納出的通用解決方設計模式是指在軟件開發過程中案。這些方案是眾多軟件開發人員經過大量實踐總結出來的&#xff0c;具有高效性、可維護性和可擴展性等優點。使用設計模式可以幫助開發者更高效地構建軟件系統&…

每日釘釘API探索:chooseDepartments專注于部門維度的選擇接口

在企業級應用開發過程中&#xff0c;針對組織架構中的部門進行操作是非常常見的需求。今天我們要介紹的是釘釘的chooseDepartments API&#xff0c;它允許用戶以部門為單位進行選擇&#xff0c;并返回所選部門的相關信息。&#x1f4cc; 功能概述chooseDepartments API主要用于…

生產環境CI/CD流水線構建與優化實踐指南

生產環境CI/CD流水線構建與優化實踐指南 目錄 業務場景描述技術選型過程實現方案詳解 流水線結構設計并行構建與緩存策略部署策略&#xff1a;滾動、藍綠、金絲雀回滾與告警自動化 踩過的坑與解決方案總結與最佳實踐 業務場景描述 某大型電商平臺&#xff0c;為了保證代碼持續交…

騰訊云和火山云優劣勢對比

從問題本身看&#xff0c;用戶沒有限定具體場景&#xff0c;說明可能需要一個全面的橫向對比。不過云計算服務涉及面太廣&#xff0c;我最好先搭建一個框架性的分析結構&#xff0c;再填充具體細節。 首先想到從幾個核心維度切入&#xff1a;基礎能力&#xff08;計算存儲網絡&…

Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能實戰指南

Augment AI 0.502.0版本深度解析&#xff1a;Task、Guidelines、Memory三大核心功能實戰指南 augment最新版輔助功能全解析續杯免費額度再用滿教程|memory|userguidlines|tasksaugment最新插件功能教程前言 在AI輔助編程領域&#xff0c;Augment AI作為一款強大的VS Code插件&…