SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
RTミドルウェアによるロボットプログラミング技術
4.ロボットの運動学と制御の基礎
(解答)
演習
ロボット制御に必要な以下のプログラムを⽰せ
課題1︓2⾃由度のアームの逆運動学を計算する以下の仕様の関数
のC++プログラムを作成し実⾏結果を⽰せ
課題2︓ジョイスティックの現在値から移動ロボットの⾞輪⾓速度
を出⼒するPythonプログラムを作成し実⾏結果を⽰せ
2
関数: th = invkinem(link, pos)
th: 2つの関節の角度[deg]
link: 2つのリンク長[m]
pos:手先位置[m]
引数、戻り値はいずれも要素数2の配列とする
関数: vl, vr = joy2vel (k, x, y)
k: 適当な係数
x, y: ジョイスティックの現在値
vl, vr:移動ロボットの左右車輪角速度 [rad/s]
課題1︓2⾃由度のアームの逆運動学を計算する以
下の仕様の関数のC++プログラムを作成し実⾏結
果を⽰せ
• 2⾃由度アームの制御に必要な計算式を考えて
みよう
最終的には…
θ1 =
θ2 =
の形にしたい。
関数: Angle = invkinem(link, pos)
th: 2つの関節の⾓度[deg]
link: 2つのリンク⻑[m]
pos︓⼿先位置[m]
引数、戻り値はいずれも要素数2の配列とする ℓ1
ℓ2
θ1
θ2
ℓd
α
φ
β
( x , y )
1⾃由度のアーム
モータ
θ
⻑辺が⻑さ1の三⾓形の
それぞれの辺の⻑さ
1
sinθ
cosθ
点P の位置は以下のように表せる
x = l ×cosθ
y = l ×sinθ
ℓ
θ
P( x , y )
x
y
2⾃由度のアーム
モータ
点 P1 の位置は
x = ℓ1×cosθ1
y = ℓ1×sinθ1
1⾃由度アームの先端にもうひとつ
モータを繋いで2⾃由度アームを作る
点P1から点P2の位置は
x = ℓ2×cos(θ1+θ2)
y = ℓ2×sin(θ1+θ2)
点 P2 の位置は以下のように表せる
x =ℓ1×cosθ1 + ℓ2×cos(θ1+θ2)
y = ℓ1×sinθ1 + ℓ2×sin(θ1+θ2)
P1( x , y )
x
y
ℓ1
ℓ2
θ1
P2( x , y )
θ2
2⾃由度のアーム
モータ
φ
y
x
それでは逆に点 P2( x , y ) の位置にロボッ
トの⼿先を持って⾏くにはそれぞれの
モータの⾓度を何度にしたらよい︖ P2(x、y)
L
ロボットアームを折り曲げてLの⻑
さにしたものをφ回転すると考える
と2つの姿勢の可能性がある
P1( x , y )
x
y
ℓ1
ℓ2
θ1
P2( x , y )
θ2
解答︓逆運動学
〜座標から関節の⾓度を求める〜
• 余弦定理と逆関数を使って値を求めます。
ℓ1
ℓ2
θ1
θ2
ℓd
α
φ
β
( x , y )
x
y
2
cos
2
	
cos
2
	
tan
tan
cos
2
	
2
解答︓逆運動学
〜座標から関節の⾓度を求める〜
• ⼆通りの解があります。
ℓ1
ℓ2
θ1
θ2
ℓd
α
φ
β
( x , y )
x
y
cos
2
	
tan
tan
C++での実装
• #include <math.h>が必要
は M_PI (マクロ定義)
– VC では#define _USE_MATH_DEFINES が
必要
は sqrt() 関数を利⽤
• ⼆乗は pow() 関数を利⽤
• sin, cos は sin(), cos() 関数を利⽤
は atan2() 関数を利⽤
は acos() 関数を利⽤
9
プログラム(C++)(1)
JointAngle invkinem(LinkLength link, Position pos)
{
double ld(sqrt((pos.x * pos.x) + (pos.y * pos.y)));
double l1(link.l0);
double l2(link.l1);
double a = acos((pow(l1, 2) + pow(ld, 2) - pow(l2, 2)) / (2 * l1 * ld));
double b = acos((pow(l1, 2) + pow(l2, 2) - pow(ld, 2)) / (2 * l1 * l2));
double phi = atan2(pos.y, pos.x);
JointAngle j;
j.th0 = - ((M_PI / 2) - a - phi) * 180 / M_PI;
j.th1 = - ( M_PI - b) * 180 / M_PI;
return j;
}
10
プログラム(C++)(2)
JointAngle invkinem2(LinkLength link, Position pos)
{
double ld(sqrt((pos.x * pos.x) + (pos.y * pos.y)));
double l1(link.l0);
double l2(link.l1);
double a = acos((pow(l1, 2) + pow(ld, 2) - pow(l2, 2)) / (2 * l1 * ld));
double b = acos((pow(l1, 2) + pow(l2, 2) - pow(ld, 2)) / (2 * l1 * l2));
double phi = atan2(pos.y, pos.x);
JointAngle j;
j.th0 = - ((M_PI / 2) + a - phi) * 180 / M_PI;
j.th1 = - (-M_PI + b) * 180 / M_PI;
return j;
}
11
参考︓順運動学(2⾃由度)
ℓ1
ℓ2
θ1
θ2
( x , y )
P1
P0
P2
x
y
( x1, y1 )
cos
sin 	
cos
sin 	
点P1から点P2の位置は、
点P1の位置は、
	
	
もとめる手先の位置は、
解答
$ ./arm2dof
pos (x, y): -1, 1 ==> angle (th0, th1): 90, -90
pos (x, y): -0.5, 1 ==> angle (th0, th1): 82.5772, -112.024
pos (x, y): 0, 1 ==> angle (th0, th1): 60, -120
pos (x, y): 0.5, 1 ==> angle (th0, th1): 29.4471, -112.024
pos (x, y): 1, 1 ==> angle (th0, th1): -1.27222e-14, -90
または
$ ./arm2dof
pos (x, y): -1, 1 ==> angle (th0, th1): -0, 90
pos (x, y): -0.5, 1 ==> angle (th0, th1): -29.4471, 112.024
pos (x, y): 0, 1 ==> angle (th0, th1): -60, 120
pos (x, y): 0.5, 1 ==> angle (th0, th1): -82.5772, 112.024
pos (x, y): 1, 1 ==> angle (th0, th1): -90, 90
13
課題2︓ジョイスティックの現在値から移動ロボ
ットの⾞輪⾓速度を出⼒するPythonプログラムを
作成し実⾏結果を⽰せ
関数: vl, vr = joy2vel (k, x, y)
k: 適当な係数
x, y: ジョイスティックの現在値
vl, vr:移動ロボットの左右車輪角速度 [rad/s]
vl vr
x
y
x
y
vl
vr
x
y
vl vr
 x
y
vl vr

ジョイスティックを倒す⾓度と⾞輪の速度の⼤まかな関係は…
前進 旋回 極地旋回 後進
これらを滑らかにつなぐ関数を定義したい。
ジョイスティックによる操作
15
指令値
左右の車輪の(角)速度

x
y

横から見る
↓
どれだけ倒したか
上から見る
↓
どの方向へ倒したか
x, yの値が出力される
vl vr
このタイプ(差動駆動型2輪移動ロボット)は
左右の車輪の速度を与えることで
ロボットを任意の場所へ移動させる
左右の車輪の速度を入力する
≠
移動ロボットの制御
16
x
y
vl vr
x
y
x
y
x
y
vl
vr
vl vr
vl vr


ジョイスティックと⾞輪の速度
17
vrvl
 

 / 
x
y
vl
vrvl vr
x
y

vl vr
x
y

vl vr
x
y
解答
18
 

 / 
 

 / 


cos
sin 	
cos
4
	
sin
4
	
左⾞輪の速度
右⾞輪の速度
プログラム(C++)
WheelVelocity joystick(double k, Position pos)
{
double th = atan2(pos.y, pos.x);
double v = k * hypot(pos.x, pos.y);
WheelVelocity wv;
wv.v_l = v * cos(th - M_PI / 4.0);
wv.v_r = v * sin(th - M_PI / 4.0);
return wv;
}
19
解答
$ ./joystick
pos (x, y): 0, 1 ==> velocity (v_l, v_r): 0.707107, 0.707107
pos (x, y): 1, 1 ==> velocity (v_l, v_r): 1.41421, 0
pos (x, y): 1, 0 ==> velocity (v_l, v_r): 0.707107, -0.707107
pos (x, y): 0, -1 ==> velocity (v_l, v_r): -0.707107, -0.707107
pos (x, y): -1, -1 ==> velocity (v_l, v_r): -1.41421, -1.73191e-16
20

Contenu connexe

Tendances

行列補完を用いた無線マルチキャスト符号構成アルゴリズム
行列補完を用いた無線マルチキャスト符号構成アルゴリズム行列補完を用いた無線マルチキャスト符号構成アルゴリズム
行列補完を用いた無線マルチキャスト符号構成アルゴリズム
Tasuku Soma
 
論理思考とプログラミング第9回
論理思考とプログラミング第9回論理思考とプログラミング第9回
論理思考とプログラミング第9回
Noritada Shimizu
 
プログラミング技法特論第4回
プログラミング技法特論第4回プログラミング技法特論第4回
プログラミング技法特論第4回
Noritada Shimizu
 
Rsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいRsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしい
Yosuke Onoue
 

Tendances (17)

2次元曲面の極値の問題
2次元曲面の極値の問題2次元曲面の極値の問題
2次元曲面の極値の問題
 
2次曲面の極値の問題
2次曲面の極値の問題2次曲面の極値の問題
2次曲面の極値の問題
 
LTspiceを活用した突入回路シミュレーション
LTspiceを活用した突入回路シミュレーションLTspiceを活用した突入回路シミュレーション
LTspiceを活用した突入回路シミュレーション
 
pre: 数列で学ぶ初めての CommonLisp #fibonacci
pre: 数列で学ぶ初めての CommonLisp #fibonaccipre: 数列で学ぶ初めての CommonLisp #fibonacci
pre: 数列で学ぶ初めての CommonLisp #fibonacci
 
行列補完を用いた無線マルチキャスト符号構成アルゴリズム
行列補完を用いた無線マルチキャスト符号構成アルゴリズム行列補完を用いた無線マルチキャスト符号構成アルゴリズム
行列補完を用いた無線マルチキャスト符号構成アルゴリズム
 
数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci
 
Slides ts-1
Slides ts-1Slides ts-1
Slides ts-1
 
論理思考とプログラミング第9回
論理思考とプログラミング第9回論理思考とプログラミング第9回
論理思考とプログラミング第9回
 
Distance Measurement Device Comparison
Distance Measurement Device ComparisonDistance Measurement Device Comparison
Distance Measurement Device Comparison
 
Processing資料(6) 様々な図形
Processing資料(6) 様々な図形Processing資料(6) 様々な図形
Processing資料(6) 様々な図形
 
glossはおもろい
glossはおもろいglossはおもろい
glossはおもろい
 
プログラミング技法特論第4回
プログラミング技法特論第4回プログラミング技法特論第4回
プログラミング技法特論第4回
 
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
Rsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいRsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしい
 
Cpp cv02
Cpp cv02Cpp cv02
Cpp cv02
 

En vedette

2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
openrtm
 
2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み
openrtm
 

En vedette (14)

グループ4 ロボットで福笑い
グループ4 ロボットで福笑いグループ4 ロボットで福笑い
グループ4 ロボットで福笑い
 
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
2016 summercamp RTコンポーネント開発のためのシステムモデリング講習会
 
2016 summercamp SysML講習会
2016 summercamp SysML講習会2016 summercamp SysML講習会
2016 summercamp SysML講習会
 
2016 summercamp 効率よいRTシステム運用法
2016 summercamp 効率よいRTシステム運用法2016 summercamp 効率よいRTシステム運用法
2016 summercamp 効率よいRTシステム運用法
 
グループ5 ひとりでもだるまさんが転んだ
グループ5 ひとりでもだるまさんが転んだグループ5 ひとりでもだるまさんが転んだ
グループ5 ひとりでもだるまさんが転んだ
 
グループ1最終プレゼン資料
グループ1最終プレゼン資料グループ1最終プレゼン資料
グループ1最終プレゼン資料
 
2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み2016 summercamp 当研究室でのRTミドルウエアの取り組み
2016 summercamp 当研究室でのRTミドルウエアの取り組み
 
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
RTミドルウェアによるロボットプログラミング技術 2.プログラミングの基礎
 
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミングRTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
 
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
 
2016 summercamp rtshell入門
2016 summercamp rtshell入門2016 summercamp rtshell入門
2016 summercamp rtshell入門
 
グループ2 Gprese
グループ2 Gpreseグループ2 Gprese
グループ2 Gprese
 
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎
 
RTミドルウェアによるロボットプログラミング技術 1.コース概要
RTミドルウェアによるロボットプログラミング技術 1.コース概要RTミドルウェアによるロボットプログラミング技術 1.コース概要
RTミドルウェアによるロボットプログラミング技術 1.コース概要
 

Similaire à RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)

JOI予選はランチの後で
JOI予選はランチの後でJOI予選はランチの後で
JOI予選はランチの後で
Ken Ogura
 

Similaire à RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答) (20)

機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
 
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
凸最適化 〜 双対定理とソルバーCVXPYの紹介 〜
 
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター
 
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
 
C02
C02C02
C02
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
minagawa m
minagawa mminagawa m
minagawa m
 
ロボット家電と制御 Domestic robotics: mechanisms and control
ロボット家電と制御 Domestic robotics: mechanisms and controlロボット家電と制御 Domestic robotics: mechanisms and control
ロボット家電と制御 Domestic robotics: mechanisms and control
 
Sec15 dynamic programming
Sec15 dynamic programmingSec15 dynamic programming
Sec15 dynamic programming
 
nagata b
nagata bnagata b
nagata b
 
C06
C06C06
C06
 
Gurobi python
Gurobi pythonGurobi python
Gurobi python
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法アルゴリズムイントロダクション15章 動的計画法
アルゴリズムイントロダクション15章 動的計画法
 
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
 
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
 
Pythonintro
PythonintroPythonintro
Pythonintro
 
JOI予選はランチの後で
JOI予選はランチの後でJOI予選はランチの後で
JOI予選はランチの後で
 
【展開用】日曜数学会 Sinc関数の積分について
【展開用】日曜数学会 Sinc関数の積分について【展開用】日曜数学会 Sinc関数の積分について
【展開用】日曜数学会 Sinc関数の積分について
 

Dernier

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
YukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
koheioishi1
 

Dernier (7)

UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 

RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)