Who is さくふわめろんぱん

さくふわめろんぱん(@skfwMelonpan)はロボットとか人工知能に興味があるパンです。
自分のために調べたことがみんなの役に立ったらいいなぁ。

2015年7月28日火曜日

RaspberryPi でセンサーを使おう

今回のCansatに搭載するのは

  • GPSモジュール PA6C
  • デジタルコンパス HMC5883L
  • 加速度ジャイロセンサ MPU6050
  • 気圧センサ BMP180
  • 超音波センサ 
の5つ。
これらを統合して20msec周期での制御ができればよいと考えています。
今回の記事では上3つを扱うPythonプログラムを公開します。
拾ってきたプログラムを改変して、ある一定の時間だけログをとり続けるためのプログラムにしました。
ファイルの読み書きをするプログラムを書くよりも、標準出力するプログラムを
$ ./Program.py > data.txt
のように実行した方が楽です。


GPS PA6C

今回のGPSの取得はRapsberryPi (B+) のGPIOピンにあるTX0,RX0を使ってシリアル通信をします。とりあえず読み込んでファイルに書き込むだけのプログラムです。他のセンサも同様ですが、行頭にプログラム開始からの時間を出力しています。

デジタルコンパス HMC5883L

通信はI2Cです。pythonでI2C通信をするためにはインポートしなくてはいけないモジュールがあります。
今後は35行目のスケールを自動補正するプログラムが必要となります。
加速度センサ MPU6050


通信はI2Cです。
加速度は距離を時間に関して2回微分した値なので2回積分しなくてはいけません。
ジャイロは角速度なので1回微分すると角度になります。
積分操作をする場合は何かデータを処理してからではないと、多くの誤差を含んでしまいます。
そのための操作(フィルタリング)について考える必要があります。

2015年7月12日日曜日

Processingで3D描画してドヤ顔しよう

僕はよくProcessingで3Dの描画をして遊ぶのですが、
これが意外と簡単な割に「なんかすごい」感を出せる。

・キーボード操作 keycheck()
・XYZ軸の描画 drawAxis(float length);
・XYグリッド平面の描画 drawGrid(int size, float length);
という関数に分けて使い回しています。

キーボード操作は、
・矢印:左右回転、上下回転。
・Z,X:ズームイン、ズームアウト
変数を追加すればもっと操作を増やせます。
回転の向きは逆に感じる人もいるかもしれません。正負を逆にしてみてください。

Simple3D.pde (Google Drive)
https://goo.gl/quQW4O

2015年7月11日土曜日

パラシュートを作ろう

Cansatに使用するパラシュートを作ろうと思います。
パラシュートはいろんなところで利用されているので、パラシュートの研究ってのはたくさんされてて、理論的なことがネットにもたくさん書いてあります。
色々調べた結果がこれです。

・落下方向に垂直な面積が大きいほどゆっくり落ちる
・上に穴を開けると、風にながされにくく、安定する
・穴を大きくするだけ、はやく落ちる

いろんな数式をつかった理想的なパラシュート設計をしても、僕らが作れる限界というのがあるわけでして、「とにかくでかくていいの」という曖昧な目標でがんばります。

そこでここ最近考えていたのは、そもそもパラシュートを何枚かのパーツで作るには、その1枚の形ってどうつくればいいのだろうと。


ご存知のとおり、地球儀を平面地図にするように丸い球面は平面にできません。同様に平面からも球面をつくることもできません。(布とかを伸び縮みさせるならできなくはなさそう)

よって、平面の張り合わせで近似した球面をつくる方法を考えました。
試行錯誤の結果到達したのが、多角形を積み重ねる方式です。
(なんだそんなことか・・って思うかもだけど、結構なやみました。)
つまりどういうことかというと
このように球面に内接する6角形をつくって...

頂点を結びます。


これは単純に曲げただけの平面なので、平面にのばすとこんな感じに。


これはProcessingでゴリゴリ描いたのだけど、
もっとスマートに数式にするとこんな感じです。


とまぁ。こんな感じでパラシュートができるとうれしいな。

2015年7月2日木曜日

能代宇宙イベントに参加します

久しぶりの投稿です。
今年の8月、能代宇宙イベントに参加します。

ピクトラボの使用許可がおりたので、これからはピクトラボで活動します。
とはいっても残り1ヶ月ちょっとしかないので結構あせってます。
必要なモノとかの発注が間に合うかどうか。


試作の試作みたいな段階です。
でもまぁ勝算はあります。

頭で考えるより実際に作らないとわからないことだらけなのに、
頭やメモ帳で考えてばかりで、モノができてない状況。

今週末までに何かできてればうれしい。

2015年3月9日月曜日

春休み2015予定

来年度からは大学院に進学します。

春休みは研究室のデモ用ロボットの修繕とか趣味のプログラミングとかをして過ごします。

研究室のデモ用ロボットはLEGOでつくられていて、今まではUNIXのPCで動いてたのだけど、老朽化というか研究系のシステム移行により見放されてしまったという悲しいモノです。

そこで、最近流行のLinuxボード、BeagleBone Blackをつかって復活させようというのを僕がやります。復活したころには僕も多少は新しいことを学んでいることでしょう。

あとは、プログラミングの勉強を兼ねて、評価値を基準に解を探索するプログラムをつくります。大学院に入ったら機械学習とかも勉強したいので、それまでは泥臭い方法を学んでおきたいです。

どちらも経過で学んだことは公開していきます。
BeagleBone Black

2014年11月10日月曜日

[GPSRCC]ToCoStickでRaspberryPiと通信

ロボットカーをRaspberryPiで動かすので大変だったのはwifi環境。
家ではwifi使えるのでそれで良いのだけれど、外ではwifiがないから動かない。
(大会ではwifiルーターを持参して通信してました。)
以前はこんな感じ

wifiに頼らない開発環境を!ということで、以前買っておいたToCoStickと、今回買ってもらったToCoStickを使って何とかしてやろうじゃん?っていう記事です。
これからはこうします


もちろん家ではwifiでsshが最強なのでwifiを使います。

【ToCoStickとは】
TWE-LITEっていう通信用のモジュールをUSBに挿せるようになってるやつ。
今まで有線だったシリアル通信を無線化できるでしょ?っていう感じ。
チャットとか色んな機能があるんだけど、正直いらない。
きれいなんだけど、もうちょっと小型化できないのかな。


【ToCoStickの準備】
ざっくり基礎知識(細かいとこは自分で調べて)
・ToCoStickやTWE-LITEはアプリ(ファームウェア?)を書き込んで動かす。
・最初に入ってるのはIOとか制御するアプリ。ToCoStickだとほぼ意味ない。
・シリアル通信専用アプリの「透過モード」が一番便利そう。
  (http://tocos-wireless.com/jp/products/TWE-ZERO/App_Uart/)
・書き込み用ソフトがWindowsにしか対応してない(おこ)

【ToCoStickを使う】
Macに1つ、RaspberryPiに1つ挿します。
Macでは「CoolTerm」を使ってシリアル通信します。
RaspberryPiでは、おなじみ?の「minicom」でシリアル通信します。

親機の設定(どっちでもいいからとりあえずMac側にしてる)
・i: Device IDを121に。
・m: uart modeをT(透過モード)に。
・そして S: save Configuration 設定を保存

子機の設定
・i: Device IDを1に。
・m: uart modeをT(透過モード)に。
・そして S: save Configuration 設定を保存

なんか文字とか打つと1文字ずつ転送される。これでオッケー。

【コンソールを使う】(こっからが本題)
このままで、デバッグ情報をシリアルで送ってくれたりするようにできます。
競技中はそれでいいんだけど、RaspberryPiの場合はまずプログラムを起動しなきゃいけないですね。
シリアル通信でコンソールをいじれる必要があるわけです。
RaspberryPiの場合はGPIOピンに有線でつなぐとコンソールをいじれます。
USBでもこの機能を使わない訳にはいきませんね。

ここのブログでは逆に、シリアルで繋ぐとコンソールになっちゃうのを回避しています。
(http://www.soramimi.jp/raspberrypi/rs232c/index.html)


/boot/cmdline.txtttyAMA0ttyUSB0に変えましょう。
dwc_otg.lpm_enable=0 console=ttyUSB0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait 

/etc/inittab の最後のttyAMA0ttyUSB0に変えましょう。
...
#Spawn a getty on Raspberry Pi serial line

T0:23:respawn:/sbin/getty -L ttyUSB0 115200 vt100

一応、再起動してToCoStickで通信はじめると、Mac側のシリアル通信ソフトにコンソールが飛んできます。

という訳で、wifi環境がなくても開発が可能になりました。
TWE-LITEの仕様のせいで使いにくい分はあるけど、特に問題はないです。

もちろん家ではwifiでsshが最強なのでwifiを使います。
アディオス!

2014年10月28日火曜日

[エレコン]Arduino IDEとLeonardoでAVRマイコンに書き込み


こんにちは。
この度、AVRマイコン(ATMEGA328P,ATtiny2313,ATtiny13A)を買ったり買ってもらったりして、どのように使っていこうか考えていました。

【ことのいきさつ】
Arduinoを使って書き込む方法があると知る
KosakaLab
  探すとここに行き当たる。丁寧な解説つきでとてもありがたい。
  でもどこの説明もArduino UNOでやってる。

僕のArduino UNOは現在故障中で使えない
 スイッチサイエンスの永久保障
  Arduino UNO R3の永久保障の内容が最強。みんなここで買うべきっしょ。
(はやく直してもらえばいいのに)

Arduino Leonardoは元気に使える
  Arduino LeonardoはUNOとほぼ同等なボード。
使ってる人はUNOより少ない。ちょっと安い。

Arduino Leonardoでやってるページを見つける
 G2SS Diary: LeonardoでAttiny85にスケッチを書き込んでみた http://g2ss.blogspot.jp/2013/01/leonardoattiny85.html
  できないことはないけど、一手間必要なんだなと知る。

Arduino Leonardoでやる詳細のページも見つける
 Arduino Leonardo as ISP
  英語だけど絵がいっぱいで一番くわしくわかりやすい

できた!

というわけで僕もG2SS Diaryさん同様、やり方の手順を公開します。

0. 準備 用意するもの

・Arduino Leonardo USBケーブル
・AVRマイコン(上記3つで動作を確認)
・ブレッドボードとジャンパ線
・確認用LEDと抵抗

・パソコン(OSはMacOSX、Windows7で確認)
・Arduino IDE1.0.6 (1.5.8 BETAではうまくいかない)

1. Leonardoを書き込み装置にしよう

[ファイル]->[スケッチの例]->[Arduino ISP] を開く。
  内容を書き換える。(SS->10 , 9->13)
  [Arduino ISP Leonardo]とか別名で保存しておくといい。

  
  hardware.zipをダウンロード&解凍&[Arduino]ディレクトリの中に置いておく。
   (http://make.kosakalab.com/arduino/use/source/hardware.zip)
  Arduino IDEを再起動して[ツール]->[マイコンボード]でなにやらたくさん出てきたらオッケー。


  [hardware]ディレクトリの中に[leofix]というディレクトリをつくります。
  [leofix]ディレクトリの中に[programmers.txt]というテキストファイルをつくります。
  テキストファイルには以下の4行を書いておく。
arduinoispleo.name=Arduino as ISP (Leonardo)
arduinoispleo.communication=serial
arduinoispleo.protocol=arduino
arduinoispleo.speed=19200

再起動すると[ツール]->[書き込み装置]に[Arduino as ISP (Leonardo)]がある。



2. マイコンと配線しよう

  Arduino Leonardo側 <ーーー> マイコン
        SCK      <-->    SCK
        MISO    <-->    MISO
        MOSI    <-->    MOSI
        10     <-->   RESET
        5V     <-->   VCC
        GND    <-->   GND
        0(RX1)   <-->   RX (必要ないかも)
        1(TX1)   <-->   TX (必要ないかも)
(参考画像)


3. Arduino IDEをつかって書き込もう

 まず、前述のArduinoISPLeonardoをLeonardoに書き込む
 設定は マイコンボード:Arduino Leonardo
     ポート:Leonardoを認識してるポート
     書き込み装置:AVRISP mkII
 
 次に、前述のLEDチカチカスケッチをマイコンに書き込む
 設定は マイコンボード:ATtiny2313 (internal 8MHz clock) <-- 自分の使うマイコン
     ポート:Leonardoを認識してるポート
     書き込み装置:Arduino as ISP (Leonardo)

 LEDチカチカスケッチ
 void setup( ) {
   pinMode(2, OUTPUT);
 }
 void loop( ) {
  digitalWrite(2, HIGH);
    delay(125);
    digitalWrite(2, LOW);
    delay(125);
  }
ピンで2番を指定しているので、RXD,TXD,の隣くらいのピンにLEDを刺しておくと光る


という感じで僕はできました。
Arduinoの関数とかがどの程度使えるのか分からないので、今後検証していきたいと思います。

以上、Arduino IDEとLeonardoでマイコンに書き込みしてみようのコーナーでした。