2011-01-01から1年間の記事一覧
バグ対策をするためにそもそのバグっているのかを確認。 カウンターを設けて処理を一回回すごとにカウント1するようにした。うんバグっている。 何もしなくても70買い目の処理くらいでバグるし、 ひどいときは3回目の処理つまり0.3秒くらいでバグる。…
全然ダメ。ぴーぴー行って止まる。 #define GYRO_Offset 590 int status = 0; int x = 0; float P = 1; float kp = 0; float D = 0; float kd = 0 ; int syuturyokukakudo = 0; int genzaikakudo = 90; task main() { SetSensorHTGyro(S4); int pow =0;while…
#define GYRO_Offset 590 int status = 0; int x = 0; float P = 1; float kp = 0; float D = 0; float kd = 0;int kakudo = 0; int furuikakudo = 0; int genzaikakudo =90; int furuikakudo =0; task main() {SetSensorHTGyro(S4); int pow =0; while(tru…
最も簡単なプログラムを書いてみても数値爆発は起こる。 しかし下記のような+60では起こらなかった。 −440とすると何故か爆発してしまう。 #define TIME 500int status = 0;int kekka = 0;int x = 0;task main(){SetSensorHTGyro(S4);while(true){stat…
ジャイロセンサーを装着してみたが、なんの値を返しているか不明。 #define TIME 500#define S1 0int status = 0;int kekka = 0;int x = 0; int y = 0; int z = 0;task kount(){while(true){status=Sensor(IN_4);NumOut(60,LCD_LINE3,status);NumOut(60,LCD_…
秋葉館で購入したMONOPRICE社のMini Displayport Male and USB Male Audio to HDMI Female Converting AdapterでマックブックをシャープLC46GXへつなぐ。成功。音声の再生も確認。 アップル純正mini display port to HDMI のコネクターである場合、少し古い…
NXT加速度センサーが安かったので購入。 1時間格闘で数値の取得に成功しますた。 なぜかセットセンサーLOWSPEEDを事前に書いて置かなければ起動しない?? これに気がつくのに時間がかかった。実はHT社のサイトに行けばよかったという・・。 NXCガイドにbVal…
finally, I found nil1046 code any way. THX to CH,Chen, now I can use NXT in huge system robot,which has more than 4 motors like intlligent-block excavador or something :) But,I haven't understand why It can work. なんとかIRLINKをNXC上で使…
部品の種類分けを含めて6時間ほどかけて完成。対策後のヴァージョンであるため可動に問題はなかった。機構はモーター出力4つを3系統に振り分けておこない残る1系統のモーターで出力先を切り替えている。これにより合計6chの操作を行うことが出来るようにし…
除算%のあまりによって反応を繰り返すようにしたけど cはIF内部で変数を%出来なかったっけ? これにより変数kekkaを追加#define TIME 500int status = 0; int kekka = 0;task kount(){ while(true){ NumOut(60,LCD_LINE3,status);if(Sensor(IN_1)==1){status…
NXCに存在するTASK関数?であるがやはりwhile true 内部で繰り返すことは出来ないようだ 組んだTASK先でwhile true すればよいだけのことだが、voidによる関数化の扱いとは違うようだ。 #define TIME 500int status = 0; task kount(){ while(true){ NumOut(…
並列タスク化してみたが、並列タスクと関数化の違いがいまいちわからない while true 文の中にPRECEDES TASKを入れることができないのも不明。 シングルタスクをWHILEの中に入れることができるか明日試す。 TASK先でWHILE TRUEするしか無いのか?#define TIM…
いまさらながら各定義をタスクメイン内でやっていたなど 読みにくいコードで今までやっていたことに気がつく。 さらに高度なコードを書けるようになるべく関数化に挑戦。 inline void と頭につければよいらしい、 変数を内部で使用する際には宣言が必要とNXT…
今日までpid制御まとめて見たがこれでひと段落としたい。床にニチバン黒テープをはってライントレースして見たが、制度としては今ひとつなままで終わった。 ライントレーサーを単眼の光センサーで追う場合はこのへんが限界なのではないか。 pid制御で黒線を…
今日のレシピ スタンダード値28 P 1,8 I 0.5 D 0.01 が一番まとも スタンダード値10から19程度で(つまり黒線とおなじ)で試してみたが この程度を目標値とするとまっすぐの線にしか対応できない。右か左にしか片一方しか行かない、 臨機応変に対応できない…
PID値をいちいち入力してコンパイルしているのめんどくさいからNXT本体のボタンを押すと数値を追加するようにした。 buttonpressed文について説明しているページはグーグルが日本語でキャッシュしているページにはない。 nxc チュートリアルページをみて格闘…
エンデのはてしない物語みたいになってきた。 値が見つかりません。 task main(){SetSensorColorRed(IN_2);SetSensorTouch(IN_1);SetSensorTouch(IN_4);#define TIME 100int standerd=27;//変数standerdに白黒の中点を入力するこれは以後の出力の基準点とな…
PD制御分のD値を前回の光センサー値と今回の光センサー値の差としてたところを 前回のP値と今回のP値の差とした。 公式上はこちらが正しいのである。 しかしD値は結局変化量であるから意味がそんなに変わっていると思えないが・・・挙動がどの程度変わるか不…
task main(){SetSensorColorRed(IN_2);SetSensorTouch(IN_1);SetSensorTouch(IN_4);#define TIME 50int standerd=30;//変数standerdに白黒の中点を入力するこれは以後の出力の基準点となるfloat POW;int currentsensor;int previoussensor;float kp=1;int ki…
と思ったらrotatemotorのデフォルトだとブレーキがかかるからだった。 ブレーキの反動でかくかくしていたのだ。ブレーキを掛けないためにrotetemotorでfalseと入れるとブレーキがかからないfloat型になりかくかくしなくなりました。コレについて記載したサイ…
かじを切ったあとに舵角を戻らないようにセットしてみたが謎の行動爆発を起こす。 舵を切りたい角度マイナス舵を切った角度=舵をこれから切るべき角度のはずなんだけど くるくるくるくる舵が回る ううーむ、ドツボ。task main(){SetSensorColorRed(IN_2);Se…
こちらが完成形ただし幅が2chのニチバン黒テープをあっさりまたぐ。 ETロボコンは幅が3chのラインで最小R半径は30chとかなりシビアな戦いをしている。1単位あたりのタイムを50ミリSECに変えてもそれほど挙動は変わらないし、 このへんがNXTの限界なの…
よく見てみるとステアリング値の初期値0がない。 task main(){SetSensorColorRed(IN_2);SetSensorTouch(IN_1); SetSensorTouch(IN_4);#define TIME 100int standerd;int POW;int currentsensor;int previoussensor;int steering; int kp=1;int ki;int kd=1;…
ある程度までPD型を考えてみたが、キャタピラ型でのPID制御に限界を感じたのでステアリング型へ変更。 キャタピラ型の問題点は回転するときに必ず曲がる方の出力を下げなければいけなくてロスしてしまうこと。 曲がったあとで自然に舵角を中心にもどすように…
D制御文を加えて、kpとkdをタッチセンサーを押すたびに+1にするようにして適切なkp・kdを探せるようにした。 現在のkp値、kd値は当然ディスプレイでモニターする。しかしここでモータ逆転・ノッキングするようになってしまった。 kp・kdど…
やっとこさPID制御のうちP制御と言えるものに成功した。この間RubyとオブジェクトCとかやってたのを含めてLEGO NXTを6ヶ月中断していた。正直長かった。頭の片隅でずうっとなんで出来なかったんだっておもってたもん。以下のプログラムでは地面が白ければ白…
ぜんぜんPIDじゃなくて円運動しかしないので基本に立ち返って、 IF分を利用したライントレーサーを作る。恥ずかしいが、とりあえずラインをトレースできることは確認した。 前段で定義されてる変数をほとんど利用していない。 task main(){SetSensorColorRed…
task main(){SetSensorColorRed(IN_2);#define TIME 5int standerd;int POW;int currentsensor;int previoussensor;int kp=20;int ki;int kd=5;int P;int I;int D; standerd=Sensor(IN_2);//変数standerdに初期の光量を入力するこれは以後の出力の基準点とな…