二足歩行ロボットコミュニティサイト

【サイトの使い方】  【サイトマップ】  【お問い合わせ】 
ロボット動画  |   ロボット写真  |   BBS  |   ダウンロード  |   イベント予定  |   スタッフ日記  |   リンク  |  
ログイン パスワード    新規登録   パスワード紛失  

[掲示板に戻る全部  1-  最新50
1 自律用プログラムについて
masakicho
半人前

マサ吉 2010-1-26 23:50  [返信] [編集]

お世話になります、大阪のマサ吉と申します。

来月 姫路で行われる「新春ロボハッスル練習会」に向けて自律競技用のプログラムを 作っているのですが、
どうにも分らない事が出てきたので こちらで質問させて頂きます。

機体はRobovie-Xで RobovieMaker2は 最新の物を 使用しています。
制御には PSDセンサーを使っているのですが、
センサー値の精度を 上げる為に、ロボコンマガジンで紹介されてた
複数回読み込んで平均化するプログラムを 使っていました。

ただ、PSDセンサーの値を モニターしていると、結構バラつきが大きいので、
今回新たに サンプリングした値の最大値と最小値を 除いて平均化する様にしようと思ったのですが、
やり方が良く分かりませんでした。

具体的に言うと、10回サンプリングして 最大値と最小値を 除いた8回分の平均値を 求める
と言うのを やろうとしたのですが、うまく出来ませんでした。

どうか、アドバイスを お願いします。m(_ _)m

2 Re: 自律用プログラムについて
PinkRabbit
長老

桃色兎 2010-1-27 5:06  [返信] [編集]

マサ吉さん

まいどどうも。(^o^)/

さて早速ですが、最大値と最小値の求め方について
ヒントになりそうなサイトを見付けました。

ここです。

最大と最小を除いた平均値を出す方法を一つ挙げてみます。

まずセンサ値を保存する変数、最大値を保存する変数、
最小値を保存する変数、平均値を保存する変数を用意します。
仮に、それぞれSensor1〜10、Maximum、Minimum、Averageとします。

まず一回目のセンサ値を取得したらSensor1に保存します。
次にMaximumと比較してSensor1と同じかSensor1の方が大きければ値をMaximumに保存。
同様にMinimumと比較してSensor1と同じかSensor1の方が小さければ値をMaximumに保存。
これをSensor10まで繰り返します。
これでSensor1〜Sensor10とMaximum、Minimumが求まります。

次にSensor1とMaximumを比較します。
Sensor1の方が大きい場合は次のSensor2との比較に移りますが
Sensor1の方が小さい場合は更にMinimumと比較し、
Sensor1の方が大きい場合はAverageに加算します。
これをSensor10まで繰り返すとAverageには
Sensor1〜Sensor10の内、最大値と最小値を除いた合計が保存されます。
あとは8で割れば平均値が判りますね。

。。。と、ここまで書いてて上記のロジックだとバグが。(^_^;)
最大値や最小値が複数あった場合、これだと正しい平均値が出ません。
対策としてはSensor1〜Sensor10の内、最大値と同じ値の個数を保存する変数と
同じく最小値と同じ値の個数を保存する変数を
それぞれMaxTotal、MinTotalとでもしておいて、
10 - ( MaxTotal + MinTotal )
で求めて、その値でAverageを割ることになりますね。
MaxTotal、MinTotalはMaximumやMinimumに値を保存した際に
+1すればOKです。
あ、これだとMaxTotalとMinTotalは同じ変数で代用できそうですね。(^_^;)

書きながらロジックを追加修正したのと
文章だけなので解かり難いかもしれないですが
ひとまずこんな感じで。(^^ゞ
3 Re: 自律用プログラムについて
masakicho
半人前

マサ吉 2010-1-27 23:12  [返信] [編集]

>モモウサさん

まいどです♪
回答 ありがとうございます。
ロジック 参考になります。

マサ吉も ほぼコレに近い所まで考えれたのですが・・・
問題は、RobovieMaker2では センサー値を 入れた変数同士を
直接 比較する事が出来ないっぽい?所なんですよ。

各ブロックのプロパティを 見ていくと、
演算ブロックで変数同士を 加減乗除する事は出来るみたいなのですが、
直接 大小を 比較する事は出来ないみたいなのです。
(マサ吉が やり方を 分かってない可能性もあります。)

なので、各変数同士を 計算→結果から分岐→変数に代入もしくは加算
と言うのを 繰り返して 何とか出来るのかとも思うのですが、
いまいち理解出来なくて・・・
もっと 簡単な方法があったら良いのになぁと思って 質問してみたのですが・・・
どうなんでしょう?


リンク先のページは C言語の時に参考になりそうですね。
資料に追加しておこう・・・
ありがとうございます♪


4 Re: 自律用プログラムについて
PinkRabbit
長老

桃色兎 2010-1-28 0:41  [返信] [編集]

>マサ吉さん

 えぇ!?
 マニュアルにちゃんと書いて。。。ない!? ( ̄Д ̄)ガーン
 ほ、ホンマや。(・_・;)<変数同士の比較できない
 (いかに自分でモーション作ってないかが露呈してしまった。(笑))
 変数同士の比較なんて基本中の基本だと思ってたので
 てっきりRobovieMakerでも出来ると思い込んでました。

 うぅ〜ん。。。何か方法があると思うんですけど
 ちょっとスグには思い付きません。(x_x;)
 ここはRobovieMakerMasterな方に
 お知恵を拝借するしかなさそうです。m(_ _)m
5 Re: 自律用プログラムについて
PinkRabbit
長老

桃色兎 2010-1-28 1:07  [返信] [編集]

Google先生は偉大だった。

「RobovieMaker2」と「変数同士」で検索すると
Robovie-Makerマスターの
「第2回 RobovieMaker2でのモーション作成(後編)」
のページがヒットしました。
上記のページ後半に「変数同士の比較」や「平均値を求めるプログラム」
などが掲載されています。

ちゃんと答えは用意されてたんですね。(^_^;)
6 Re: 自律用プログラムについて
combat-e
長老

combat-e 2010-1-28 9:31  [返信] [編集]

休暇の間でやり取りを見逃しておりました。

RobovieMaker2では、数値の比較は上記の通り「比較専用の変数を用意して、二つの変数の引き算の結果をそこに代入し、正負のどちらの値になるか」を確認します。

RobovieMaker2の演算は基本的にかなり単純な命令のみになっているため、平均値のように複雑な計算は複数の命令に分けて行なうことになります。
この辺はC言語よりもアセンブラに近い感覚ですね。
7 Re: 自律用プログラムについて
masakicho
半人前

マサ吉 2010-1-30 10:36  [返信] [編集]

>モモウサさん
>combat-eさん

ありがとうございます。

>第2回 RobovieMaker2でのモーション作成(後編)

こんなに近くに答えがあったとは・・・盲点でした。(笑
今日は時間が取れそうなので じっくり読んでみます。


>Robovie-Maker マスター

1度は読んでるはずなんですが、その時ちゃんと理解出来てなかったので
思い出せなかったのかな・・・
時間がある時にでも もう一度全部読み返してみよう。
[掲示板に戻る全部 次100 最新50
BluesBB ©Sting_Band
検索
Loading
メインメニュー