|
一覧
検索
最新
ページへ戻る
履歴
FDIII-HC Starter Kit Guide/Chapter10.4
のバックアップソース(No.10)
knowledge
:
FDIII-HC Starter Kit Guide
/
Chapter10.4
のバックアップソース(No.10)
差分
を表示
現在との差分
を表示
FDIII-HC Starter Kit Guide/Chapter10.4
へ行く。
« Prev
Next »
*逆運動で動かす [#o66404ae] **三角関数を使用する [#zdb959c7] 逆運動(IK)とは指示された座標を元に関節の角度を求めるものです。~ 色々な計算手法がありますが、今回のロボットハンドでは三角関数をメインに角度を計算してみたいと思います。~ 尚、ハンド部分は角度計算に不要なので取り外します。~ #ref(RobotHand3D.png) 又、各アクチュエータと軸間の長さを次のように呼称することにします。 #ref(id_rename.png) **2次元での角度算出 [#d90f6f7a] では三角形を見てみましょう。~ 三角形を作るのはD2、D3、posとなっています。~ #ref(triangle2D.png) D2→D3、D3→posはそれぞれ軸の長さから求められるので、D2→posの長さが分かればこの三角形の各角度が算出可能となります。~ D2→posの長さは三平方の定理から求められます。~ #ref(inclined_D2pos.png) 三辺の長さが決まったので余弦定理を使ってD3の角度を算出してみましょう。~ #ref(cosineD3.png) コサインの値が取得できたらアークコサインで角度にすることができます。~ ここでの角度はラジアンなので180を掛けてπ(円周率)で割れば度(デグリー)に変換することもできます。~ **3次元での角度計算 [#x04dbfff] 3次元においても角度の求め方は変わりませんので、D3の角度はそのまま使用します。~ #ref(cosineD2.png) 同様にD2の角度を求めますが、ここで求まるのはD2、D3、posを頂点とした三角形の内角です。D2への指令角度とは異なりますので、注意が必要です。 #ref(triangle3D.png) 指令値を出すため、もう一つ三角形を作ります。D2からZ軸に沿ってposの位置まで移動した点をjとし、D2、j、posを頂点とした直角三角形を作成します。D2の指令角度はこの三角形のD2の角度から先ほど求めたD2の角度を差し引きした角度になります。~ 最後にD1の角度をアークタンジェントで求めれば角度計算は終了です。 **回転方向について [#b1298fca] 回転方向は軸を正から見て左回りになる方向をプラスとします。 #ref(roll_pitch_yaw.png) **プログラミング [#bdefef6a] ではプログラムしてみましょう。~ #html{{ <pre class="brush:c;toolbar:false"> #include <math.h> #include <fd.h> double pos[3] = { 80.0, 0, 50.0 }; // 座標(x, y, z) const int L[4] = { 42, 27, 68, 40 }; // 軸間の長さ void main (void) { fd_SetBeepCondition (FD_BEEP_MMI | FD_BEEP_PACKETERR | FD_BEEP_LOWVOLTAGE | FD_BEEP_BOOTUP); DX_ChangeBaudrate (1000000); fd_Wait (2000); // 必要な辺の長さを求めます double D2D3 = L[2]; double D3POS = L[3]; double D2POS = sqrt (pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]); double D2j = pos[2] - (L[0] + L[1]); double jPOS = sqrt (pos[0] * pos[0] + pos[1] * pos[1]); // コサイン値を求めます double tmpcos1 = (D2D3 * D2D3 + D2POS * D2POS - D3POS * D3POS) / (2 * D2D3 * D2POS); double tmpcos2 = (D2j * D2j + D2POS * D2POS - jPOS * jPOS) / (2 * D2j * D2POS); double cosD3 = (D2D3 * D2D3 + D3POS * D3POS - D2POS * D2POS) / (2 * D2D3 * D3POS); // 角度を出します radD1 = atan2 (pos[1], pos[0]); radD2 = acos(tmpcos2) - acos(tmpcos1); radD3 = acos(-1) - acos (cosD3); } </pre> }}
« Prev
Next »
FDIII-HC Starter Kit Guide/Chapter10.4 のバックアップ一覧
FDIII-HC Starter Kit Guide/Chapter10.4 のバックアップソース(No. All)
1: 2013-07-03 (水) 20:16:26
yoshida
2: 2013-07-08 (月) 13:44:30
yoshida
3: 2013-07-25 (木) 18:00:43
yoshida
4: 2013-07-25 (木) 19:53:01
yoshida
5: 2013-07-29 (月) 13:54:26
yoshida
6: 2013-07-29 (月) 19:56:41
yoshida
7: 2013-07-31 (水) 15:36:19
yoshida
8: 2013-07-31 (水) 17:29:30
yoshida
9: 2013-08-01 (木) 19:17:51
yoshida
10: 2013-08-01 (木) 20:19:36
yoshida
11: 2013-08-02 (金) 13:14:30
yoshida
12: 2013-08-02 (金) 18:38:42
yoshida
13: 2013-08-05 (月) 13:23:30
yoshida
14: 2013-08-07 (水) 18:39:00
yoshida
現: 2013-08-07 (水) 20:15:33
yoshida
Copyright© 1989,2024 BestTechnology Co.,Ltd.
メニュー
トップ
ニュース
お知らせ
新商品情報
更新情報
マニュアル類
技術情報
チュートリアル
FAQ
お問合せ
技術的なお問合せ
その他お問合せ
お見積り
ブログ
会社案内
ショッピング
ご利用案内
検索
カテゴリ 一覧
ロボットキット
Dynamixelシリーズ
マイコンボード
相撲ロボット
センサ
通信機器
お客様ページ