« 「ロボでサバゲ!」パーツ作り | トップページ | 「高専ロボコン・関東甲信越地区大会」観戦 »

2010年10月23日 (土)

「ロボでサバゲ」6足ロボ、外見は完成

P10309791

オサルがずっと作りたがっていた、6足ロボ。
出来上がりました

しかし、外見はできたものの、また「動かない」。

オサルはこのロボットを操縦するのに、
今までのゲームコントローラーは「反応が遅いので」使いたくないそうで、
かわロボで使用したプロポを使用したいとのこと。
しかし、
プロポを使えるようにするには、新しいプログラムの書き込みが必要?(オサルの言っていることなので、正しいかどうかわかりません)
なのに、
プログラムがわからないので動かせない、ということだそうです。

以下オサルが考えたプログラムです。

ロボベーシック RCプロポからの信号を読んでモーションラベルにジャンプする

'***************************************** 変数宣言

DIM   a  AS  BYTE

DIM   b  AS  BYTE

DIM   c  AS  BYTE

DIM   d  AS  BYTE

'***************************************** 信号入力 変数代入

a  =  RCIN (0)                    'AD入力ポート0番からRCプロポの信号を読む

b  =  RCIN (1)         'AD入力ポート1番からRCプロポの信号を読む

c  =  RCIN (2)         'AD入力ポート2番からRCプロポの信号を読む

d  =  RCIN (3)         'AD入力ポート3番からRCプロポの信号を読む

'****************************************** IF文

'100を中心として考えた場合

MAIN:   

    IF a  <  90  THEN    ' 1チャンネル目を 10方向に倒したなら

GOTO 行ラベル

ELSEIF a  >  110  THEN   ' 1チャンネル目を 190方向に倒したなら

GOTO 行ラベル

ELSEIF b  <  90  THEN     ' 2チャンネル目を 10方向に倒したなら

GOTO 行ラベル

ELSEIF b  >  110  THEN   ' 2チャンネル目を 190方向に倒したなら

GOTO 行ラベル

ELSEIF c  <  90  THEN     ' 3チャンネル目を 10方向に倒したなら

GOTO 行ラベル

ELSEIF c  >  110  THEN   ' 3チャンネル目を 190方向に倒したなら

GOTO 行ラベル

ELSEIF d  <  90  THEN     ' 4チャンネル目を 10方向に倒したなら

GOTO 行ラベル

ELSEIF d  >  110  THEN   '  4チャンネル目を 10方向に倒したなら

GOTO 行ラベル

ELSE 

GOTO MAIN                    どの条件にも当てはまらなければ MAINにジャンプ

ENDIF              IF文を終わる

'******************************************

ここに行ラベルとモーションを書く

ずら~っと

'******************************************

こんなに頑張って書いたのに ロボットはうんともすんとも言いませんでした

オサル

|

« 「ロボでサバゲ!」パーツ作り | トップページ | 「高専ロボコン・関東甲信越地区大会」観戦 »

ロボット・こんなの作りました(小6)」カテゴリの記事

コメント

こんにちは。

うーん。ひとまず受信機から入力した値をPC画面なりLCDなりに表示するプログラムを書いてみてはいかがでしょう。
それで信号が読み取れているかは分かりますし、スティックの傾きと値の対応もわかります。

このプログラムについては、行ラベルとモーションをずら~っと書くところのそれぞれにGOTO MAIN
を書かないとループが終わるのではないか?(書いているかもしれないけど)と思います。

投稿: つーてんかく | 2010年10月24日 (日) 15時58分

こんにちはコイズミです。
ロボベーシックは人に聞かれて少し見ただけなのでロボベーシック特有のお作法は、今一良く知らないのですが、気付いた範囲でチェックポイントを上げます。

(言語はcでもBASICでもコンパイラーごとに「仕様」とか「お作法」と呼ばれる独特の書き方があります。
これを守らないと一見正しいコードでも動きません。)


まずプログラム外のチェックポイント
1)変数で宣言したポート番号と受信機の接続が有っているか?
2)送信機の電源を一番先に入れているか?


次にプログラム中のチェックポイント
'************************* 変数宣言
DIM a AS BYTE
変数名は後で見ても判るように、名前を付けた方が良いです。
この場合だとa では無く rc1とか


'********** 信号入力 変数代入
DELAY 100 前みたプログラムでは、反応が少し遅くなりますが、いれていました。
確かこれを外すと読み取りミスが出てた気がします。
a = RCIN (0)
b = RCIN (1)         
c = RCIN (2)         
d = RCIN (3)


'****************************************** IF文

ここは、一般的に比較する対象が変わったら違うIF文にします。
(1つのIF文の中でaの条件、bの条件、見たいな書き方はしない方が良いです。
又コンパイラーによってはif文内にもう1つif文を入れる「入れ子」が、駄目だったりif文内でELSEIFの使用回数に制限が有る場合もあります。)

又、IFが成立しなくてmainに戻る場合はIF文の外でやります。

例として(非常にべたですが)
MAIN:   

IF a 110 THEN    GOTO 行ラベル
if b 110 THEN    GOTO 行ラベル
if c 110 THEN  GOTO 行ラベル
if d 110 THEN  GOTO 行ラベル
goto MAIN


後、100がセンターと仮定した場合プロポのニュートラルが少しでもずれていると90や100に引っ掛かってしまうのでもう少し値をずらした方がいいかもしれません。

次に確認方法ですが、下記の
'******************************************
ここに行ラベルとモーションを書く
ずら~っと
'******************************************
が間違っていて動かない場合も有るので、まずポートにLEDをつけて確認した方が良さそうです。
プロポを動かすとその動かした方向に合わせてOUT文でLEDが光るようにすればRCの読み取りが出来ていなくて動かないのかモーションのプログラムが悪くて動かないのかはっきりします。

最後に別件ですが上のプログラムが動いたとしてもこのままだとコマンドが8個しか入らない事になります。

もっと多くのコマンドを使いたい場合は変数a,b,c,d同士の組み合わせで計算しないといけません。
例えば
a > 110 AND b < 90 THEN GOTO 行ラベル
上記見たいに「aが110より大きく」且つ「bが90より小さい」見たいに組み合わせが必要になります。

投稿: コイズミ | 2010年10月24日 (日) 16時52分

さっきほど書き込んだMAIN:が正しく表示されなかったので再書き込みします。

MAIN:   

IF a < 90  THEN     行ラベル
 ELSEIF a  >  110  THEN 行ラベル
ENDIF
IF b < 90  THEN    行ラベル
 ELSEIF a  >  110  THEN 行ラベル
ENDIF
IF c < 90  THEN    行ラベル
 ELSEIF a  >  110  THEN 行ラベル
ENDIF
IF d < 90  THEN    行ラベル
 ELSEIF a  >  110  THEN 行ラベル
ENDIF
goto MAIN

ただIF文は動作が遅くなるので上手く工夫して出来るだけ少なくした方が良いですよ。

投稿: コイズミ | 2010年10月24日 (日) 17時04分

つーてんかくさん

>うーん。ひとまず受信機から入力した値をPC画面なりLCDなりに表示するプログラムを書いてみてはいかがでしょう。

はい。それは前からずっとやりたかった事です。
しかし、LCDなんて物も持っていませんし、PCの画面に映すとしても、そのやり方がわかりません。

現在、ロボベーシック2.72を使用していますが、PCで、センサー値を見るやり方があれば、是非教えて下さい。

コイズミさん


>'********** 信号入力 変数代入
>DELAY 100 前みたプログラムでは、反応が少し遅くなりますが、いれていました。
>確かこれを外すと読み取りミスが出てた気がします。
>a = RCIN (0)
>b = RCIN (1)         
>c = RCIN (2)         
>d = RCIN (3)


なるほど
とてもよく分かりました。ありがとうございます。

ちなみに a b c d の組み合わせは、ちゃんと考えています。
あと、シフトキーも作ろうと思ってます。

投稿: オサル | 2010年10月24日 (日) 20時12分

6足ロボットすごいです!!
脚フレームも素敵でどのように作られてるのか知りたいです。

自分はあのカメ状態から全然進んでないです(^^;
オサルくんのを見て頑張らねばと感じました。
では失礼しましたー

投稿: ポキオ | 2010年10月24日 (日) 22時00分

ああ。LCDは別売りなのですね・・・。
コントローラーはROBO-NOVA-ⅠのMR-C3024というものなんですよね?

そうすると、まずPCと通信するためには信号の電圧をこのマイコンの電圧であるTTLレベル(5V)からPC用の電圧に変換する回路が必要です。

もしPCにRS232Cポートがあれば、MAX232などといったICを使った回路が使えます。これはTTLレベルの信号をPCが読み取れるRS232Cレベルに変えてくれるものです。

しかし最近のPCにはRS232Cポートが無いことが多いです。オサル君のPCにも無いかも知れません。
もしそうなら、USB→TTLレベル変換の基盤を使うと良いと思います。これは自作するには割と難易度の高い回路ですから、既製品を買ったほうが良いかもしれません・・・。http://www.aitendo.co.jp/product/2456

ともかく、そのような回路が用意できたら、その回路のRXDという端子をMR-C3024のTXD端子と繋ぎます。実物がないので分かりませんが、LCDを繋ぐための端子の隣にあるようです。(TXと小さな文字で書いてあるらしい)

そうしたら、
DIM RC0 AS BYTE

MAIN:
RC0 = RCIN (0)
ETX 9600,RC0

FOR i=1 TO 100 '時間稼ぎです
NEXT

GOTO MAIN
のようなプログラムでPCにプロポの値が送れます。PC側ではターミナルソフトをつかってこの値を読み取ります。seristerというものがおすすめ。

長々と書いてしまったけどちょっと難しいかもしれませんね・・・。ざっくりとした説明なのでこれだけでは分からないかも知れません。(小6のころの私では絶対理解できませんが・・・)
オサル君がよく電子工作について相談している人がたくさんいると思います。ここに書いたことをヒントにそういう人に質問してみると優しく教えてもらえると思いますよ。(最後は丸投げでごめんなさい笑)でも僕に質問があればまたしてください。

あ、あとさっきは気づきませんでしたが、オサル君が書いたプログラムはプロポのデータを読み取るところがループの外に出ていることも問題な気がしますよ。

では。

投稿: つーてんかく | 2010年10月24日 (日) 23時00分

オサルです。

RS232Cのポートって 下に5本 上に4本足が生えてるコネクターですよね。
PC本体には無いですが、USBに変換する物ならもっています。
今はそれを使ってロボにプログラムを書き込んでいます。

>実物がないので分かりませんが、LCDを繋ぐための端子の隣にあるようです。(TXと小さな文字で書いてあるらしい)

そうですね 確かに(LCD)(RX)(TX)が並んでいます。

>もしそうなら、USB→TTLレベル変換の基盤を使うと良いと思います。これは自作するには割と難易度の高い回路ですから、既製品を買ったほうが良いかもしれません・・・。

そうですね。これならボクのおこずかいでも買えます。
でも、できるだけがんばってみて、もうだめだと思ったときだけ考えてみようと思います。

>オサル君が書いたプログラムはプロポのデータを読み取るところがループの外に出ていることも問題な気がしますよ。

なるほど。信号入力はMAINのループに入れないといけないのですね。分かりました。

いろいろと分かりやすい説明をありがとうございました。

投稿: オサル | 2010年10月25日 (月) 17時45分

こんばんは。
説明が伝わったようで良かったです。さすがオサル君。

>下に5本 上に4本足が生えてるコネクター

それです。確かに変換ケーブル持っていないとプログラム書き込めないでしょうから、有るのでしょうね・・・。
そうするとD-SUB9ピンのメスコネクタとMAX232かそれに準ずるIC、コンデンサを揃えればいいと思います。ICのデータシートを探して読んでください。

>できるだけがんばってみて、もうだめだと思ったときだけ考えてみようと思います。

良い心がけです。でも丁寧に作らないとプロポの受信がうまくいかないときその回路まで疑わなくてはいけなくなりますよ。気をつけてください。

まぁ、実現するまでにちょっと手間が掛かりますが、今後の開発にあると便利かなぁと思ってアドバイスさせてもらいました。
コイズミさんの仰るようにLEDの点灯で確かめるというのも手軽でいい手段かもしれませんよ。
ともかくオサル君の良いと思うようにやってください(笑)
では失礼しました。

投稿: つーてんかく | 2010年10月25日 (月) 18時42分

あ、今プログラムを書き込むのに使っているケーブルの線がどういう配置になっているか(どれがGND、TXD、RXDなのか)が分かるのなら、あえてD-SUB9ピンのコネクタを使う必要はないかもしれません。
では。

投稿: つーてんかく | 2010年10月25日 (月) 18時50分

ポキオさん

オサルは小学生なので、
お金はないけど時間はありますから(笑)
この6足型は、一度どーしても作ってみたかったみたいです(笑)

カメロボ、ロボスポで動いてる所を見ましたけど
カメじゃなくてウサギ並みに速いですね!
ポキオさんのロボットも楽しみです。

つーてんかくさん

いろいろとありがとうございます。
お陰さまで、
オサルの6足、なんとか動き出しました。
皆様のお陰さまですm(_ _)m

投稿: オサルのハハ | 2010年10月26日 (火) 21時40分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 「ロボでサバゲ」6足ロボ、外見は完成:

« 「ロボでサバゲ!」パーツ作り | トップページ | 「高専ロボコン・関東甲信越地区大会」観戦 »