ロボ トの運動制御
ロボ トの運動制御
ロボットの運動制御
ロボットの運動制御
ロボットの行動計画・軌道計画・軌道制御
産業用ロボットの制御方式 -PTP制御とCP制御ー
ロボット作業のプログラミング
ッ 作業 プ グラミング
動作コマンドと補間制御
動力学
ラグランジ 法による運動方程式の導出
動力学 -ラグランジュ法による運動方程式の導出-
位置・軌道制御 -計算トルク法とPDフィードバックー
力制御 -インピーダンス制御ー
行動計画・軌道計画・軌道制御
行動計画(作業計画)・動作計画
何を行うかを決めること.『ゴロを捕球して1塁へ送球する』,『コンベヤ上を流れ るボルトを掴んで部品Aを固定する』のような複雑な行動(作業)内容を決めること るボルトを掴んで部品Aを固定する』のような複雑な行動(作業)内容を決めること から,『転がるボールの1.2秒後の位置へハンド先端を移動させる』,『把持した ボルトをネジ穴へ挿入する』程度の動作を決めるレベル,更に単純な動作を決 めることまで様々な内容の決定.軌道計画
目的の動作を実現するためにハンド先端(or 各関節角)を時間と共にどのように 目的の動作を実現するためにハンド先端(or 各関節角)を時間と共にどのように 変化させるべきかを決めること.ボール位置(あるいはネジ穴へ)にどんな速度で どんな軌跡を描いてハンド先端を移動させるか決めること.ロボットマニピュレー タが関節をN
個も ればθ ( ) 0≦ ≦T (T
動作終了時刻 タが関節をN
個もっていれば,θ
k(t), 0≦t ≦T (T :
動作終了時刻),
k
=1,2,…N
を決めることになる.軌道制御
軌道制御
計画された軌道θ
k(t), 0≦t ≦T, k
=1,2,…N
を実現するためにアクチュエータ をどのように制御するか.各関節がそれぞれ1つずつのアクチュエータで制御さ れているとすれば,N
個の制御入力u
(t
),k
=1,2,…N
を決めなければならない. PID制御,最適制御,ニューロ制御,ファジィ制御など・・・産業用ロボットの制御方式
操作者
PT P
制御
(Point To Point Control)
終点のみを指定して点から点へ移動する制御
操作者
T
T
(
x y
T
T
)
目標点座標( , )
x y
T T(
θ θ
)
目標点座標 目標関節角 逆運動学 T( ,
x y
T T)
P
S 2θ
目標点(終点) T T 1 2( ,
θ θ
)
目標関節角 S T 1 1 1 S T 2θ θ
θ
θ θ
θ
Δ =
−
Δ =
メモリ S S S( , )
x y
P
T 2θ
Tθ
S 1θ
現在位置 1 2(
Δ Δ
θ θ
,
)
目標駆動角 S T 2 2 2θ θ
θ
Δ =
−
制御則( 台形則) T 1θ
現在位置 (始点) 1 1 1 2 2 2( )
( ,
)
( )
t
t
f t
f t
(
)
θ
θ
τ
τ
=
=
Δ
Δ
制御則(ex. 台形則) 関節トルク T T(
θ θ
)
関節角座標系 ベース 2( )
t
f t
2( ,
θ
2)
τ
=
Δ
(
( ))
V t
t
モータ特性 T T 1 2( ,
θ θ
)
(順)運動学
逆運動学
関節角座標系 (Joint
座標系) 1 1 2 2( , ( ))
( , ( ))
V t
t
V t
t
τ
τ
モータ印加電圧T
T
( , )
x y
(
)
逆運動学
作業座標系 (Base座標系/World座標系)PTP
制御と
CP
制御
P
C
C
oint
ontinuous
ontinuous
T
o
P
P
P
oint Control
ath Control
ath Control
SP
P
T SP
TP
S直線
補間
関節角
補間
直線
補間
円弧
補間
関節角補間のPTP
制御直線補間の実際
円弧
補間
SP
TP
SP
TP
1P
P
2 3 関節角補間のPTP
制御 1 MP
2 MP
3 MP
4 MP
中間目標点数
msec数
msec数
msec移動距離の短い関節角補間
PTP
制御を
繰返すことで擬似的な直線補間を実現
演習1 関節角補間によるマニピュレータ手先軌道
1 4 2 2( )
( )
, 0
2
( )
t
t
t
t
t
t
θ
1( )
t
2( )
t
初期姿勢
初期姿勢からリンク角 θ が次式にしたがって変化する時,手先位置はどのように 移動するかその軌跡を示せ.ただしリンク1, 2
の長さをそれぞれ3, 2
とする. (t
=0.4, 0.8, 1.2, 1.6, 2.0
の時の手先位置を計算・プロットして結ぶ)演習1 マニピュレータ手先軌道の計算 答え
3 1 1 2 4 4 3 1 1 2 4 43cos
2cos
( )
3cos
2cos(
)
, 0
2
3sin
2sin
( )
3sin
2sin(
)
t
t
x t
t
t
t
y t
1( )t 2( )t 1( )t 3 10 10 3 10 10 3cos 2cos 3sin 2sin(0.4)
4.029
(0.4)
2.545
x
y
3 5 5 3 5 5 3cos 2cos 3sin 2sin(0.8)
1.809
(0.8)
3.666
x
y
3 9 10 10 3 9 10 10 3cos 2cos 3sin 2sin(1.2)
0.139
(1.2)
3.045
x
y
2 6 5 5 2 6 5 5 3cos 2cos 3sin 2sin(1.6)
0.691
(1.6)
1.678
x
y
3 2 2 3 2 2 3cos 2cos 3sin 2sin(2.0)
0
(2.0)
1
x
y
ロボット言語コマンド
三菱電機RV-M2
の例 コマンド (読み方)機能
NT
ロボットの原点出しを行うNT
NW (NeW)
プログラム及びポジションを全て消去するSP (Speed)
ロボットの動作速度を設定するSP (Speed)
ボットの動作速度を設定するTL (TooL)
X-Y平面内のツールの長さを設定するMJ (Move Joint)
各関節を指定した角度だけ回転させる5
自由度 垂直多関節MJ (Move Joint)
各関節を指定した角度だけ回転させるTI (TIme)
指定した時間だけ動作を停止するPD
指定したポジションの座標デ タを設定する ロボットマニ ピュレータ RV-M2PD
(Position Define) 指定したポジションの座標データを設定するMO (MOve)
PDで指定したポジションに関節補間で移動させる グ プを開くGO (Grip Open)
グリップを開くGC (Grip Close)
グリップを閉じるDW
指定した距離だけ関節補間で移動するED (EnD)
プログラムを終了する作業プログラム例
1
各関節を指定したハンド先端を順次移動
駆動角
させるプログラムだけ回転させて, #include<iostream.h> #include<stdio.h> #i l d ”RS h”NW
メモリのクリアSP 15
動作速度の設定 (20
段階15
) #include”RS_com.h”int main(int arge, char *argv[]) { RS Com rs;
NW
(20
段階の15
) RS_Com rs; rs.RS_Open(); rs.Send(“NW¥n”); rs Send(“SP 15¥n”);SP 15
MJ 33.4, 23.5,-48.6,82.1,0
rs.Send( SP 15¥n ); //////////////////////////////////////////////////////////////////// rs.Send(“MJ 33.4,23.5,-48.6,82.1,0¥n”); rs Send(“MJ 14 2 27 5 36 2 8 9 0¥n”);MJ 14.2, 27.5, 36.2, 8.9,0
MJ 25.2,-15.8, 12.4, 3.3,0
rs.Send( MJ 14.2,27.5,36.2,8.9,0¥n ); rs.Send(“MJ 25.2,-15.8,12.4,3.3,0¥n”); //////////////////////////////////////////////////////////////////// rs.Flush();MJ
コマンドで5
関節をそれぞれ 14.2 25.2 33.4 ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ (); rs.RS_Close(); return(0); } 1 2 3 27.5 15.8 36.2 12.4 8.9 3.3 , , 23.5 48.6 82.1 − ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ = = = ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ −Δ
θ
Δ
θ
Δ
θ
} 0 0 0 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ だけ回転させる. プログラムを転送して実行させるPC
からロボットコントローラへC
言語プログラム作業プログラム例2
予め位置座標を指定しておき,ハンド先端を 順次それらの点へ直線補間
で移動させるNW
メモリのクリア #include<iostream.h> #include<stdio.h> #include”RS_com.h”NW
メモリのクリアSP 15
動作速度の設定TL 223
ツール長(223mm)設定 _int main(int arge, char *argv[]) { RS_Com rs;
NW
SP 15
TL 223
ツ ル長(223mm)設定 rs.RS_Open(); rs.Send(“NW¥n”); rs.Send(“SP 15¥n”);SP 15
TL 223
PD 1 33 4 23 5 -48 6 82 1 0
rs.Send(“TL 223¥n”); //////////////////////////////////////////////////////////////////// rs.Send(“PD 1,33.4,23.5,-48.6,82.1,0¥n”); S d(“PD 2 14 2 27 5 36 2 8 9 0¥ ”)PD 1,33.4, 23.5,-48.6,82.1,0
PD 2,14.2, 27.5, 36.2, 8.9,0
MC 1 2
rs.Send(“PD 2, 14.2,27.5,36.2,8.9,0¥n”); rs.Send(“MC 1,2¥n”); //////////////////////////////////////////////////////////////////// rs Flush();MC 1,2
MC
コマンドで5
関節を順次 ⎛ ⎞ ⎛ ⎞ rs.Flush(); rs.RS_Close(); return(0); } 1 2 14.2 27.5 36 2 , 33.4 23.5 48 6 ⎛ ⎞ ⎛ ⎞ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ = − =θ
θ
36.2 } 8.9 0 , 48.6 82.1 0 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎝ ⎠ ⎝ ⎠θ
θ
の姿勢にする. プログラムをPCからロボットコントローラへ 転送して実行させるC言語プログラム補間制御コマンド
オムロン
ORL-2
MOVE
と
PATH
の例
MOVE L
: ロボットの手先を現在位置から目標点P1へ直線補間 で移動させる(目標点で停止する)MOVE C
: ロボットの手先を現在位置から中間点P1を通って,P3
P2
P0
OV C
: ボットの手先を現在位置から中間点 を通 て, 目標点P2へ円弧補間で移動させる(目標点で停止)PATH L
: ロボットの手先を目標点P1の近傍を通過するように 直線補間で移動させる(目標点で停止しない)P1
P2
P0
直線補間で移動させる(目標点で停止しない)PATH C
: ロボットの手先を中間点P1を通って,目標点P2の近傍を 通過するよう円弧補間で移動させる(目標点で停止しない) 円を描かせるには?P2
現在位置 MOVE C, P1, P2P1
MOVE L, P1
P1
P1
PATH L P1 PATH C P1 P2P3
現在位置P2
PATH L, P1 MOVE P2P1
3
PATH C, P1, P2 MOVE P3P2
現在位置 現在位置P2
CP制御の軌道生成
時々刻々の
目標
ハンド先端
軌道
(
)
r
( )
t
, ( ), ( )
x
r
t
x
r
t
x
&
&&
時々刻々
逆運動学
を解く
時々刻々の
目標
関節角
軌道
(
)
r
( )
t
, ( ), ( )
θ
r
t
θ
r
t
θ
&
&&
Λ:
運動学関数x
Λ
( )
θ
(
)
1 mr r r 1( )
( )
( )
( )
( )
( )
t
N
t
N
t
t
N
t
N
t
−=
=
θ
θ
Λ
x
θ
&
θ
&
J
&
( )
J θ&
( )
( )
Λ:
運動学関数 1 1 2 1 2 1 2 1 1 2 1 2 ( ) ( ) cos cos ( , ) sin sin x l l y l l θ θ θ θ θ θ θ θ + + + ⎡ ⎤= =⎡ ⎤ ⎢ ⎥ ⎢ + ⎥ ⎣ ⎦ Λ ⎣ ⎦( )
= θ
Λ
x
(
)
1 mr r r 1 mr r r r( )
( )
( )
( )
( )
( )
( )
t
N
t
N
t
t
N
t
N
t
t
− −=
=
=
=
−
θ
θ
J x
θ
θ
J
x
Jθ
&
&&
&&
&&
&
&
r
( )
t
=
( )
t
r( )
t
x
&
J θ
ヤコビ
行列
の定義 両辺を微分(
)
mr( )
r( )
r( )
r( )
r( )
t
=
r( )
t
+
r( )
t
x
Jθ
&
&
Jθ
&&
&&
CP動作はPTP動作より
遅い
CP動作はPTP動作より
遅い
1 r( )
t
=
− r( )
t
θ
&&
J x
&&
=
J 0
&
(除 特異点)ヤコビ行列を用いた逆運動学の解法
ヤコビ行列を用いた逆運動学の解法
逆運動学を解くのは容易ではない.リンク間にオフセットを付けると 解が求まらないことも多い 解が求まらないことも多い.ニュートン・ラフソン法
に基づく,逆ヤコビ行列を用いた
逆運動学
解法
逆運動学の解法
ニュートン・ラフソン法の繰り返し計算
( )(
)
11
r
i+=
r
i+
−
r
ir
i−
r
,
i
=
1,2,
θ
θ
KJ
θ
x
x
L
グゲイ
ニュ トン・ラフソン法の繰り返し計算
K: チューニングゲイン
収束値
θ
r∞を逆運動学の解
θ
rとして採用
繰り返し不要 ← 現在位置と目標位置が極めて近い( )(
)
11
r
i+= +
i
−
r
ir
i−
i
θ
θ
J
θ
x
x
ロボットの動力学
ロボットの
運動エネルギー
T
と
位置エネルギー
U
2 2 1 1 1 T 1 Tm v
+I
ω
m
v v
+ω Iω
n Tmgh
⇒
∑
m
g r
ラグランジュ
方程式
2 2 2 2 2 2 T Tm v
+I
ω
⇒m
v v
+ω Iω
0, 1 i Ci imgh
m
=⇒
∑
g r
(
T U
)
(
T U
)
d
⎛
⎜
∂
−
⎞
⎟
∂
−
=
τ
による導出
ロボ トの動力学 ロボ トの動特性を定める
運動方程式
(
)
(
)
i i iq
q
d
dt
⎜
⎝
∂
&
⎟
⎠
−
∂
=
τ
ロボットの動力学:ロボットの動特性を定める
運動方程式
( )
( , )
( )
H q q + h q q + G q = τ
&&
&
ロボット制御
ボッ 制御
1.
軌跡制御
(
軌道制御
): ロボット(の手先)を望ましい
軌跡に
追従させる
ような制御
2.
力制御
: ロボットの手先が作業対象物に対して望ましい
力
を加える
ような制御
Lagrange
方程式の考え方
⎛
⎞
x
mx
&&
= −
f
mg
(
)
(
)
d
T U
T U
dt
x
x
f
∂ −
∂ −
⎛
⎞ −
⎜
∂
⎟
∂
⎝
&
⎠
=
から
を導く
2 21
1
2
2
T
=
mv
=
mx
&
f
v
∂ −
(
T U
)
= −
mg
∂
2
2
0,
T
T
mx
∂
∂
=
=
∂
∂
&
&
m
g
g
x
∂
(
T U
)
mx
∂ −
=
&
U
=
mgx
x
x
∂
∂
∂
x
&
mx
(
)
d
⎛
∂ −
T U
⎞ =
mx
⎜
⎟
&&
U
=
mgx
,
0
U
U
mg
∂
=
∂
=
∂
∂
dt
⎜
⎝
∂
x
&
⎟
⎠
=
mx
,
g
x
x
∂
∂&
⎛
⎞
O
(
)
(
)
d
T U
T U
dt
x
x
mx mg
f
∂ −
∂ −
⎛
⎞ −
=
⎜
∂
⎟
∂
⎝
&
⎠
&&
+
=
運動エネルギーと位置エネルギー
h
運動エネルギーと位置エネルギー ⇒ 運動方程式
21
T1
⎧
mgh
(
)
x T v ⎛ ⎞ ⎜ ⎟ 2 21
1
2
2
1
1
T Tm
m v
I
ω
⎧
⇐
⎪⎪
⎨
⎪
ω Iω
⇐
v v
並 進 運 動 エ ネ ル ギ ー 回 転 運 動 エ ネ ル ギ(
)
T x y z y z v v v v v ⎜ ⎟ = ⎜ ⎟ ⎜ ⎟ ⎝ ⎠v
=
22
2
TI
ω
⎪
⇐
⎪⎩
回 転 運 動 エ ネ ル ギ ーω Iω
2 Inertia V ρr dV =∫
v
=
ロボット全体の運動エネルギー
I
: 慣性モーメントロボット全体の運動エネルギ
(
)
1 ( ) ( ) ( ) ( )1
2
n i i T i i T i T T i L L A i AT
m
==
∑
q J
&
J
q
&
+
q J
&
I J
q
&
1 2 1 2 ( ) ( ) ( ) 1
,
C i Li i i Ai i L
θ
θ
θ
θ
=⎛
⎞
=
⎜
⎟
→
⎝
⎛
⎞
=
=
⎜
⎟
⎝
⎠
⎠
J
=
J
q
q
v
J
q
&ω
&&
&
&
&
&
並進速度ベクトル 2 回転速度ベクトル 2
1
2
:
T⎝
⎠
⎝
⎠
=
q
&
H
q
&
H
慣 性 行 列
並進速度ベクトル 回転速度ベクトルロボット全体の位置エネルギー
0, 1 n T i Ci iU
m
==
∑
g r
Lagrange
方程式による運動方程式の導出
(
)
(
)
,
1, 2,
,
i i iT
U
T
U
d
i
n
dt
q
q
τ
⎛
∂
−
⎞
∂
−
−
=
=
⎜
∂
⎟
∂
⎝
&
i⎠
iL
dt
⎝
∂
q
⎠
∂
q
,
:
iL
d
L
L
d
t q
q
τ
=
T
−
U
⎛
∂
∂
⎞
−
=
⎜
∂
∂
⎟
⎝
&
ラ グ ラ ン ジ ュ 関 数⎠
0 , 11
,
2
i n T T i C iT
U
m
==
q H q
&
&
=
∑
g r
i idt q
∂
∂
q
⎝
⎠
12
i= 1 1 1,
1, 2,
,
n n n ij j ijk k j i i j j kH q
+
h q q
+
G
=
τ
i
=
n
∑
&&
∑ ∑
& &
L
(
7.16)
1 1 1 j= j= k =
(
mx
+
(
dx
2)
+
mg
=
f
)
&&
&
に 対 応慣性
力
遠心力・コリオリ力重
力
外
力
(
(
)
g
f
)
( ) 11
,
2
n ij jk T j ijk i j Li j k iH
H
h
G
m
q
q
=∂
∂
=
−
=
∂
∂
∑
g J
ただし( )
( , )
( )
H q q + h q q + G q = τ
&&
&
ベクトル・行列で 1つにまとめるとロボットの位置・軌道制御
ロボット
(
手先位置
)がある
軌跡
p
d
(t)
= ( x
d
(t)
, y
d
(t)
, z
d
(t)
)
Tに
追従
するような制御系の構成法
追従
するような制御系の構成法
手先方向も追従させる場合 ⇒ 軌跡としてq (t)
= ( x (t) y (t) z (t) θ (t) θ (t) θ (t))T を考える•
基準座標系
上で表現された手先位置
(
p
=(x, y, z)
Tג
R
3
) や
⇒ 軌跡としてq
d(t)
= ( xd(t), yd(t), zd(t), θx(t), θy(t), θz(t)) を考える関節座標系
(関節角ベクトルθ
R
N
)をもとに構成する方法
p
姿勢をもとに構成する方法
•
関節座標系
(関節角ベクトルθ
ג
R
N
)をもとに構成する方法
逆運動
学
目標
手先
軌跡
目標
関節角
軌跡
d( ) ( ( ), ( ), ( ))
t
x t y t z t
d d d→
( ) ( ( ),
dt
θ
1dt
θ
2d( ),
t
θ
3d( )
t
θ
Nd( ))
t
p
=
θ
=
L
逆運動
学
目標
手先
軌跡
目標
関節角
軌跡
動力学モデル
運動学モデル
( )
( , )
( )
H θ θ + h θ θ + G θ = τ
&&
&
動力学モデル
運動学モデル
ロボットの軌跡制御
( )
( , )
( )
H q q + h q q + G q = τ
&&
&
非線形
システム
Mq + Dq + Kq = τ
&&
&
線形システム
(機械振動系)→制御しやすい
線形システムへ変換
トルク計算
法
線形システムへ変換
線形システムを得るための予備的な非線形フィードバックˆ
ˆ
ˆ
ˆ
ˆ
ˆ ˆ
ˆ
( )
( , )
( ) (
ˆ
)
H
H h h G G
⇓
τ = H q u + h q q + G q
&
H,h,G
は
H,h,G
の推定値
,
,
ˆ
ˆ
ˆ
H
H h h G G
Hq h G Hu h G Hu h G
⇓
≈
≈
≈
+ + =
+ + ≈
+ +
&&
( )( - )
∴ H q q u = 0
Iq + Oq + Oq = u
q = u
q = u
&&
&
&&
&&
&&
は
特殊な形をした線形システム
⇒
Iq + Oq + Oq = u
q u
は
特殊な形をした線形システム
線形システムに対する制御理
論を使える
PDフィードバック制御
&&
「
q u
&&
=
線
ドバ
d d d
( )
t
⇒
( )
t
⇒
( )
t
=
( )
t
⇒
( )
t
=
( )
t
q
q
u
q
&&
q
&&
q
&&
所望の
「
」に対して線形フィードバック制御を行う
desired
理想的な加速度を生じるよう な力を制御入力として加える モデルや初期条件 が正確なら実際には デ
は誤差を含むの
d( )
t
≡
( )
t
q
q
を実現できる
確なら
実際にはモデルは誤差を含むので
V P d d⇓
u = q
&&
+
K q
(
&
d− +
q
)
K q
(
−
q
)
u = K e K e&
−
P−
Vd V