2014b/Member/torikara/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2014b/Member]]
#contents
*課題内容 [#p4a4f87f]
今回は紙コップに入っている2つのボールを入れ換えるロボッ...
http://yakushi.shinshu-u.ac.jp/robotics/?2014b%2FMission3
*ロボットについて [#z6c3cbb2]
ロボットは次の部品で成り立っている。
-基礎的な走行部分
-紙コップをつかむクワガタのような形のアーム部分
-つかんだ紙コップを持ち上げる腕の部分
-ボールを保持するレールの部分
その他には光センサ、超音波センサがついている。しかしプ...
このロボットはボールの入った紙コップをつかみ、上のレー...
&ref(./image4.JPG,50%);&ref(./image1.JPG,50%);
本来ボールは下の左の写真のようにレールに4個貯蔵し2個づ...
&ref(./image2.JPG,50%);&ref(./image3.JPG,50%);
*プログラムについて [#l6aeae28]
本来の作戦は
+右側からスタート
+ライントレースで交差点を識別
+そこから旋回、超音波センサで青いボールが入った紙コップを...
+青いボールを回収
+赤いボールを取りに行く
であったが、超音波センサを低い位置につけてしまったため正...
新しい作戦はロボットは下の図のような経路で動くようにし...
+直進し赤いボールを回収(?の経路)
+ある角度だけ旋回し青いボールを回収(?の経路)
+回収して空になった紙コップに赤いボールを入れる
+またある角度だけ旋回し赤いボールが入っていた紙コップのも...
+紙コップに青いボールを入れる
+終了
#ref(./miti.png,50%)
マスターとスレーブによる通信機能を用いた。それぞれの仕...
-マスター側
--基本走行
--レールからボールを落とす
-スレーブ側
--紙コップをつかむアームの開閉
--つかんだものをレールまで届ける腕の上下運動
以下はマスター側のプログラムである。
#define CONN 1
#define SIGNALON 1
#define OPEN_SPEED 15
#define OPEN OnFwd(OUT_A,OPEN_SPEED);Wait(800);Off(OUT_A);
#define CLOSE OnRev(OUT_A,OPEN_SPEED);Wait(1300);Off(OUT...
#define SPEED_H 70
#define SPEED_L 50
const float diameter = 5.6; //タイヤの直径(?)
const float track = 10.5; //タイヤのトレッド幅(?)
const float pi = 3.1415; //円周率
float GetAngle_turn(float a) //求める本体の回転角から...
{
float ang = (a*track)/diameter;
return ang;
}
float GetAngle_go(float a) //求める移動距離からタイヤ...
{
float ang = a/(diameter*pi)*360.0;
return ang;
}
sub angle_turn_L(float t) //左にt度回転
{
int angle_turn_L = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_L,-100,true,true...
Off(OUT_BC);
}
sub angle_turn_R(float t) //右にt度回転
{
int angle_turn_R = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_R,100,true,true)...
Off(OUT_BC);
}
sub dist_go_F(float t) //前にtセンチ進む
{
int angle_go_F = GetAngle_go(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_go_F,0,true,true);
Off(OUT_BC);
}
sub dist_go_R(float t) //後ろにtセンチ進む
{
int angle_go_R = GetAngle_go(t);
RotateMotorEx(OUT_BC,-SPEED_H,angle_go_R,0,true,true);
Off(OUT_BC);
}
task main()
{
dist_go_F(57.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
angle_turn_R(150.0);
dist_go_F(40.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
//反転して
dist_go_R(5.0);
angle_turn_R(190.0);
dist_go_R(20.0);
//ボールを置く
OPEN;
Wait(1000);
CLOSE;
dist_go_F(50.0);
//反転して
dist_go_R(20.0);
angle_turn_R(220.0);
//コップまで近づく
dist_go_R(33.0);
//ボールを置く信号を送る
OPEN;
Wait(1000);
CLOSE;
//離れる
dist_go_F(20.0);
}
以下はスレーブ側のプログラムである。
#define SIGNALON 1
#define ARM_TIME1 1000 //アームの開閉時間1
#define ARM_TIME2 2000 //アームの開閉時間2
#define ARM_SPEED1 10 //アームの開閉スピード1
#define ARM_SPEED2 50 //アームの開閉スピード2
#define UP_TIME 2000 //アームを上げる時間
#define UP_SPEED 50 //アームを上げるスピード
#define DOWN_TIME 1800 //アームを下げる時間
#define DOWN_SPEED 20 //アームを下げるスピード
task main()
{
int msg; //受け取った値を格納する変数
while(true){
ReceiveRemoteNumber(MAILBOX1, true, msg); //MAILBOX...
if(msg==SIGNALON){
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnRev(OUT_B,ARM_SPEED2);Wait(ARM_TIME2);Off(OUT_B); ...
OnRev(OUT_C,UP_SPEED);OnRev(OUT_B,ARM_SPEED2);Wait(UP_T...
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnFwd(OUT_B,ARM_SPEED1);Wait(ARM_TIME1);Off(OUT_B); ...
ARM_UP2 OnRev(OUT_C,UP_SPEED);Wait(450);Off(OUT_C); ...
}else{
Off(OUT_BC);
}
}
}
*反省と考察 [#lada5737]
-時間ぎりぎりになってプログラムが完成したため実際に走った...
-新しい作戦では使用しないセンサを搭載していたので、この点...
-スレーブ側のプログラムはサーボモータの機能を使用しなかっ...
-ロボットはそれぞれの部分が取り外し可能で収納には困らない...
終了行:
[[2014b/Member]]
#contents
*課題内容 [#p4a4f87f]
今回は紙コップに入っている2つのボールを入れ換えるロボッ...
http://yakushi.shinshu-u.ac.jp/robotics/?2014b%2FMission3
*ロボットについて [#z6c3cbb2]
ロボットは次の部品で成り立っている。
-基礎的な走行部分
-紙コップをつかむクワガタのような形のアーム部分
-つかんだ紙コップを持ち上げる腕の部分
-ボールを保持するレールの部分
その他には光センサ、超音波センサがついている。しかしプ...
このロボットはボールの入った紙コップをつかみ、上のレー...
&ref(./image4.JPG,50%);&ref(./image1.JPG,50%);
本来ボールは下の左の写真のようにレールに4個貯蔵し2個づ...
&ref(./image2.JPG,50%);&ref(./image3.JPG,50%);
*プログラムについて [#l6aeae28]
本来の作戦は
+右側からスタート
+ライントレースで交差点を識別
+そこから旋回、超音波センサで青いボールが入った紙コップを...
+青いボールを回収
+赤いボールを取りに行く
であったが、超音波センサを低い位置につけてしまったため正...
新しい作戦はロボットは下の図のような経路で動くようにし...
+直進し赤いボールを回収(?の経路)
+ある角度だけ旋回し青いボールを回収(?の経路)
+回収して空になった紙コップに赤いボールを入れる
+またある角度だけ旋回し赤いボールが入っていた紙コップのも...
+紙コップに青いボールを入れる
+終了
#ref(./miti.png,50%)
マスターとスレーブによる通信機能を用いた。それぞれの仕...
-マスター側
--基本走行
--レールからボールを落とす
-スレーブ側
--紙コップをつかむアームの開閉
--つかんだものをレールまで届ける腕の上下運動
以下はマスター側のプログラムである。
#define CONN 1
#define SIGNALON 1
#define OPEN_SPEED 15
#define OPEN OnFwd(OUT_A,OPEN_SPEED);Wait(800);Off(OUT_A);
#define CLOSE OnRev(OUT_A,OPEN_SPEED);Wait(1300);Off(OUT...
#define SPEED_H 70
#define SPEED_L 50
const float diameter = 5.6; //タイヤの直径(?)
const float track = 10.5; //タイヤのトレッド幅(?)
const float pi = 3.1415; //円周率
float GetAngle_turn(float a) //求める本体の回転角から...
{
float ang = (a*track)/diameter;
return ang;
}
float GetAngle_go(float a) //求める移動距離からタイヤ...
{
float ang = a/(diameter*pi)*360.0;
return ang;
}
sub angle_turn_L(float t) //左にt度回転
{
int angle_turn_L = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_L,-100,true,true...
Off(OUT_BC);
}
sub angle_turn_R(float t) //右にt度回転
{
int angle_turn_R = GetAngle_turn(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_turn_R,100,true,true)...
Off(OUT_BC);
}
sub dist_go_F(float t) //前にtセンチ進む
{
int angle_go_F = GetAngle_go(t);
RotateMotorEx(OUT_BC,SPEED_H,angle_go_F,0,true,true);
Off(OUT_BC);
}
sub dist_go_R(float t) //後ろにtセンチ進む
{
int angle_go_R = GetAngle_go(t);
RotateMotorEx(OUT_BC,-SPEED_H,angle_go_R,0,true,true);
Off(OUT_BC);
}
task main()
{
dist_go_F(57.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
angle_turn_R(150.0);
dist_go_F(40.0);
//コップを取るボール搭載の信号を送る
SendRemoteNumber(CONN, MAILBOX1, SIGNALON);
Wait(9000);
//反転して
dist_go_R(5.0);
angle_turn_R(190.0);
dist_go_R(20.0);
//ボールを置く
OPEN;
Wait(1000);
CLOSE;
dist_go_F(50.0);
//反転して
dist_go_R(20.0);
angle_turn_R(220.0);
//コップまで近づく
dist_go_R(33.0);
//ボールを置く信号を送る
OPEN;
Wait(1000);
CLOSE;
//離れる
dist_go_F(20.0);
}
以下はスレーブ側のプログラムである。
#define SIGNALON 1
#define ARM_TIME1 1000 //アームの開閉時間1
#define ARM_TIME2 2000 //アームの開閉時間2
#define ARM_SPEED1 10 //アームの開閉スピード1
#define ARM_SPEED2 50 //アームの開閉スピード2
#define UP_TIME 2000 //アームを上げる時間
#define UP_SPEED 50 //アームを上げるスピード
#define DOWN_TIME 1800 //アームを下げる時間
#define DOWN_SPEED 20 //アームを下げるスピード
task main()
{
int msg; //受け取った値を格納する変数
while(true){
ReceiveRemoteNumber(MAILBOX1, true, msg); //MAILBOX...
if(msg==SIGNALON){
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnRev(OUT_B,ARM_SPEED2);Wait(ARM_TIME2);Off(OUT_B); ...
OnRev(OUT_C,UP_SPEED);OnRev(OUT_B,ARM_SPEED2);Wait(UP_T...
OnFwd(OUT_C,DOWN_SPEED);Wait(DOWN_TIME);Off(OUT_C); ...
OnFwd(OUT_B,ARM_SPEED1);Wait(ARM_TIME1);Off(OUT_B); ...
ARM_UP2 OnRev(OUT_C,UP_SPEED);Wait(450);Off(OUT_C); ...
}else{
Off(OUT_BC);
}
}
}
*反省と考察 [#lada5737]
-時間ぎりぎりになってプログラムが完成したため実際に走った...
-新しい作戦では使用しないセンサを搭載していたので、この点...
-スレーブ側のプログラムはサーボモータの機能を使用しなかっ...
-ロボットはそれぞれの部分が取り外し可能で収納には困らない...
ページ名: