*目次 [#h14744e5] #contents *はじめに [#r007233c] ロボティクス入門第1回目の課題は自分またはチームメイトの似顔絵ロボットであった。 今回の課題における条件として ・関数や定義を用いてなるべく単純でわかりやすいプログラムにすること ・A4の紙に収まるように書くこと.どれだけ小さくても良い。 ・ロボット自体も改良し、無駄のないものとすること ということであった。 *EV3と今回用いたプログラミングについて [#vac00bc4] EV3ではrinuxを用いたプログラミングではなく、windowsの「Tera Term」上でpythonを用いた。 *ロボットについて [#i2cbab93] はじめはコピー機のようなものにしようかとも考えたが、作ろうとしたらモーターが4つ必要な構造しか思いつかなかった。 なので私たちの班ではオーソドックスな4輪のロボットで似顔絵を描くことにした。 本体 &ref(2016a/Member/naho/Mission1/IMG_2016 [93755].JPG,70%,本体画像); 背面 &ref(2016a/Member/naho/Mission1/FullSizeRender [93751].jpg,70%,背面画像); ペンの機構部分 &ref(2016a/Member/naho/Mission1/IMG_2011 [93749].JPG,30%,ペン); mediumモーターを用いてペンの上下機構を作成した *プログラミング [#ia339995] #!/usr/bin/python 2行目以降の内容を /usr/bin/python への入力として取り扱う。 import ev3dev.ev3 as ev3 import time ev3dev.ev3をev3として導入する。 また、timeという関数を導入する。 ここからは最初においた定義となります。 m_r = ev3.LargeMotor('outA') //右のモーター m_l = ev3.LargeMotor('outB') //左のモーター m_s = ev3.MediumMotor('outC') //ペンを上げ下げする用のモーター ここからはプログラミングとなります。 m_r.run_forever(duty_cycle_sp=80) m_l.run_forever(duty_cycle_sp=-20) time.sleep(2.5) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) //顔の輪郭を描く m_r.run_forever(duty_cycle_sp=80) m_l.run_forever(duty_cycle_sp=-30) time.sleep(0.3) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=-40) m_l.run_forever(duty_cycle_sp=0) time.sleep(0.5) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=-40) time.sleep(0.3) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=-30) m_l.run_forever(duty_cycle_sp=-30) time.sleep(2.1) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) //前髪を描く m_s.run_forever(duty_cycle_sp=40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを上げる m_r.run_forever(duty_cycle_sp=30) m_l.run_forever(duty_cycle_sp=10) time.sleep(0.8) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=20) m_l.run_forever(duty_cycle_sp=20) time.sleep(0.4) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=10) m_l.run_forever(duty_cycle_sp=50) time.sleep(0.4) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=-20) m_l.run_forever(duty_cycle_sp=-20) time.sleep(0.6) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_s.run_forever(duty_cycle_sp=-40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを下げる m_r.run_forever(duty_cycle_sp=20) m_l.run_forever(duty_cycle_sp=20) time.sleep(0.5) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) //右目を描く m_s.run_forever(duty_cycle_sp=40) time.sleep(0.8) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを上げる m_r.run_forever(duty_cycle_sp=30) m_l.run_forever(duty_cycle_sp=30) time.sleep(1) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_s.run_forever(duty_cycle_sp=-40) time.sleep(0.8) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを下げる m_r.run_forever(duty_cycle_sp=20) m_l.run_forever(duty_cycle_sp=20) time.sleep(0.5) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) //左目を描く m_s.run_forever(duty_cycle_sp=40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを上げる m_r.run_forever(duty_cycle_sp=70) m_l.run_forever(duty_cycle_sp=-20) time.sleep(0.7) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_r.run_forever(duty_cycle_sp=-20) m_l.run_forever(duty_cycle_sp=-20) time.sleep(2.4) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_s.run_forever(duty_cycle_sp=-40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを下げる m_r.run_forever(duty_cycle_sp=20) m_l.run_forever(duty_cycle_sp=20) time.sleep(0.5) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) //鼻をかく m_s.run_forever(duty_cycle_sp=40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを上げる m_r.run_forever(duty_cycle_sp=20) m_l.run_forever(duty_cycle_sp=30) time.sleep(0.5) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) m_s.run_forever(duty_cycle_sp=-40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを下げる m_r.run_forever(duty_cycle_sp=80) m_l.run_forever(duty_cycle_sp=-80) time.sleep(0.1) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) //口をかく m_s.run_forever(duty_cycle_sp=40) time.sleep(0.3) m_s.run_forever(duty_cycle_sp=0) time.sleep(1) //ペンを上げる m_r.run_forever(duty_cycle_sp=-70) m_l.run_forever(duty_cycle_sp=-70) time.sleep(1) m_r.run_forever(duty_cycle_sp=0) m_l.run_forever(duty_cycle_sp=0) time.sleep(1) *反省点 [#h71cebd6] まず最大の反省点としてA4の紙に収まらなかったことが挙げられる。 この問題の解決策としてロボットの設計自体を変更してタイヤ間の幅を小さくして小回りできるようにしたり、プログラミングの調整をしたりすることが求められる。 また、プログラミングもかなり長いものとなってしまったため、もっと最初に定義をしたり書き順を考えたりすれば良かったと思った。 *感想 [#na8abcd1] 開発環境が見つからず、最初はどうしたものかと思ったがどうにか顔はかけるようになったのでよかった。 このレゴブロック社のマインドストームでプログラミングをしていくうちに、プログラミングというものは本当に何でもできるのだなということを 改めて実感した。ですので、もっと早くから計画的に課題をはじめ、さらに顔らしい顔を描きたかったと思った。 また、今回の課題ではプログラミングの問題だけではなく、ロボットにも問題があったと思う。次回からのライントレースの課題ではロボットの構造に対する試行錯誤も 重ね、よりよいロボットを作りたい。 完成した絵です。アルバイト先のおばちゃんに塩顔塩顔と言われるのでうまく特徴をとらえられているのではないでしょうか。 &ref(2016a/Member/naho/Mission1/FullSizeRender [93753].jpg,50%,顔); 作業風景 http://iup.2ch-library.com/i/i1659234-1465475179.jpg &ref(2016a/Member/naho/Mission1/IMG_2009 [93745].JPG,50%,作業);