2013年度 第7回演習

ロボット制御
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
第 7 回演習
#include <stdio.h>
#include "matrix.h"
#include "math.h"
#define PI 3.141592
#define L1 10
#define L2 10
行列やベクトルを使うため
運動学計算関数
戻り値はベクトル
Vector kinema( float q1 , float q2 )
{
Matrix A1(3,3) , A2(3,3);
Vector v2(3) , v0(3);
float S1 , C1 , S2 , C2;
v2[0] = L2;
v2[1] = 0;
v2[2] = 1;
第 2 座標系で見た手先位置
S1 = sin( q1 );
C1 = cos( q1 );
A1[0][0] = C1; A1[0][1] = -S1; A1[0][2] = 0;
A1[1][0] = S1; A1[1][1] = C1; A1[1][2] = 0;
A1[2][0] = 0; A1[2][1] = 0; A1[2][2] = 1;
第 2 座標系から第 1 座標系
への同次変換行列の計算
S2 = sin( q2 );
C2 = cos( q2 );
A2[0][0] = C2; A2[0][1] = -S2; A2[0][2] = L1;
A2[1][0] = S2; A2[1][1] = C2; A2[1][2] = 0;
A2[2][0] = 0; A2[2][1] = 0; A2[2][2] = 1;
第 1 座標系から基準座標系
への同次変換行列の計算
v0 = A1*A2*v2;
return v0;
基準座標系で見た手先位置
の計算
}
int main()
{
float th1 , th2 , x , y;
char count;
Vector pos(3);
for( count = 0 ; count < 90 ; count++)
{
th1 = 0.0;
th2 = (float)(count)*PI/180.0;
pos = kinema( th1 , th2 );
printf("%8.3f , %8.3f\n" , pos[0] , pos[1] );
}
1/2
th2 だけを 0 から 90[度]へ
変化させる
48
49
50
51
52
53
54
55 }
for( count = 0 ; count <= 45 ; count++)
{
th1 = (float)(count)*PI/180.0;
th2 = PI/2.0;
pos = kinema( th1 , th2 );
printf("%8.3f , %8.3f\n" , pos[0] , pos[1] );
}
th2 を 90[度]固定したまま,
th1 を 0 から 45[度]へ変化
させる
行列版 2 関節ロボットの運動学計算プログラム (test7-3.c)
(a)上記のプログラムを test7-3.c として作成する.
(b) cint matrix.cpp test7-3.c によってプログラムを実行し,エラーが無いことを確認する.
(c) cint matrix.cpp test7-3.c > data7-3.csv として実行し printf の出力結果を data7-3.csv に書き出す.
(d) 出力された data7-3.csv を Excel で開き,A 列及び B 列を使用して散布図を作成する.
(e) 「プログラムリスト」及び「出力結果の散布図」をワード文書に貼り付ける.
レポート3
演習の結果を提出
(a)A4版で.表紙を付け,縦向き,左綴じとする.
(b)表紙は ,課題タイトル:
「ロボット制御 第 7 回演習」
,学籍番号,氏名を記載する
(c)提出日:11 月 19 日,4 時限目授業開始時
レポートの体裁に関する注意事項は「レポート 1」と同じである.
2/2