NXT
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
松本成司 Seiji Matsumoto (matsu at shinshu-u dot ac dot jp)
1998年発売のMindstorms Robotics Invention System (RIS)が...
開発環境としては、NQCを引き継ぐNBC/NXCというオープンソー...
[[中学生向け夏季講座の資料として作成したガイド:http://yak...
[[2013年用に書き直した中学生向け夏季講座の資料:http://yak...
目次
#contents
* 参考文献・参考サイト [#pf5ddac6]
-LEGO社のキット紹介ページ
--http://www.legoeducation.us/eng/product/lego_mindstorms...
-NBC/NXCの入手
--http://bricxcc.sourceforge.net/nbc/
-ドキュメント
--NBCガイド http://bricxcc.sourceforge.net/nbc/doc/NBC_Gu...
--NXCチュートリアル
--- オリジナル http://bricxcc.sourceforge.net/nbc/nxcdoc/...
--- Wiki版 (英語) http://wiki.zenerves.net/index.php/NXC_...
--- 日本語訳 by Alberto Palacios Pawlovskyさん http://ww...
--- 日本語訳 by 高本さん
http://www2.ocn.ne.jp/~takamoto/NXCprogramingguide.pdf
--APIライブラリ関数一覧
--- NXC Programmer's Guide (APIガイド) http://bricxcc.sou...
--- 日本語訳 by 高本さん http://www2.ocn.ne.jp/~takamoto...
* 準備 [#o964bedb]
http://wlug.org.nz/LegoMindstorms などを参考に。
** GNU/Linux上でのUSBの設定 [#a914c2ae]
(ディストリビューションによっては異なる可能性あり。以下は...
USBで接続できるように、例えば次のようなudev設定ファイルを...
/etc/udev/rules.d/70-legonxt.rules 作成しておく。
// BUS=="usb", SYSFS{idVendor}=="03eb", GROUP="plugdev", ...
// BUS=="usb", SYSFS{idVendor}=="0694", GROUP="plugdev", ...
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", GROUP="plugd...
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0694", GROUP="plugd...
ベンダーIDの03ebはAtmel、0694はLEGOを表す。前者はファーム...
使用するユーザをplugdevグループに登録しておく(NXTUSERは...
# adduser NXTUSER plugdev
legonxtのようなグループ名にした場合には、groupを新たに作...
** Firmwareのバージョン確認と更新方法 [#adbcfd0b]
とりあえずバージョン1.28くらいまであげておくと最新のNBC/N...
複数のtaskを処理する場合には、1.28だと不具合があるので
John HansenさんのEnhanced Firmware を使う必要がある(バー...
-現在のFirmwareのバージョンは「Settings」→「NXT Version」...
-Firmwareの入手 (LEGO社からダウンロード)
-- http://mindstorms.lego.com/en-us/support/files/default...
のFirmwareメニューからダウンロードして解凍(unzip)すると "...
--Enhanced Firmwareの入手は、http://bricxcc.sourceforge.n...
-NXTをFirmware更新モードにするには、電源を入れた状態で背...
-Debian GNU/Linux (squeeze)上でlibnxt(Firmware更新ツール)...
# apt-get install libusb-0.1-4 scons
$ wget http://libnxt.googlecode.com/files/libnxt-0.3.tar...
$ tar zvxf libnxt-0.3.tar.gz
$ cd libnxt-0.3
$ scons
$ ./fwflash "Firmwareのファイル名"
ちなみにFirmwareの書き換えは100回までは保証されているらし...
http://www.afrel.co.jp/tech/techinfo_nxt.html#p7
fwflashで書き込みに失敗する場合、Atmel用のドライバが正し...
$ dmesg | tail
で、例えば
[ 4992.860008] usb 10-1: new full speed USB device using...
[ 4993.018991] usb 10-1: New USB device found, idVendor=...
[ 4993.018994] usb 10-1: New USB device strings: Mfr=0, ...
[ 4993.019073] usb 10-1: configuration #1 chosen from 1 ...
[ 4993.022051] cdc_acm 10-1:1.0: This device cannot do c...
[ 4993.022074] cdc_acm 10-1:1.0: ttyACM0: USB ACM device
[ 5077.228041] usb 10-1: usbfs: interface 0 claimed by c...
のようになっていれば、間違って cdc_acm がロードされている...
// # echo "blacklist cdc_acm" >> /etc/modprobe.d/blacklis...
// # shutdown -r now
$ sudo rmmod cdc_acm
$ ./fwflash ファームウェアファイル名
** GNU/Linux上でのNBC/NXCのインストール方法 [#n4a2d7cd]
コンパイルには Pascal と libusb-dev が必要。以下はDebian...
$ sudo apt-get install fp-compiler fp-units-fcl libusb-dev
$ wget http://downloads.sourceforge.net/bricxcc/nbc-1.2....
$ mkdir nbc-1.2.1.r3
$ cd nbc-1.2.1.r3
$ tar zvxf ../nbc-1.2.1.r3.src.tgz
$ make
// $ sudo cp NXT/nbc /usr/local/bin/
$ sudo install -m 755 NXT/nbc /usr/local/bin/
$ sudo mkdir -p /usr/local/share/man/man1
$ sudo gzip -c doc/nbc.1 > /usr/local/share/man/man1/nbc...
** Debian GNU/Linux上でのNextToolのインストール方法とマニ...
- http://eavr.u-strasbg.fr/~loic/installation_linux.htm
- http://wiki.zenerves.net/index.php/NexTTool_manual
- http://sourceforge.net/apps/phpbb/mindboards/viewtopic....
$ sudo apt-get install libusb-dev libusb-0.1-4 subversio...
// $ svn co -r 623 https://bricxcc.svn.sourceforge.net/sv...
$ svn co https://bricxcc.svn.sourceforge.net/svnroot/bri...
$ cd bricxcc
$ make -f ./nexttool.mak
$ sudo cp nexttool /usr/local/bin/
* プログラムの転送方法 (USBケーブルの場合) [#ia2e7366]
$ nbc -S=usb -v=128 -d test.nxc
ファームウェアのバージョンを -v で指定。デフォルトの値は1...
違うバージョンのファームウェアが入って入れば転送できない。
Enhanced Firmware v1.32 を転送する場合は
$ nbc -S=usb -v=132 -EF -d test.nxc
* NXTの名前の変更 [#te283a08]
多くのNXTで通信する際、個々のNXTの名前を決めておくと便利。
$ nexttool -setname=NXT-00
(NXT-00という名前に変更)
* NXCのサンプルプログラム [#rf7a0df6]
[[別のページ>NXT/SampleProgram]]にしました。
* NXCのよく使う命令 [#le35bc79]
** モータ関連 [#df4361b3]
OnFwd(OUT_A,75); // モータAを最速の75%のスピードで前転...
OnRev(OUT_AC,75); // モータAとモータCを最速の75%のスピ...
Off(OUT_AC); // モータAとモータCを止める
Float(OUT_A); // モータAにトルクをかけない
RotateMotor(OUT_A, 75, 45); // モータAを75%のスピードで4...
RotateMotor(OUT_A, -75, 45); // モータAを75%のスピードで...
-参考ページ
-- http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group...
** センサー関連のコマンド [#zcaa0e8b]
http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group___...
を参考に
*** 設定 [#s3c3468b]
SetSensorTouch(S1); // ポート1にタッチセンサ
SetSensorLight(S2); // ポート2に光センサ
SetSensorSound(S3); // ポート3にサウンドセンサ
SetSensorLowspeed(S4); // ポート4に超音波センサ
// SetSensorUltrasonic(S4); // ポート4に超音波センサ
SetSensorColorFull(S1); // ポート1にカラーセンサ (フルカ...
[[マニュアルにあるSetSensorUltrasonic:http://bricxcc.sour...
*** センサーの値 [#ge3b55cf]
センサの値は、SENSOR_1,SENSOR_2,SENSOR_3,SENSOR_4 で取得...
ただし超音波センサは、SensorUS(S1) のように取得します。
NXCではセンサ関連の関数も豊富に用意されています。
unsigned int d = SensorValue(S4); // ポート4につないだ超...
unsigned int valRed = ColorSensorValue(S1, INPUT_RED); /...
詳しくは、
http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group___...
を参照のこと。
** マクロ・関数・サブルーチンの定義 [#ke1ca3c0]
マクロはNQCと同様。サブルーチンはNQCと違い、引数をとるこ...
sub turn_left(int pwr)
{
OnRev(OUT_A,pwr); OnFwd(OUT_C,pwr);
....
}
関数もNQCとは違い、インライン関数ではなく、void 以外の型 ...
NQCの関数に相当するのは、インライン関数で inline というキ...
inline void turn_left() // NQCと違って inline というキ...
{
....
}
** 音 [#id5ea688]
NQCと同じ PlayTone の他、PlayToneEx(周波数, 時間, ボリュ...
PlayTone(440, 500, 3, False); // 440Hzの音を0.5秒間鳴ら...
その他、PlayFileEx(ファイル名, ボリューム, ループするか?...
** ディスプレイへの表示 [#c5642098]
TextOut(0,LCD_LINE3,"Hello World!"); // 1行目の左端(x座...
座標は左下の隅が(0,0)。y軸については8の倍数でなくてはなら...
NumOut(0,LCD_LINE1,x); // 1行目の左端(x座標が0)からxの値...
小数点以下2桁まで?
** タイマー [#u3c945cb]
long t0, t ;
t0 = CurrentTick(); // 時刻を t0 に代入
...
t = CurrentTick()-t0; // t0 にCurrentTick()の値を代入し...
long t = FirstTick(); // プログラムがスターとしてからの...
** NXT同士の通信 [#k205e06d]
チュートリアルの42ページを参考に。
Bluetoothで合計4台(master1台,slave3台)のNXTが接続可能。ma...
BluetoothStatus(conn) // 接続をチェックする関数
SendRemoteBool(conn,queue,bval); // slaveにブール値を送...
SendRemoteNumber(conn,queue,val); // slaveに数値を送る (...
SendRemoteString(conn,queue,string); // slaveに文字列を...
SendResponseBool(queue,bval); // メールボックスにブール...
SendResponseNumber(queue,val); // メールボックスに数値を...
SendResponseString(queue,str); // メールボックスに文字列...
ReceiveRemoteBool(queue,clear,bval); // slaveのメールボ...
ReceiveRemoteNumber(queue,clear,val); // slaveのメールボ...
ReceiveRemoteString(queue,clear,str); // slaveのメールボ...
RemoteStartProgram(conn,filename); // slaveのプログラム...
RemoteStopProgram(conn,filename); // slaveのプログラムを...
RemotePlayTone(conn,freq,duration); // slaveのサウンドを...
RemoteRestMotorPosition(conn,port,clear); // slaveのモー...
2012年2月25日からのこのページのだいたいの訪問者数:
本日&counter(today);
昨日&counter(yesterday);
合計&counter(all);
終了行:
松本成司 Seiji Matsumoto (matsu at shinshu-u dot ac dot jp)
1998年発売のMindstorms Robotics Invention System (RIS)が...
開発環境としては、NQCを引き継ぐNBC/NXCというオープンソー...
[[中学生向け夏季講座の資料として作成したガイド:http://yak...
[[2013年用に書き直した中学生向け夏季講座の資料:http://yak...
目次
#contents
* 参考文献・参考サイト [#pf5ddac6]
-LEGO社のキット紹介ページ
--http://www.legoeducation.us/eng/product/lego_mindstorms...
-NBC/NXCの入手
--http://bricxcc.sourceforge.net/nbc/
-ドキュメント
--NBCガイド http://bricxcc.sourceforge.net/nbc/doc/NBC_Gu...
--NXCチュートリアル
--- オリジナル http://bricxcc.sourceforge.net/nbc/nxcdoc/...
--- Wiki版 (英語) http://wiki.zenerves.net/index.php/NXC_...
--- 日本語訳 by Alberto Palacios Pawlovskyさん http://ww...
--- 日本語訳 by 高本さん
http://www2.ocn.ne.jp/~takamoto/NXCprogramingguide.pdf
--APIライブラリ関数一覧
--- NXC Programmer's Guide (APIガイド) http://bricxcc.sou...
--- 日本語訳 by 高本さん http://www2.ocn.ne.jp/~takamoto...
* 準備 [#o964bedb]
http://wlug.org.nz/LegoMindstorms などを参考に。
** GNU/Linux上でのUSBの設定 [#a914c2ae]
(ディストリビューションによっては異なる可能性あり。以下は...
USBで接続できるように、例えば次のようなudev設定ファイルを...
/etc/udev/rules.d/70-legonxt.rules 作成しておく。
// BUS=="usb", SYSFS{idVendor}=="03eb", GROUP="plugdev", ...
// BUS=="usb", SYSFS{idVendor}=="0694", GROUP="plugdev", ...
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", GROUP="plugd...
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0694", GROUP="plugd...
ベンダーIDの03ebはAtmel、0694はLEGOを表す。前者はファーム...
使用するユーザをplugdevグループに登録しておく(NXTUSERは...
# adduser NXTUSER plugdev
legonxtのようなグループ名にした場合には、groupを新たに作...
** Firmwareのバージョン確認と更新方法 [#adbcfd0b]
とりあえずバージョン1.28くらいまであげておくと最新のNBC/N...
複数のtaskを処理する場合には、1.28だと不具合があるので
John HansenさんのEnhanced Firmware を使う必要がある(バー...
-現在のFirmwareのバージョンは「Settings」→「NXT Version」...
-Firmwareの入手 (LEGO社からダウンロード)
-- http://mindstorms.lego.com/en-us/support/files/default...
のFirmwareメニューからダウンロードして解凍(unzip)すると "...
--Enhanced Firmwareの入手は、http://bricxcc.sourceforge.n...
-NXTをFirmware更新モードにするには、電源を入れた状態で背...
-Debian GNU/Linux (squeeze)上でlibnxt(Firmware更新ツール)...
# apt-get install libusb-0.1-4 scons
$ wget http://libnxt.googlecode.com/files/libnxt-0.3.tar...
$ tar zvxf libnxt-0.3.tar.gz
$ cd libnxt-0.3
$ scons
$ ./fwflash "Firmwareのファイル名"
ちなみにFirmwareの書き換えは100回までは保証されているらし...
http://www.afrel.co.jp/tech/techinfo_nxt.html#p7
fwflashで書き込みに失敗する場合、Atmel用のドライバが正し...
$ dmesg | tail
で、例えば
[ 4992.860008] usb 10-1: new full speed USB device using...
[ 4993.018991] usb 10-1: New USB device found, idVendor=...
[ 4993.018994] usb 10-1: New USB device strings: Mfr=0, ...
[ 4993.019073] usb 10-1: configuration #1 chosen from 1 ...
[ 4993.022051] cdc_acm 10-1:1.0: This device cannot do c...
[ 4993.022074] cdc_acm 10-1:1.0: ttyACM0: USB ACM device
[ 5077.228041] usb 10-1: usbfs: interface 0 claimed by c...
のようになっていれば、間違って cdc_acm がロードされている...
// # echo "blacklist cdc_acm" >> /etc/modprobe.d/blacklis...
// # shutdown -r now
$ sudo rmmod cdc_acm
$ ./fwflash ファームウェアファイル名
** GNU/Linux上でのNBC/NXCのインストール方法 [#n4a2d7cd]
コンパイルには Pascal と libusb-dev が必要。以下はDebian...
$ sudo apt-get install fp-compiler fp-units-fcl libusb-dev
$ wget http://downloads.sourceforge.net/bricxcc/nbc-1.2....
$ mkdir nbc-1.2.1.r3
$ cd nbc-1.2.1.r3
$ tar zvxf ../nbc-1.2.1.r3.src.tgz
$ make
// $ sudo cp NXT/nbc /usr/local/bin/
$ sudo install -m 755 NXT/nbc /usr/local/bin/
$ sudo mkdir -p /usr/local/share/man/man1
$ sudo gzip -c doc/nbc.1 > /usr/local/share/man/man1/nbc...
** Debian GNU/Linux上でのNextToolのインストール方法とマニ...
- http://eavr.u-strasbg.fr/~loic/installation_linux.htm
- http://wiki.zenerves.net/index.php/NexTTool_manual
- http://sourceforge.net/apps/phpbb/mindboards/viewtopic....
$ sudo apt-get install libusb-dev libusb-0.1-4 subversio...
// $ svn co -r 623 https://bricxcc.svn.sourceforge.net/sv...
$ svn co https://bricxcc.svn.sourceforge.net/svnroot/bri...
$ cd bricxcc
$ make -f ./nexttool.mak
$ sudo cp nexttool /usr/local/bin/
* プログラムの転送方法 (USBケーブルの場合) [#ia2e7366]
$ nbc -S=usb -v=128 -d test.nxc
ファームウェアのバージョンを -v で指定。デフォルトの値は1...
違うバージョンのファームウェアが入って入れば転送できない。
Enhanced Firmware v1.32 を転送する場合は
$ nbc -S=usb -v=132 -EF -d test.nxc
* NXTの名前の変更 [#te283a08]
多くのNXTで通信する際、個々のNXTの名前を決めておくと便利。
$ nexttool -setname=NXT-00
(NXT-00という名前に変更)
* NXCのサンプルプログラム [#rf7a0df6]
[[別のページ>NXT/SampleProgram]]にしました。
* NXCのよく使う命令 [#le35bc79]
** モータ関連 [#df4361b3]
OnFwd(OUT_A,75); // モータAを最速の75%のスピードで前転...
OnRev(OUT_AC,75); // モータAとモータCを最速の75%のスピ...
Off(OUT_AC); // モータAとモータCを止める
Float(OUT_A); // モータAにトルクをかけない
RotateMotor(OUT_A, 75, 45); // モータAを75%のスピードで4...
RotateMotor(OUT_A, -75, 45); // モータAを75%のスピードで...
-参考ページ
-- http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group...
** センサー関連のコマンド [#zcaa0e8b]
http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group___...
を参考に
*** 設定 [#s3c3468b]
SetSensorTouch(S1); // ポート1にタッチセンサ
SetSensorLight(S2); // ポート2に光センサ
SetSensorSound(S3); // ポート3にサウンドセンサ
SetSensorLowspeed(S4); // ポート4に超音波センサ
// SetSensorUltrasonic(S4); // ポート4に超音波センサ
SetSensorColorFull(S1); // ポート1にカラーセンサ (フルカ...
[[マニュアルにあるSetSensorUltrasonic:http://bricxcc.sour...
*** センサーの値 [#ge3b55cf]
センサの値は、SENSOR_1,SENSOR_2,SENSOR_3,SENSOR_4 で取得...
ただし超音波センサは、SensorUS(S1) のように取得します。
NXCではセンサ関連の関数も豊富に用意されています。
unsigned int d = SensorValue(S4); // ポート4につないだ超...
unsigned int valRed = ColorSensorValue(S1, INPUT_RED); /...
詳しくは、
http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/group___...
を参照のこと。
** マクロ・関数・サブルーチンの定義 [#ke1ca3c0]
マクロはNQCと同様。サブルーチンはNQCと違い、引数をとるこ...
sub turn_left(int pwr)
{
OnRev(OUT_A,pwr); OnFwd(OUT_C,pwr);
....
}
関数もNQCとは違い、インライン関数ではなく、void 以外の型 ...
NQCの関数に相当するのは、インライン関数で inline というキ...
inline void turn_left() // NQCと違って inline というキ...
{
....
}
** 音 [#id5ea688]
NQCと同じ PlayTone の他、PlayToneEx(周波数, 時間, ボリュ...
PlayTone(440, 500, 3, False); // 440Hzの音を0.5秒間鳴ら...
その他、PlayFileEx(ファイル名, ボリューム, ループするか?...
** ディスプレイへの表示 [#c5642098]
TextOut(0,LCD_LINE3,"Hello World!"); // 1行目の左端(x座...
座標は左下の隅が(0,0)。y軸については8の倍数でなくてはなら...
NumOut(0,LCD_LINE1,x); // 1行目の左端(x座標が0)からxの値...
小数点以下2桁まで?
** タイマー [#u3c945cb]
long t0, t ;
t0 = CurrentTick(); // 時刻を t0 に代入
...
t = CurrentTick()-t0; // t0 にCurrentTick()の値を代入し...
long t = FirstTick(); // プログラムがスターとしてからの...
** NXT同士の通信 [#k205e06d]
チュートリアルの42ページを参考に。
Bluetoothで合計4台(master1台,slave3台)のNXTが接続可能。ma...
BluetoothStatus(conn) // 接続をチェックする関数
SendRemoteBool(conn,queue,bval); // slaveにブール値を送...
SendRemoteNumber(conn,queue,val); // slaveに数値を送る (...
SendRemoteString(conn,queue,string); // slaveに文字列を...
SendResponseBool(queue,bval); // メールボックスにブール...
SendResponseNumber(queue,val); // メールボックスに数値を...
SendResponseString(queue,str); // メールボックスに文字列...
ReceiveRemoteBool(queue,clear,bval); // slaveのメールボ...
ReceiveRemoteNumber(queue,clear,val); // slaveのメールボ...
ReceiveRemoteString(queue,clear,str); // slaveのメールボ...
RemoteStartProgram(conn,filename); // slaveのプログラム...
RemoteStopProgram(conn,filename); // slaveのプログラムを...
RemotePlayTone(conn,freq,duration); // slaveのサウンドを...
RemoteRestMotorPosition(conn,port,clear); // slaveのモー...
2012年2月25日からのこのページのだいたいの訪問者数:
本日&counter(today);
昨日&counter(yesterday);
合計&counter(all);
ページ名: