對於人體動畫來說,坐標變化是非常簡單的,只要在當前關節乘上該節點旋轉矩陣和子節點偏移矩陣,就可以完成父節點到子節點的坐標變換。其中變換矩陣(Transform)為M=R·Toffset。但是機器人的坐標變換就沒有那么簡單了,機器人相比人要復雜,主要體現在兩個方面:(1)人的關節是一個球形結構,具有三個自由度;而機器人的關節一般只有一個自由度,所以用機器人模擬人的手腕需要三個關節。(2)人關節之間是由手臂連起來的,在轉動的過程中兩個關節之間的距離是不會變的;而機器人的關節之間連接情況比較復雜,后面結合圖詳細說明。
下面介紹一下D-H參數(Denavit-Hartenberg Parameters)。如圖1,這是兩個旋轉關節分別繞Axis i-1和Axis i進行旋轉,其位置分別是1和2。這里可以看出,兩個關節不是直接連在一起的,而且兩個關節之間的連桿的長度也可能是不固定的或者說不是直線。這就不能像人體動畫中直接乘上旋轉矩陣和偏移矩陣來進行坐標變換。這看起來相當復雜,但是由於D-H參數的出現,這導致坐標變換變得相當直觀簡單。這里我們結合圖1介紹一下D-H參數一共有哪幾種,都是什么涵義:
- αi-1,Axis i-1和Axis i之間的夾角。
- ai-1,Axis i-1和Axis i之間的距離。
- θi,ai-1和ai之間的的夾角。(這里ai指得是Axis i和Axis i+1之間的距離)
- di,ai-1和ai之間的的距離。(可以理解為ai-1和ai分別與Axis i交點之間的距離,因為ai-1和ai分別與Axis i垂直)
圖1
這里再說一下D-H參數的意義,αi-1和ai-1用來描述連桿的性質,而θi和di用來描述連桿之間的連接狀態。選取D-H參數是坐標變換的第一步,那么接下來我么做第二步,建立關節的笛卡爾坐標系。建立坐標系首先要確定原點,我們觀察可以得到,原點選在Axis i-1和ai-1的交點位置是最好的。這樣我們z軸就可以沿着Axis i-1,而x軸也可以沿着ai-1。然后確定y軸,其肯定等於x軸和z軸的叉乘,也就是y軸的位置已經是確定了,方向可以根據右手坐標系確定。這樣我們第二步也做完了。
這里提一點,αi-1可以看做兩個z軸的夾角,ai-1可以看做兩個z軸的距離,θi可以看做兩個x軸的夾角,di可以看座是兩個x軸的距離。
圖2
最后一步就是進行坐標變換了。坐標變換主要分為4個環節:
- 將Axis i-1繞ai-1軸(x軸)旋轉αi-1。(因為ai-1分別垂直於Axis i-1和Axis i)
- 將Axis i-1沿ai-1軸(x軸)方向平移ai-1。
- 將Axis i-1繞Axis i軸(z軸)旋轉θi。(因為Axis i分別垂直於ai-1和ai)
- 將Axis i-1沿Axis i軸(z軸)方向平移di。
圖3
這樣就將Axis i-1轉換成了Axis i。這些D-H參數是不是設計的非常巧妙?我們根據這四個變換可以得到Axis i-1轉換成Axis i的旋轉矩陣M。具體公式如下: