ROBOBASIC講座(MOVEPOS、POS)

【MOVEPOS/POS】
 モーターに特定の姿勢を指定して動作させる。
 構文:MOVEPOS  [グループ指定], [行ラベル]
     [行ラベル]: POS [グループ指定], [モーターn角度],……
  例:
     MOVEPOS  G6A,POS01
     MOVEPOS  G8B,POS02
     MOVEPOS  G12,POS03
     MOVEPOS  G24,POS04

     POS01:  POS G6A,10,32,15,120,78,93
     POS02:  POS G8B,67,47,32,153,23,33,26,54
     POS03:  POS G12,34,37,122,162,84,28,58,100,120,....
     POS04:  POS G24,34,37,122,162,84,28,....

《解説》

「ROBOBASIC ロボベーシック コマンド説明書 v2.10」を見ると、MOVEPOSコマンドは、
Screensnapz021
となっています。
また、roboBASICのヘルプタグも
Parallels_desktopscreensnapz122
と表示されますが、この通り書いてコンパイルしても、以下の様にエラーが出てしまいます。
Parallels_desktopscreensnapz121

実際には、MOVEPOSには、[グループ指定]が必要ですので、以下のことに注意してプログラミングをして下さい。

roboBASICでは、MOVEPOSの[グループ指定]がないとエラーが出ます。RZ1Basicでは、[グループ指定]がなくてもエラーが出ません
MOVEPOSの[グループ指定]と、POSの[グループ指定]が同じでないとroboBASICではエラーが出ます。RZ1Basicでは異なっていてもエラーが出ませんので、ご注意下さい

参考資料

| | コメント (0) | トラックバック (0)

RZ1Basic v0.4.4 公開

Rz1bicon04

RZ1Basic v0.4.4を公開します。

RZ1Basicはここからダウンロードできます。

【更新内容】

MOVEPOS/POSコマンドには、すでに対応済みだったんですが、その使い方が、実際には、コマンドリファレンスやroboBASICで表示されるヘルプタグに書いてある使い方とは異なっていたため、その異なった使い方でもコンパイルが通るようにしました。

MOVEPOS/POSコマンドの使い方に関しては、別に書きます。。。

ちなみにリファレンスに書かれているように使うと、エラーがでます。
Parallels_desktopscreensnapz121

| | コメント (0) | トラックバック (0)

オブジェクト"ファイル"が壊れる現象

先日、yukiさんから「roboBASICのオブジェクトファイルに不可解な現象が発生する」とメールを頂きまして、私はほとんど何もやってませんが、いろいろテストしてみた結果、オブジェクトファイルに関して判ったことを、大げさに報告しますhappy01sweat01

不可解な現象

  • 暇にまかせてネットから拾ったモーションデータや、ディアゴHPでの皆さんの投稿データを元に、マップ切替タイプのリモコンテンプレートを作成されてるそうです。
  • プログラムを追加するたびに、チェックも兼ねて、roboBASICで、コンパイルしていたそうです。
  • しかし、ある時、エラーも出ず、一見、正常にコンパイルされているんですが、オブジェクトファイルが変になってしまったそうです。
  • ところが、RZ1Basicを使うと、正常にコンパイルされ、オブジェクトファイルは問題なく生成されたそうです。

検証
yukiさんから添付して頂いた問題ありのコードと、問題なしのコードを、私もRZ1BasicroboBASICを使ってコンパイルしてみました。

  • roboBASICで問題なしのコードをコンパイル:
    RZ1Basic=Rz1basicscreensnapz046
    roboBASIC=Parallels_desktopscreensnapz118
  • roboBASICで問題ありのコードをコンパイル:
    RZ1Basic=Rz1basicscreensnapz045
    roboBASIC=Parallels_desktopscreensnapz117

これを見る限り、RZ1BasicroboBASICも、問題ありも、問題なしも、コンパイル結果は同じバイト数ですし、確かにエラーも出ず、roboBASICに問題があるようには感じませんでした。

なんで、最初は「な〜んだ、問題ないじゃん」と思いましたが、roboBASICによって作られたオブジェクトファイルをよくよく見てビックリsign01、なんと、オブジェクトファイルが変になっているじゃあ〜りませんかsweat01

ROBOBASICのプログラムは、MR-C3024の外付けEEPROMに転送されます。そのメモリーの容量は64KBです。なんで、私は64KBまでプログラムが扱えると思っていました。

2バイトの変数の扱いには、

  • 符号なし2バイト整数:0から65535 (65536/1024=64KB)
  • 符号あり2バイト整数:-32768から32767 (32768/1024=32KB)

があります。

オブジェクトファイルが問題なく作られているのは、32767以下で、それ以上の場合、オブジェクトファイルに問題が生じていることがわかりましたので、この時点で、roboBASICを使った場合、32KB以上のプログラムを作ることができないのかと思いました。

なかなか32KBを越えるプログラムも書けないですし、オブジェクトファイルまでチェックしていないので、32KB以上でオブジェクトファイルに問題が生じることなんて、簡単には気が付きませんよね。

転送と起動

apple32KBを越えるプログラムは転送できる?起動できる?
RZ1Basicでは、32KBを越えてもオブジェクトファイルには問題がなかったため、最終的にParallels_desktopscreensnapz116になるプログラムを、RZ1Basicで転送し、起動を調べてみた結果、32KBを越えるプログラムでも動かすことができることが確認されました。

bananaroboBASICは32KB以上のプログラムを扱える?
roboBASICでは、32KBを越えるとオブジェクトファイルが壊れてしまいますが、RZ1Basicと同じ様に、最終的に合計43905バイトになるプログラムを転送してみました。

roboBASICで転送したデータを、外付けEEPROMの43900から16バイト分を読込んでみると、"2F 2B C4 7E AB"となっており、ちゃんと43905バイト転送されているようです(RZ1Basicのコマンドテスト機能を使用)。
Parallels_desktopscreensnapz119

下の図から、その転送されたコードが、正しいことが確認できます(RZ1Basicのオブジェクトコード表示機能)。
Rz1basicscreensnapz047

実際に、正常にロボットを起動させることも確認できました。

まとめ

以上の結果から、

  • roboBASICでは、オブジェクトコードが32KB以上になるプログラムにおいて、オブジェクトファイルが破損する。
  • オブジェクトファイルが破損していても、転送されるオブジェクトコードには問題はなく、ロボットを正常に起動させることができる。
  • オブジェクトコードには問題はないことから、オブジェクトコードをファイルとして保存する際に破損する。

ことがわかりました。

資料

 

| | コメント (0) | トラックバック (0)

第1回バトルカップ 学内も混雑?

先日、アールティ主催 第1回バトルカップ ベーシッククラス in 関東学院大学のことを紹介しましたが、京急につり革広告が出てまして、23日は、文学部、経済学部、工学部のオープンキャンパスがあるようです。

ま、花火の混雑のような問題はないと思いますが、夏休み中の静かな大学ではなく、見学にこられている人で、いっぱいでしょうねhappy01

関東学院のページを開いたついでに、あれこれ見たんですが、工学部のロボットコースでは、KHR-2HVが一人1台貸し出されて、ロボットのこと勉強するようですね。各大学、学生さんへのサービス、大変ですよね〜

私は、一人につき一台のMacBookとiPod nanoを無償貸与がいいなぁ〜sweat01

| | コメント (0) | トラックバック (0)

RZ1Basic v0.4.3 公開

Rz1bicon04

RZ1Basic v0.4.3を公開します。

先日RZ1PeekとRZ1Terminalで付けた機能と、コンパイル時のエラーチェック機能の更新を行いました。※コンパイルエンジンに手を加えていますので、ご注意下さい。

RZ1Basicはここからダウンロードできます。

【更新内容】

  • 未定義の変数、定数などの記述があった場合、エラーを返すようにした。
    Rz1basicscreensnapz043
  • SRAMのメモリアドレスを指定できるようにした。取得データのポップアップメニューで、「SRAM ADDRESS」を選択後、アドレスの所にデータを取得したいアドレスを入力して下さい。
    Parallels_desktopscreensnapz111
  • ターミナル機能において、7200, 460800, 921600bpsの通信速度の設定値を設けた。
    Parallels_desktopscreensnapz077
  • ターミナル機能において、RBT-001のユーティリティで、リクエストデータをリストアップしておけるようにした。
    Parallels_desktopscreensnapz078

| | コメント (0) | トラックバック (0)

第1回バトルカップ 付近は混雑の恐れ?

アールティ主催 第1回バトルカップ ベーシッククラス in 関東学院大学
2008年 8月 23日

関東学院大学 金沢八景キャンパス
〒236-8501 横浜市金沢区六浦東1-50-1
工学部 6号館1F テクノ・スクウェア

がありますね。まぁ、近いし、仕事がなければ、観戦に行きたいなと思ってます。

ところで、23日は、海の公園の花火大会です。以前、海の公園の近くに住んでいたのですが、当日は、ちょ〜混雑します。

シーサイドラインの金沢八景の乗り口の所に、16時から入場制限すると掲示がありましたよ。毎年花火の日は夕方からシーサイドラインはギュウギュウ詰めです。シーサイドラインを使って帰られる方は、ご注意ください。

というか、ロボットの大会の後は、てくてくのんびり海の公園まで歩いて、花火大会を見て、大会を2つ堪能してから、帰るのもいいですよねhappy01

Finderscreensnapz002

上手くHTMLリンク作れなくて面倒で、スクリーンショットにしちゃいましたsweat01
一応

http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q=%E9%96%A2%E6%9D%B1%E5%AD%A6%E9%99%A2%E5%A4%A7%E5%AD%A6+%E5%85%AB%E6%99%AF%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%91%E3%82%B9&sll=36.5626,136.362305&sspn=49.40936,49.746094&ie=UTF8&ll=35.332527,139.635887&spn=0.025068,0.038023&z=15

です

| | コメント (2) | トラックバック (0)

勝手にグッズ:作り方編(4)

COLLECTION #4: SILVER RING: RZ1ベーシックの作り方

《準備するもの》

この作品は、アートクレーシルバーで作っています。

など、自分で、シルバーアクセサリーをデザインして作る為のキットがハンズなど売っています。今回の作品なら、DXでない方で作れます。

アートクレーシルバーは、焼くと純銀になる粘土です。

  • 粘土なので、幼稚園生感覚?で、造形できます。
  • 乾燥させて、ヤスリで削ったりして、成形します。
  • コンロに網を置いて、サンマを焼く様に、作品を焼くだけです!
    焼くのも特別に炉を買う必要はありません。
  • 研磨したり、いぶしたりして、完成です。

キットには、これらに必要な小道具と、10g前後の銀粘土が付いています。今回の作品に使った粘土は、約5gです。

《作り方》

ごめんなさい、今回は、作る過程の写真を撮るのを忘れましたsweat01
また、機会があれば作り方を書きますsweat01

| | コメント (0) | トラックバック (0)

あれこれ考えてみる(障子に目あり...)

前回の「陰であんなことやこんなことしちゃう...」では、ロボットが動いてる最中に値を変更しちゃうことをやってみましたが、今回はその逆です。RZ1PeekでMR-C3024の様々な値を取得することをやっているのでお馴染みなことですね。

RZ1Peek v0.1.2で、SRAMのアドレスを指定して、データを取得できるようになりました。そこで、ロボットが動いている時に、モータの角度を覗き見してみました。

oneRZ1Peekで、取得データを「SRAM ADDRESS」を選択、アドレスを0x0327にしました。このアドレスは、7番モータの現在の角度を示しています。

赤外線リモコンボタンのボタンを、2、4、5、6、と押して、4種類の動作をさせてみました。
Rz1peekscreensnapz001

twoアドレスを0x03C7にして、7番モータのスピードを同じ様にみてみました。
Rz1peekscreensnapz003

赤外線リモコンボタンの2と4は、同じ様に万歳の動きをするのですが、スピードの差があります。そのことがoneの図の1つ目と2つ目の山の傾斜や、twoの図のスピードの差の違い(最初の肩と、2つ目の肩)として、ちゃんと計測できていますねhappy01

さて、モーター1個だけなら、これも可能なんですが、最低16個のモータがありますからねぇ。すべてのモータの状態を覗き見したいんですが、通信スピードが遅いから、全部はたぶん無理だろうなぁ〜

| | コメント (0) | トラックバック (0)

勝手にグッズ(5)

COLLECTION #5: ROBOMIC携帯

Keitais

ROBOMICのRZ1シリーズのアイコンがデザインされた、ROBOMIC携帯sign01

  • RZ1Actionがデザインされたブラックアクションslate
  • RZ1Basicがデザインされたホワイトベーシックpencil
  • RZ1Peekがデザインされたグリンピークbud
  • RZ1Terminalがデザインされたシルバーターミナルhotel

4つそろって、新発売note

職人が丁寧に手作りで1週間かけて仕上げたMicono Utilities限定作品good

気になるお値段は〜〜なんとsign03
moneybag2000000円

限定数100個ですので、お早めに、お電話telephone、パソコンpcからsign01sign03本気でお申し込みしないで下さいhappy01paper
 

| | コメント (0) | トラックバック (0)

あれこれ考えてみる(陰であんなことやこんなことしちゃう...)

赤外線リモコンを用いたプログラムは、メインループの中で、REMOCONコマンドで、押されたボタンの値を受け取って、それに応じた処理を行う形でプログラミングになっていると思いますが、ロボットが動いている間に、リモコンのボタンを押しても反応する訳ではありませんよね。ま、当たり前ですがsweat01

この前の「もう待てない」で書いたのと同じようなことなんですが、ロボットが動いている陰で、変数の値を変更してみようかと思います。

oneそんな使い方する為の説明として、いいサンプルコードとは言えないんですが、以下の様なコードを転送します。

DIM A AS BYTE
DIM B AS BYTE

A
=0
B
=0
MUSIC "C"

MAIN:
IF B>0 THEN
A
=B
B
=0
ELSE
A
=REMOCON(1)
ENDIF

IF A=1 THEN
MUSIC "C"
ELSEIF A=2 THEN
MUSIC "D"
ELSEIF A=3 THEN
MUSIC "E"
ELSEIF A=4 THEN
MUSIC "F"
ELSEIF A=5 THEN
MUSIC "G"
ELSEIF A=6 THEN
MUSIC "A"
ELSEIF A=7 THEN
MUSIC "B"
ENDIF

Delay 2000
A
=0

GOTO MAIN

two陰で変数の値を変更します。

Rz1basicscreensnapz031_2そのひとつの方法として、RZ1Basicのツールウインドウにある、赤外線リモコンのボタンをクリックします。表示された赤外線リモコンウインドウの下の方を見ると「Simulation REMOCON(n)」となっているかと思いますが、この辺りを右クリックし、COM #2 (0x0141)を選択します。
Rz1basicscreensnapz032
Rz1basicscreensnapz033

  • 今回やりたいのは、シミュレーションでなく、通信なので、「COM」を選択します。
  • 上のサンプルコードの場合、陰で「B」の値をコントロールします。「B」の値は2番目に定義された変数なので、「#2」を選択します。0x0141は、2番目の変数の値が格納される番地のことです。

three赤外線リモコンのボタンを押した時と、RZ1Basicの赤外線リモコンウインドウのボタンをクリックした時と、違いを体感してみてねhappy01

要するに、「処理中に、裏で次の処理を指定しておく為の方法の紹介」って感じかなflair

今回はあまりいいサンプルコードとは言えませんが、「あれこれ考えてみる」のコーナーでは、具体的にどうこうsign01ということではなく、紹介したことがワークショップ的に何かに役立っていけばいいなぁと思ってます。

| | コメント (0) | トラックバック (0)

«RZ1Peek v0.1.2 公開