2013年4月14日日曜日

Raspberry Piで改造したScratchを動かす

前回の作業で、ようやくRaspberry Piで動く改造したScratchイメージ(ScratchMyu4RPi.imageとScratchMotors4RPi.image)ができあがりましたが、今回は、これらをRaspberry Piで簡単に動かせるようにする方法をまとめてみます。

まず、改造したScratchイメージを「/usr/share/scratch/」の中に保存します。次に、以前にやったように、起動コマンドスクリプトを作ります。「/usr/bin/」内のscratchコマンドスクリプトのコピーを2つ用意して、scratchmyuとscratchmotorsという名前に変更しました。この2つのファイルを「/home/pi/」内にコピー(sudo cp …)して、Leafpadで開いて「IMAGE="/usr/share/scratch/…"」のところだけをそれぞれScratchMyu4RPi.imageとScratchMotors4RPi.imageに書き換えました。これを、再び「/usr/bin/」以下にコピー(sudo cp …)すれば、スクリプトファイル名がそのままコマンドとして使えるようになります。
#パーミッションの設定も確認しましたが、変更されていませんでした。

このままでも使えることは使えるのですが、いちいちターミナルを開いてコマンドを打ち込むのは面倒です。そこで、LXDEメニューに登録するところまで作業をしてみることにしました。

以前にKNOPPIXでやっていたので、これを参考にしながら作業を進めました。まず、「/usr/share/applications/」内のscratch.desktopファイルから2つのコピーを作って、scratchmyu.desktopとscratchmotors.desktopという名前に変更しました。次に、「/home/pi/」内にこの2つの.desktopファイルをコピーして、Leafpadで開いて「Exec=…」「Name=…」の2ヶ所を変更します。「Exec=」以下をコマンドスクリプトの名前にそれぞれ変えて(今回は、scratchmyuとscratchmotors)、「Name=」以下を任意の名前(メニューに表示される)にしました。これを、再び「/usr/share/applications/」以下にコピー(sudo cp …)すれば、LXDEメニューから起動することができるようになります。

そもそも、需要は少ないのかもしれませんが、これでだいぶ使いやすくなりました。自律型のロボットが完成するまで、もう少しな感じです。(^_^)

2013年4月11日木曜日

Raspberry Pi用にScratch.imageを改造する

前回の作業で、今まで他のLinuxで使っていた、改造されたScratchがRaspberry Piで動かないことがわかり、twitterでつぶやいたところ、Scratch Day 2013 in Tokyoの準備などでお忙しい@abee2さんから情報を頂きました。結論だけ言うと、Raspberry Piに含まれるScratchは特別なものであるため、他のScratchイメージを持ち込んでもうまく動かない可能性があるということでした。そこで、初体験ではありますが、Scratch.imageの改造をやってみることにしました。

改造と言っても、既に作成して頂いている.csファイルをRaspberry Pi付属のScratch.imageに組み込むだけです。参考にしたのは、「チェンジセット(差分集合)の書き出しと読み込みの方法」です。今回改造したScratchイメージファイルは、ScratchMyu4RPi.imageとScratchMotors4RPi.imageという名前にしましたが、改造の内容をまとめると以下のようになります。

まず、SensorBoardWithMotorからWeDoLight.1.csを書き出します。作業はMacBookでやりましたが、「チェンジセット(差分集合)の書き出し…」を参考にして難なくクリア出来ました。Macの場合は、「マウスの右ボタンをクリック」ではなく、項目を選択するとウィンドウの左側にスクロールバーが表示され、その上にスイッチらしきものが表示されるので、それをクリックします。また、特にSqueakVMとの関係を気にする必要がなく、Raspberry Piから持ってきたScratch.imageファイル(/usr/share/scratch/に入っていた)をダブルクリックするだけで勝手にSqueakVMで開いてくれました。予め「Scratch.image」を「ScratchMyu4RPi.image」などのように、別名で保存しておくとわかりやすいと思います。今回は、2つのイメージファイルを作ったため、別の名前で2つのイメージファイルを作ってから作業をしました。

問題は、チェンジセットを読み込ませたいScratchイメージファイルから起動して、シフトキーを押しながら「ファイル」メニューを開いても、「Exit User Mode」という項目が出てこないことです。そこで、よく知られた裏ワザとして、シフトキーを押しながら「SCRATCH」のロゴの「R」をクリックするという方法を使いました。シフトキーを押しながら「R」をクリックすると小さなメニューが表示されます。その中から「turn fill screen off」を選ぶとScratchの窓が少し小さくなって、右下にSqueakのデスクトップ(ワールド)が表示されます。あとは先述の「チェンジセット(差分集合)の書き出し…」を参考にして作業をすれば問題ありません。作業が終わったら、再びシフトキーを押しながら「R」をクリックし、「turn fill screen on」を選択してユーザモードに戻します。最後に、同じくシフトキーを押しながら「R」をクリックして、出てきたメニューの中から「save image for end-user」を選んで変更した内容を保存すれば、改造したScratchイメージファイルの出来上がりです。

こうして作ったイメージファイルをRaspberry Piに持ち込んだところ、無事に動いてくれました。\(^o^)/
#起動からLXDEメニューへの登録まで出来ましたが、詳細は後日書くことにします。

2013年4月8日月曜日

カブトムシの世話(2013春)〜多頭飼育のサイクル化に向けて

昨年の秋から、時々様子を見る程度でほとんど放置状態だったカブトムシの幼虫。5年目の春を迎えてかなり暖かくなってきたので、そろそろ冬眠から目覚めた頃だろうと思ってマットの交換をすることにしました。昨年は、4月の月末近くに世話をしましたが、昨年に比べて今年はカブトムシの幼虫が多かったので、共食いを心配してちょっと早めに様子を見ることにしたのでした。

保湿のために敷いておいた枯葉を取り除き、マットの様子を確認してみました。マットは、昨年にも増して良い感じに水分がしっかり保たれていました。上の方の深さ5cmくらいは、カブトムシたちが通った様子もありませんでしたが、その下のマットにはフンがたくさん混ざっていて、それぞれの幼虫がうまく場所を確保しながら丸まっていました。マットをふるいにかけながらフンを取り除き、出てきた幼虫を別の容器に避難させていきました。秋には25頭いたカブトムシの幼虫でしたが、今回の世話で確認できたのは24頭でした。残骸は何も発見できなかったので、だいぶ早い段階で土に帰ってしまったのだと思います。生き残った24頭は少々大きさにばらつきがあるものの、冬眠から覚めて元気に動き回っていました。

ふるいにかけたマットは、新しいマットと混ぜてまた使い回します。こうすると、夏に次の幼虫が生まれたときの餌にもなるからです。取り除いたフンは、昨年のように植物の栽培に利用します。4回に分けてマットと朽木を入れ、層ごとに6頭ずつカブトムシの幼虫を入れました。最後に上から5層目のマットをかぶせて今回の作業を終了しました。夏前にもう一度様子を見て、餌として消費されたマットを足さなければならないと思います。(既にマットは用意してあります)この方法で多頭飼育のサイクルができるといいなぁと思っています。幼虫が40頭を超えた時に世話がとても大変だったので、30頭くらいまでが調度よいかもと思っています。

2013年4月7日日曜日

改造されたScratchをRaspberry Piで動かせず

Raspberry Piで自律型ロボットを簡単に作る実験をしています。今回は、これまで@abee2さんに改造して頂いた各種Scartchを動かす実験をしました。

まず、インストールされているScratchの状態を確認するところから始めました。Scratchの起動コマンドは、「/usr/bin/」の中にある「scratch」というシェルスクリプトです。これを「vi」で開く(「vi /usr/bin/scratch」でOkay)と、scratchの起動に必要な物がどこにあるかが記述されています。squeakvmは「/usr/lib/squeak/」の中に、Scratchのpluginsは「/usr/lib/scratch/」の中に、Scratch.imageやlocaleは「/usr/share/scratch/」の中にそれぞれあることが判明しました。これに従って、ミュウロボ用と2モータ用のScratchで実験を続けてみることにしました。

手始めに、一番簡単な日本語ロケールファイルの更新(@abee2さんに作って頂いた日本語ロケールファイルは、以前の記事にリンクあり)をしました。「/usr/share/scratch/locale/」以下にあるものに上書き(解凍したpoファイルを「sudo cp *.po /usr/share/scratch/locale/」でコピー)すればOkayです。

次に、ミュウロボ用のimageファイルとなのぼ〜どAG用のimageファイルを同様の手順(解凍したimageファイルを「sudo cp *.image /usr/share/scratch/」)で「/usr/share/scratch/」へコピーしました。その後、それぞれのlocaleフォルダ内のpoファイルもコピー(面倒なので、piユーザフォルダ内に解凍したフォルダを置いて「sudo cp */locale/*.po /usr/share/scratch/locale/」でコピーしました)して準備完了。

起動コマンドを作るために、scratchの起動コマンドがあった「/usr/bin/」へ移動し、scratchのシェルスクリプトからファイル名を変えて(今回は「scratchmotors」と「scratchmyu」の2つにしました)コピーを作り、中身の設定をすることにしました。しかし、「sudo vi …」で起動しても、うまく変更できなかったので、ダメ元でLeafpadでやってみることに。直接保存はできないものの簡単に開いて編集することが出来ました。
#編集したものをpiのユーザフォルダ(/home/pi/)に入れておいて、あとで「sudo cp …」すればOkay)

さて、ここから大きな壁にぶち当たります。当初は、シェルスクリプトのimageファイル名のところだけ変更すれば簡単に起動するだろうと思っていたのですが、何だかうまくいきません。真っ白い窓が開いてCPUフル稼働状態になり、マウスの動きも鈍くなる感じです。しばらく待つと窓が閉じて「out of memory」というメッセージと起動プロセスを示す大量のログが表示されて止まります。メモリーが足りないのかな?と思って新しく買った512MBの方でもやってみましたがダメ。今まで、KNOPPIXやPuppyで使っていた起動用シェルスクリプトをRaspberry Piの設定に合わせて書き換えてやってみてもダメ。同じ方法で、Scratch.imageだと問題なく起動するので、改造したものの個別の問題だろうと推察しました。
#もちろんですが、パーミッションの設定も確認しました。

というわけで、今回はうまく動かなかった報告になってしまいました。

【追記】成功したやり方については、2013年4月11日の記事をご覧ください。(2013.4.13)

2013年4月1日月曜日

Raspberry PiとWeDoモータで簡易ロボット制御

Raspberry Piでロボット制御の実験中です。これまでに、モバイルバッテリーで動作することを確認し、Bluetoothキーボードを使えるように設定しました。この実験を進めていく過程で、Raspberry Piに入っているScratchWeDoが動くことが判明し、まずはこれでロボット制御のようなことができるかどうかやってみようと考えました。

モニタとUSBマウス(まだBluetoothマウスを購入していないので)をRaspberry Piに接続し、以前に購入したUSBモバイルバッテリーを使って起動しました。ここで、Bluetooth USBドングルを挿して、Bluetoothキーボードの好きなキーを押してRaspberry Piに認識させます。コンソール画面からBluetoothキーボードを使ってログインし、「startx」でLXDEを起動してからScratchを起動します。この時点で、2つのUSBポートは使い切っているので、WeDoのレゴUSBハブを挿すところはありません。これを挿せば自動的にモータのブロックが表示されるのですが、USBマウスを抜くと作業ができないし、Bluetooth USBドングルを抜いてしまうと、また認識させるのに時間がかかってしまって面倒です。そこで、Scratchの「編集」メニューから「モーターのブロックを表示する」を使って無理やりモータのブロックを表示させました。これを使って、単純にスペースキーを押したら1秒間モータが回るというプログラムを作りました。

最後に、USBマウスとモニタを外してレゴUSBハブ(モータがつながっている)を挿し、BluetoothキーボードのenterキーでScratchのプログラムを動かし、プログラム通りに動作するか確認すると、見事に動いてくれました。(YouTubeで画像が見られます)単にラジコンカーのようなものを作っただけなんですが、いろいろと可能性が感じられてわくわくしています。センサを追加したり、キーボードからの命令を工夫したりすればもう少し複雑な動きもできそうなので、時間を見つけてやってみたいと思います。

Raspberry PiでBluetoothを使う

Raspberry PiWeDoなのぼ〜どAGをつないで、Scratch(改造したものも含めて)から制御することで自律型のロボットが出来ないだろうかと考えて、細々と実験中です。

さしあたって、キーボードの呪縛(と言うほど大げさなものでもないか…)からRaspberry Piを開放するために、Bluetooth USBドングルを挿して無線キーボードを使うことが出来ないかと考えました。同じようなことを考えている方はいないかとググってみたところ、結構たくさんの人がチャレンジしている様子。中でも一番わかり易かったYengawa Systemsさんのブログ記事を参考に、作業を進めていくことにしました。
#今回の作業はインターネット接続必須です。DHCPサーバが動いている環境がお勧めです。

まずは、Raspberry Piにキーボード、マウス、モニタ、LANケーブルをつないで、前回用意した電源をつなぎました。起動&ログイン後、GUIで作業を進めるために「startx」でLXDEを起動しました。次に、デスクトップにあるターミナルを起動し、「sudo apt-get update」と打ち込んでapt-getのリストを更新します。その後「sudo apt-get install bluetooth bluez-utils blueman」でBluetoothを動かすのに必要なものをインストールしました。
#これが結構時間がかかります。

インストールが終了したら、Bluetooth USBドングルを挿します。今回は、プラネックスのBT-MicroEDR1XというBluetooth Ver.2.1とEDRに対応したものを使いました。ターミナルで「lsusb」と打ち込むと、確かに「Cambridge Silicon Radio, Ltd. Bluetooth Dongle (HCI Mode)」が見えました。

次は、GUIツールの出番です。LXDEメニューから「設定」→「Bluetooth マネージャー」を起動し、Bluetoothキーボードの電源を入れて「CONNECT」ボタンを押してから、Bluetooth マネージャーの「検索」を押します。今回は、iPad2のために購入したK1280 BTというキーボードを使いました。(Amazonで購入しましたが現在売り切れ)ペアリングにはランダムなキーを使うことにして、ウィザードに従って設定をすると、無事にBluetoothキーボードが使えるようになりました。

【追記】 起動&ログインからBluetoothを使いたい場合は、Raspberry Piを起動してログイン待ち状態になってからBluetooth USBドングルを挿して、(2013.4.1)
予めBluetoothドングルを挿してRaspberry Piの電源を入れて、LEDの点滅を確認してからキーボードの好きなキーを押したりマウスをクリックしたりしてしばらく待つと、BluetoothキーボードやBluetoothマウスが使えるようになるようです。(2013.5.4)

結構簡単にできるものだなぁと感心しましたが、さらに使いやすい環境にするためにはまだまだ道のりは長いので、時間を見つけて作業を進めたいと思います。