RM-boardの開発環境整備2

iXsリサーチから提供されているRM-boardの開発環境は、VMWare上のDebianを使ったC言語のクロスコンパイル環境です。

これならRM-boardのパフォーマンスを最大限に生かすプログラムを作れますが、まだ何から手をつけてよいかわからない段階では、いちいちコンパイルして転送して実行するのは面倒くさいです。

何か良い言語がないかと思ったのですが、ゼミでやっているLuaがちょうど良いのではないかと考えました。たしか、4足でJollyPochieチームもLuaを使っていたはずですし。

とりあえず最新の5.1.4をダウンロードすると216Kbyte程度しかありません。シンプルでよいですね。Macではあっけなくコンパイル&実行できました。

次にVirtualBox上のUbuntuに転送し、先に構築したクロス環境でビルドしてみました。そのままではエラーやら出たので、src/Makefileに以下のような行を適当なところに挿入。

CC = arm-linux-gcc
LD = arm-linux-ld

さらにgeneric:の行をコピーして、以下のように変更。
rmboard:
$(MAKE) all MYCFLAGS="-I/usr/arm-linux/include -DLUA_USE_MKSTEMP"

こうしてビルドしてみると見事にluaとluacが出来上がりました。

恐る恐る実機に転送して実行してみると、ちゃんとLuaが起動して実行することができました。

サーボを制御するCモジュールとリンクさせればLuaからコントロールさせることもできそうです。

実験システムとしてはとりあえず満足なのですが、せっかくなので他の手も使えないかと模索中です。これは後ほど。

RM-boardの開発環境整備

ようやく本格的にRM-boardに取り組むことにしました。
以前にやったことをおさらいしながら、最初はRM-boardでサーボを動かすことを目標に進めていきます。

まず必要なのは開発環境です。メインで使っているのがSnowLeopard/MacBookです。iXsリサーチから提供されている開発環境はVMware Player上のDebianです。Debian上の環境をそのままSnowLeopardに持ってくるのは面倒くさそうなので、同様に仮想化ソフトを使おうと思います。

RM-boardの開発環境

普段からVirtualBoxを使っているので、できればその上で開発したいと思います。VirtualBoxではVMware Playerのイメージを直接読み込むことができるので、仮想メディアマネージャでHDDのイメージを追加し、新しい仮想マシンを定義して起動させてみました。

しかし、何度起動させても途中でKernel Panicになってしまいます。/dev/consoleが開けないのが原因のようですが、よくわからないので直接的な起動はあきらめました。

VirtualBoxにはubuntuをインストールしていたので、これに先ほどのイメージをマウントし、ソフトウェアのビルドに必要なファイル一式をコピーして使うことにしました。RM-boardのベースになっているarmadilloに関係するファイルや、サンプルプログラムは/home/user配下にあるのでそのままコピーします。

これだけではarmのコンパイラやライブラリなどが不足するため、findなどでファイルを探しながら、ビルドに必要なソフトを見つけ出しました。必要なものは、/usr/lib/gcc/arm-linux/と/usr/arm-linux/のフォルダ一式と、/usr/bin/以下のarm-で始まるファイルおよび、genext2fsのようです。

これらをubuntuの同じディレクトリにコピーして、サンプルプログラムをビルドすると、test_appというファイルが出来上がりました。

(開発環境上で)
$ cd prog/sample
$ make
arm-linux-gcc -c -o main.o main.c
arm-linux-gcc -c -o sbus.o sbus.c
arm-linux-gcc -c -o rmeye.o rmeye.c
arm-linux-gcc -o test_app main.o sbus.o rmeye.o
$

サーボをつないでいない状態で、scpを使ってコピーし実行させてみると、とりあえず画面に何かしらのメッセージが出るので動いているようです。

(開発環境上で)
$ scp test_app guest@192.168.254.xx:~

(RM-boardにguestでログインした後、suでrootになった後)
$ /home/guest/test_app
SBUS INIT :OK
TEST LOOP [0]
AN0 = 403
AN1 = 489
AN2 = 490
AN3 = 497
AN4 = 464
AN5 = 473
AN6 = 481
AN7 = 469
(Ctrl-Cで停止)

サーボをS23に接続した状態で起動すると、サーボが動き出すことも確認できました。

プロジェクト課題(4)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題4

  • 一組の4択問題(問題文、選択肢)を表す複合的データ(オブジェクト)を作成しなさい。
    クラス定義が必要な言語ではクラスを定義した上でオブジェクトを作成しなさい。
  • 課題3のプログラムのデータの扱いを、上記のオブジェクトを利用する形に書き換えなさい。

プロジェクト課題(3)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題3

  • 問題文と選択肢(4つ)を、メモ帳などを使ってファイルに格納しなさい。
    このとき、1行目が問題文、2〜5行目が選択肢となるようにしなさい。
  • ファイルから問題文と選択肢を読み込んで、4択問題を出題するように課題2のプログラムを改造しなさい。

プロジェクト課題(2)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題2

  • 選択肢を適当にシャッフルして表示するように改良しなさい。

プロジェクト課題(1)

後期に開発するソフトウェアは「4択問題集」です。

ソフトウェアの概要

  • 問題とその選択肢(4つ)が表示され、利用者は選択肢の番号を入力していく。
  • 全ての出題が終わると、点数(正解数÷出題数)や正答・誤答の詳細が表示される。
  • さまざまな学習に役立つように工夫する。

課題1

  • 適当な問題文と選択肢4つを考えなさい。?
  • 問題と選択肢を表示し、(1〜4の)入力を即し、それが正解ならば「正解」、不正解ならば「不正解」と表示するプログラムを作りなさい。

実行例(表示の仕方は各自で工夫すること)

文字列中で同じ文字が繰り返される場合、繰り返し部分をその反復回数と文字の組に置き換えて文字列を短くする方法はどれか。
EBCDIC符号
巡回符号
ハフマン符号
ランレングス符号化
解答を入力してください>>> 1 ??
※不正解です。正解は4です。

(情報処理技術者試験より)

伊藤ゼミのプログラミング課題(3)

ゼミの3年生に対する課題をウェブにも残しておきます。

自分の選んだプログラミング言語について、課題1?2を解くプログラムを作りなさい。
次回のゼミで、作成したプログラムについて説明しなさい。
※入力の方法や画面への表示方法は、前回課題の解答例を流用しなさい。

課題1

3個の数値を入力し、3番目の数値の値が、1番目と2番目の数値の和に等しいとき「OK」を、そうでないとき「NG」を表示するプログラムを作りなさい。

課題2

正解した回数が3回に達するまで、課題1の動作を繰り返して実行するプログラムを作りなさい。

なんちゃってVPL Based on Scratch

Scratch Sourceで公開されているソースに手を加え、いくつかの言語ファイルを追加した「なんちゃってVPL」のイメージ、チェンジセット、POファイルを公開します。

なんちゃってVPLソース:Nanchatte-VPL.zip
Scratchソース:Scratch Source Code
Scratch1.4:Scratch Download

動作させるにはScratch 1.4のフォルダにNanchatte-VPL.zipの内容を展開し、ScratchSourceCode1.4.imageをScratchの実行形式(.exe)にドラッグ&ドロップして実行する必要があります。

ScratchSource: Morphの改造

CBlockMorph – CommandBlockMorph – BlockMorph – Morph
 if-thenやforeverなどのブロック

IfElseBlockMorph – CommandBlockMorph – BlockMorph – Morph
 if-then-elseブロック

SetterBlockMorph – CommandBlockMorph – BlockMorph – Morph
 変数のブロック

CommandBlockMorph addLabel
 コマンドや引数のMorphを生成

CommandBlockMorph fixBlockLayout
 生成したMorphの配置?

BlockMorph class initialize
CBlockBracketThickness: CBlockMorphやIfElseBlockMorphのバーの太さ

SetterBlockMorph initChangerForVar: varName
 ’change %v by %n’のブロックを生成?

SetterBlockMorph initSetterForVar: varName
 ’set %v to %n’のブロックを生成?

伊藤ゼミのプログラミング課題(2)

ゼミの3年生に対する課題をウェブにも残しておきます。

自分の選んだプログラミング言語について、課題1?2を解くプログラムを作りなさい。
次回のゼミで、作成したプログラムについて説明しなさい。
※入力の方法や画面への表示方法は、前回課題の解答例を流用しなさい。

課題1

3個の数値を入力したら、その中から一番大きな数値を1つ画面に表示するプログラム
を作りなさい。 入力する3個の数値を変えても正しく動作しなければなりません。

課題2

1?9の数値を自由に何個でも入力していく。0を入力した時点で、それまで入力され
た数値を、入力された順序で画面に表示し、終了するプログラムを作りなさい。

※時間があれば以下の課題にも取り組むこと。

課題3

課題2の表示結果の後で、入力された数値の最大値、最小値、平均値を表示するよう改
良しなさい。

課題4

現時点の日付、時刻を取得し、その内容を以下の例のように表示するプログラムを作り
なさい。
例)2009/10/20 14:40の場合の出力
Nen=2009 Tsuki=10 Hi=20 Ji=14 Fun=40