スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


にほんブログ村 その他趣味ブログ LEGO・ブロックへ

いないいないばあロボ - プログラミング編(2/2)

最終的なRobotCのプログラムは以下のようになりました。
#include "JoystickDriver.c"

task main(){
  nSyncedMotors = synchBC;

  while(true){
    getJoystickSettings(joystick);
    if(joystick.joy1_y1 > 10){
      nSyncedTurnRatio = +100;
      motor[motorB] = 50;
    }else if(joystick.joy1_y1 < -10){
      nSyncedTurnRatio = +100;
      motor[motorB] = -50;
    }else{
      if(joystick.joy1_x1 > 10){
	      nSyncedTurnRatio = -100;
	      motor[motorB] = -50;
      }else if(joystick.joy1_x1 < -10){
	      nSyncedTurnRatio = -100;
	      motor[motorB] = 50;
      }else{
	      nSyncedTurnRatio = +100;
	      motor[motorB] = 0;
	    }
    }

    if(joy1Btn(1) == 1){
      nMotorEncoderTarget[motorA] = 5;
      motor[motorA] = 50;
    }else if(joy1Btn(2) == 1){
      nMotorEncoderTarget[motorA] = 5;
      motor[motorA] = -50;
    }else if(joy1Btn(3) == 1){
      PlaySoundFile("Laughing 02.rso");
      wait1Msec(1000);
    }else if(joy1Btn(4) == 1){
      PlaySoundFile("Hello.rso");
      wait1Msec(1000);
    }else if(joy1Btn(5) == 1){
      PlaySoundFile("Goodbye.rso");
      wait1Msec(1000);
    }
  }
}
joystickの上で前方向、下で後方向、右で右回転、左で左回転、AボタンBボタンで首の上下、C以降のボタンで音を鳴らすようにしています。音声のファイルはこのソースファイルと同じフォルダに置いておくと自動で転送されます。

motorAが首の部分に対応します。28行目、31行目の「5」という数字に意味はなく、少しだけ動けば何でもOKです。この部分が醜いので、角度を決めて動かしたかったのですがうまくいきませんでした。ちなみに、RobotCのHelpでは以下のようにmotorを動かすことが推奨されているようです。
nMotorEncoder[motorB] = 0;                // Reset the Motor Encoder of Motor B.
nMotorEncoderTarget[motorB] = 360;        // Set the  target for Motor Encoder of Motor B to 360.
motor[motorB] = 75;                       // Motor B is run at a power level of 75.

while(nMotorRunState[motorB] != runStateIdle)  // While Motor B is still running (hasn't reached target yet):
{
  // Do not continue.
}
motor[motorB] = 0;                       // Motor B is stopped at a power level of 0.
これに従って、首の部分をAボタンBボタンでmotorAを30度回転、(ギアの比率から)首を6度回転するようにしたかったのですが、これでcompileしてAボタンBボタンを連打しているとフリーズ状態になります。ここで書かれているようなことが影響しているのかと思いましたが、分かりませんでした。joystickの無限ループとの組み合わせがまずいのかもしれません。

次回は公開されているルービックキューブを解くロボを自分でも組み立てて動かしてみたことについて書く予定です。

にほんブログ村 その他趣味ブログ LEGO・ブロックへ
スポンサーサイト

いないいないばあロボ - プログラミング編(1/2)

以前の日記のうち、2つ目の問題である「どのように状況に応じた命令を送るか」を検討しました。

最後の目標としてはOptiEyes-1で動画を撮りつつ画像解析を行い、状況に応じた動きをbluetooth経由で命令で送ることですが、これが厳しい。特に奥行きを画像から検出するのはなかなか難しいです。そこで、最初の一歩としてヒトが画像を見つつ、bluetooth経由で命令することにしました。

そのように動的にbluetooth経由で命令を送るのに適したプログラミング言語は思ったよりも少なかったです。nxt-ruby, nxt-python, RobotCを試しました。

1つ目のnxt-rubyはcygwin上でのインストールでエラー出まくりで諦めました。過去にうまくいっている記事と同じ古いバージョンはインストールでき、音をならすこともできますが、motorの制御がうまく行きません。firmwareとのバージョンの齟齬が原因でしょうか。

2つ目のnxt-pythonはインストールは非常に快適です。しかし、motorの制御でシンクロさせて動かす機能等が開発途中です。また、joystickから操作していると、bluetoothの微かなピーという音とともに制御不能(フリーズ)状態に頻繁に陥ります。key repeatに対してうまく処理できていないように思います。

そして最後のRobotCですが、これはかなり安定しています。さすがは売り物だけはあります。コンパイルする言語にもかかわらず、joystickからの操作には相当配慮されており、motorの制御も書きやすい。プログラミング言語の初期学習としても、自信をもってお勧めできます。

注意点としては、開発環境をwindows上で起動する前に、NXT本体の電源をONにしておかないとbluetoothの接続でハマることがあります(僕だけ?)。また、RobotCも書き方によっては制御不能状態になることがあり(自分の書き方が悪いのかもしれません)、次回その点について書こうと思います。

にほんブログ村 その他趣味ブログ LEGO・ブロックへ

いないいないばあロボ - 組み立て編

Technicの組み立てはまだ日が浅く慣れ親しんでいる途中ですが、一番初めのチュートリアルのものを参考に作りました。

いないいないばあロボ 前 いないいないばあロボ 横 いないいないばあロボ 裏 いないいないばあロボ 首アップ いないいないばあロボ 胸部アップ

OptiEyes-1が想像以上に小さくて軽いのでビックリしました。これは100均の髪留めを輪ゴムとして使って固定しています。ただし、画像の質はやはりそこまで良くはありませんでした。160x120で3フレーム/秒ですからね。シャカシャカ動いたらカックカクになります。まったり動く分にはなかなか綺麗に写ります。写真もなかなか綺麗に写りますが、やはりフラッシュがないので暗いところではきついですね。





にほんブログ村 その他趣味ブログ LEGO・ブロックへ

いないいないばあロボ - ハードウェア編

NXTで“いないいないばあロボ”を作ろうと思った時に、超えなきゃいけない壁が2つあります。
1つ目は「障害物をどう正確に認識するか」で、2つ目は「どのように状況に応じた命令を送るか」です。

1つ目ははじめは超音波でしのごうと思っていたのですが、これが距離はまだしも方向が全然あたらず、微妙に物陰に隠れて“いないないばあ”することが困難です。指向性の高い超音波ビームみたいなのが出せるセンサーがあればよかったのですが、手ごろなのは見つかりませんでした。

次にNXTCam-v3に食いつきました。これは装置の中で画像解析を行ってくれるスグレモノです。しかし、値段の高さと遠隔操作しつつ画像を保存したいという要求を満たすことはできなさそうなので、あきらめました。

結局行き着いたのはOptiEyes-1です。これも少し値段が高いのと、bluetooth経由でそこまで画質がよいものは録画できなさそうなので少し迷いましたが、勢い余って購入しました。Eメールで質問したら販売元のmailboxが溢れてる旨のメールが来て、購入したのを即後悔しましたが、なんとか入手することができました。連絡ついたらわずか数日で来ました。シンガポール、さすが。次回にLegoの写真を載せますので、その時にOptiEyes-1の大きさ等を見ていただければと思います。

これからサークルメンバーで細ーく長く更新しつづけようと思いますので、よろしくお願いしますm(_ _)m

にほんブログ村 その他趣味ブログ LEGO・ブロックへ
リンク
フリーエリア
プロフィール

Author:tsukuba.lego
●主な登場人物
koba : 会長. RCX, WeDo, NXT1.0, NXT2.0を持つ.
matk : 副会長. 2010年夏にNXT2.0を購入, 20年来のレゴ熱復活.
●会員募集中です!小学生から歓迎. 近日月1ぐらいで集まる予定.
mail:tsukuba.lego@gmail.com
YouTube (tsukubalego)
Twitter(tsukubalego)

カテゴリ
最新記事
最新コメント
月別アーカイブ
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。