ログをとる環境を作る その1
以下のURLからlnphostをダウンロードする。
以下のURLからlnphostをダウンロードする。
まずは、簡単なプログラムから作ってみます。※一部全角スペースがありますので、コピペ注意!
#include <unistd.h>
#include <conio.h>
#include <dsensor.h>
#include <dmotor.h>
#define TH 40
#define NORMAL_SPEED (0.6*MAX_SPEED)
int main(int argc, char** argv)
{
ds_active(&SENSOR_2);
motor_a_speed(MAX_SPEED);
motor_c_dir(fwd);
motor_c_speed(NORMAL_SPEED);
for(;;){
if(TH < LIGHT_2) motor_a_dir(fwd);
else motor_a_dir(rev);
}
return 0;
}
このプログラムにさらに改良を加えます。追加・変更個所は赤で表示してます。
プログラムを走行体へ転送
$ dll --tty=usb -p1 プログラム名.lx
PC側のcygwinでは以下のコマンド実行
$ lnpdump -d//./legotower1
あとは走行体のRunボタンを押してプログラム実行する。
約2秒程度走行した後、データがPCへ送信され画面に表示される
前回の記事で2009年走行体の写真をアップしました。走行体は頂いた副賞のNXTセットを使って作りましたが、実はこれだけでは2009走行体は出来ません。というのは走行体にはジャイロセンサが必要なのですが、NXTセットには付属していません。
この情報はじつは11/20に行われたワークショップの休憩時間に、審査員の方々と雑談したときに聞いていたので、翌日(11/21)横浜から青森に戻る前に、秋葉原によってジャイロセンサを調達してから帰るつもりでした。
しかし、ここならあるだろうと思っていたお店が行ったらこういう事態になっており、いくつかの店を回ってみましたが見つけることが出来ず、結局ジャイロセンサを調達できずに青森に戻った訳です。
その後しばらくして、NXT用のジャイロセンサを扱っているお店を見つけて、昨年12月初旬にようやく入手できました。
ジャイロセンサはLEGO製ではなくて、HiTechnicという会社の製作したセンサーで、LEGO社の認定製品となっているようです。ようやく入手できましたので、これを使って2009走行体と開発環境整備をします。
まず、開発環境をコチラを参考にして構築します。走行体はコチラを参考にして作ります。おおよそ以下の手順で設定と動作確認を行います。
これで、走行体にサンプルプログラムがダウンロードされました。実行してみます。
(HD画質で撮影できるカメラを入手したので、アップロードしてyoutubeでHDで表示できるかテストしてみます)
サンプルプログラムをそのまま使ってます。ちゃんとバランスしてます。ちょっと押したぐらいでは倒れません。
撮影したビデオも(リンク先のyoutubeでは)HDで表示できてます。
この記事は、青大ロボコン研の備忘録です。間違った情報を掲載している可能性もありますので、利用される方はご注意くださいませ。
走行体を製作し、開発環境を整え、サンプルプログラムが動かせる状態を前提にします。あとbluetoothを使った通信が可能である(ハードが対応しているなど)とします。(NXT GamePad 1.04をしばらくは使う予定)
この手順でうまく走る・・・と良いですが、少しセンサの調整もしたいので、このプログラムを少し改良していきます。
(つづく)
この記事は、青大ロボコン研の備忘録です。間違った情報を掲載している可能性もありますので、利用される方はご注意くださいませ。
走行体を製作し、開発環境を整え、サンプルプログラムが動かせる状態を前提にします。あとbluetoothを使った通信が可能である(ハードが対応しているなど)とします。(NXT GamePad 1.04をしばらくは使う予定)
前回のプログラムを改良していきます。
まずは、画面にセンサの情報を表示させます。(走行中は必要ないので、タッチセンサが押される前まで表示するようにします)
sample.cの一部を修正(サンプルプログラム helloworld を参考に修正)
変更前
while(!ecrobot_get_touch_sensor(NXT_PORT_S1)); /* タッチセンサ押下待機*/
変更後
ecrobot_set_light_sensor_active(NXT_PORT_S3); /* 光センサ赤外線ON */
while (!ecrobot_get_touch_sensor(NXT_PORT_S1)) /* タッチセンサ押下待機*/
{
ecrobot_status_monitor("AodaiRoboconKen");
systick_wait_ms(500); /* 500msec wait */
}
この修正で、タッチセンサを押すまでは画面に各種の値が表示されます。
ただし、この修正でタッチセンサを押して走行開始するタイミングが変わります。
表示されている値から、ジャイロセンサと光センサの値を確認して sample.c に書き込みます。
(つづく)
この記事は、青大ロボコン研の備忘録です。間違った情報を掲載している可能性もありますので、利用される方はご注意くださいませ。
走行体を製作し、開発環境を整え、サンプルプログラムが動かせる状態を前提にします。あとbluetoothを使った通信が可能である(ハードが対応しているなど)とします。(NXT GamePad 1.04をしばらくは使う予定)
前回改良したプログラムを使って、センサの値を確認します。
図示した部分が光センサとジャイロセンサの値です。ジャイロセンサを完全に静止した状態で値を確認します。そのため以下のように横倒しにして値を確認しましょう。
これまでは、走行体を垂直に支えた状態でジャイロセンサの値を確認していましたが、それでは完全に静止させることは難しいです。横倒しにすることが正しいかまだ確証はありませんが、しばらくはこれでいきます。このときも確か横倒しでジャイロセンサのキャリブレーションしてたので多分いいとは思います。
読み取ったジャイロセンサの値をsample.cに反映します。GYRO_OFFSETを変更します。
変更前
#define GYRO_OFFSET 605 /* ジャイロセンサオフセット値(角速度0[deg/sec]時) */
変更後
#define GYRO_OFFSET ??? /* ジャイロセンサオフセット値(角速度0[deg/sec]時) */
(???の部分は各自のジャイロセンサの値を入れる)
(つづく)
この記事は、青大ロボコン研の備忘録です。間違った情報を掲載している可能性もありますので、利用される方はご注意くださいませ。
走行体を製作し、開発環境を整え、サンプルプログラムが動かせる状態を前提にします。あとbluetoothを使った通信が可能である(ハードが対応しているなど)とします。(NXT GamePad 1.04をしばらくは使う予定)
確認した値をsample.cに反映します。
変更前
#define WHITE 500 /* 白色の光センサ値*/
#define BLACK 700 /* 黒色の光センサ値*/
変更後
#define WHITE XXX /* 白色の光センサ値*/
#define BLACK ooo /* 黒色の光センサ値*/
XXXは「白」の光センサ値を入れます。oooは「黒」の値を入れます。(ただしコースに灰色マーカがある場合は、「灰」の値)
これらの調整で動作するか確認しましょう。
(つづく)
週末は、競技規約とモデル審査基準の確認と走行方法を検討しました。
備忘録にあるようなサンプルプログラムでは、あまり滑らかに走行できませんので、改善できそうなアイディアを2,3つプログラムにしてログで確認してます。
しかし、まだこれという決め手がない・・・。
でも、最初のこの走行に比べれば改善は進んでいるはず。
カーブが連続している所で、少しコースからズレてしまってます。ここを何とかしないといけません。連休中の課題です。
競技規約によるとNXT走行体は2分以内に1周しないとリタイヤになります。サンプルプログラムで2008年のコースを難所無しで走らせてみたところ、約2分30秒で1周しました。
いやNXTはあまりスピードがないとは思ってましたが、これは遅い。RCXのときは、サンプルでも2分で2周はしてたと思いましたが・・・。少しプログラムを改良して、現時点で一番速く走れる状態でビデオを撮りました。
今のプログラムでは、1周約1分20秒ぐらいです。大会ではコース内の難所、坂道、ゴール停止を入れて2分以内に走りきらないとリタイアになるので、もう少し速く走れないとまずい気がしています。
当面の目標として1周1分以内を目指して作業していきます。
実際走ってみて、NXT走行体2台で並走できないことが分かりました。なんか変だ思ったら、今年はインコースとアウトコースの間が140mmから200mmに間隔が拡大してます。コース全体もよく見ると同じではなく、昨年と比べて全体に拡大している様に見えますね。
ブログ「青大ロボコン研(仮)参戦記」のカテゴリ「実験」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。
前のカテゴリは北海道・東北地区大会までの道程です。
次のカテゴリは雑記です。