roboBASIC

ZEBRA4FM + HFS-RU01 対応テンプレートプログラム

ハイテックマルチプレックスジャパンで、ZEBRA4FMとHFS-RU01が発売されましたが、テンプレートの方も、それ用の「ZEBRA4FM+HFS-RU01 対応テンプレートプログラム」というのが公開されていますね。

ダウンロード&解凍すると

  1. ZEBRA4FM+HFS-RU01 Program¥HFS-RU01_NOVA_Radio.bas
  2. ZEBRA4FM+HFS-RU01 Program¥HFS-RU01_NOVA_RX.bas

の2種類が入っていて、それぞれヘッダーには、

  1. templet program (HFS-RU01) Radio
  2. templet program (HFS-RU01) UART

と書かれています。2つの違いは、MAIN部分の

  1. A = RR
    RR = 0
  2. ERX 9600,A,MAIN

で、つまり、

  1. オーディオプラグに挿すタイプで、第一変数のRRの値をAに入れる形
  2. TX/RXのポートで使う場合で、ERXコマンドを使う

ということかな。

けど、以前テストした時、HFS-RU01を直結してもうまく行かなくて、ADM3024ANでレベル変換したらうまくいったようなぁ〜???

あと、プロポ操作による、モーションの割り付けですが、以下のようになってました。

右スティックのみ

  • 上 forward_walk...(1)
  • 下 backward_walk...(2)
  • 左 left_shift...(3)
  • 右 right_shift...(4)
  • 左上 left_turn...(5)
  • 右上 right_turn...(7)
  • 左下 backward_standup...(8)
  • 右下 forward_standup...(6)

左スティックのみ

  • 上 bow_pose...(16)
  • 下 sit_down_pose16...(32)
  • 左 fast_walk...(48)
  • 右 wing_move...(64)
  • 左上 hans_up...(80)
  • 右上 handstanding...(112)
  • 左下 foot_up...(9)
  • 右下 right_shoot...(96)

左上+右スティック

  • 上 forward_tumbling...(17)
  • 下 back_tumbling...(18)
  • 左 left_tumbling...(19)
  • 右 righ_tumbling...(20)
  • 左上 taikyokuken...(21)
  • 右上 bon_odori...(22)
  • 右下 Udetatefuse...(23)

左下+右スティック

  • 上 forward_punch...(33)
  • 左 left_attack...(35)
  • 右 right_attack...(36)
  • 左上 left_forward...(37)
  • 右上 right_forward...(39)

となってました。

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

あれこれ考えてみる(原点を見直してみる...6:ゼロ点設定の回転方向にパッチを当てるソフト)

さて、前回のつづきです。

【ゼロ点設定にパッチを当ててみる】
今のところ、ロボザックを拡張している場合、roboMakerを使ってサーボモーターの設定を行っても、コントローラー形式「MR-C3024シリアル」のゼロ点設定の回転方向の問題点は回避できません。

Parallels_desktopscreensnapz036

そこで、なんとかできないかとパッチソフトを作ってみました。

ダウンロード:rbZeroDIRChanger v0.1.2
※コメントまたはメールで、起動報告して頂けると嬉しいです。
うまくいった:1
うまくいかなかった:0

対応:

  • ロボザック83号に付いてくるRZ1プログラムCD-ROM5のroboBASIC v2.72
  • ROBOBASIC.COMの、roboBASIC Japanese Version v2.72
  • v2.72英語版、韓国語版も大丈夫かも(v0.1.1)
  • roboBASICのフォルダ名が"roboBASIC v2.72"の場合に自動読込み対応(v0.1.2)
  • ドラッグ&ドロプでroboBASICを選択(v0.1.2)

免責:私はロボザックを拡張してません。挙動を確かめた訳ではありません。パッチの失敗もありえます。ご使用は各自の責任において行って下さい。

 
使い方

onerbZeroDIRChanger.exeを起動
Parallels_desktopscreensnapz038
two変更するDIR設定を行います。チェックを入れたモーターがDIR=1です。ロボザックのヨー軸の拡張の場合、「ROBOZAK EXT」をクリックすると、その設定になります。
Parallels_desktopscreensnapz039
threeスタートパッチのボタンをクリックすると開始します。1分程度時間がかかると思います。
Parallels_desktopscreensnapz040
four成功のメッセージが出れば完成です。
この場合「D9/F/18」に書き換えたという意味なんですが、この値はroboBASICと同じフォルダの中にrbzeropatchというファイル名で記録されているんですが、これをメモっておいた方が安全かと思います。
Parallels_desktopscreensnapz041

 

ということで、今回はここまでsign01

つづく。。。

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

IF文の中のIF文

roboBASIC v2.5の頃は、下記のような、IF文の中にIF文を書くことができなかったんですが、いつの間にやら、v2.72では、それが可能になったんですねsweat01

one入れ子あり

IF A=0 THEN
 IF B=1 THEN
         MUSIC "C"
   
ENDIF
ENDIF

使えないもんだと思い込んでいるので、全然気が付きませんでしたが、ヒロビさんのブログ記事を見て知りましたsweat01

RZ1BasicもroboBASICと同じ仕様にしているので、同じように、IF文の中にIF文を書けるようにはしてませんsweat01最初からIF文の入れ子ができるようになっていれば良かったのに、今からじゃ、入れ子ありで動くように直すのすっげ〜〜大変だぁbearingdownRZ1Basic v0.5.0で対応しましたpaper

と言ってるだけじゃ、あれなので、簡単ですが、IF文の入れ子ありを入れ子なしに書き換える場合の例を書いておきます。

oneの入れ子なし

IF A=0 AND B=1 THEN
   
MUSIC "C"
ENDIF

two入れ子あり

IF A=0 THEN
    IF B=1 THEN
        MUSIC "C"
    ELSEIF C=2 THEN
        MUSIC "D" 
    ENDIF
    MUSIC "E"
ENDIF

twoの入れ子なしの1

IF A=0 AND B=1 THEN
    MUSIC "C"
ELSEIF A=0 AND C=2 THEN
    MUSIC "D"
ENDIF
IF A=0 THEN
    MUSIC "E"
ENDIF

twoの入れ子なしの2

HOGE:
    IF
B=1 THEN
       
MUSIC "C"
    ELSEIF C=2 THEN
        MUSIC "D" 
    ENDIF
    RETURN

IF
A=0 THEN
    GOSUB HOGE
    MUSIC "E"
ENDIF

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

プログラムの作成、転送、削除について

デアゴのROBOZAKのページのお助け掲示板の「コントローラーの情報について(全般)」のスレッドで、「プログラムの削除」に関しての話があったので、改めて、「プログラムの作成、転送、削除」について調べてみました。

roboBASICには、プログラムの作成、転送、削除に関して、以下の図のようなボタンがあります。

Parallels_desktopscreensnapz011xx

それぞれのボタンには次のような機能になります。

  1. プログラムの作成:ROBOBASIC言語で書かれたソースコードを、コンパイルしてオブジェクトコードを作ります。
  2. プログラムの転送:オブジェクトコードをMR-C3024の外付けメモリーに転送します。注意点は、この機能は転送しか行わないということです。
  3. 作成転送:プログラムのソースコードをコンパイルし、作られたオブジェクトコードをMR-C3024へ転送します。つまり、1と2を合わせて行います。
  4. プログラムの削除:MR-C3024に転送されているプログラムを削除します。実際には「END」とだけ書かれた「無題」というプログラム名のコードを作成転送しています。従って、メモリーの中をゼロや255で埋めるというのではありません。

oneプログラムの作成とファイルとして保存されるオブジェクトコードとメモリー(パソコン)内のオブジェクトコード
この操作により、ソースコードがコンパイルされて、オブジェクトコードが(メモリー内に)作られ、さらに、作られたオブジェクトコードは、Objという拡張子を持ったファイルとして保存されます。注意点は、以前「オブジェクト"ファイル"が壊れる現象」で書きましたが、オブジェクトコードが32Kバイトを超えると、オブジェクトファイルが壊れます。ただ、メモリー内に作られたオブジェクトコードは壊れてないことと、プログラムの転送で転送されるオブジェクトコードは、ファイルからのデータでなく、メモリー内のデータが転送される様なので、大きな問題にはならないことが判りました。

twoプログラムの削除とMR-C3024のメモリー内
あるプログラムを転送してあるMR-C3024のメモリー内の値を最初から160バイト分を以下に示しました。
Miscreensnapz001
この状態で、「プログラムの削除」すると、以下のようになります。
Miscreensnapz002

プログラムの削除とは、MR-C3024のメモリー内をゼロまたはFFで埋めるという訳でなく、「END」とだけ書かれた「無題」というプログラム名のソースコードで作られたオブジェクトコードが転送されるのと同じになります。

そのオブジェクトコードは、プログラム名、日時、サイズの16バイトのヘッダーと、ENDのオブジェクトコード3バイトと、プログラムの終了コードの3バイトの計22バイトになります。

実際の転送では、128バイトごと転送されますので、22バイト目以降128バイト目までゼロで埋められた状態になります。

128バイト目以降は、前に転送されていたオブジェクトコードが途中から残っている形になっています。プログラムの削除を行うと、削除後、「メモリークリア完了」とメッセージがでますが、クリアされているのは、最初の部分だけです。
Parallels_desktopscreensnapz018

threeプログラムの削除後のプログラムの転送
「プログラムの転送」は、その名の通り、オブジェクトコードを転送します。注意点は、(パソコンの)メモリー内にあるオブジェクトコードを転送するだけで、新たにオブジェクトコードを作りません

さて、ここで、プログラムを削除した後、プログラムを転送しようと、このボタンをクリックしても、(パソコンの)メモリー内にあるオブジェクトコードは、プログラムの削除際に作られた時のオブジェクトコードなので、つまり、また、もう一回、削除しているのと同じことになります。プログラムの削除後は、新たにオブジェクトコードを作成してから転送する必要がありますので、注意が必要です。

fourプログラムの削除後の作成転送の挙動
プログラムの削除後は、上記で書いたように、新たにオブジェクトコードを生成する必要があります。「作成転送」のボタンは、オブジェクトコードを作成した後、オブジェクトコードの転送を行います。

これを実際にやってみると、以下の様な表示になります。
Parallels_desktopscreensnapz008

プログラムの名前が、「無題」でないのに、オブジェクトコードのサイズが「22バイト」のハズがないのに、まるで、削除の為のコードが転送されるように思えます。グラフの動きから、削除されてから、新たなコードが転送されているようにも見えます。

さて、実際、どんなデータが送られているのか、ラインモニターで見てみたところ、表示だけが「無題」の「22バイト」となっているだけで、削除の為のコードも転送されることなく、普通に(正常に)オブジェクトコードが転送されていることが判りました。

fiveプログラムは上書きでpaper
ロボザック?号にはプログラムを「削除」してから「作成転送」すると書いてあるそうなんですが、普通は、いちいち削除する必要はありませんので、転送の際は、「作成転送」のみ行えば大丈夫です。

------------------------

さて、ということで、プログラムの作成、転送、削除の挙動の解析は以上ですが、この解析をしていて、RZ1Basicの「プログラムの削除」に重大なバグを発見してしまいましたsweat01基本プログラムの削除はする必要がないので、常に上書きで使うようにして下さい。次バージョンアップで修正します。

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

制限の勧め

またまた、ダイエット(食事制限)の話sign02
では、ないですよhappy01paper

先日公開したRZ1Basic/RZ1Actionでサーボモーターの回転範囲のLimit(制限)の機能を付けました。
Rz1basicdebugscreensnapz002

「サーボモーターから煙がsweat01」なんて話もよく聞きますが、これまで使っていたテンプレートプログラムを最新のRZ1Basicでコンパイルしてみるとわかると思いますが、Limitに引っかかるモーションが沢山あります。

実際、個体差があると思いますので、各自で実際にロボットの関節を曲げて何度まで動かすことができるか調べて、設定してやる必要はあると思いますが、兎に角、まず間違いなくサーボモータに負荷をかけてしまっているモーションが何個かあるはずです。

RZ1Basicでは、環境設定であらかじめ設定しておけば、コンパイル時にチェックしてくれるようになりましたが、roboBASICをお使いの方は、そうはいきません。サーボモーターを長持ちさせる為にも、roboBASICをお使いの方は、'$LIMITコマンドを、プログラムごとに書き加えておくことをお勧めします。

'$LIMITコマンドの書き方は、以前、ROBOBASIC講座で'$LIMITについて書いたので、参考にして下さい。

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

roboBASICをWindows VISTAで動かす方法

roboBASIC v2.72をWindows VISTAで動かすことができましたpaper

下の図は、RZ-1 PRG CD5の赤外線20関節.basを開いてみたところのスクリーンショットです。なんかコマンド等に色が付きませんでしたが、兎に角、動きました。

Parallels_desktopscreensnapz003x

あまりVISTAでroboBASICを動かす方法に関して紹介している人がいないように思うので、とりあえず、手順を書いておきます。

oneノートパッド?(でしたっけ?)などのエディタに以下を書いて、拡張子をbatとして、適当な名前を付けて保存

regsvr32 /u c:\windows\system32\mscomm32.ocx
regsvr32 /u c:\windows\system32\COMCT332.ocx
regsvr32 /u c:\windows\system32\MSCOMCTL.ocx
regsvr32 /u c:\windows\system32\MSCOMCTL.ocx
regsvr32 c:\windows\system32\mscomm32.ocx
regsvr32 c:\windows\system32\COMCT332.ocx
regsvr32 c:\windows\system32\MSCOMCTL.ocx
regsvr32 c:\windows\system32\MSCOMCTL.ocx
regsvr32 /u c:\windows\system32\COMDLG32.ocx
regsvr32 c:\windows\system32\COMDLG32.ocx
regsvr32 /u c:\windows\system32\MSINET.ocx
regsvr32 c:\windows\system32\MSINET.ocx

two保存したbatファイルをダブルクリック

  • 何回かダイアログが表示されるので、その都度、「OK」をクリック
  • 無事終了すると、DOSプロンプトが閉じる

threeroboBASIC v2.72を起動

以上!

※私はWindowsのことはまったくわからないので、みなさんの環境で本当に動くかどうかわかりませんが、いちおうMac上の仮想マシンでは動きました。
※上記方法は、ROBOSAVVYRoboBasic on Vistaのスレッドにあったものをまとめたものです。
※一応、上記バッチファイルはここを右クリックで保存でダウンロードできるようにしました。

| | コメント (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)

robobasic.comはどこへ?

明日から、iPhoneの発売に関連して、「.Mac」がメンテ中で、
ROBOMICのページにもアクセスできませんわ。。。
18時には終了予定なのにまだダメだぁ

で、本題

roboBASICの最新バージョンがダウンロードできた
http://www.robobasic.com
ですが、ページがなくなってますね。。。
これは、新しいバージョンが出る為のメンテ?
Firefoxscreensnapz001

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

roboBASIC_v272J(20080509) のファームアップデート

先ほど
http://www.robobasic.com
をもう一度見たら、

- Auto firmware update while program downloading.

と書いてあったので、
昨日失敗したファームのアップデートですが、やってみました。

oneroboBASIC_v272を起動します。
two何でも良いから、プログラムを転送します。
threeいつもの転送と違って、確認のバーが伸びないで、ファームが転送されているようです。
Firmup272
fourファームが転送後、いつもの様にプログラムが転送されます。
Progupafterfirm
fiveプログラム転送後、情報を見てみました。ファームのバージョンが2.7になりましたscissors
Parallels_desktopscreensnapz023_2

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

roboBASIC_v272J(20080509) が公開されていますね

新しいroboBASICが公開されていますね。
avalonさんとか、ビロビさんが書いてますので、そちらを参考にして下さい。

けど、いちおう

  • VistaではroboBASIC, roboScript, roboRemocon, roboMakerともに動きませんでした。
  • avalonさんも書かれていましたが、私もFirmwareのアップデートを行うとエラーがでました。エラーが出た後はroboBASICを立ち上げ直さないと以下のエラーがでます。
    Finderscreensnapz013

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

より以前の記事一覧