2009-09-06 変更
2009-07-04 変更
NXT 走行体 (2輪型倒立振子ロボット)の C 開発環境インストールとサンプルの実行
================================================================================
NXT 走行体を組み立てたら、PC に開発環境をインストールし、走行体が立つプログラム
サンプルを実行するまでの手順を示します。
なお、NXT 走行体は、タッチセンサーまで装着しておきます。
ここでは、まだ、EclipseCDT はインストールしていません。
PC は、Windows XP Professional SP2.
■参考
NXTway-GS(2輪型倒立振子ロボット) C API
http://lejos-osek.sourceforge.net/jp/nxtway_gs.htm
拡張NXTファームウェア + nxtOSEKのインストール方法(Windows XP/Vista)
http://lejos-osek.sourceforge.net/jp/installation_enf.htm
■開発環境のインストール
1. Cygwinのインストール
http://www.cygwin.com/
・インストール先は、C:/cygwin
・ここでは、Cygwin1.5.25 をインストール。
なぜか、cygdrive ディレクトリーではなく、cygrive ディレクトリーができているので
注意。
2. GNU ARMのインストール
・http://www.gnuarm.com/
・bu-2.16.1_gcc-4.0.2-c-c++_nl-1.14.0_gi-6.4.exe
・インストール時の注意点2009-09-06追記
・必ずGNUARM gcc 4.02 をインストールすること!
・[Little Endian]をチェック, [Floating Point Unit]のチェックをはずす
・[Install Cygwin DLLs...]は選択しない
・インストール先は、C:/cygwin/GNUARM
3. LEGO MINDSTORMS NXT Driverのインストール
http://mindstorms.lego.com/Support/Updates/
・upload1F7B2420-A5ED-44FF-9460-E262657029DC.zip
4. NeXTTool のインストール
・http://bricxcc.sourceforge.net/nexttool.zip
・nexttool.zip
・インストール先(解凍先)は、C:/cygwin/nexttool
5. 拡張 NXT ファームウェアのインストール
・http://bricxcc.sourceforge.net/lms_arm_jch.zip
・lms_arm_jch.zip
・解凍して、その中の lms_arm_nbcnxc_106.rfw ファイルを C:/cygwin/nexttool ディレ
クトリーにコピー
6. nxtOSEKのインストール・設定
・http://lejos-osek.sourceforge.net/jp/index.htm
・nxtOSEK_v207.zip
・/nxtOSEK/ecrobot/tool_gcc.mak ファイルを編集する。
・なお、Cygwin1.5.25 でインストールしたとき、/cygdrive/C/cygwin ではなく、
/cygrive/C/cygwin なので、注意。
■実行環境のインストール
7. 拡張 NXT ファームウェアの NXT へのアップロード
7.1 NXTをファームウェアアップデートモードにする
・リセットボタンを4秒以上押す
7.2 拡張 NXT ファームウェアのアップロード
$ cd C:/cygwin/nexttool
$ ./NeXTTool.exe /COM=usb -firmware=lms_arm_nbcnxc_106.rfw
7.3 リセット
・画面が砂嵐になったら、リセットボタンを押す
■ サンプルのコンパイルと実行の確認
9. HelloWorld
参考
拡張NXTファームウェア搭載のNXTへのnxtOSEKプログラムのアップロード方法
http://lejos-osek.sourceforge.net/jp/howtoupload_enf.htm
・NXT走行体の電源を入れる
・次のコマンドで、プログラムをコンパイル・リンク・アップロード
・標準 NXT ファームウェアの操作手順と同じように、アップロードした nxtOSEK プログ
ラムを実行
今回は、次の操作で NXT 画面に表示が出る。
[My Files] - [Software files] - [helloworld_OSEK] - [オレンジボタン] - [右ボタン]
[右ボタン]で、プログラムは終了する。
[EXIT]で、NXT の電源が切れる。
10. NXTway-GS C APIを使用したサンプルプログラム nxtway_gs
「NXTway-GS C APIを使用したサンプルプログラムはBluetooth通信を介したR/Cロボット
アプリケーションで、PC用ゲームパッドコントローラによってラジコン操作がおこなえま
す。ロボットのラジコン操作を実現するには、PC側にNXT GamePadというソフトウェアを
別途インストールする必要があります。サンプルプログラムでは更に超音波センサを使用
した障害物回避機能も実装されており、ロボットの前方約25cmの範囲内に障害物がある場
合、ロボットは自動的に後進して障害物を回避します。」
参考
NXTway-GS(2輪型倒立振子ロボット) C API
http://lejos-osek.sourceforge.net/jp/nxtway_gs.htm
・次のコマンドで、プログラムをコンパイル・リンク・アップロード
・プログラムの実行は、「HelloWorld」と同じ。
11. 「NXTway-GS 倒立振子制御 C API 解説書」のサンプル
・次のコマンドで、nxtway_gs ディレクトリーを nxtway_gs_sample ディレクトリーにコ
ピーして、クリーンアップ
・nxtway_gs.c と nxtway_gs.oil ファイル名を、sample.c とsample.oil に変更
・Makeファイルを以下のように変更
・sample.c を変更
・sample.oil を変更
・次のコマンドで、プログラムをコンパイル・リンク・アップロード
・プログラムの実行は、「nxtway_gs」と同じだが、画面にはなにも表示されなくなった
ら、タッチセンサーを押下することによって倒立するようになる。
以上
2009-07-04 変更
NXT 走行体 (2輪型倒立振子ロボット)の C 開発環境インストールとサンプルの実行
================================================================================
NXT 走行体を組み立てたら、PC に開発環境をインストールし、走行体が立つプログラム
サンプルを実行するまでの手順を示します。
なお、NXT 走行体は、タッチセンサーまで装着しておきます。
ここでは、まだ、EclipseCDT はインストールしていません。
PC は、Windows XP Professional SP2.
■参考
NXTway-GS(2輪型倒立振子ロボット) C API
http://lejos-osek.sourceforge.net/jp/nxtway_gs.htm
拡張NXTファームウェア + nxtOSEKのインストール方法(Windows XP/Vista)
http://lejos-osek.sourceforge.net/jp/installation_enf.htm
■開発環境のインストール
1. Cygwinのインストール
http://www.cygwin.com/
・インストール先は、C:/cygwin
・ここでは、Cygwin1.5.25 をインストール。
なぜか、cygdrive ディレクトリーではなく、cygrive ディレクトリーができているので
注意。
2. GNU ARMのインストール
・http://www.gnuarm.com/
・bu-2.16.1_gcc-4.0.2-c-c++_nl-1.14.0_gi-6.4.exe
・インストール時の注意点2009-09-06追記
・必ずGNUARM gcc 4.02 をインストールすること!
・[Little Endian]をチェック, [Floating Point Unit]のチェックをはずす
・[Install Cygwin DLLs...]は選択しない
・インストール先は、C:/cygwin/GNUARM
3. LEGO MINDSTORMS NXT Driverのインストール
http://mindstorms.lego.com/Support/Updates/
・upload1F7B2420-A5ED-44FF-9460-E262657029DC.zip
4. NeXTTool のインストール
・http://bricxcc.sourceforge.net/nexttool.zip
・nexttool.zip
・インストール先(解凍先)は、C:/cygwin/nexttool
5. 拡張 NXT ファームウェアのインストール
・http://bricxcc.sourceforge.net/lms_arm_jch.zip
・lms_arm_jch.zip
・解凍して、その中の lms_arm_nbcnxc_106.rfw ファイルを C:/cygwin/nexttool ディレ
クトリーにコピー
6. nxtOSEKのインストール・設定
・http://lejos-osek.sourceforge.net/jp/index.htm
・nxtOSEK_v207.zip
・/nxtOSEK/ecrobot/tool_gcc.mak ファイルを編集する。
------------------------------------------------------ # specify GNU-ARM root directory ifndef GNUARM_ROOT GNUARM_ROOT = /cygrive/C/cygwin/GNUARM endif # specify NeXTTool root directory ifndef NEXTTOOL_ROOT NEXTTOOL_ROOT = /cygrive/C/cygwin/nexttool endif ------------------------------------------------------
・なお、Cygwin1.5.25 でインストールしたとき、/cygdrive/C/cygwin ではなく、
/cygrive/C/cygwin なので、注意。
■実行環境のインストール
7. 拡張 NXT ファームウェアの NXT へのアップロード
7.1 NXTをファームウェアアップデートモードにする
・リセットボタンを4秒以上押す
7.2 拡張 NXT ファームウェアのアップロード
$ cd C:/cygwin/nexttool
$ ./NeXTTool.exe /COM=usb -firmware=lms_arm_nbcnxc_106.rfw
7.3 リセット
・画面が砂嵐になったら、リセットボタンを押す
■ サンプルのコンパイルと実行の確認
9. HelloWorld
参考
拡張NXTファームウェア搭載のNXTへのnxtOSEKプログラムのアップロード方法
http://lejos-osek.sourceforge.net/jp/howtoupload_enf.htm
・NXT走行体の電源を入れる
・次のコマンドで、プログラムをコンパイル・リンク・アップロード
------------------------------------------------------ $ cd /nxtOSEK/samples/helloworld/ $ make all Compiling ../../ecrobot/../toppers_osek/kernel/alarm.c to alarm.o : Assembling ../../ecrobot/../toppers_osek/config/at91sam7s-gnu/irq.s to irq.oram Generating binary image file: helloworld_OSEK_rom.bin Generating binary image file: helloworld_OSEK_ram.bin Generating binary image file: helloworld_OSEK.rxe $ sh ./rxeflash.sh Executing NeXTTool to upload helloworld_OSEK.rxe... helloworld_OSEK.rxe=17072 NeXTTool is terminated. ------------------------------------------------------
・標準 NXT ファームウェアの操作手順と同じように、アップロードした nxtOSEK プログ
ラムを実行
今回は、次の操作で NXT 画面に表示が出る。
[My Files] - [Software files] - [helloworld_OSEK] - [オレンジボタン] - [右ボタン]
[右ボタン]で、プログラムは終了する。
[EXIT]で、NXT の電源が切れる。
10. NXTway-GS C APIを使用したサンプルプログラム nxtway_gs
「NXTway-GS C APIを使用したサンプルプログラムはBluetooth通信を介したR/Cロボット
アプリケーションで、PC用ゲームパッドコントローラによってラジコン操作がおこなえま
す。ロボットのラジコン操作を実現するには、PC側にNXT GamePadというソフトウェアを
別途インストールする必要があります。サンプルプログラムでは更に超音波センサを使用
した障害物回避機能も実装されており、ロボットの前方約25cmの範囲内に障害物がある場
合、ロボットは自動的に後進して障害物を回避します。」
参考
NXTway-GS(2輪型倒立振子ロボット) C API
http://lejos-osek.sourceforge.net/jp/nxtway_gs.htm
・次のコマンドで、プログラムをコンパイル・リンク・アップロード
------------------------------------------------------ $ cd /nxtOSEK/samples/nxtway_gs $ make all Compiling ../../ecrobot/../toppers_osek/kernel/alarm.c to alarm.o : Assembling ../../ecrobot/../toppers_osek/config/at91sam7s-gnu/irq.s to irq.oram Generating binary image file: NXTway_GS_OSEK_rom.bin Generating binary image file: NXTway_GS_OSEK_ram.bin Generating binary image file: NXTway_GS_OSEK.rxe $ sh ./rxeflash.sh Executing NeXTTool to upload NXTway_GS_OSEK.rxe... NXTway_GS_OSEK.rxe=25264 NeXTTool is terminated. ------------------------------------------------------
・プログラムの実行は、「HelloWorld」と同じ。
11. 「NXTway-GS 倒立振子制御 C API 解説書」のサンプル
・次のコマンドで、nxtway_gs ディレクトリーを nxtway_gs_sample ディレクトリーにコ
ピーして、クリーンアップ
------------------------------------------------------ $ cd /nxtOSEK/samples/ $ cp -r nxtway_gs/ nxtway_gs_sample/ $ cd nxtway_gs_sample/ $ make clean Removing kernel config files Removing objects Removing targets Removing map files Removing upload scripts ------------------------------------------------------
・nxtway_gs.c と nxtway_gs.oil ファイル名を、sample.c とsample.oil に変更
------------------------------------------------------ $ mv nxtway_gs.c sample.c $ mv nxtway_gs.oil sample.oil ------------------------------------------------------
・Makeファイルを以下のように変更
------------------------------------------------------ # Target specific macros TARGET = sample_OSEK NXTOSEK_ROOT = ../.. # nxtway_gs_balancer library desiged for NXTway-GS two wheeled self-balancing robot USER_INC_PATH= $(NXTOSEK_ROOT)/ecrobot/nxtway_gs_balancer USER_LIB = nxtway_gs_balancer # using NXT standard tires (not Motorcycle tires) #USER_DEF = NXT_STD_TIRE # User application source TARGET_SOURCES := balancer_param.c sample.c # OSEK OIL file TOPPERS_OSEK_OIL_SOURCE := ./sample.oil # below part should not be modified "Makefile" 25 lines, 606 characters ------------------------------------------------------
・sample.c を変更
------------------------------------------------------ /** ****************************************************************************** ** ファイル名 : sample.c ** ** 概要 : NXTway-GS(2輪倒立振子ロボット)のTOPPERS/ATK(OSEK)用サンプルプログラム ** ****************************************************************************** **/ #include "kernel.h" #include "kernel_id.h" #include "ecrobot_interface.h" #include "balancer.h" /* 倒立振子制御用ヘッダファイル */ #define GYRO_OFFSET 610 /* ジャイロセンサオフセット値(角速度0[deg/sec]時) */ //***************************************************************************** // 関数名 : user_1ms_isr_type2 // 引数 : なし // 戻り値 : なし // 概要 : 1msec周期割り込みフック関数(OSEK ISR type2カテゴリ) //***************************************************************************** void user_1ms_isr_type2(void) { /* 空 */ } // 2009-03-29 修正 //***************************************************************************** // タスク名 : OSEK_Task_bg // 概要 : バックグラウンド(常駐)タスク //***************************************************************************** TASK(OSEK_Task_bg) { signed char pwm_L, pwm_R; /* 左右モータPWM出力 */ while (ecrobot_get_touch_sensor(NXT_PORT_S1) == 0) ; /* タッチセンサ押下待機 */ balance_init(); /* 倒立振子制御初期化 */ nxt_motor_set_count(NXT_PORT_C, 0); /* 左モータエンコーダリセット */ nxt_motor_set_count(NXT_PORT_B, 0); /* 右モータエンコーダリセット */ while(1) { /* 倒立振子制御 */ balance_control( (float)0, /* 前後進命令 */ (float)0, /* 旋回命令 */ (float)ecrobot_get_gyro_sensor(NXT_PORT_S4), /* ジャイロセンサ値 */ (float)GYRO_OFFSET, /* ジャイロセンサオフセット値 */ (float)nxt_motor_get_count(NXT_PORT_C), /* 左モータ回転角度[deg] */ (float)nxt_motor_get_count(NXT_PORT_B), /* 右モータ回転角度[deg] */ (float)ecrobot_get_battery_voltage(), /* バッテリ電圧[mV] */ &pwm_L, /* 左モータPWM出力値 */ &pwm_R); /* 右モータPWM出力値 */ nxt_motor_set_speed(NXT_PORT_C, pwm_L, 1); /* 左モータPWM出力セット */ nxt_motor_set_speed(NXT_PORT_B, pwm_R, 1); /* 右モータPWM出力セット */ systick_wait_ms(4); /* 4msecウエイト */ } } ------------------------------------------------------
・sample.oil を変更
------------------------------------------------------ /** ****************************************************************************** ** ファイル名 : sample.oil ** ** 概要 : サンプル用OSEK OIL(OSEK Implementation Language)ファイル ** ** ※OSEK OIL記述方法詳細については ** nxtOSEKtoppers_osekdocTOPPERS_OSEKカーネルSG取扱説書.pdfを参照してください。 ** ****************************************************************************** **/ #include "implementation.oil" CPU ATMEL_AT91SAM7S256 { OS LEJOS_OSEK /* nxtOSEKの旧名 */ { STATUS = EXTENDED; STARTUPHOOK = FALSE; ERRORHOOK = FALSE; SHUTDOWNHOOK = FALSE; PRETASKHOOK = FALSE; POSTTASKHOOK = FALSE; USEGETSERVICEID = FALSE; USEPARAMETERACCESS = FALSE; USERESSCHEDULER = FALSE; }; APPMODE appmode1{}; /* OSEK_Task_bgタスク設定 */ TASK OSEK_Task_bg { AUTOSTART = TRUE /* StartOSで自動的にREADY */ { APPMODE = appmode1; }; PRIORITY = 1; /* 最低優先度 */ ACTIVATION = 1; SCHEDULE = FULL; STACKSIZE = 512; /* bytes */ }; }; ------------------------------------------------------
・次のコマンドで、プログラムをコンパイル・リンク・アップロード
------------------------------------------------------ $ cd /nxtOSEK/samples/nxtway_gs $ make all Compiling ../../ecrobot/../toppers_osek/kernel/alarm.c to alarm.o : Assembling ../../ecrobot/../toppers_osek/config/at91sam7s-gnu/irq.s to irq.oram Generating binary image file: NXTway_GS_OSEK_rom.bin Generating binary image file: NXTway_GS_OSEK_ram.bin Generating binary image file: NXTway_GS_OSEK.rxe $ sh ./rxeflash.sh Executing NeXTTool to upload sample_OSEK.rxe... sample_OSEK.rxe=19408 NeXTTool is terminated. ------------------------------------------------------
・プログラムの実行は、「nxtway_gs」と同じだが、画面にはなにも表示されなくなった
ら、タッチセンサーを押下することによって倒立するようになる。
以上