Comments
Description
Transcript
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