[Robotics Studio] 操控虛擬 Kuka LBR3 機器人手臂 -- Day23

[Robotics Studio] 操控虛擬 Kuka LBR3 機器人手臂 -- Day23

玩完車子, 換玩機器人手臂吧.

照例用簡單的 VPL , 使用 GenericArticulatedArm 以及 SimpleDashboard 兩個 service 就可以玩:

image

在 GenericArticulatedArm 當中我們可以選用 manifest - KUKA.LBR3.simulation.Manifest.xml :

image

就可以開始啦:

image 

Dashboard 的使用方法跟操控機器車子很像, 先點選 Remote Node 裡面的 Connect, 再點選 Articulated Arm 裡面的 Connect:

image

你會看到一堆 Joint
Joint 在醫學上就是骨頭的關節 ... 當然也可以翻譯成為縫合點, 接合點...
在此就是機器手臂可以旋轉的關節點.
Joint 在 XNA 當中可以如下旋轉 (來自官方說明文件):

image

換句話說, Local Axis 旋轉的, 稱之為 TwistMode (Roll) , Normal Axis 的叫做 SwingMode1 , Binormal Axis 稱之為 SwingMode2.

在 KUKA LBR3 當中, 每個 Joint 都只有開放 TwistMode (unlock) , 所以只能繞著 Local axis 旋轉.

由下(基座) 一直到最上面(手臂尾端) 分別為 Joint0 ~ Joint 6

想要推倒骨牌, 很簡單, 將 Joint0 設定為 120 (先雙擊 Joint0 , 然後輸入 angle : 120 , 再點選 Apply Changes)
然後把  Joint1 設為 280 , 你就會看到下面的畫面囉:

image

那要怎麼寫  VPL 來控制剛剛的動作 ?
image

先將 120 (注意 type 是 double) , 然後丟給 MathFunctions 計算 Radians (因為 GenericArticulatedArm 只吃這種, 型態還要 float!)
所以再轉成 float , 丟給 GenericArticulatedArm 的 SetJointTargetPose (JointName = "Joint0"), 同時在資料產生時設定  Timer (我設定為 1000 ms)

之後 timer 的 TimerComplete 發生通知時, 改丟 280 的 Radian 給 GenericArticulatedArm 的 SetJointTargetPose (JointName = "Joint1").

而 SetJointTargetPose 的其他參數設定如下:

image

主要是設定 TargetOrientation 以及 JointName, 注意 TargetOrientation 的 Axis 只能是 x = 1, y = 0, z = 0,
因為 KAKU LBR3 的每個 Joint 只有 TwistMode 可以旋轉 , 所以只能 x 有值 (當然是 1, 如果你設定其他值, Angle 就不是這樣計算了)