|
|
LEGO® MINDSTORMS™でつくる二足歩行ロボット
|
|
専攻科 A05107 小野田 晃久
|
1.製作にあたって このロボットは、NQCチュートリアルの二足歩行ロボットをベースに作られている。図面はNQCチュートリアルの画像をPNGに変換したものを掲載している。また、要所要所わかりにくいところを写真付で説明する。もし、ソフトウェアを自由にインストールできる環境であるなら cad.zip をダウンロードし、MLCADをインストールすることをお勧めする。CADのデータを発見することができたので、CADのデータを見ながらのほうがわかりやすい点もあるだろうと思われるので、同時に公開しておく。 上へ戻る |
2.MLCAD構築法
1.LDRAW をインストールする
(1) Cドライブに「LEGO」というフォルダを作成する
(2) コマンドプロンプト(MS-DOSプロンプト)で、C:\LEGOに移動する。
(3) 以下のように入力し、Enter キーで実行する。
C:\LEGO>ldraw027.exe -y
解凍に成功すると最終行が次のようになります。
808 file(s)
C:\LEGO>
(4) 以下のように入力し、Enter キーで実行する。
C:\LEGO>complete.exe -y
解凍に成功するとプロンプトに戻ります。
C:\LEGO>
(5) LEGO 配下に「Ldraw」というフォルダが出来ているので、移動する。
C:\LEGO>cd ldraw
(6) 以下のように入力し、パーツリストを作成する。
C:\LEGO\Ldraw>mklist.exe
sort by [N]umber or [D]escription:
という表示がでたら、d を入力し、enterキーで実行します。
2. MLCADをインストールする。
(1) mlcad210.zip ファイルを解凍します。
Ldraw フォルダ配下に解凍したファイルがあるように移動するか、
コピーするかしてください。
3. MLCADを起動する
(1) MLCAD.exe をダブルクリックして、画面が表示されれば正常です。
上へ戻る
|
|
3.図面
腰、足以外は、飾りなので写真を見て適当に作成する。 |
|
4.ソース
**ファームウェアはbrickos-0.9.0を使用しています。**
#include<dmotor.h>
#include<dsensor.h>
#include<dsound.h>
#include<unistd.h>
#include<conio.h>
#define EYE_MOVE 200 // EYE MOVE TIME
#define LEG 300 // LEG MOVE TIME
#define ANKLE 1200 // ANKEL MOVE TIME
tid_t t_stop,t_walk,t_eye;
int stop();
int walk();
void leg_move_right();
void ankle_move_right();
void leg_move_left();
void ankle_move_left();
int eye();
wakeup_t ts1_wakeup(wakeup_t data);
wakeup_t ts2_wakeup(wakeup_t data);
wakeup_t ts3_wakeup(wakeup_t data);
int main(int argc,char **argv){
t_stop=execi(&stop,0,NULL,100,DEFAULT_STACK_SIZE); // make stop task
t_walk=execi(&walk,0,NULL,90,DEFAULT_STACK_SIZE); // make walk task
// t_eye=execi(&eye,0,NULL,10,DEFAULT_STACK_SIZE); // make eye task
return 0;
}
int stop(){ // rcx stop function
int stopchar;
stopchar=getchar();
if(stopchar==KEY_RUN || stopchar==KEY_ONOFF){
motor_a_speed(0);
motor_b_speed(0);
motor_c_speed(0);
shutdown_task(t_walk);
kill(t_walk);
cls();
cputs("stop");
killall(100);
msleep(5000);
}
return 0;
}
int walk(){ // Walk function
motor_a_speed(MAX_SPEED);
motor_b_speed(MAX_SPEED);
motor_b_dir(rev);
msleep(1500);
//org//msleep(1500);
motor_b_dir(brake);
while(1){
leg_move_right(); // right leg move function
ankle_move_right(); // right ankle move function
leg_move_left(); // left leg move function
ankle_move_left(); // left ankle move function
}
return 0;
}
void leg_move_right(){ // right leg move function
motor_a_dir(fwd);
msleep(LEG);
motor_b_dir(rev);
msleep(ANKLE);
motor_b_dir(brake);
wait_event(&ts1_wakeup,0);
motor_a_dir(brake);
}
void leg_move_left(){ // left leg move function
motor_a_dir(rev);
msleep(LEG);
motor_b_dir(fwd);
msleep(ANKLE);
motor_b_dir(brake);
wait_event(&ts1_wakeup,0);
motor_a_dir(brake);
}
void ankle_move_right(){ // right ankle move function
motor_b_dir(fwd);
msleep(1500);
wait_event(&ts3_wakeup,0);
dsound_system(DSOUND_BEEP);
msleep(3000);
//org//msleep(1500);
motor_b_dir(brake);
}
void ankle_move_left(){ // left ankle move function
motor_b_dir(rev);
msleep(1500);
wait_event(&ts2_wakeup,0);
dsound_system(DSOUND_BEEP);
msleep(3200);
//org//msleep(1500);
motor_b_dir(brake);
}
wakeup_t ts1_wakeup(wakeup_t data){
return SENSOR_1<0xf000;
}
wakeup_t ts2_wakeup(wakeup_t data){
return SENSOR_2>0xf000;
}
wakeup_t ts3_wakeup(wakeup_t data){
return SENSOR_3>0xf000;
}
/*
int eye(){ // Move eye function
motor_c_speed(MAX_SPEED);
while(1){
motor_c_dir(fwd);
msleep(EYE_MOVE);
motor_c_dir(brake);
msleep(EYE_MOVE);
motor_c_dir(rev);
msleep(EYE_MOVE);
motor_c_dir(brake);
msleep(EYE_MOVE);
motor_c_dir(rev);
msleep(EYE_MOVE);
motor_c_dir(brake);
msleep(EYE_MOVE);
motor_c_dir(fwd);
msleep(EYE_MOVE);
motor_c_dir(brake);
msleep(EYE_MOVE);
}
return 0;
}
*/
上へ戻る
|
|
5.動画 実際に動かしている様子です。 上へ戻る |